Nuestro aporte

paxPAX son las siglas de PHP, Ajax y XHTML.

Se trata de una librería de clases PHP que facilitan el desarrollo de aplicaciones LAMP. Requiere PHP5.

La descarga del paquete lleva el código fuente original (v1.0).

Puede descargarlo aquí.

zen7

Todavía era media mañana. El discípulo se afanaba en corregir varios errores que su maestro había señalado en su código. En su pantalla de vim había varias ventanas abiertas con distintos archivos. La corrección le obligaba a cambiar no sólo de archivo, también debía saltar entre las funciones de un mismo objeto y sus distintos algoritmos. Se daba cuenta que pasaba mucho más tiempo buscando la línea de código concreta, buceando en algoritmos, que programando. Y en poco tiempo, empezó a destruir más código del que arreglaba.

Su paciencia se agotaba. Estaba a punto de golpear el teclado para desahogarse. Pero las enseñanzas de su maestro se impusieron. Había identificado el problema; en lugar de mejorar, su código empeoraba. Así que procedió como le habían enseñado. Se levantó, abandonó su ordenador, se sentó a la orilla del rio y se concentró en el sonido del agua.

En pocos minutos, el ritmo de la corriente absorbió su mente.

Cuando ya se tranquilizó. Noto que a su lado estaba sentado su maestro. Incapaz de precisar cuanto tiempo hacía que estaba allí, le confesó:

- "Maestro, no puedo concentrarme en el código. No puedo solucionar rápidamente los errores."

El Maestro, sin apartar su mirada de la corriente le contestó:"

- "¿Ves cómo vuela la mosca sobre el río? Se acerca a la superficie, vuelve a subir, vuela luego en círculos, baja, sube, gira... No hay orden. No tiene un objetivo, simplemente vuela."

El discípulo miraba incrédulo a su maestro. Pero ya sabía que era mejor esperar.

- "Pero la trucha." - continuó -"La trucha espera quieta en el agua, enfrentada a la corriente, centrada en su objetivo. Sabe lo que tiene que hacer. Espera, se enfoca y, cuando llega el momento, dobla rápidamente su cola y atrapa a la mosca con un movimiento fuerte, sencillo, certero."

Maestro y discípulo permanecieron en silencio.

- "¿Debo entonces mejorar mi concentración? ¿Hacerme más fuerte?" - preguntó el discípulo.

- "No" - le respondió - "Debes enfocar tu objetivo".

- "Maestro, ¿cómo lo haré?"

- "Como lo hace la trucha. Dobla tu código."

- "Pero Maestro, el doblado del código es muy lento. Me obliga a definir cada doblez y a introducir marcas de doblado que no son código. Son impuras y según las enseñanzas deben evitarse."

- "Como bien dices." - indicó el Maestro - "Todo lo que es ajeno al código debe evitarse. Igual que evitamos los comentarios haciendo que el código se explique a sí mismo podemos evitar las marcas de doblado."

- "¿Cómo Maestro? ¿Cómo haré para que el código..." - y dejó la pregunta en suspenso, empezaba a intuir la respuesta.

- "Quizás podría..."- continuó el discípulo - "utilizar alguna marca del código como marca de doblado. ¡Eso es! Debo utilizar alguna marca que represente las anidaciones. Y esa es... ¡la llave!"

El Maestro no dijo nada, simplemente sonrió.

Enseguida el discípulo puso en práctica su idea. Estableció como las marcas como método de doblado de código con el comando :set foldmethod=marker y estableció como marcas las llaves con el comando :set foldmarker={,} . De pronto, todo su código apareció perfectamente doblado ante sus ojos. Navegó por sus dobleces abriéndolos con zo (zopen) y cerrándolos con zc (zclose). Comprendió que, gracias al doblado, podía ver la estructura de sus objetos. Cada clase se doblaba con sus métodos, podía abrir una clase y ver la lista de métodos completa en pantalla, solo con el nombre. Y podía profundizar en cualquiera de ellos desdoblándolo, y así sucesivamente con sus algoritmos y bucles.

