COMPANY

BLOGS

  • user warning: Unknown column 'u.signature_format' in 'field list' query: SELECT c.cid as cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data, c.thread, c.status FROM comments c INNER JOIN users u ON c.uid = u.uid WHERE c.nid = 26525 AND c.status = 0 ORDER BY c.cid LIMIT 0, 50 in /var/www/www.4d.com/docs/modules/comment/comment.module on line 991.
  • warning: file_get_contents(http://www.telize.com/geoip/54.224.166.141) [function.file-get-contents]: failed to open stream: HTTP request failed! in /var/www/www.4d.com/docs/includes/common.inc(1762) : eval()'d code on line 4.

El que busca encuentra

05.06.2012
por Thibaud Arguillère

En un principio, pensé en llamar este artículo: "Si me buscan, me encuentran." Pero era demasiado fácil y después de todo, no es gracioso (y yo quería un título divertido). Pensé en otra cosa: "Búscamé, encuéntrame". Pero no era divertido. Es por eso que me decidí por un título que no es gracioso. Fue una decisión dolorosa, pero alguien tenía que tomarla y yo estaba solo en ese momento. Por lo tanto se me ocurrió, "Buscar, encontrar". Mhh, sigue sin funcionar. Lo que es peor: podrían pensar que voy a hablar sobre el motor de la base de datos, mientras que en realidad estoy hablando de la funcionalidad "Buscar en entorno Diseño".

 

Menu

 

Finalmente, "El que busca encuentra", aunque no es gracioso, aclara el tema e inmediatamente sabrán de lo que se trata en este artículo1.

 

Un ligero olvido

Durante las conferencias de desarrolladores de los últimos años, no hablé mucho sobre este tema, que solía molestar a las personas encargadas de esta funcionalidad en el departamento de Investigación y Desarrollo, quienes no dudaron un segundo en hacerme saber sus sentimientos con observaciones mordaces y crueles. "Bueno, bueno, sí, está bien, el nuevo servidor web 4D v13 es muy poderoso y bonito2, pero ¿alguna vez le pidió encontrar todas las dependencias de un método?" O "Está muy bien insistir en PHP Execute, claro. Sin embargo, no ejecuta ninguna búsqueda de los objetos no utilizados en su código, ¿no?"

 

Y tienen razón en difamarme, porque desde la versión 11, el Buscar y Reemplazar Global, alias GFR (en inglés Global Find & Replace), ha evolucionado bastante, con un montón de nuevas características en cada nueva versión. Es obvio decir que antes de la v11, algunos de nosotros solíamos decir... ¿Cómo se llamaba? Voy a tratar de recordar... Ah, sí, 4D Insider para buscar en sus desarrollos. Incluso yo, cuando me pasé a v11 (y no estaba trabajando para 4D en ese momento), he tenido que hacer frente a la ausencia de Insider. A veces, hay limitaciones que conducen a desapariciones. ¿Recuerda las cintas Betamax? Ya nadie habla de ellas3.

 

Uno tiene que enfrentar el principio de realidad. No en su sentido freudiano estricto4, sino en el sentido "puesto que ya no está aquí, lo voy a hacer sin eso". Y esto significa utilizar las funcionalidades GFR. No quiero simplemente copiar y pegar la documentación aquí, sino que me gustaría insistir en algunos puntos, entre ellos las dos principales novedades de la versión 13 en esta área.

 

Vamos a comenzar con un recordatorio. El diálogo del GFR fue renovado en la versión 12, permitiendo expresar la búsqueda naturalmente: "Busco una variable cuyo nombre comienza por FACT y cuyo contenedor fue modificado hoy":

 

Dialog

 

Me encanta cuando una consulta se puede expresar de esa manera. No hace mucho tiempo, incluso me encontré a mí mismo haciendo la búsqueda en voz alta. Lo cual creó un momento algo incomodo, cuando, en frente de mis colegas insistí: "Por favor, 4D, busca la constante cuyo nombre es una variable cadena". El día que Siri se integre a 4D, estos momentos embarazosos pasarán a la historia.


Luchando contra la inutilidad
No paso tiempo en la ventana de resultados, que permite manipular la lista, para eliminar las líneas, o "remplazar su contenido." Si usted no sabía nada de esto, de una vuelta por esta ventana. Sin embargo, este es un recordatorio de una funcionalidad muy interesante que apareció en 4D v12 (hace 22 meses): la posibilidad de buscar objetos no utilizados. Puede ver esta funcionalidad en el pantallazo, al principio de este artículo: "Buscar los métodos y las variables globales no utilizadas" y "Buscar las variables locales no utilizadas." Nosotros regularmente limpiamos nuestro código5. La búsqueda y eliminación de variables locales no utilizadas forma parte de esta limpieza.

 

Dicho esto, tenga cuidado al usarlo. Se trata de las variables declaradas explícitamente (C_TEXT, …) y nunca utilizadas. Si inicializa una variable no declarada, por ejemplo, usted acaba de escribir $tot:=0  el método nunca utiliza $tot, no se ve como inutilizada, sin embargo está siendo inutilizada, ¿no? Buen punto, voy a hablar de esto con la gente de Investigación y Desarrollo, quienes están a sólo unos pocos asientos de mí.

 

Encontrar y eliminar los métodos no utilizados es también una excelente forma de limpiar su código. Tener métodos no utilizados es algo muy común. Pero, piense en esto: si el método no se utiliza, ¿por qué molestarse con él? ¿Por qué correr el riesgo de un error del compilador con un método que nunca se llamará? ¿Por qué volver pesado el código y encontrarnos en uno, dos, cinco años después con docenas de métodos no utilizados que tenemos miedo de borrar? Eso nos dificulta las cosas, nos molesta y contaminan toda la aplicación. ¡Borremos esos métodos! ¡Sin piedad! Usted quiere tenerlos "por si acaso" es probable que los necesite en el futuro. ¡Ay ay ay! El tristemente célebre "en caso de que lo necesite." ¿Realmente quiere conservarlos? No hay problema: Haga una copia de seguridad del archivo de estructura. En el peor de los casos, cree un gran método "zzzCosasViejasInutilizadas" y copie y pegue el código de todos estos métodos, a continuación, comente todo (para asegurarse de que el método compila sin error) y luego borre los métodos.

 

Sólo tenga cuidado con los métodos llamados de una manera que los haga ver como inutilizados, que de hecho, se utilizan: en la columna de un informe rápido, en una fórmula del documento 4D Write, en una llamada a EXECUTE FORMULA que genera dinámicamente el nombre del método, etc.  Para mí, siempre se debe añadir un sufijo a estos métodos ("_E", para los curiosos) que significa "cuidado, el método se utiliza por su nombre codificado". Entonces sé que debo evitar la eliminación (o incluso el cambio de nombre), a menos que haya verificado cuidadosamente que en realidad no se utiliza.

 

Un último punto: los métodos declarados en un método COMPILER_algo (por ejemplo, usted hace clic en el botón "Declarar tipos" en la ventana del compilador), no se enumeran como no utilizados. Precisamente porque se utilizan en este método y porque los métodos COMPILER también pueden ejecutarse. Pero... voy a hablar de esto con la gente de I+D, a sólo unos pocos asientos de mí. En términos prácticos, esto significa que si usted está en esta situación, usted puede: (1) Comentar el código del método COMPILER, (2) Buscar métodos no utilizados. No olvide descomentar el método COMPILER una vez termine. Si eliminó algunos métodos no utilizados, piense en borrar las declaraciones también.

 

La limpieza (lo que significa borrar) variables globales sin usar, esta vez GFR buscará todos los procesos y variables interproceso declaradas explícitamente no utilizadas, es también importante. Más aún en modo compilado, más aún en un entorno cliente/servidor. En modo compilado, 4D crea una "Tabla de variables proceso" por cada proceso. Esta tabla contiene todas las variables de proceso que el compilador ha detectado. Y sí, usted lo ha leído como debe ser leído y lo escribí todo. Incluso aquellos que nunca se utilizan en el proceso que se está ejecutando actualmente. Al eliminar las variables no utilizadas, se reduce el tiempo necesario para crear un proceso, para eliminar un proceso y para organizar la memoria.

 

Una vez más una advertencia: al igual que para los métodos, tenga cuidado con las variables utilizadas por sus nombres codificados.

 

Dependencias

Ahora, vamos a tomarnos un minuto para centrarnos en una nueva funcionalidad de 4D v13: busquéda de las dependencias de un método.

 

Search pop-up

 

Esta búsqueda encontrará todos los métodos y formularios llamados, recursivamente. Por ejemplo, si tiene un método DoThis que llama al método DoThat, que llama AndHop (y DoThis no llama a AndHop), la "Búsqueda de dependencias…" de DoThis listará correctamente DoThat y AndHop (sí, yo se. Utilizo nombres tontos en este ejemplo. Es mi elección.)

 

Search result

 

Es muy útil para mover código entre dos aplicaciones 4D (cada una de ellas abierta con una copia de 4D).

 

Mientras estamos hablando de esto, me gustaría informar un problema leve que se detectó con la versión 13.0, que tontamente no le permite mover objetos de la ventana de resultados a otra aplicación 4D. Qué lástima. El bug fue corregido en 4D v13 Hotfix 1, disponible para Partners 4D. Si no lo es, entonces tendrá que esperar la versión 13.1. Ofrecemos disculpas por este inconveniente.

 

Hay otra súper nueva funcionalidad en 4D v13: ahora es posible sustituir una hoja de estilo en los formularios. Probablemente usted ya sabe que la versión 13 viene con una nueva hoja de estilos llamada "Automática". Si no lo sabía, ahora lo sabe. Para reemplazar el estilo "Por defecto", por ejemplo, con el estilo "Automático" ahora es cuestión de segundos. No hay necesidad de abrir todos los formularios para cambiar manualmente las propiedades de los objetos. 

 

Ok. Soy 100% consciente de que siempre hay espacio para más y más funcionalidades. Y no voy a dejar de hablar con los frikis del departamento de I+D, sin importar el peligro hacer el ridículo, o peor... Si no oye de mí durante más de dos meses, por favor informe amablemente a mi familia sobre mi desaparición.6

 

 

  1. No estoy muy seguro al respecto. En este punto usted aún no sabe con precisión de lo que estamos hablando.
  2. Sí. No es un error. "bonito". Nunca vi un servidor web  bonito. Pero recuerde estamos hablando del personal de I+D.
  3. Sé que la comparación es atrevida, no estoy seguro de que sea una comparación.
  4. http://en.wikipedia.org/wiki/Reality_principle
  5. La frecuencia puede cambiar entre dos desarrolladores. Después de todo, "cada 10 años" es probablemente un ciclo de desarrollo.
  6. Algún día, tomaré una foto del Corredor de la muerte de I+D. Así entenderán de lo que les hablo.

 

RSS 0 comentario(s) a este mensaje