Archivo de la categoría: Software

Second life, Apple y su nuevo procesador

Apple presentó ayer su nuevo procesador, denominado M1, dando por finalizada su sociedad con Intel como proveedor de procesadores para la línea MAC de PCs de escritorio y portátiles.

Dejando de lado las especificaciones técnicas (pros y contras) de estos nuevos procesadores M1, solo voy a decir que los mismos están basados en la arquitectura ARM (set de instrucciones RISC), al igual que los procesadores ampliamente utilizados en los dispositivos mòviles (PADs, Tabletas, Teléfonos celulares, etc.). Leer Mas...

No aclares que oscurece

El título del artículo es producto del clamor popular de mis únicos dos seguidores que me han pedido escribiera algo al respecto.

Aclarado esto, vamos al tema que nos convoca: en el día de hoy, en el blog oficial de Second Life, Oz Linden publicó una explicación/aclaración respecto de los fallos ocurridos en estos últimos días. Si bien es encomiable el intento, a varios nos ha dejado la sensación de haber dicho mucho para terminar diciendo nada. Esto es, no veo que haya dicho algo que ya no supiéramos o imagináramos. En todo caso, a la hora de exponer los motivos de las causas que motivaron los problemas que hemos tenido los usuarios, no hubo ninguna aclaración importante al respecto, solo vagas referencia a «vimos que era», «lo solucionamos», etc. etc. Leer Mas...

Second Life: Época de fallos

En estos días arrecian los fallos en la plataforma Second Life. A los habituales y que ya nos hemos acostumbrado, se sumaron, paulatinamente, otros fallos que siguen sin resolverse y se van acumulando en el tiempo, haciendo que nuestra experiencia en SL sea tortuosa, compleja, molesta y/o divertida, depende los ojos con que se mire.

Primero, pasemos a ver un detalle de los fallos que, al día de hoy (15/10/2020) tiene la plataforma (quizás cuando leas esto alguno ya haya sido resuelto y, quizás, haya algún fallo nuevo): Leer Mas...

Firestorm Project Inc.: 10 años

En el día de ayer, en su blog oficial, la gente del equipo del visor Firestorm, anunció sus 10 años de vida como proyecto.

Es increíble como pasa el tiempo. Pero, hagamos un poco de historia para aquellos que no conocen el camino del actual visor Firestorm:

La historia comienza allá por el año 2009 (quizas un poco antes), cuando en el horizonte de Second Life comienza a ganar prestigio el visor Emerald y que, rápidamente se convierte en el mas utilizado por los usuarios, debido a que incorporaba muchas funciones dispersas en otros visores y/o plugins (vía scripts lsl), como ser, el radar, algo que es normal en cualquier visor, no lo era en aquella época. Leer Mas...

Visor Firestorm: Versión 6.3.9

Hace minutos, el equipo de desarrollo de Firestorm ha lanzado la actualización de su visor a la versión 6.3.9.58205.

Es importante destacar que en esta versión se ha desdoblado el soporte para Second Life y Opensim, por lo tanto, si bien ambos desarrollados van a la par, se entregan por separado y deben ser instalados en distintas carpetas si se quiere tener acceso a ambas plataformas.

Esta actualización cuenta con las siguientes características:

* Se agregó un botón «Detener localmente» al Explorador de sonido.
* Se agregó un botón de búsqueda a los flotadores de sesión de chat local y mensajería instantánea
* Nuevas opciones agregadas al menú contextual de Búsqueda de área: «Seleccionar todo», «Borrar selección» y «Filtrar mis objetos».
* Muchas mejoras y correcciones de errores para el cliente AO de Firestorm, incluidas transiciones de animación más suaves y animaciones de natación más confiables.
* Se agregó la opción «Inspeccionar» para los propios archivos adjuntos.
* Habilitada la selección múltiple para todas las listas de nombres en los perfiles de grupo.
* Se actualizaron los fondos de imagen del instalador de Mac para facilitar la lectura y la coherencia.
* Se corrigió la imposibilidad de publicar instantáneas en Flickr.
* Se corrigieron las instantáneas de alta resolución que aparecían divididas en segmentos
* Manejo de memoria mejorado en el visor de Linux
* Muchas correcciones de fallos …
* Mejora del comportamiento en el cruce de regiones.
* Nueva función para bloquear y proteger una carpeta de inventario para evitar arrastrar y soltar accidentalmente o eliminar.
* Actualizaciones de traducción para alemán, polaco, japonés y ruso
* ¡Muuuucho más! Leer Mas...

Visor Singularity: Nueva Versión estable 1.8.9

