Páginas

sábado, 8 de marzo de 2025

Ni posible ni deseable tener el software a su última versión.



Cuando se desarrolla un programa para el que utilizamos librerías (paquetes, plugins), otro software a fin de construir nuestro software. Al existir dependencias entre programas tenemos que estar pendientes de las actualizaciones de todas las partes de nuestro software.

Si hacemos una analogía con construir un edificio y construir software diciendo que los ladrillos, columnas son piezas de software que no necesariamente desarrollamos nosotros sino de las que nos servimos como apoyo, la diferencia a destacar es que en el software los elementos no son estáticos, el software está en constante cambio y tenemos que cambiar constantemente los ladrillos de nuestro software. Así se escoja piezas de software altamente utilizadas con una larga duración en el mercado pueden dejar de utilizarse y ser necesario un cambio.

En el siglo pasado adquiríamos un producto cerrado. Ahora se tiende a servicios que incorporan constantemente cambios.

¿Por qué no es posible tener la última versión?

La última versión no es compatible. 

Como estamos integrando varios programas hay dependencias. Cuando se actualiza el software no solo es por mejorar la seguridad, puede darse un cambio de estructura, actualización del lenguaje, funcionalidad, etc. Algunos cambios hace que se produzca un cambio importante que hace que la nueva versión no sea compatible con otras versiones. 

Por ejemplo, nuestro software puede no ser compatible con versiones 1.x.x y 2.x.x pero si con la 3.x.x, 4.x.x pero cuando sale la 5.x.x no es compatible porque hay cambio en el lenguaje así que para poder actualizar toca realizar cambios en nuestro software.

Se suele utilizar una forma de nombrado o versionado para indicar cambios menores y por lo tanto si se usa un software 1.1.1 y se pasa a utilizar el 1.2.0 no debe ser problemático pues es un pequeño cambio. Un cambio más grande que puede crear la necesidad de cambio en nuestro código para poder adaptarlo puede ser pasar de un 1.4.10 a 2.0.0. Sin embargo, si se introduce un fallo da igual si es un cambio pequeño 1.1.1 a 1.1.2.

¿Por qué no es deseable tener la última versión?

La última versión tiene fallos. 

Sí, la recomendación es que nuestro software esté con las últimas actualizaciones por seguridad. ¿Acaso no pueden introducir algún problema en la última versión? Sí, aunque se haga todo lo posible por evitar esto puede pasar. Así que la solución suele ser liberar una nueva versión que soluciona el fallo pero hasta que pasa eso, que pueden ser horas, meses o nunca, se opta por volver a una versión anterior.

Como caso particular una vez trabajaba con un plugin para un software costoso, ampliamente utilizado y tanto el programa principal como el plugin eran desarrollados por la misma empresa. Desde soporte solo se ofreció realizar el trabajo del plugin por lo que debía enviar mis archivos a ellos. Para mí no era una solución ya que quería tener el control de usar varias veces el plugin. Además, como suele ser lo usual el fabricante tiene las versiones anteriores disponibles, pues este fabricante no las facilitaba. Y el fallo mío fue tampoco tener las versiones anteriores que funcionaron. Tardaron en sacar la nueva versión sin el fallo casi un año.

Realizar actualizaciones puede ser fácil pero no rápido

Debido a la dependencia que existe entre las distintas piezas de software que integran nuestro programa cuando se actualiza una parte puede afectar a varias y así no funcionar. Entonces, toca buscar la versión más actual posible sin fallos que sea compatible con el resto de programas.

Cuando no es compatible puede ser por un cambio mayor el cual tiene como efecto que debamos hacer cambios en nuestro código para poder hacerlo compatible. ¿Y por qué vamos a querer esto? Porque queremos avanzar con el resto de componentes que ayudan a nuestro software porque las versiones antiguas no se les suele seguir dando soporte, ni mejoras, ni nada.


2022-09-28

Contradicciones necesarias



A veces la vida o las personas parecen contradictorias, y no lo es. Tan solo hay diferencias sutiles, que debemos ser capaces de entender. Es por ello, que muchas veces es ahí donde se ve la diferencia entre quienes tienen desarrollada su capacidad de razonamiento, de abstracción. Además, considero que parte de adquirir sabiduría es el entender la necesidad de un equilibrio entre cosas que parecen contradictorias, necesarias a la vez. Incluso concurrentes, y con eso pienso en la concurrencia desde un punto de vista informático, en la cual, es real o simulada, pero necesaria para una mejora de sus acciones, acciones que curiosamente pueden parecer que complican las cosas y contradicen lo que acabo de decir, ya que esa mejora facilita unas cosas gracias a la complejidad de otras.