Se dio cuenta que con la llave como marca, el doblado era recursivo. Había dobleces dentro de dobleces, dentro de dobleces... y entendió la utilidad de los comandos zO (zOpenall) y zC (zCloseall) que le permitían abrir o cerrar todos los dobleces correspondientes a la línea con el cursor.

También podía abrir o cerrar todos los dobleces de un archivo con los comandos zR y zM. La potencia era infinita y podía centrarse rápidamente en la parte del código con la que deseaba trabajar sin perder la estructura de vista. Con esta potencia se haría mucho mejor programador.

Probó finalmente a buscar una expresión en el código doblado. Y utilizó el comando zv (zvercursor) para desdoblar el código hasta la línea buscada. Lo tenía todo.

El orgullo por su discípulo era evidente en la cara del Maestro.

"No olvides" - le advirtió - "que hay otros métodos de doblado que te permitirán enfocarte en otras situaciones. La llave es una buena marca para archivos de código. Pero con un lenguaje de marcas necesitarás cambiar de método. Utiliza :set foldmethod=syntax para archivos XML. Y si se trata de Python, quizás prefieras utilizar :set foldmethod=indent. Hay muchas opciones." concluyó.

"Maestro, ahora entiendo porque utilizamos la z. Representa el doblado del código. Es la representación más sencilla y la más completa."

El Maestro miró a su discípulo con cariño. "Ahora entiendes porqué vim es zen. Ya estás preparado."

Mientras el joven iniciaba el nuevo camino que le convertiría en un gran maestro del vim, su Maestro no pudo evitar una lágrima, de orgullo y pena al mismo tiempo.

Caía la tarde. El discípulo había estado practicando todo el día su último koan aprendido. Ahora podía desplazarse por su código utilizando las teclas h, j, k y l. Había adquirido destreza y lo hacía con rapidez.

A su lado, su maestro programaba. La paz se reflejaba en su rostro y sus dedos apenas se movían, simplemente leves pulsaciones sobre las teclas y ligeros desplazamientos. Sus muñecas, siempre sobre el teclado, reposando.

El discípulo, orgulloso de su progreso y cansado por el largo día de práctica, se levantó para ver la pantalla de su maestro. Pero lo que vio le demudó el rostro.

Su maestro reflejaba paz y quietud. Su rostro relajado, la mirada fija, la columna erguida. Sólo en sus dedos había algo de movimiento, un movimiento suave, relajado... Pero en su pantalla se reflejaba otra cosa. Era velocidad pura. El cursor saltaba de un punto a otro del texto. Los bloques visuales se marcaban en un instante para, inmediatamente después, aparecer en puntos recónditos del texto o incluso en otros ficheros. En cuestión de segundos decenas de ficheros eran modificados con ágiles macros... Y todo con la más absoluta calma.

Sin apenas alterarse y desde luego sin que se apreciara ninguna reducción en el ritmo de programación, el maestro se dirijió a su discípulo: "¿Ha sido un buen día?".

Él, todavía absorto en los rápidos cambios de la pantalla de su maestro respondió: "Sí, muy bueno. Ya domino el koan h, j, k y l". Pero se sintió incapaz de contenerse - "Maestro, disculpad. Hoy he creído que era rápido. Pero viendo vuestro Vim me he vuelto a sentir como una tortuga. Por favor Maestro, ¿podéis iluminarme?".

Con un rápido gesto el maestro guardó los cambios de todos sus ficheros. Se volvió y miró a su discípulo.

- "El camino de Vim es largo, y en ocasiones difícil. Pero verás que cada día que practicas mejoras un poco. Hoy has aprendido mucho, dominas el koan h, j, k y l. Pero hay más, mucho más".

- "Maestro por favor, ¡enseñadme!" - suplicó el discípulo.