Luego de mucho tiempo sin lanzar una versión estable (aunque se actualizó constantemente con versiones Alpha y Beta), el equipo de desarrollo del visor Singularity acaba de lanzar la nueva versión 1.8.9, la cual trae muchísimas novedades (respecto de la estable previa).

Y si bien, aquellos usuarios que están al día con este visor y lo actualizan periódicamente en sus versiones Alpha o Beta ya conozcan muchas de sus nuevas funcionalidades, aun hay otras que agregar y, además, para quienes no lo conocen o creen que no ha tenido actualizaciones, a continuación se detallan todas las nuevas funcionalidades de esta nueva versión: Leer Mas...

Second Life: Errores en el Marketplace

Desde hace unos días a esta parte muchos usuarios están teniendo problemas al intentar comprar productos en el marketplace de Second Life. En el caso mas notorio, al querer hacer el pago, la página retorna un «internal server error».

Esto es producto de un fallo en el sistema y, aparentemente, se da por un problema de en la base de datos o en las rutinas de manejo de idiomas, ya que el error se produce en aquellos productos que no tienen descripción. Pero, aquí lo interesante, las descripciones faltantes solo ocurren en los idiomas que no son inglés. Leer Mas...

Visor BlackDragon, Niran necesita ayuda

Quienes conocen y utilizan el visor Black Dragon se sorprenderán al leer este artículo, pero creo que es importante dar a conocer, a la comunidad de habla castellana, los problemas por los que atraviesa el desarrollo de este visor. Esto sin dejar de lado el hecho que, seguramente, es el mejor visor para la creación de fotos y videos dentro de Second Life, además de otras características únicas que le facilitan la vida a los fotógrafos y videógrafos del mundo virtual.

Sin mas discurso, transcribo a continuación el pedido de ayuda de NiranV en su blog para poder continuar con el desarrollo de este visor: Leer Mas...

Con las cartas sobre la mesa

En esta última semana, Hamlet Au (Wagner James en la vida real, y ex empleado de Linden Lab), en su blog New World Notes publicó un par de artículos hablando del visor oficial y el visor Firestorm, y lo que él llama «probablemente la más extraña relación simbiótica en Sillicon Valley«.

Dentro de este  contexto, se muestra una realidad, que es que el visor Firestorm, desde hace tiempo a esta parte, se lleva la parte del león en cuanto a base de usuarios que utilizan un cliente de Second Life para conectarse a dicho entorno virtual. Se calcula, según datos que Jessica Lyon dice haber recibido de Linden Lab, que hay alrededor de un 90% de usuarios de Second Life utilizando dicho visor (esto es real, aunque hay muchas consideraciones a tener en cuenta a la hora de evaluar estos datos). Leer Mas...

Second Life: Problema de comunicación entre scripts

La semana pasada el grid se vió afectado por un problema en la ejecución de scripts, específicamente cuando un objeto rezea otro y se establece una comunicación entre ambos (parent-child). Este problema, surgido luego de la actualización habitual de martes y miércoles, debió ser revertido por Linden Lab, de manera apurada, el pasado fin de semana (viernes y sábado) tuvo que reiniciar el grid para revertir los cambios y aplicar correcciones para solucionar el problema suscitado.

Ayer, en su blog oficial, Linden Lab emitió un comunicado explicando dicho problema, el cual se transcribe (traducido) a continuación:

Comunicaciones entre scripts  principal/secundario

Como parte de nuestros esfuerzos continuos para mejorar el rendimiento de los sctripts, recientemente realizamos cambios en cómo se programan los mismos y se entregan los eventos. Desafortunadamente, encontramos que esos cambios causaron la ruptura de algunos scripts ampliamente utilizados, lo que llevó a la reversión del estado del grid el sábado pasado. (Aparentemente tuvimos mala suerte en que hubiera poca cantidad de esos scripts en las regiones Release Candidate la semana anterior). Ahora hemos realizado mejoras adicionales que deberían evitar la mayoría de esos problemas, pero incluso con esas soluciones habrá algunos cambios en el tiempo y el orden de cómo se ejecutan los scripts. En general, esos cambios mejorarán el rendimiento, pero hay algunas mejores prácticas de secuencias de comandos que el usuario debería utilizar. Esto le ayudará a evitar depender de un orden o sincronización particular de entrega de eventos y ejecución de script.