Uno de los ejemplos que me viene a la mente es el de «República democrática», pues se puede considerar una contradicción si consideramos, por un lado, que una república es la supremacía de la ley sobre todo; esto nos lleva a pensar en una república pura es en la que se respeta la ley sea o no justa, la supremacía de la ley está por encima de todo, pudiendo llegar a la ejecución de un inocente simplemente porque lo manda la ley. Mientras que, por otro lado, una democracia entendida como el poder del pueblo en un Estado, quien tiene la supremacía es el pueblo y el sistema comúnmente utilizado es el de la mayoría prevalece; así que, si la mayoría quiere la ejecución de una persona así debería ser, en una democracia pura y extrema para destacar lo que implicaría tal cosa. Entonces, el decir «república democrática» desde esa perspectiva parece contradictoria porque en la una prevalece la ley y en la otra la voluntad de un pueblo. Y en realidad pueden coexistir, simultáneamente, para permitir que no exista los extremos que implicaría cada una de ellas en su estado puro, como se indica en los ejemplos supuestos.

Con respecto a temas ideológicos, muchas personas dicen ser de una tendencia, como por ejemplo de izquierda, y sin embargo, tienen actuaciones de ideología contraria, de derecha. En éste punto, viene a mi mente la lógica borrosa, en la que algo puede tener posibilidades de ser varias cosas a la vez, es decir, se puede hablar de la posibilidad, de que un día llueva con un porcentaje, así como, de la posibilidad de que haga sol, y al ser posibilidades no tienen por qué su suma ser uno, pues no es que sean opuestos. Del mismo modo, creo, una persona puede actuar con un determinado porcentaje con tendencia de derecha y con otro porcentaje con tendencia de izquierda. Y en cada individuo ser diferente. Puede parecer contradictorio, y no es que lo sea o no lo sea —he aquí otra cosa que parece una contradicción—. Puede ser, depende.

Algunas veces podemos ver cómo personas u organizaciones con tintes de una tendencia como puede ser capitalista, de derecha, liberal, etc. financian actividades u organizaciones con tintes de izquierda, pro-ambiente, anti-capitalismo, etc. Sin embargo, lo que se aplica es el tener a sus enemigos aún más cerca, tan cerca que son ellas quién da para su sustento económico y con ello controlas su ámbito de actuar, sumado a que hacen de voceras y por lo tanto, controlan. Control de los ilusos que creen hacer lo que quieren. Muchas veces pueden buscar controlar qué mensaje quieren difundir, otras veces un lavado de imagen, pero, también, captar a personas con buenas intenciones y adoctrinarlas u atraer personas a sus organizaciones; esto es un intentar ganar algo como sea; e incluso algunos, respecto a esto, lo llaman derechización de la izquierda. Estas contradicciones son necesarias para quienes intentan mantener su poder.

La competencia y la colaboración muchas veces las confrontan como si no se pudieran compatibilizar. Y, creo, es justamente lo necesario. La competencia vista como el destruye a tu contrincante, busca el monopolio, etc. es el problema. Tampoco se trata de colabora con tu grupo de amigos para destruir a otros, como si de un oligopolio hablásemos. Se trata de competir sin buscar la desgracia de los demás, incluso, cooperando y ayudando a los demás. Una competencia por sobresalir y mejorar tu versión pasada, mas no de ser mejor que los demás. Y en esa competencia contra uno mismo colaborar con los demás para superarnos. Por ejemplo, practicar un deporte y divertirse, esforzarse en mejorar o estar en forma, en disfrutar de los partidos; compartir experiencias con otros equipos, avances, estrategias, etc. Similar ejemplo con las empresas: cada una puede descubrir o innovar en algo y, al conocer todas las empresas esos avances, incorporarlos mejorando a la par.

2015-03-07

viernes, 7 de marzo de 2025

¿Invertir en armamento?

Turin Machine from the movie The Imitation Game