- "Por supuesto. Voy a hablarte de otro koan. Un koan difícil, pero potente. Es el koan g."

"El koan g significa movimiento. En inglés g significa 'go'. Al decir g, estamos diciendo a Vim que vaya. Así, '45gg' hará que el cursor se sitúe al principio de la línea 45. Estamos diciendo: '45, go,go!'"

"Si simplemente le dices a Vim gg ('go,go!'), él se desplazará al principio de la primera línea del fichero. Si lo que quieres es ir a la última línea, la mayor del fichero, tendrás que decirle G."

El discípulo seguía atentamente las explicaciones de su maestro, imaginando como podría utilizar este nuevo koan para colocarse en las líneas de su código indicadas por la salida de depuradores.

- "Pero no siempre queremos ir a un número de línea" - siguió el maestro - "Si quieres desplazarte a un fichero cuyo nombre esté escrito en el texto, Vim te lo facilita. El comando gf ('go file') te trasladará al fichero indicado bajo el cursor. Y en el caso de ser una URL, Vim te mostrará el código fuente generado."

El discípulo se estremecía imaginando la agilidad que los nuevos conocimientos aportaría a su Vim.

"Ya sabes desplazarte varias líneas o caracteres de una sola vez (5k, 10j, 4l, 3h...)", siguió el anciano, "pero, ¿y si quieres desplarte 3 palabras a la derecha? No vas a estar contando los caracteres. Para eso están w y b. w ('word' en inglés) te desplazará palabras hacia delante y b ('backwards' en inglés) te desplazará hacia atrás. Así 8w te desplzará 8 palabras hacia delante".

- "Pero Maestro" - protestó el discípulo - "¿Qué tienen que ver esos comandos con el koan g?"

El maestro le contempló con dulzura - "La verdad no siempre es evidente", le dijo. "A veces el camino para alcanzarla parece tortuoso. No lo es. Es nuestra ignorancia quien nos lo oculta. Si lo piensas te resultará evidente. g es un comando de movimiento, pero no siempre es necesario decirle a Vim todo lo que queremos. Debes buscar las formas más efectivas de comunicarnos con nuestro Vim. Por ejemplo, ¿recuerdas las expresiones regulares que estudiaste de niño?"

- "Sí Maestro", reconoció el discípulo.

- "Pués ya sabrás donde te llevarán los comandos ^ y $"

El muchacho dudó en su respuesta. "¿Al principio y al final de la línea?" contestó inseguro.

- "¡Naturalmente!", respondió su maestro. "Y no sólo eso, Vim también es capaz de trasladarte por el código con inteligencia, leyendo su camino en el propio código. Así, con los comandos * y # Vim leerá la palabra bajo el cursor y buscará su siguiente o anterior coincidencia. Y debes conocer también el comando % que te llevará al paréntesis, llave, marca o incluso estructura de control coincidente con el que se encuentre bajo el cursor. Es un comando muy potente, sobre todo si tienes el plugin matchit en tu Vim. Te ayudará a encontrar errores sintácticos en tu código."

- "Y hoy te enseñaré una última cosa. No sólo es importante ir, también es importante saber para qué vamos"

El maestro calló, y el joven discípulo temió que su lección del día hubiera terminado.

- "Maestro, no llego a comprender lo que me queréis decir"

- "Pues que Vim no sería rápido si requiriera dos comandos para una única acción. Así, si tu mente quiere ir al final de una línea para añadir texto, se trata de una única acción en tu espíritu y debe ser ejecutada con un único comando, A. Uno para cada uno", sentenció el maestro.

- "Maestro, ¿y si lo que quiero es ir al principio de la línea para insertar texto?", preguntó el discípulo.

- "No todo el conocimiento se adquiere escuchando. El verdadero conocimiento reside en la práctica. Practica ahora y encuentra el comando que necesita tu espíritu".