Una causa común de problemas es la comunicación entre objetos inmediatamente después de que uno crea el otro. Cuando un objeto rezea a otro objeto en el mundo usando llRezObject o llRezAtRoot, los dos objetos con frecuencia necesitan comunicarse, ya sea a través de llamadas a llRegionSayTo o llGiveInventory. El objeto principal recibe un evento object_rez() cuando se ha creado el nuevo objeto, pero nunca es seguro asumir que los scripts en el nuevo objeto han tenido la oportunidad de ejecutarse cuando se entrega el evento object_rez. Esto significa que el nuevo objeto puede no haber inicializado su evento listen() o haber llamado llAllowInventoryDrop, por lo que cualquier intento de enviarle mensajes o inventario podría fallar. El objeto principal no debe comenzar a enviar mensajes ni a hacer un inventario del evento object_rez(), ni siquiera debe esperar un tiempo después de ese evento. En cambio, el objeto padre (rezzer) y el objeto hijo (rezzee) deben realizar una comunicación previa para confirmar que ambos lados están listos para cualquier transferencia.

La secuencia para este proceso es:

El objeto padre registra un evento de escucha usando llListen en un canal.
El objeto padre llama a llRezObject y pasa ese número de canal al nuevo objeto en start_param.
El objeto hijo crea un evento de escucha usando llListen en su controlador on_rez en el canal pasado como start_param.
El objeto hijo realiza cualquier otra configuración requerida para estar listo para cualquier comunicación que necesite con el objeto padre.
El objeto hijo envía un mensaje «listo» usando llRegionSayTo() en el canal asignado al objeto padre.
El objeto padre transfiere inventario o envía comandos de configuración a través de llRegionSayTo al objeto niño.
El objeto padre envía un mensaje de «hecho» al objeto hijo y ahora puede cerrar el canal de comunicaciones.
El objeto hijo recibe el mensaje «hecho» y ahora puede desmontar cualquier configuración que haya hecho para habilitar la configuración (como llamar a llAllowInventoryDrop( FALSE ) ).

Puedes ver el código de ejemplo de comunicación entre objetos padre e hijo a continuación.

Vale la pena señalar que este patrón de comunicación siempre ha sido la mejor manera de escribir tus scripts. Incluso sin los cambios en el planificador, el orden de cuándo se ejecutan los scripts en el nuevo objeto y cuándo se entregó el evento object_rez al rezzer no fue determinista. Parece cierto que hacer que el planificador sea más rápido ha hecho que esta condición de secuencia  sea algo menos predecible, pero hacer que todos los scripts se ejecuten con menos sobrecarga de programación vale la pena que el pedido sea un poco menos predecible, especialmente porque no estaba asegurado antes de todos modos. ¡Esperamos que estos nuevos cambios ayuden al mundo de todos a funcionar un poco más tranquilo! Para compartir tus pensamientos sobre esto, utiliza esta publicación del foro (En inglés).

Rezzer.lsl //////////////////////// // Rezzer script. // Rez' an object from inventory, establishes a communication channel and // gives the rezzed object inventory. // (Rezea un objeto desde su inventario (pestaña Contenido), establece un canal de comunicaciones y // entrega del inventario del objeto rezeado.) integer COM_CHANNEL=-17974594; // chat channel used to coordinate between rezzer and rezzee string REZZEE_NAME="Rezzee"; string CMD_REZZEE_READY = "REZZEE_READY"; string CMD_REZZER_DONE = "REZZER_DONE"; key rezzee_key; default { //... touch_start(integer count) { state configure_child; } //... } // rez and configure a child state configure_child { state_entry() { // where to rez vector position = llGetPos() + <0.0, 0.0, 1.0>; // establish rezzer's listen on the command channel llListen( COM_CHANNEL, "", "", "" ); // rez the object from inventory. Note that we are passing the // communication channel as the rez parameter. llRezObject(REZZEE_NAME, position, ZERO_VECTOR, ZERO_ROTATION, COM_CHANNEL); } object_rez(key id) { // the object has been rezzed in world. It may not have successfully // established its communication yet or done anything that it needs to // in order to be ready for config. Don't do anything till we get the signal rezzee_key = id; } listen(integer channel, string name, key id, string message) { if (message == CMD_REZZEE_READY) { // the rezzee has told us that they are ready to be configured. // we can sanity check id == rezzee_id, but in this trivial case that is // not necessary. integer count = llGetInventoryNumber(INVENTORY_NOTECARD); // give all note cards in our inventory to the rezzee (we could // do scripts, objects, or animations here too) while(count) { string name = llGetInventoryName(INVENTORY_NOTECARD, --count); llGiveInventory(id, name); } // And now tell the rezzee that we have finished giving it everything. llRegionSayTo(id, COM_CHANNEL, CMD_REZZER_DONE); // And we can leave configure child mode. state default; } } } Leer Mas...