Lo de estar en contra de invertir en armamento se puede ver desde una perspectiva propia de quien puede profesar empatía, pero solo en casos de su interés, y no empatiza cuando se queja de que un representante político tenga seguridad, hasta que la persona que se queja o uno de los suyos está en una situación similar, en la que su casa tiene que estar protegida y debe convivir con resguardo policial por su propia seguridad, la de su familia o la de la gente que protesta en su contra. 

Si tenemos una sociedad donde todos son amables y respetan a los demás, ¿cómo nos protegemos de los externos? Es ingenuidad, falta de empatía y de previsión no pensar en ello ni actuar en consecuencia.

Por supuesto que hay otras perspectivas, pero resalto la que parece olvidarse. Claro que se debe invertir más en otras áreas como sanidad, educación, y justicia. ¿Acaso no se pueden encontrar áreas en común con estas áreas? ¡Imaginación y creatividad, por favor!

Invertir en armamento no significa invertir en destruir. Es falta de imaginación o una visión limitada pensar así, pues toda herramienta depende del uso que se le dé y no de la herramienta en sí. Que se use para destruir no quiere decir que sea la única forma de hacerlo. Es como si quisiéramos prohibir los cuchillos porque con ellos se puede matar personas.

La inversión en armas puede acogerse a dos enfoques con el fin de hacerlo de una mejor forma: 
  • a) Que no causen daño, como dispositivos que duerman a las personas en vez de quemarlas, o instrumentos que deshabiliten bombas enemigas.
  • b) Si se pueden prever beneficios añadidos a la sociedad, mejor aún. Mucha de la tecnología de uso común, como microondas, internet, WiFi y computadoras, tiene su origen o mejora en un entorno militar.
E incluso añadiría otras reglas por las que puede dirigirse un Estado:
  • Priorizar los negocios con empresas según este orden: locales, comunitarias, aliados y luego el resto.
  • Trabajar en la transformación de un Estado sustentado en impuestos hacia un Estado que obtiene dividendos. Que el Estado sea inversor en empresas con el fin de obtener ingresos, reduciendo así su dependencia de los impuestos y logrando ingresos a partir de la productividad de las empresas en las que ha invertido. Sí, los impuestos puede ser una forma más fácil de obtener ingresos pero entra en juego la percepción que se puede tener en la forma de obtenerlos o el nombre que lo representa como: impuesto vs dividendo, lo que me trae a la mente otros términos usados en otras áreas como gratuito vs gracias a los contribuyentes, inversión vs gasto, presupuesto vs gasto; el nombre toma importancia en la percepción.

domingo, 25 de septiembre de 2022

More inefficient when we take on more projects

When we work in two projects, and we swap from one to the other we have a cost. We know that two times 50% equal 100%, but it is not always as a valid analogy to use in some context. When two people work half time that not necessary mean one person can do the same work in a day.
"While it takes one woman nine months to make one baby, nine women can't make a baby in one month."

From Brooks's Law
At the end of the former century it was when we use the term multitasking operatins system with computers that only had one CPU. It appears to work in many tasks at the same time but it is not. What really happen is the CPU work in one task A during certain time, save the status of the task A, then start or continue with a task B during certain time, and so on. That means the computer works for a lapse of time in one task at a time and then in another, then to finish one task it could takes many work lapses on the task. This happen so quickly that seems to do many tasks at the same time. But this context switching have a cost.

Multitasking is not as effective as appears

Also, people must let all ready to continue a tasks in the future when is stoping a current task that is not finished yet. Then when they retake on the task it would be easier to continue and to go in a flow state, be productive. Sometimes to change context is necessary to refresh ideas, let time to creativity, have other perspectives. This is context switching in order to rest some area that need it. If the sight sense is tired then to move to other project does not mean to rest the sight if both projects need an effort of sight.

For each additional project someone undertakes, he lose up 20% of his time to the act of context switching. (1). In the next figure we can see if we work in three projects we lost up 40% in context switching instead of doing the work then the time to work would be 20% to each project instead 33,33%.
  • (100% – 20%) / 2 = 40% available to each of the 2 projects.
  • (100% – 40%) / 3 = 20% available to each of the 3 projects.
  • (100% – 60%) / 4 = 10% available to each of the 4 projects.
  • (100% – 80%) / 5 = 4% available to each of the 5 projects.

From the side of a client we can think about if we hire someone who is working in many projects, as more they would be less would be the time to our project (it could affect in quality or the time to finish the work).

How to cut the cost of switching context?