A pesar del cansancio que acumulaba, el discípulo siguió practicando las nuevas enseñanzas todas la noche. Incluso en la profunda oscuridad pudo encontrar el comando que buscaba. Y mientras practicaba los comandos gg, G, gf, ^, $, *, #, %, A e I se repetía a sí mismo:

"Maestro, Vim es rápido."

Amanecía. El maestro y su discípulo esperaban los primeros rayos del sol sentados en la posición del loto, con sus palmas abiertas al cielo.

- "Hoy conocerás la lógica" - le dijo el maestro - "¿Porqué h, j, k, l?" - le preguntó a su discípulo.

Este meditaba su respuesta consciente de que su maestro no se conformaría con una respuesta rápida.

- "El grupo de teclas h, j, k, l permite la navegación por el texto" - pensó. "El grupo no está elegido al azar, son las teclas de la línea central para la mano derecha, las más cómodas. Así la mano izquierda queda libre para coger la taza de té, pasar páginas o rascarse..."

- "La h y la l no tienen misterio. La h, situada en el extremo izquierdo del grupo desplaza el cursor a la izquierda. Y la l, situada en el extremo derecho, lo desplaza a la derecha."

- "Pero la elección de las teclas j y k para bajar y subir de línea respectivamente no es tan evidente. Su posición en el teclado no determina su función, hay que fijarse en los propios caracteres. El carácter j se traza por debajo de la línea base, por eso baja de línea. Al mismo tiempo, el carácter k se traza por encima de la línea base, por eso sube de línea".

El discípulo estaba seguro de tener la respuesta correcta para su maestro. Abrió los ojos para contestar, pero antes de pronunciar palabra vio a un colibrí sobrevolando la cabeza de su maestro.

Aquello era una señal. El colibrí significaba repetición, repetía constantemente el batir de sus alas. Pero, ¿qué significaba? Volvió a sumergirse en su meditación buscando la interpretación correcta a la señal.

"¿Qué se repite?" - su mente encontró enseguida la respuesta - "La funcionalidad de las teclas h, j, k, l se repite en las teclas de desplazamiento (arriba, abajo, izquierda y derecha). No solo eso, las teclas de desplazamiento superan a h, j, k, l porque ejercen su función en cualquier modo (comando, edición, visual) mientras que h, j, k, l solo operan en modo comando".

Pero era imposible. La repetición de funcionalidad era un defecto ¡un defecto en Vim!."

- "Vim no es perfecto" - pensó - "Y sin Vim, mi vida no tiene sentido" - sintió que el pánico se apoderaba de él - "Tendré que utilizar Em..." . No terminó su pensamiento porque un intenso dolor se apoderó de él subiendo desde la palma de su mano. Sin necesidad de abrir los ojos supo que su maestro le había golpeado con su vara de avellano y que, posiblemente, ahora estaría sangrando.

- "¡Nunca!" - le gritó su maestro - "¡La lógica, la lógica! ¡Utiliza la lógica!".

Volvió a concentrarse en el koan a pesar de que el dolor, y sobre todo el pánico, habían hecho mella en su corazón. "Tengo que razonar, buscar una línea de pensamiento lógica que lleve a la conclusión. ¿De qué premisa puedo partir? ¿Cuál es la primera verdad?". La respuesta llegó a su corazón desde sus primeros días como aprendiz - Vim es perfecto.

- "Si Vim es perfecto " - concluyó - "no puede tener comandos redundates. Luego tiene que haber una diferencia entre las funciones del grupo h, j, k, l y las teclas de desplazamiento. ¿Pero cuál?". Su mente se centró en los modos. "Las teclas de desplazamiento se pueden utilizar en cualquier modo, pero las teclas h, j, k, l sólo en modo comando. Tienen que existir por alguna razón lógica".

