Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.
Después de muchos meses de contactos y negociaciones es para mi un honor presentar el proyecto hbuGUI, la GUI multiplataforma unificada para Harbour. El proyecto, impulsado desde Harbour Magazine, ha conseguido crear un consenso entre muchos integrantes de la comunidad Harbour que a partir de ahora van a abandonar sus desarrollos propietarios para volcarse en el nuevo proyecto que tendrá licencia open source.
hbuGUI toma como base el proyecto hbui comenzado por Rafal Jopek para desarrollar un auténtico GUI multiplataforma para Harbour, contando con la participación, entre otros, de los siguientes desarrolladores: Przemyslaw Czerpak, Viktor Szakats, Alexander Kresin, Rafa ‘thefull’ Carmona, Antonio Linares, José F. Gímenez, Ignacio Ortíz, Roberto López, Grigory Filatov, Ron Pinkas, Patrick Mast, Teo Fonrouge, Manu Expósito y Manuel Calero. Cada uno de ellos aportará el conocimiento previo adquirido en el desarrollo de sus propios productos propietarios para contribuir al desarrollo de hbuGUI.
Para el primer trimestre del próximo 2019 está previsto que se libere el código de la versión 1.0 del nuevo GUI que contará con los siguientes elementos principales:
editor + IDE propio multiplataforma
doble jerarquía de clases para facilitar la herencia y los cambios a medida
motor de informes basado en fastreport
acceso nativo a BBDD relacionales basado en HDO
acceso a MongoDB
gestor de pruebas unitarias
ORM propio basado en Eloquent
y todo lo que puedas pedir a sus majestades los Reyes Magos de Oriente
Si has leído hasta aquí debes saber que en España hoy es el día de los inocentes, y evidentemente esto es una broma. Aunque más que una broma es un deseo, el de contar con un único GUI para Harbour que permita que continue el desarrollo de nuestro amado lenguaje y salga del atasco en el que se encuentra ahora.
¡ Féliz Navidad y que el 2019 nos traiga muchas novedades relacionadas con Harbour !
Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.
Este es un artículo de Quim Ferrer para Harbour Magazine.
Introducción
Aquellos que venimos desarrollando aplicaciones, programas o utilidades desde hace ya algún tiempo, tendemos -algunos- a dejar para el final, casi después de la documentación, el tema de la traducción de nuestros programas a otros idiomas.
Excusas como ya lo haré (futuro inconcreto), no tengo aún demanda o es muy costoso en tiempo y recursos, son por lo general las motivaciones para posponer ‘sine die’ el tema de la traducción.
Desde hace bastante tiempo, existen herramientas generalmente del mundo GNU como es gettexthttps://www.gnu.org/software/gettext que nos han facilitado la transición por el mundo de las traducciones, organizando el trabajo a realizar, para que pueda ser multidisciplinar y colaborativo.
Las GNU Tools nos permiten automatizar tareas para nuestros desarrollos, principalmente :
Extraer cadenas alojadas en variables de nuestro código fuente
Agrupar dichas cadenas como definiciones en una plantilla
Generar a partir de la plantilla anterior un archivo para cada idioma a traducir
Obtener un archivo binario resultado de la compilación de los archivos de traducciones
A nivel técnico, el sistema de traducciones GNU-gettext se basa en la construcción y mantenimiento de los siguientes tipos de archivos :
POT. Plantilla de objeto portable. Archivo que se obtiene cuando se extraen textos de una aplicación. Es el formato de texto para enviar a los traductores.
PO. Objeto portable. Archivo de texto recibido de los traductores. Incluye los textos originales y su correspondencia con las traducciones.
MO. Objeto Máquina. Archivo compilado (binario) obtenido a partir del archivo *.po para cada idioma de la traducción.
El uso de este sistema de traducciones gettext de forma masiva por parte de sitios web multilingües, ha facilitado la adopción ‘de facto’ como un estándar de traducción para varios lenguajes de programación, por ejemplo en PHP.
Antecedentes
Uno de los principales problemas para la difusión (o evangelización) de Harbour es la falta de documentación ‘comprensible’ para su público potencial. Los excelentes desarrolladores de Harbour dotan al compilador de funcionalidades increíbles en relación a una audiencia que considera Harbour una mera ‘traducción’ del CA-Clipper de los años 90. Pero estas ‘extensiones’ fabulosas, no llegan a veces, a sus potenciales usuarios.
Normalmente buscar este tipo de información requiere seguir muy de cerca el grupo de desarrollo de Harbour y profundizar en su código fuente.
Una de las primeras aproximaciones que descubrí para abordar el tema de las traducciones en Harbour, fué el excelente trabajo de investigación de José Luis, editor de Harbour Magazine en una entrada de su blog https://alanit.com/2003/07/i18n-en-xharbour
En aquellos tiempos xHarbour disponía de las primeras herramientas para la internacionalización y en dicho blog, se describe la problemática desde el punto de vista del desarrollador en Harbour que además, quiera utilizar recursos en forma de *.rc, *.dll, etc.
José Luis nos comenta una herramienta llamada hbdict.exe, que es la encargada de extraer los literales tratados con la función i18n. De dicha herramienta, no tengo constancia que esté portada a Harbour ni podamos disponer de ella, si alguien dispone de información, será un placer incluirla en esta documentación.
El siguiente trabajo de investigación me lleva a la guía de uso de la utilidad make de Harbour, llamada hbmk2.exe. Leyendo los innumerables flags de que dispone, presto atención a dos opciones significativas :
-hbl[=<output>] nombre-de-archivo .hbl resultante. macro %{hb_lng} es aceptada en nombre-de-archivo.
-lng=<languages> lista de idiomas a ser reemplazados en %{hb_lng} macros en archivos .pot/.po y nombres de archivos y salida .hbl/.po. Lista separada por comas: -lng=en,hu-HU,de
En este punto es donde me doy cuenta por primera vez la relación entre Harbour y los formatos pot/po. La conclusión es evidente, Harbour no trata con el formato compilado *.mo ya que dispone de su propio formato, el *.hbl (HarBour Language?) A nivel binario son muy parecidos y desconozco el motivo por el cual los desarrolladores de Harbour optaron por un formato propio y no producir el formato estándar *.mo
Para utilizar otros sistemas make, harbour/bin dispone de la utilidad hbi18n.exe que también es capaz de generar salida *.hbl a partir de *.po
Cómo puede Harbour aprovechar GNU-gettext ?
Con esta pequeña guía, pretendo facilitar la labor a otros desarrolladores que quieran implementar multilenguaje en sus aplicaciones.
Para empezar, definimos una macro para poder implementar cambios globales de forma unitaria. En este ejemplo, transformo también la cadena a UTF8
#define _txt( x ) hb_UTF8ToStr( hb_i18n_gettext(x) )
Preparar nuestro código Harbour
@ 2,1 SAY _txt(“Editar”)
En Fivewin :
REDEFINE SAY VAR _txt(“Editar”) ID 200 OF oDlg
Compilar fuente para obtener salida en formato *.pot
Ejecutar poedit y crear nueva traducción, Archivo-> Nueva desde archivo POT/PO. La primera vez que ejecutemos poedit, nos pedirá el idioma base de traducción.
Elegir la plantilla app.pot generada en el proceso de compilación de Harbour. Poedit nos pregunta por el idioma de traducción
Empezar con las traducciones:
Guardar traducción, por ejemplo para idioma inglés en.po
Vemos que también genera el archivo *.mo que no vamos a utilizar
Una vez finalizada(s) la(s) traducción(es) es el momento de generar el binario del idioma o idiomas que cargaremos en nuestra aplicación. Para ello disponemos del superpoder de hbmk2.exe, utilidad make de Harbour.
hbmk2 -hbl en.po
La utilidad crea el archivo en.hbl a partir de en.po
Ya sólo nos queda implementarlo en nuestra aplicación :
Con este procedimiento, todos los literales en código fuente quedan traducidos y si queremos cambiar de idioma en tiempo de ejecución, basta con apuntar a otro set de idioma, llamando a las instrucciones anteriores.
Cada vez que exista un cambio en nuestro código, solamente habrá que generar de nuevo el archivo de plantilla *.pot, abrir cada archivo de idioma *.po y desde la opción del menú de poedit, Catálogo->Actualizar desde archivo POT. Los cambios anteriores permanecen intactos y las nuevas entradas quedan pendientes de traducir, con facilidad para buscarlas.
Os dejo un enlace a github https://github.com/QuimFerrer/i18n con código de ejemplo y uso de un script make hbmk2, para producir la compilación en múltiples idiomas automáticamente.
Para terminar, os animo a investigar, mejorar y comentar, experiencias que tengáis en la internacionalización y traducción de vuestras creaciones
Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.
Dentro de las herramientas de trabajo de los programadores, el editor de código ocupa un lugar destacado. Es uno de los programas con el que pasas más tiempo trabajando, de manera que es muy importante sentirte cómodo trabajando con él y también debes conocerlo lo suficiente para ser productivo utilizándolo.
En esta entrada voy a presentar el editor que poco a poco se ha convertido en mi editor preferido, explicaré los motivos por los que lo uso y las extensiones que utilizo, por supuesto orientado a su uso con Harbour. Reconozco que mi interés por Visual Studio Code — VSCode en adelante — fue utilizar los temas oscuros que tiene, motivos meramente estéticos, pero las funcionalidades que incorpora lo han convertido en mi editor favorito. Hay cosas que todavia no conozco bien, como la creación de tareas, pero sigo intentando aprender a utilizarlas.
Antes de continuar quiero hacer un inciso. Si haces software de escritorio debes intentar que tu aplicación tenga un aspecto actual, y para ello debes conocer las aplicaciones actuales. Si usas el Norton Commander y un editor de hace 20 años, no conoces cual es el aspecto de las aplicaciones actuales, con lo que te parece normal usar botones con efecto 3D y esas cosas que tenía Windows XP. Mi recomendación es que uses un editor moderno y VSCode es uno de los más bonitos.
Al hablar de utilizar VSCode y su uso con Harbour lo primero que hay que decir es que debes instalar la extensión de Antonino Perricone para Harbour — aperricone.harbour en adelante — que tienes disponible en https://marketplace.visualstudio.com/items?itemName=aperricone.harbour. Esta extensión facilita enormemente el uso del editor con Harbour como verás a continuación.
Un aspecto típico de VSCode trabajando con un proyecto Harbour es el siguiente, en el que puedes ver 3 áreas diferenciadas: (1) el explorador de código, (2) la ventana de código, (3) el minimapa y (4) la barra de estado que nos dice que el archivo que estoy editando está usando la extensión de Harbour. El minimapa es algo que llama la atención a primera vista, pero yo no le encuentro apenas uso.
Dentro del explorador (1) tenemos la lista de editores abiertos, la carpeta de proyecto que estamos utilizando y la vista de esquema. Esta última la muestra la extensión aperricone.harbour y es una lista de árbol con las funciones o métodos de nuestro archivo .prg y las variables que tengamos definidas en ellas. Este esquema facilita enormemente la navegación en archivos grandes de código.
En la ventana de código es donde editaremos nuestro código y tenemos todas las funcionalidades habituales, pero quiero llamar la atención sobre dos cosas que me parecen muy interesantes: (1) la primera es la posibilidad de dividir la zona de edición verticalmente para mostrar al mismo tiempo diferentes o el mismo archivo fuente, y (2) la ayuda que ofrece aperricone.harbour sobre las funciones de Harbour conforme las vamos escribiendo.
Una de las cosas que me gusta de VSCode es la posibilidad que tiene para añadir funcionalidades extra, y que hay cantidad de información al respecto. Por ejemplo, yo uso mucho la característica de cambiar una palabra a mayúsculas, y VSCode no trae como nativa la manera de hacerlo. Buscando un poco por internet encontré pronto la manera de hacerlo. Entras en Archivo > Preferencias > Métodos abreviados de teclado y tienes que editar el fichero keybindings.json introduciendo lo siguiente:
Para compilar y ejecutar tu aplicación tienes que definir tareas. Actualmente utilizo sólo dos tareas, una para compilar la aplicación y otra para ejecutarla. La definición de las tareas es la que muestro a continuación:
Con esto tengo suficiente para compilar y ejecutar mi aplicación, pero creo que es un uso realmente mínimo de lo que se puede hacer. Se que con la extensión aperricone.harbour se puede depurar la aplicación desde dentro del editor, pero no sé la manera de hacerlo. Espero que Antonino encuentre tiempo para hacer un tutorial al respecto.
Además de la extensión aperricone.harbour utilizo las siguientes extensiones para VSCode:
Espero que tras este artículo te animes a usar VSCode con Harbour, y si ya lo usas y quieres compartir algún truco al respecto espero que lo hagas en los comentarios.
Hay mucho que ganar siendo bueno en completar las cosas (n. del t. – Getting Stuff Done en el original).
Aunque yo no pienso que la productividad y la eficiencia es la respuesta a la vida, tampoco es únicamente tu atención… hay un montón de beneficios en completar las cosas.
Un montón.
Algunos de los beneficios:
Comienzas a conseguir más.
Comienzas a creer más en ti mismo.
Empiezas a creer más en ti mismo.
Pierdes menos tiempo postergándote y distrayéndote.
Te vuelves más confiable – cuando le dices a la gente que vas a hacer las cosas, ellos te creen.
Te vuelves más atractivo, ya que a la gente le encanta contratar a alguien que hace las cosas bien.
Esta dimensión de tu vida te retiene menos, lo que te permitirá profundizar en otras áreas: comprender lo que es importante, ser curioso, jugar, aprender, hacer conexiones profundas con la gente, volver a entrenar los viejos patrones mentales que se quedaron por el camino, y mucho más.
Empiezas a ganar más.
Puedes ser capaz de poner en marcha una startup exitosa o crear una gran organización.
Podrás ser capaz de difundir tus ideas a medida que demuestres que eres digno de escuchar (porque has logrado algo) y a medida que consigas las cosas que hay que hacer para difundir ideas, como escribir un libro o un blog o dar una charla.
Y así sucesivamente. Tu obtienes los beneficios – sólo necesitas saber cómo mejorar en completar las cosas.
Esta es la guía para ti. Primero veremos las cosas que se interponen en el camino. Luego, las habilidades que necesitas para ser bueno para conseguir que las cosas se hagan. Por último, cómo ser bueno en completar las cosas
Cosas que se interponen en el camino
Hacer cosas no es difícil si no hay obstáculos. Al igual que recorrer grandes distancias no es difícil si no hay gravedad o cosas en el camino.
Así que veamos los obstáculos, antes de que veamos cómo conseguir buenas habilidades.
Estos son los obstáculos más comunes para hacer las cosas (con algunas correcciones recomendadas):
Hábito de posponer el inicio, porque es incómodo. Esto es dilación – aplazas el comienzo de una tarea porque es difícil o porque te sientes abrumado o inseguro acerca de la tarea. La solución es hacer que el comienzo sea lo más pequeño posible, crear condiciones que te hagan más propenso a comenzar, y luego practicar el comenzar una y otra vez hasta que lo hagas bien.
El hábito del cambio. Tal vez comienzas algo, pero luego te cambias constantemente a otras tareas. Esto es por las mismas razones que la dilación – la incomodidad y la incertidumbre te hacen querer hacer otra cosa, así que vas a una tarea más fácil o a tus distracciones favoritas. Cambiar, cambiar, cambiar, conduce a una falta de concentración y a una ocupación constante. La solución: crear sesiones de enfoque, donde practicas mantenerte enfocado en una tarea por un corto periodo de tiempo (10 minutos, 15 minutos, etc.) hasta que te mejores al quedarte, por lo menos por un corto periodo de tiempo.
Perfeccionismo. Aplazas el comienzo (o el final) porque las condiciones no son perfectas, o porque el trabajo no es perfecto. Por ejemplo, quieres comenzar un blog pero no puedes hasta que encuentres la plataforma perfecta, el tema perfecto, el horario perfecto, y tengas todo el tiempo que quieras, una lista de grandes ideas, y un conocimiento perfecto de cómo ser un gran blogger. Buena suerte con eso! O bien, escribes una entrada o un artículo en un blog pero no lo publicas porque aún no es perfecto (sugerencia: sólo estás experimentando incertidumbre). La solución: comprometerse a empezar de forma imperfecta, a empezar incluso si las cosas están confusas, a crear ese primer borrador de mierda y a limpiar las cosas más tarde. Puede que necesites un poco de responsabilidad para comprometerte con esto.
Otras personas. Otras personas te frustran, reteniendo las cosas con sus retrasos, complicando las cosas, quejándose, estropeando las cosas, siendo irritantes. En realidad, puede ser difícil hacer las cosas cuando se depende de otras personas. Pero esto es a menudo una racionalización. La solución: asumir toda la responsabilidad por tu parte, hacer bien tu parte, y entrar en un papel de liderazgo más grande donde ayudes a todo el equipo a tener éxito, esforzándote para ser positivo y sincero con otras personas a pesar de sus defectos.
Distracciones e interrupciones. Las constantes distracciones e interrupciones te alejan. Algunas de ellas están controladas, otras no. La solución: crear sesiones de enfoque de tiempo libre de distracción, donde se apagas Internet o utilizas un bloqueador de sitios y te comprometes a centrarse en una sola cosa por un corto tiempo. Habla con otras personas sobre las interrupciones durante este tiempo (diles que si tienes los auriculares puestos, no deberían interrumpirte). Apaga las notificaciones durante este tiempo (puede que sólo sea por 20 minutos cada vez). Finalmente, practica el manejo de las interrupciones (que no puedes controlar) dejando ir lo que estabas haciendo, volviéndote consciente y agradecidamente hacia la persona que te interrumpe y dándole toda tu atención, luego regresando a tu tarea y dándole toda tu atención de nuevo. Esto requiere práctica.
Estar cansado. Estás cansado, hambriento, sin energía, frustrado, solo. Este tipo de dificultades pueden hacer que sea difícil concentrarse y hacer las cosas. La solución: reconocer cuando te encuentras en uno de estos estados y hacer lo que necesites para recargarte (una siesta corta, una caminata o una meditación pueden ayudar). O hacer tareas que no requieran tanta energía y enfoque (contestar correos electrónicos, hacer tareas administrativas rutinarias, etc.). Si es un problema a largo plazo, soluciona tu tiempo de sueño y tu alimentación.
Miedo, incertidumbre, sentirse abrumado y dudar de tí mismo. En el centro de la mayoría de los obstáculos mencionados se encuentran estas condiciones mentales: miedo e incertidumbre, que en realidad son la misma cosa. Arreglar: Ser bueno para permanecer en el miedo y la incertidumbre sin necesidad de cerrar, correr, evitar, tener el control o atacar (las respuestas habituales), es una habilidad clave. Más sobre esto más adelante.
Esto puede parecer una lista abrumadora de obstáculos. Pero los arreglos son relativamente simples, y hablaré más sobre cómo armar un programa simple para ser buenos en superar estos obstáculos, y ser buenos en el proceso de hacer las cosas.
Primero, veamos más sobre las habilidades en las que desea mejorar.
10 Habilidades en las que ser bueno
Con nuestra lista de obstáculos, empezamos a hacer algunas correcciones… y la mayoría de ellas tienen que ver con habilidades que queremos mejorar. Vamos a verlas aquí:
Escoger una cosa importante (priorización). Si te concentras en tareas importantes la mayor parte del tiempo, estarás completando cosas. Si te concentras en hacer las cosas pequeñas pero no las grandes, o cambias de tarea todo el tiempo, serás menos efectivo. Es útil elegir una cosa importante en la que concentrarse a la vez, aprendiendo con el tiempo qué tareas y proyectos son de mayor valor para ti que otros. ¿Es más importante responder a este correo electrónico que escribir ese artículo? ¿Qué supondría una mayor mejora, para tu carrera, tu equipo, tu felicidad y tu salud?
Empezar. La procrastinación es uno de los obstáculos más comunes para conseguir hacer las osas… así que si somos buenos en comenzarlas habremos salvado un obstáculo enorme. La mejor manera de comenzar es concentrarse en un primer paso pequeño y practicar sólo lanzarse en él. Cuando quise crear el hábito de correr, me concentré en ponerme los zapatos y salir por la puerta. Una profesora de arte que conozco les dice a los estudiantes que se concentren en llevar el lápiz al papel. Los profesores de meditación dicen que pongas tu trasero en el cojín. Escoge el primer paso más pequeño, y lánzate a él.
Sesiones de enfoque. Desviar la atención a otras cosas también es muy común, así que he encontrado un gran valor en las sesiones de enfoque (también llamado el método Pomodoro por algunos). Básicamente, eliges un intervalo corto (10 minutos, 15, 20 ó 25) y practica enfocándose en una tarea durante esa sesión, hasta que el temporizador se apague. Luego toma un descanso e intenta otra sesión de enfoque. Recomiendo hacer un par de sesiones de enfoque al día durante una semana, y luego ampliarlas.
Gestionar una lista de tareas. Elegir un programa de lista de tareas, encontrar el sistema perfecto para él y gestionar todas sus tareas y proyectos…. puede ser abrumador. Conozco a mucha gente que ni siquiera se molesta. Pero es una gran habilidad para mantenerte concentrado y hacer las cosas bien, y si lo mantienes simple, no tiene por qué ser abrumador. Recomiendo escoger un programa simple de tareas (últimamente he estado usando «Todoist», pero lo cambio de vez en cuando) y no pensarlo demasiado. La verdadera habilidad es poner todas tus tareas en tu programa de tareas (en la bandeja de entrada), y cada día sólo tienes que escoger unas pocas tareas en las que concentrarte – te recomiendo 3 tareas importantes y 3 más pequeñas al día. Su número exacto variará en función de cuánto tiempo trabajes, cuán duras sean las tareas, cuán rápido seas, etc. Una vez que haya elegido tus tareas para el día, simplemente escoge la primera y haz una sesión de enfoque con esa tarea. Puede que necesites varias sesiones de enfoque para realizar una tarea.
Un primer borrador de mierda. El perfeccionismo se interpone en el camino de hacer las cosas. Así que adopta la actitud del Primer Borrador de Mierda, no preocupándote por la perfección, sino simplemente completándolo. Entonces vuelve y repasa. Pero no lo pienses demasiado, sólo concéntrate en hacer.
Estar en la incertidumbre. Habrá miedo, incertidumbre e incomodidad en todo tu trabajo, y es una gran habilidad aprender a estar en la incertidumbre sin correr, evitando, quejándose, azotando, escondiéndose. La práctica es notar cuando estás en la incertidumbre, cuando sientes inseguridad… y simplemente detenerte y estar con ella. Nota cómo se siente, físicamente, y estate presente con el sentimiento. Se gentil con la sensación, incluso amable con ella. Siente que estás bien incluso cuando estás en la incertidumbre y la incomodidad, y siente gratitud por estar en este momento. Ámalo tal como es, incluso con el sentimiento de inseguridad. ¡Se necesita práctica!
Volver al panorama general. Una cosa es estar profundamente concentrado en una tarea, pero también hay que dar un paso atrás y echar un vistazo al panorama general. Yo abogo por hacer eso al principio y al final de cada día (una sesión de planificación matutina y un breve repaso vespertino de tu día), pero también por verificar durante el día cómo van las cosas y cómo podrías necesitar ajustar tu plan y reenfocar tu atención. Todos nos distraemos, nos interrumpimos, nos desviamos por dificultades imprevistas. Y todo eso está bien, si podemos reorientarnos según sea necesario.
Asumir toda la responsabilidad y el liderazgo. Esto sería más bien una práctica avanzada, pero tomar plena responsabilidad significa no culpar a los demás por tus dificultades para hacer las cosas. Reconocer los obstáculos, pero asumir la responsabilidad de encontrar un camino, o aceptar lo que sea necesario aceptado, o reconocer tu parte en la dinámica que has creado. Tomar el liderazgo es asumir la responsabilidad de crear una mejor dinámica, de crear una estructura si es necesario, incluso si tu eres o no el líder oficial del equipo.
Comunicarse. Otra habilidad avanzada – se trata de comunicarse de manera clara y honesta, para que todos tengan claras las responsabilidades y los límites y las consecuencias de no cumplir con esas responsabilidades y límites. Este tipo de comunicación es liderazgo y estructura, que ayuda a todos a funcionar mejor.
Crear una estructura. No estoy a favor de una estructura rígida y de una planificación excesiva. No es propicio para completar las cosas, y de todos modos los días rígidamente planeados son sólo una fantasía. En cambio, tener una estructura mínima es bueno: ¿cómo empezarás el día para que puedas trabajar en las cosas importantes? ¿Cómo harás tus sesiones de enfoque para no distraerte demasiado? ¿Cómo revisarás tu día para que aprender de lo que pasó? ¿Cómo revisarás el rendimiento? ¿Cuándo completarás el correo electrónico y tendrás reuniones? Algunas respuestas sencillas a este tipo de preguntas te ayudarán a crear una estructura. Pero no te preocupes por conseguir una estructura perfecta – si tienes revisiones, puedes ajustar y mejorar la creación de la estructura con el tiempo.
Puede resultar abrumador que haya 10 habilidades en esta lista, pero no es necesario que te sientas bien en todas al mismo tiempo. Me centraría primero en los primeros cuatro y luego me expandiría lentamente para practicar los otros.
Un programa simple para ser bueno en completar las cosas
Con todo lo anterior en mente, vamos a simplificar las cosas y crear un programa de cinco pasos para lograr completar las cosas:
Crear una estructura de práctica diaria. Ten un plan sencillo para practicar cómo completar las cosas: 1) una sesión de priorización matutina; 2) un par de sesiones diarias de enfoque; 3) meditación de incertidumbre cuando sientas miedo, duda, incertidumbre e incomodidad; y 4) una revisión al final del día para iterar y mejorar. Da este plan a otra persona y comprométete a informarle todos los días durante una semana. Luego, comprométete a actualizarlos semanalmente después de eso, diciéndoles sus éxitos, obstáculos y cómo se ajustará para la próxima semana. Esta estructura diaria más las revisiones de evaluación te ayudará a mejorar en las próximas semanas.
Una sesión de lista de tareas por la mañana. Esto es parte de la estructura de tu práctica diaria mencionada anteriormente, al igual que todos los puntos a continuación. Básicamente, sólo tienes que pasar de 5 a 10 minutos repasando tu lista de tareas y eligiendo las tareas en las que deseas concentrarte hoy. Mantén la lista corta, para que no se sientas tentado a saltártela. Revisa qué tareas están en tu lista, y mueve 3 tareas importantes y 3 tareas de administración a tu lista de Hoy (o cualquier número que te funcione). Este es el momento de revisar tu calendario para ver si hay alguna cita a tener en cuenta. Básicamente, se trata de una breve sesión de planificación y priorización, de manera que sepas en qué concentrarte hoy. Habilidad relacionada: ¡añade cosas a su lista de tareas y calendario cuando pienses en ellas!
Sesiones de enfoque. Utilízalas para abordar los temas de su lista de Hoy. ¿Tres tareas importantes en tu lista de hoy? Elige primero la primera (¡no la pospongas!), y haz una sesión de enfoque con ella. Puede ser una tarea difícil, así que sólo haz 10-20 minutos de la tarea, un rato lo más pequeño posible. De esta manera, estás practicando para empezar y mantenerte concentrado. Tómate un descanso cuando tu reloj se apague (después de 15 minutos, digamos), camina, estírate. A continuación, realiza otra sesión de enfoque, terminando la tarea si puedes, o pasando a la siguiente si has terminado con la primera tarea. Puedes hacer lo mismo para tareas menos importantes: una sesión de enfoque para procesar la bandeja de entrada del correo electrónico o para pagar las facturas, por ejemplo.
Meditación de la incertidumbre. Esto es un poco más difícil de recordar, pero creo que puedes hacerlo si pones un recordatorio visual a tu alrededor (como una pequeña nota para ti mismo)… básicamente, en cualquier momento que tengas ganas de cerrar, postergar, distraerte, etc. … nota que sientes incertidumbre. Luego haz una pausa y medita durante unos momentos: deja caer tu conciencia en tu cuerpo, nota los sentimientos físicos de la incertidumbre, abre tu corazón para sentirla, nota que estás bien en medio de la incertidumbre, y quédate con ella con gentileza y amabilidad por un poco más de tiempo. Este tipo de práctica transformará tu relación con la incertidumbre, el miedo y la incomodidad – no te desharás de ellos (ese no es el objetivo), sino que te entrenarás para estar bien en medio de ellos, sin necesidad de correr, evitar, cerrar, controlar, salir o quejarte. Eso es enorme, y vale la pena un poco de práctica.
Revisar: Para iterar y mejorar. Cada día, tómate 10 minutos para revisar cómo te fue el día. ¿Cómo te fue con tu estructura? ¿Hiciste tu sesión matutina de lista de tareas? ¿Tus sesiones de enfoque? ¿Tu meditación de incertidumbre? Toma algunas notas, sobre lo que conseguiste, lo que se interpuso en el camino, cómo puedes ajustar en el futuro. Si tienes un socio responsable, envíale algunas líneas con esa revisión. Hacer una breve revisión semanal también es una buena idea. Estas revisiones sirven como una manera de entender qué es lo que funciona para ti y qué patrones se interponen en el camino, y para ajustar para que estés constantemente mejorando con el tiempo.
Ampliación: Con el tiempo, las sesiones de enfoque, la meditación de la incertidumbre y otras estructuras se harán más fáciles. Luego trata de practicar algunas de las otras habilidades anteriores, incluyendo abrazar el Primer Borrador de Mierda, tomar plena responsabilidad, trabajar y comunicarte abiertamente con los demás, mejorando su estructura según sea necesario.
¡De acuerdo! Este pequeño manual, si lo pones en práctica, te llevará un largo camino para mejorar en completar las cosas. Pero tienes que ponerlo en práctica. Consigue un socio responsable para no descuidar la práctica.
Ponte en marcha. Disfruta el proceso. Estate atento en medio del caos de tu día. Y no olvides apreciar el milagro del día que te han dado.
Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.
El despliegue es la actividad consistente en instalar una aplicación en el ordenador de nuestro usuario. Una vez que hemos probado nuestro programa y consideramos que está listo para que nuestro usuario lo utilice, debemos proceder a instalarlo en su PC. En este momento se plantean distintas maneras de realizar el despliegue, que varían en función del tipo de software que realicemos. Si quieres leer más sobre el tema te recomiendo la entrada Cincomundos de JoelonSoftware — https://www.joelonsoftware.com/2002/05/06/five-worlds/.
En mi caso, desarrollo software ‘empaquetado’, es decir aplicaciones que el usuario instala o actualiza por si mismo, y no tengo manera de acceder al PC del usuario, por lo que el despliegue toma una gran importancia. No me puedo permitir que un usuario actualice un programa y se produzca un error, por lo que tengo que realizar una serie de acciones dentro del programa que garanticen que la actualización se realiza de manera correcta. Esto no forma parte del despliegue propiamente dicho, pero son aspectos muy importantes cuando necesitas que tu programa no de un error tras una instalación.
1.- Comprobar que existen los ficheros de la aplicación.
El primer aspecto a considerar es que existan todos los ficheros de datos de la aplicación en la ruta predeterminada del programa. Por ello al arrancar nuestro programa debemos hacer esta comprobación, y en caso de que falte algún fichero proceder a crearlo. Una manera sencilla es la que muestro a continuación:
METHOD CheckFiles() CLASS tApplication
LOCAL i := 0
LOCAL nLen := 0
LOCAL aFiles := { "familias.dbf", "familias.cdx", ;
? "productos.dbf", "productos.cdx", ;
? "tickets.dbf", "tickets.cdx", ;
? "lineas.dbf", "lineas.cdx" }
// compruebo que están los ficheros
nLen := Len( aFiles )
FOR i := 1 TO nLen
? IF !File( ::cDbfPath + aFiles[ i ] )
? Ut_Actualizar()
? Ut_Indexar()
? EXIT
? ENDIF
NEXT
Más adelante explicaré que hacen las funciones Ut_Actualizar() y Ut_Indexar(), pero básicamente comprueban que los ficheros tienen todos los campos y vuelven a generar índices.
2.- Comprobar si ha cambiado la versión del programa.
Conjuntamente con la comprobación del punto anterior hago la comprobación de que haya cambiado la versión del programa. Las versiones de mis programas siempre tienen la siguiente forma: “x.y.z” donde:
x indica la versión mayor. Cuando introduzco funcionalidades que supone añadir tablas a una aplicación incremento la versión mayor.
y indica la versión menor. Cuando libero una actualización siempre incremento la versión menor, y cuando esta actualización supone añadir o modificar un campo de una tabla incremento la decena de este número, pasando por ejemplo de la 1.1.a a la 1.10.a.
z indica una corrección de errores de la versión. No añado funcionalidades, únicamente corrijo errores de la versión menor actual.
Cuando cambia la versión mayor o la decena de la versión menor llamo a Ut_Actualizar() y Ut_Indexar().
3.- Creación de las tablas del programa desde código.
Llegamos a la marte más importante de la entrada: debes tener escrita la definición de tablas de tu aplicación, de manera que esta pueda crearlas o modificar su estructura cada vez que lo necesites. Ten en cuenta que estamos hablando de software empaquetado, en que no es posible que vayas al PC de tu usuario a modificar la estructura de una tabla usando un programa de tipo DBU.
Mi función Ut_Actualizar lo hace de esta manera:
// productos
oSay:SetText( 'Fichero de Productos' )
dbCreate( oApp():cDbfPath + 'pr', { ;
{ 'PrNombre', 'C', 40, 0 }, ; // Nombre del producto
{ 'PrFaNombre', 'C', 40, 0 }, ; // Nombre de la familia
{ 'PrPrecio', 'N', 6, 2 }, ; // Precio de compra
{ 'PrIVA', 'N', 5, 2 } } ) // Precio de venta
CLOSE ALL
use &( oApp():cDbfPath + 'pr' ) new
SELECT pr
IF File( oApp():cDbfPath + 'productos.dbf' )
DELETE file &( oApp():cDbfPath + 'productos.cdx' )
APPEND from &( oApp():cDbfPath + 'productos' )
dbCommitAll()
dbCloseAll()
DELETE file &( oApp():cDbfPath + 'productos.dbf' )
ENDIF
dbCloseAll()
rename &( oApp():cDbfPath + 'pr.dbf' ) to &( oApp():cDbfPath + 'productos.dbf' )
Lo que hago es crear la tabla con el nombre del alias que luego usaré con ella, incorporo los datos de la tabla real que luego borro, y por último renombro el fichero que he creado con el alias en el nombre real de la tabla. Esto para cada una de las tablas de mi aplicación. Cuando tengo que modificar un campo de una tabla lo hago en esta función, de manera que al arrancar de nuevo el programa las tablas se modifican de manera automática.
Una vez creadas las tablas lo que hago es crear los índices sobre las mismas. Como has podido ver, el fichero índice lo he borrado antes de incorporar los datos de la tabla real, por lo que ahora tengo que crearlo.
// productos
dbCloseAll()
IF File( oApp():cDbfPath + 'productos.cdx' )
DELETE File ( oApp():cDbfPath + 'productos.cdx' )
ENDIF
Db_OpenNoIndex( "productos", "pr" )
oSay:SetText( i18n( "Fichero de productos" ) )
oMeter:SetRange( 0, LastRec() / nPaso / nPaso )
PACK
INDEX ON Upper( prnombre ) TAG pr01 ;
FOR ! Deleted() ;
Eval ( oMeter:SetPos( nMeter++ ), Sysrefresh() ) EVERY nPaso
INDEX ON Upper( prfanombre ) + Upper( prnombre ) TAG pr02 ;
FOR ! Deleted() ;
Eval ( oMeter:SetPos( nMeter++ ), Sysrefresh() ) EVERY nPaso
UtResetMeter( oMeter, @nMeter )
4.- Controlar todos los aspectos relacionados con la modificación de campos de las tablas
Es evidente que si has incluido un nuevo campo en una tabla, este aparecerá en alguno de tus formularios. Pero también debes mostrarlo en tus rejillas de datos previa a la edición de un registro, o incluir la nueva ordenación en la rejilla en que muestras la tabla. Y tener en cuenta tus clases que muestran datos.
En mis programas uso el interfaz que he llamado Interfaz completa de documento único o Full Single Documento Interface https://alanit.com/?s=fsdi, y una de sus funcionalidades es que guardo la configuración de la rejilla de datos de cada mantenimiento. Si añado un nuevo campo, este campo no se muestra en la rejilla, porque cuando guardé la configuración ese campo no existía. Por eso cada vez que añado un campo — modifico +10 la versión menor de mi aplicación — tengo que borrar la configuración almacenada de la rejilla para mostrar todos los campos de la misma.
Si en tu aplicación realizas más cosas relacionadas con el despliegue de tu aplicación, te agradecería que no explicaras en los comentarios.
Una de las aficiones que más estoy disfrutando en los últimos años es la fotografía. Hace ya un par de años que jubilé mi querida Lumix G3 y compré una Nikon 5300. Poco a poco he ido completando mi equipo fotográfico, que basicamente es el que muestro a continuación:
Bandolera Crumpler Muli 4500
Correa de muñeca Cuff de PeakDesign
Cámara Nikon D5300
Objetivo AF-S DX Nikkor 35mm f/1.8G
Objetivo Sigma 17-70mm F2.8-4 DC MACRO OS HSM Contemporary
Minitrípode Manfrotto Pixo al que he acompazo un adaptador arca-swiss
Correa Slide de PeakDesign
Me gusta mucho la fotografía de calle y de viajes, y llevar la cámara es la motivación perfecta para salir a pasear y conocer una ciudad fijándote en situaciones y escenas que en el día a día pasan desapercibidas.
Soy miembro de la Asociación Fotográfica de Novelda, aunque tengo que reconocer que participo poco en sus actividades, y desde hace poco he retomado la actividad en mi cuenta de Flickr publicando 4 galerías, una de fiestas de Novelda y el resto de un viaje que hice con unos amigos.
A partir de septiembre de 2018 he eliminado las restricciones de las ediciones gratuitas, que unicamente traen un mensaje de recordatorio de registro que se muestra periódicamente. De esta manera, las diferencias entre las ediciones registrada y gratuita son el nombre del ususario registrado en los distintos listados del programa y el mensaje recordatorio. Nada más.
Por esto, todas las versiones gratuitas añaden desde ahora las siguientes funcionalidades:
Selección de claves desde tablas auxiliares. Cuando tienes que introducir una clave desde una tabla auxiliar simplemente haz click en el botón marcado con […] que aparece al lado del campo, selecciona el valor que quieras y se introducirá en el campo.
Autocompletado de claves auxiliares. Otra manera de completar las claves desdes una tabla auxiliar es simplemente escribiendo en el campo el valor a introducir. Al hacerlo, el programa te mostrará una lista con los posibles valores de las claves que contienen la cadena tecleada y podrás seleccionar el valor que quieras con las flechas de cursor y pulando INTRO.
Consulta de ejemplares desde tablas auxiliares. Desde cualquier tabla auxiliar podrás ves los ejemplares de la tabla principal que contienen esa clave, por ejemplo los libros de una materia o las recetas de un cocinero.
Todas las descargas de ediciones gratuitas de los programas se han actualizado con estas nuevas funcionalidades.
Quizá te preguntes ¿ para que quiero registrar el programa si la edición registrada no ofrece más funcionalidades que la edición gatuita del programa ? Pues una respuesta es que te quitas el mensaje recordatorio que aparece cada cierto tiempo, y la segunda es que con tu contribución estás apoyando la existencia de programas que se adaptan a tus necesidades o a tus gustos.
Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.
En esta nueva entrevista Teo Fonrouge nos cuenta sus inicios en la programación, su participación en el proyecto Harbour y nos da su visión acerca del proyecto.
Hola, mi nombre es Teodoro Fonrouge Orozco, nací en la Ciudad de México, aunque por azares del destino en mi registro de nacimiento dice que vi la primera luz el 26 de octubre de 1966 en la ciudad de Acayucan en el estado de Veracruz, y en realidad siempre he preferido pensar que mi tierra es Veracruz … 🙂
Actualmente vivo en un poblado en la periferia de la ciudad de México, donde creo que se vive en forma más tranquila que en la vertiginosa y apretada ciudad, de mis hijos; tengo 4 chicas y 3 chicos…
Mi relación con las computadoras se remonta a 1985 cuando apenas iba a cumplir 19. En una ocasión, acompañé a mis padres a una tienda departamental grande, de esas que te venden desde un kilo de verduras, hasta lo último en tecnología… y en efecto, lo que ví en ese momento me causó una gran impresión: una computadora Commodore 16, fué amor a primera vista … 🙂 , aunque un amor un poco extraño, ya que en ese momento yo no tenía idea para que me podía servir una computadora, si yo no tenía intenciones de enviar un vehículo tripulado a Marte ! … ya que en ese entonces, eso era lo que yo pensaba que era lo único para lo que servían las computadoras …. jajaja
En la escuela obtuve mi mejores calificaciones en matemáticas, y algo me decía que quizá, con un poco de suerte, podría hacer que una computadora sirviera como apoyo a estudiantes para el aprendizaje de cálculo, álgebra, o al menos para enseñar sumas y restas, o quizá para mantener una conversación con ella … 😀
Así que le rogué a mi padre que me comprara esa cosa para estudiarla detenidamente en casa, lo cual logré eventualmente después de estar todo un mes haciendo méritos para que él así lo hiciera … Ahora me siento inmensamente tonto, pero lo primero que hice al tener la computadora en casa, fue escribir una pregunta en ella: ‘cuando descubrio Cristobal Colon America ?” y darle <return>, y para mi asombro luego leer su respuesta:
? SYNTAX ERROR
READY.
bueno, a partir de ahi, de algún modo esa es la respuesta que mas frecuentemente he obtenido de todas las computadoras con las que me he topado … jajajaja
Al cabo de varias semanas, logré escribir un pequeño programa que hacía figuras geométricas en la pantalla y las enviaba a una impresora ENTEIA (compatible con Epson) con una mezcla de código en Basic y lenguaje ensamblador 6502, al cabo sólo tenía 16kb de memoria RAM disponible que tenía que compartir para el programa y los datos de los dibujos, que básicamente se guardaban en un segmento de memoria que representaba la imagen gráfica en el monitor, bueno en la televisión de mi madre en ese entonces … Con ese programa me presente en las oficinas de la empresa que en ese entonces comercializaba las computadoras Commodore, tuve suerte de que me atendiera el director y le mostré mi creación … me dijo “cuanto quieres ?” y le dije “quiero trabajar aqui…” ese fué mi primer trabajo formal, un par de años después dejé la compañía y puse mi oficina como consultor independiente.
Mi primer contacto con el lenguaje Clipper fue con una de las compañías a las que yo daba consultoría, tenían un pequeño programa escrito en Clipper para controlar inventarios, el cual requería algunos cambios y extensiones, ya que el programador a cargo abandonó el proyecto, mi primer contacto con Harbour fué por 2004, y en realidad fue con xHarbour su pícaro hijo :-), al principio pagué por utilizar el servicio de xharbour.com y poco después empecé a utilizar Harbour, y ya no ví razón para pagar el servicio.
Desde el momento en que empecé a utilizar xHarbour, y después Harbour, me involucré a poco con la comunidad de usuarios, haciendo preguntas y en ocasiones, proporcionando respuestas.
Decidí que mi mejor forma de aportar a la comunidad Harbour era por medio de algún proyecto que la comunidad pudiese aprovechar, así que en 2006 empecé a escribir wxHarbour (https://sourceforge.net/projects/wxharbour/), un port simple de http://wxwidgets.org un GUI multi — plataforma para Harbour.
También hice una exploración para utilizar Qt como plataforma GUI para Harbour (qtHarbour), pero pronto me dí cuenta de que más bien debía orientar esfuerzos para simplificar la lógica de detrás de las estructuras de datos de mis aplicaciones, además de que Qt no es para nada liviano.
En 2012 inicié el proyecto OORDB en sourceforge.net, después lo moví a GitHub ( https://github.com/tfonrouge/oordb ), con la finalidad de manejar tablas de bases de datos relacionales en una forma orientada a objetos, ya que pienso que esto puede simplificar enormemente al diseño, desarrollo y mantenimiento de estructuras complejas de datos, actualmente utilizo este esquema en un proyecto extenso de planeación y control de Producción para compañías manufactureras, esta aplicación esta corriendo actualmente y contiene estructuras complejas de datos como asociación de tablas de datos con estructuras de listas de componentes, operaciones de manufactura, centros y áreas de trabajo, emisión de ordenes de producción/ordenes de trabajo a partir de una programación de entregas de pedidos a clientes, adicionalmente mantiene información de monitoreo industrial de la maquinaria en tiempo real, utilizando Arduino’s conectados a estaciones corriendo con hardware Raspberry Pi, la información se puede consultar en tiempo real por internet utilizando un web service:
sin lugar a dudas, OORDB me ha permitido simplificar la programación de este proyecto de una manera estructurada, manejando clases que representan documentos (una orden de trabajo, un elemento de inventario, etc) que permiten crear subclases para especializar un tipo especifico de documento, adicionalmente, permite que se mantenga la descripción de campos, descripción de índices, y descriptor de relaciones master <-> child entre las tablas.
Así que ahora no necesito un GUI multi — plataforma para la interface de mis aplicaciones, para eso utilizo simple java script (AngularJS) haciendo peticiones a un servidor de datos utilizando un modelo RESTful donde se intercambian documentos JSON entre cliente y servidor.
Desde hace poco mas de dos años, he estado haciendo preparativos para migrar mis bases de datos xBase a un contenedor mas robusto, y con más prestaciones, por lo que elegí MongoDb, así que empecé a escribir un port del MongoDb C Driver para Harbour (https://github.com/tfonrouge/hbmongoc) y he estado integrando el driver a mi OORDB.
Actualmente estoy en proceso de migrar mis estructuras de datos de xBase a MongoDb utilizando OORDB con muy buenos resultados, y migrar el entorno de desarrollo de esta aplicación de manufactura de Harbour a Java. Para ello ya he creado en Java una aplicación integrada al excelente IDE IntelliJ (https://www.jetbrains.com/idea/) que me permite generar automáticamente el código de los descriptores de tablas, indices, relaciones para replicar mis estructuras y lógica de datos de Harbour OORDB a Java, es una version de OORDB que estoy escribiendo para Java.
Mi propósito es mover el desarrollo de esta aplicación de manufactura a Java / MongoDb.
Harbour es un excelente lenguaje de programación, sin embargo tiene algunos inconvenientes que son críticos en mi estructura de negocios, creo que el principal inconveniente es la falta de core-developers (creo que se cuentan con los dedos de las manos) para resolver problemas, bugs en el compilador e implementar mejoras. Y a veces uno tiene que invertir tiempo para resolver algunos de los problemas, cuando lo que se requiere es enfocar en el desarrollo de la aplicación.
Un IDE como IntelliJ no estaría de más 🙂
Una más extensa y unida comunidad no estaría de más, tenemos Harbour y xHarbour…
Conozco, y he programado en muchos otros lenguajes de programación para mis clientes a lo largo de mi actividad laboral, pero últimamente he estado haciendo centralizando mas de mis proyectos en Java / JavaScript.
Aunque creo que me falta tiempo para desarrollar algunas otras áreas, como por ejemplo Sistemas Expertos con IA …
En fin… en algún momento estoy seguro que sucederá.
Una de las preguntas habituales que recibo es si es posible compartir los datos de mis programas a través de internet. La respuesta es si y en esta entrada voy a explicar la manera de hacerlo. Antes de comenzar tengo que hacer una puntualización. Todos mis programas son monousuario, esto quiere decir que solo un usuario puede acceder al programa en un momento dado. Si otro usuario intenta acceder al mismo programa, o el usuario que lo tiene abierto lo abre otra vez, el programa dará un error y se cerrará. También quiero dejar claro que lo que voy a explicar es la manera que yo utilizo y tiene una cierta complejidad para realizarla, si no tienes claros todos los pasos por favor no lo hagas y si lo haces es bajo tu propia responsabilidad. Antes de comenzar te aconsejo que hagas una copia de seguridad de todos los datos que tengas tal como explico en este post.
La manera de compartir los programas con sus datos vía internet que yo utilizo es a través de una cuenta de Onedrive. De los varios servicios de compartir archivos en la nube, el que yo utilizo es Onedrive, y no puedo decir que el sistema que utilizo con él funciona en los demás servicios como Drive, Dropbox, etc. por el sencillo motivo que no lo he probado. Yo uso Onedrive y con este sistema puedes compartir los programas en varios ordenadores vía internet.
Lo primero que tienes que hacer es crear una cuenta de Onedrive e instalar el correspondiente cliente en el PC. Lo ideal es que en todos los PC donde se instale haya creado un usuario de Windows con el mismo nombre, para que las rutas absolutas a las carpetas de Onedrive coincidan. Una vez instalado Onedrive se copia la carpeta del programa a la carpeta de Onedrive, pero dejando la original en su sitio por si algo falla tener una copia correcta. Una vez hecha la copia arrancaremos el programa desde la carpeta de Onedrive e iremos al apartado de configuración para elegir las rutas de las carpetas donde están los datos, que serán las correspondientes a Onedrive.
Cuaderno de Bitácora
Accedemos a la pestaña Utilidades de la cinta de opciones y dentro de ella a la opción Configuración. En la pestana Directorios indicaremos la ruta de las carpetas de los ficheros de la aplicación, algo como lo siguiente:
En Cuaderno de Bitácora se puede introducir las rutas a las carátulas de libros, discos y videos. Estas rutas son absolutas a la imagen en cuestión, por lo que si se mueven las imágenes de la carpeta en que estén a una de Onedrive habrá que volverlas a introducir una a una.
El Puchero
Accederemos a la opción Configurar la aplicación dentro del menú de Utilidades y ahí indicaremos las rutas de las carpetas del programa.
Findemes
En el caso de Findemes la configuración de las carpetas de datos se realiza por los ejercicios contables, por lo que se debe cambiar en cada ejercicio la ruta a las carpetas correspondientes. En el post cómo gestionar ejercicios contables con findemes explico como se configuran los ejercicioes contables en el programa.
Colossus
Colossus cada vez que arranca pide qué fichero de claves es en que tiene que abrir, y este fichero puede estar en cualquier ruta accesible de tu PC, incluidas las de Onedrive.
Consideraciones finales
Tener ficheros en carpetas de Onedrive supone que cada vez que se modifican el fichero se tiene que copiar a la nube, y de igual manera se tiene que descargar en los otros ordenadores en que se comparta. Este subir y bajar los ficheros lleva un tiempo, y si no permitimos que se sincronicen correctamente aparecerán ficheros duplicados, que son copias de los documentos que existen en los distintos ordenadores. Por esto es bueno dejar unos minutos desde que se cierra el programa hasta que se apaga el PC, y tampoco está de más mirar si los ficheros se han sincronizado correctamente. Esto se hace desde el explorador de Windows, mirando que todas las carpetas de Onedrive tengan la marca verde.
También hay que tener cuidado con la configuración de Onedrive, sobre todo con la opción de ahorro de espacio que debe estar desmarcada.
Y por último, debes tener en cuenta que si dejas un programa funcionando en un PC y luego intentas arrancarlo desde otro simplemente no podrás, porque los programas son monousuario.
Después de bastante tiempo dándole vueltas al tema de reunificar todos los contenidos que he publicado en internet, decidí que todo iba a estar publicado en alanit, así que he traido las entradas que publiqué en cincomundos y en ese blog ya no voy a publicar más entradas.
Hasta ahora, en alanit unicamente publicaba entradas relacionadas con mis programas, dejando los temas de programación y personales para cincomundos. Con la reunificación de contenidos que he realizado, he dividido las entradas en tres categorías:
alanit, que recoge todas las novedades sobre mis programas.
Asuntos propios, que recoge todas las entradas sobre temas personales como lecturas, escritura, fotografía,… y demás temas que no sean ni de mis programas ni de programación.
Programación, que recoge las entradas sobre programación, una de las temáticas centrales de mis entradas en todos estos años.
Para facilitar el acceso a las entradas de cada una de las categorías he creado entradas independientes en el menú de la web, mientras que en el blog aparecen todas las entradas en orden cronológico inverso.
Para reunificar los contenidos en una web primero incorporé las entradas de cincomundos, bendita importación de WordPress, borrando del XML las entradas que tenía duplicadas en alanit, y luego tuve que asignar la categoría correcta a cada una de las entradas. Fue un trabajo un tanto pesado, pero que disfruté mucho puesto que fui haciendo una revisión de todo lo que he publicado hasta ahora, y en muchos casos me gustó mucho leer los comentarios de las entradas. Hay gente de la que no he vuelto a leer nada o cuyos sitios web han desaparecido, pero también hay comentarios de gente que no conocía personalmente cuando escribian estos comentarios y que posteriormente los he conocido en persona.
Mi intención es que alanit sea a partir de ahora una web personal, no tan centrada en mis programas sino que estos sean unicamente una parte de la web, potenciando sobre todo las entradas de asuntos propios.
Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.
Cookies estrictamente necesarias
Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.
Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.