First at all, we can delegate, pospone, do it. For a company to delegate would be assigned it to a free group. Same as a computer uses more than one CPU.

If we will work on several project then we need to find a way to do the context switching efficiently, to reduce as much as posible the cost and to do a quick switching and continue where it was paused. We can learn agile frameworks and metrologies where it is used small task that are atomised, that meas they are divided in small tasks, detailed, understandable to not lost time understanding what is the task and if something is necessary, they have an precisely action to do.

Brooks' Law is about projects that are behind schedule and if we add manpower, it will cause them to be further behind schedule. Then when we can add manpower at the beginning of a project with less cost than if we do it in a later time. More later more cost. Also, there are tasks that can do new manpower and it does not necessary cause delay to the project because these tasks are complementary, do not have an impact in others tasks, need to be started, are not complex.

Just as two part-time people do not necessarily do the work of one. If both people are inexperienced, neither full-timer will do the job of a part-time expert. For this reason, introducing highly qualified personnel, without being more than necessary, can shorten times if it does not entail the incorporation of other techniques, methodologies whose use or learning of these is another impediment. The knowledge of the tools, knowledge about the needed area, similar projects, etc. have a great influence.

So, do not make the mistake of lightly using an engineer, architect, programmer as any other resource (a battery) as a replacement for another without this causing a cost. If in the change of a battery can be repercussions then there can be much more repercussions in the change of people. And the more specialised or complex the project, the more notorious the change in human resources.

References

(1) Gerald Marwin Weinberg. An Introduction to General Systems Thinking.
Don McGreal, Ralph Jocham. The Professional Product Owner.

sábado, 24 de septiembre de 2022

How to hide toolbar buttons in Autodesk Forge Viewer?

 



First, we can print in console the toolbar variable in order to show controls values. These are the sections of the toolbar.


Each control:

  • navTools
  • measureTools
  • modelTools
  • settingsTools
Then, if we expand one of them we can see the buttons inside controls. 


To hide or to remove the camera button we can do this:

this.viewer.toolbar.getControl('navTools').removeControl('toolbar-cameraSubmenuTool');

Let's remove some more buttons and see how it is showed.

this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-propertiesTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-modelStructureTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-settingsTool');
this.viewer.toolbar.getControl('modelTools').removeControl('toolbar-explodeTool');




jueves, 22 de septiembre de 2022

¿Cómo ocultar botones de la barra de menú de Autodesk Forge?

 



Podemos empezar imprimiendo en consola la variable toolbar para ver los valores de controls. Los cuales son las secciones en las que se divide la barra.


Podemos ver que  cada sección se llama:

  • navTools
  • measureTools
  • modelTools
  • settingsTools
Y si expandimos una de ellas podemos ver que dentro encontramos controls donde está cada botón de la sección. 


Es decir, si queremos ocultar la cámara de la primera sección tenemos que hacer algo como:


this.viewer.toolbar.getControl('navTools').removeControl('toolbar-cameraSubmenuTool');

Vamos a ocultar algunas más y ver el resultado.

this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-propertiesTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-modelStructureTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-settingsTool');
this.viewer.toolbar.getControl('modelTools').removeControl('toolbar-explodeTool');




miércoles, 8 de junio de 2022

Script para reiniciar audio en Mac

Para restablecer el sistema de audio en OS X, la forma en la que lo hacía era buscar el comando para ejecutarlo desde terminal.

sudo -s killall coreaudiod

Dado que he necesitado varias veces hacerlo y no recuerdo el mandato lo asigno a un atajo de teclado.

  • Abrir Automator para crear un servicio. Escoger opción "Quick Action"
  • Agregar el paso "Run Shell Script"
  • Escribir el código:
osascript -e 'do shell script "sudo -s killall coreaudiod" with administrator privileges'
  • Indicar "no input" en cualquier aplicación como entrada a recibir
  • Guardar
(De esta forma se ejecuta el comando solicitando la contraseña necesaria para aprobar la acción)



Para agregar un atajo de teclado
  • Ir a Preferencias del sistema - Teclado - Atajos - Servicios
  • En el listado debe estar el script creado anteriormente (Una vez creado como Acción rápida y guardado con el nombre indicado se muestra en esa sección) Agregar una combinación de teclas a utilizar para ejecutar el script.

Una vez hecho todo esto al usar el atajo de teclado se ejecuta el script solicitando la autorización necesaria.