Tras varias horas de meditación, su mente se centró en las macros. En ellas estaba la respuesta. "Las teclas de desplazamiento no pueden utilizarse en una macro. Si sólo existieran ellas no podría hacer macros con desplazamientos del cursor. Por eso existen h, j, k, l, para poder crear macros con desplazamiento". Al llegar a esta conclusión noto como el Vim fluía por su médula espinal, le llegaba de gozo, de conocimiento. Lamentaba haber dudado, pero sabía que su duda había contribuido a hacer más fuerte su Vim.

Abrío los ojos, ya atardecía. Su maestro seguía en la posición del loto, meditando en su Vim. El discípulo, contemplándolo con admiración simplemente dijo:

"Maestro, Vim es lógico."

-"Maestro, no comprendo los modos de Vim: modo de comando, modo de inserción, visual... Es demasiado complicado" - se quejó el discípulo.

El maestro le miró profundamente a los ojos - "Dime, ¿cómo podría Vim ser más sencillo?", le preguntó.

Mientras el sol cruzaba el horizonte el discípulo permaneció meditando sobre la pregunta de su maestro.

-"Al utilizar un editor"- pensaba - "hago varias cosas: puedo teclear texto, puedo darle órdenes para que guarde un archivo o ejecute una macro, puedo seleccionar texto para borrarlo o realizar sustituciones en él..."

"Pero ¿porqué todo esto no me resulta complicado en otros editores?" - se preguntaba. Entonces se dio cuenta de la diferencia. En otros editores, al teclear se edita y los comandos y la selección de texto se realizan con el ratón.

Su maestro ya le había mostrado la falsa sencillez del ratón: usar un ratón suponía sacar la mano del teclado y buscar por los menús que cambian de versión en versión. Y él no aspiraba simplemente a editar textos, su objetivo era la perfección. Si bien con el ratón era posible ejecutar cualquier comando y realizar cualquier selección, resultaba evidente que nunca podría hacerlo con la misma efectividad y sencillez que alcanzaba al utilizar con soltura el teclado.

Además, el ratón le restringiría la libertad, la libertad de editar en cualquier ordenador. Si tenía que utilizar un servidor o acceder a mediante ssh, no tendría entorno gráfico. Y entonces, ¿cómo ejecutaría comandos o seleccionaría texto?.

-"No, el ratón no es la solución". Pero, ¿cómo podría Vim ser más sencillo?

Ahora le resultaba lógico que Vim tuviera un modo para cada una de las actividades que se se realizan con un editor: un modo para comandos, un modo para insertar texto, un modo para seleccionar texto... Y, ¿cuál era la forma más sencilla de cambiar de modo?

La respuesta le resultaba obvia: Un comando para cada modo y uno especial para el modo de comando.

Vim tenía un comando para cada modo: i para el modo de inserción, v o V para la selección visual de textos... Y un comando especial ESC para el modo comando.

El sol se ponía sobre el horizonte. Su maestro seguía a su lado, meditando. El discípulo se levantó y dijo:

-"Maestro, Vim es sencillez"

Lo que necesitas:

logo transp

Sobre Ilke Benson

Dónde estamos     

C/ Donoso Cortés, 6 - 3º. Oficina 10
06002 Badajoz (Extremadura)

     
Teléfono  

telf: +34 924 98 34 19

fax: +34 924 98 34 19

Email  

  

info@ilkebenson.com

  

Pídenos

Es importante estar conectado con nuestros clientes, según nuestras metodologías de desarrollo, ellos se hacen parte indispensable en el ciclo de vida del proyecto.

Es por este motivo por el cual disponemos de un sistema que permite a nuestros clientes informar de incidencia o solicitar modificaciones de manera priorizada (peticiones de tareas).

Sistema de Gestión de Peticiones de Ilke Benson

¡Atención! Este sitio usa cookies y tecnologías similares.

Si no cambia la configuración de su navegador, usted acepta su uso. Saber más

Acepto
Ilke Benson  ©2019 Ilke Benson. All Rights Reserved. Aviso Legal. Diseñado por Ilke Benson

¿Quieres algo concreto?