Es/FlightGear Newsletter November 2013: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
(Introducing two new frameworks: traducido)
(Switch to {{gitorious source}} to fix the broken Gitorious links.)
 
(14 intermediate revisions by one other user not shown)
Line 2: Line 2:
{{TOC_right|limit=2}}
{{TOC_right|limit=2}}


''Nos gustaría enfatizar que el boletín de noticias mensual no podría ser posible sin los aportes de los usuarios de FlightGear y los desarrolladores. Cualquiera con una cuenta wiki (con libertad para registrarse) puede editar el boletín y toda contribución es bienvenida. Si conoces acerca de alguna noticia o proyecto relacionado a FlightGear tales como por ejemplo una actualización del escenario o avión, porfavor siéntete invitado a añadir esas noticias al boletín.''
''Nos gustaría enfatizar que el boletín de noticias mensual no podría ser posible sin los aportes de los usuarios de FlightGear y los desarrolladores. Cualquiera con una cuenta wiki (con libertad para registrarse) puede editar el boletín y toda contribución es bienvenida. Si conoces acerca de alguna noticia o proyecto relacionado a FlightGear tales como por ejemplo una actualización del escenario o alguna aeronave, porfavor siéntete invitado a añadir esas noticias al boletín.''


== Noticias del proyecto ==
== Noticias del proyecto ==
Line 38: Line 38:
Por favor, contáctate si tienes alguna pregunta o si te gustaría unirte en alguna forma.
Por favor, contáctate si tienes alguna pregunta o si te gustaría unirte en alguna forma.


=== Getting started with CppBind ===
=== Comenzando con CppBind ===
[[Nasal]], el lenguaje de scripting integrado en FlightGear, viene con un conjunto de librerías estándar y puede ser extendido usando las APIs específicas de FlightGear.


FlightGear's built-in [[Nasal]] scripting language comes with a set of standard libraries, and can be extended using FlightGear specific APIs.
Hasta FlightGear 2.8, el motor de scripting de [[Nasal]] sólo entragaba una API C para exponer ciertos vínculos (hooks, bindings) al espacio de scripting o para exponer estructuras de datos del espacio de scripting de regreso a C/C++.


Until FlightGear 2.8, the [[Nasal]] scripting engine only provided a C API to expose such hooks/bindings to scripting space or to expose scripting space data structures back to C/C++.  
Exponer el aspecto interno del simulador a un espacio de scripting es un asunto útil y bastante común, porque permite a los desarrolladores del paquete base acceder a estas partes internas sin tener que compilar FlightGear desde los fuentes, tal que la barrera de entrada es significativamente menor y hemos visto un incremento en el número de características novedosas implementadas completamente en el espacio de scripting, gracias a las poderosas APIs disponibles para desarrolladores de aeronaves y del paquete base.


Exposing simulator internals to scripting space is a fairly common and useful thing, because it enables base package developers to access these internals without having to build FlightGear from source, so the barrier to entry is significantly lower and we've seen an increasing number of novel features purely implemented in scripting space, due to powerful APIs being available to aircraft developers and other base package developers.
A diferencia del núcleo de Nasal, el cual está escrito en C, FlightGear está programado y siendo escrito principalmente en C++. Eso significa que, hace un tiempo, la API Nasal fue casi de "bajo nivel" y a veces también complicado de usar al crear funciones, estructuras de datos u objetos accesibles entre C++ y Nasal.
Unlike the core Nasal engine itself (which is C), FlightGear however is mostly written and being developed in C++. For quite a while, that meant that the Nasal APIs were a bit low-level, and sometimes also awkward to use when making functions, data structures or objects accessible between C++ and Nasal.


Thanks to Tom's [[Canvas]] system, there's now a new bindings framework to be found in simgear/nasal/cppbind. This is fully object oriented and supports modern C++ features.
Gracias al sistema [[Canvas]] de Tom, ahora hay un nuevo framework de vínculos que se encuentran en simgear/nasal/cppbind. Es completamente orientado a objeto y soporta características modernas de C++.


You will find that most of the "old" code in $FG_SRC/Scripting still uses those old C-APIs for interacting with the Nasal engine. Only the new code, #include'ing <simgear/nasal/cppbind>, uses boost templates to hide low level details.
Notarás que la mayoría del código "antiguo" en $FG_SRC/Scripting aún usa esas viejas APIs-C para interactuar con el motor Nasal. Sólo el nuevo código, #include'ing <simgear/nasal/cppbind>, usa las plantillas potenciadas que esconden los detalles de bajo nivel.


Most of the code in the Nasal subsystem itself (FGNasalSys) also still uses the legacy C APIs - this is just to explain the two approaches, to avoid unnecessary confusion. You will find the old, low-level APIs explained at [[Howto:Extend Nasal]].
La mayoría del código en el subsistema Nasal (FGNasalSys) también aún usa las APIs de C antiguas - esto es sólo para explicar las dos soluciones, para evitar confusiones innecesarias. Las antiguas APIs de bajo nivel las encontrarás explicadas en [[Howto:Extend Nasal]].


The cppbind framework is much more generic and high level than the bare C APIs, cppbind includes unit testing support and makes use of modern C++ features like templates and STL support, including SimGear specific types like SGPath/SGGeod etc, its overhead is fairly small (not just performance, but also LoC to create new bindings). The cppbind framework is already extensively used by the Canvas system and the NasalPositioned_cppbind bindings, both of which are a good place to look for code examples.
El framework CppBind es mucho más genérico y de alto nivel que las APIs C puras, cppbind incluye soporte para pruebas unitarias y hace uso de características modernas de C++ como templates y soporte STL, incluyendo tipos específicos de SimGear como SGPath/SGGeod, etc, su gasto es bastante pequeño (no sólo rendimiento, sino también líneas de código para crear nuevos vínculos). El framework cppbind ya es extensamente usado por el sistema Canvas y los vínculos NasalPositioned_cppbind, ambos muy buenos lugares para buscar ejemplos de código.


Continue reading at [[Nasal/CppBind]]...
Continúa leyendo en [[Nasal/CppBind]]...


=== JSBSim Flight Dynamics Model Validation Effort ===
=== Trabajo de Validación del Modelo de Dinámica de Vuelo JSBSim ===
[[JSBSim]] (one of the flight dynamics models featured in FlightGear) is currently being validated against a set of simulations used at various NASA centers. A set of check cases is under development and is expected to be published next year. The check cases are numerous and rigorous and encompass both atmospheric and orbital scenarios. Early comparisons between JSBSim and the other simulations show very good matching for the atmospheric cases compared so far.
[[JSBSim]] (uno de los modelos de vuelo presentes en FlightGear) actualmente está siendo validado en función de un conjunto de simulaciones en varios centros de la NASA. Un conjunto de casos de verificación está bajo desarrollo y se espera que sean publicados el próximo año. Los casos de verificación son numerosos y rigurosos, y abarcan escenarios atmosféricos y orbitales. Las primeras comparaciones entre JSBSim y las otras simulaciones muestran una muy buena concordancia para las pruebas atmosféricas realizadas hasta ahora.


=== New Control System Component in JSBSim ===
=== Nuevo Componente del Sistema de Control en JSBSim ===
A new control system component has been added recently to JSBSim. It is called the distributor component. This article is a quick introduction to the distributor component, and it includes a description on one way that it has been used.
Un nuevo componente del sistema de control ha sido añadido recientemente a JSBSim. Este es llamado el componente distribuidor. Este artículo es una introducción rápida al componente distribuidor, e incluye una descripción de una forma en la que ha sido usada.
You may know that the switch component features a default value that the switch takes if none of the test conditions evaluate to true. The first test condition that evaluates to true also dictates the value that the switch takes.
Sabemos que el componente switch posee un valor por defecto, tal que el switch toma ese valor por defecto si ninguna de las condiciones de prueba se cumple. Además, la primera condición de prueba que resulta verdadera determina el valor que toma el switch.
With the distributor component, the component does not take on a value of its own (in fact, the value of the component – which still must be named – is always zero).
Con el componente distribuidor, el componente no toma un valor por sí mismo (de hecho, el valor del componente - el cual todavía debe ser indentificado - es siempre cero).


The exact syntax of the distributor component is as follows:
La sintáxis exacta del componente distribuidor es la siguiente:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<distributor name="name/is/irrelevant" type="exclusive|inclusive">
<distributor name="name/is/irrelevant" type="exclusive|inclusive">
Line 83: Line 82:
   </case>
   </case>


   ... <!-- Additional optional cases -->
   ... <!-- Casos opcionales adicionales -->


</distributor>
</distributor>
</syntaxhighlight>
</syntaxhighlight>
There’s more to this, though, as this is one of the more capable, but complex, components in the set of JSBSim control system components. The distributor component features one or more <case> elements. Each <case> element may contain a <test> element (which may contain either conditional test statements, or one or more nested tests). Each <case> element will also contain one or more property statements with a value to be set. A <case> element with no tests will always be executed (have its property values set as stated). A distributor component can have a type of either exclusive or inclusive. An exclusive distributor will only execute the first <case> element that is encountered that has a test that evaluates to true. An inclusive distributor will execute all <case> elements for which the supplied test evaluates to true. In both cases, any and all <case> elements that have no tests will always be executed in the order that they are encountered.  
Este es uno de los más potentes, pero complejos, componentes en el conjunto de componentes de control de JSBSim. El componente distribuidor posee uno o más elementos <case>. Cada <case> puede contener un elemento <test> (el cual puede contener sentencias de prueba condicional, o uno o más <test> anidados). Además, cada <case> tendrá una o más propiedades con un valor a ser establecido. Un elemento <case> sin <test>'s siempre será ejecutado (los valores de sus propiedades son según se estableció). Un componente distribuidor puede tener tener un tipo exclusivo o inclusivo. Un distribuidor exclusivo sólo ejecutará el primer elemento <case> que resulte verdadero. Un distribuidor inclusivo, ejecutará todos los elementos <case> para el cual la prueba resulte verdadera. En ambos casos, todos y cada uno de los elementos <case> que no tengan test siempre serán ejecutados en el orden en que son encontrados.
Each <case> element will have one or more property values to be set, and each <case> element does not need to feature the same set of properties to be set.
Cada elemento <case> tendrá  uno o más valores de propiedad a ser fijadas, y cada elemento <case> no necesita poseer el mismo conjunto de propiedades a ser establecido.


This component is very useful in cases where (for example) guidance, navigation, and control laws are defined, where - for certain modes of operation - various control system approaches and target values must be set simultaneously. The distributor component can also serve as a sort of relay, featuring a <case> element with no test, and several <property> elements.
Este componente es muy útil in casos donde (por ejemplo) la guía, navegación y leyes de control están definidos, donde - para ciertos modos de operación - varias estrategias de sistemas de control y valores objetivo deben ser fijados simultáneamente. El componente distribuidor puede también servir como una suerte de relé, presentando un elemento <case> sin test, y varios elementos <property>.
Here’s an example where one might have a set of sequential “modes” that a launch vehicle might cycle through in order during ascent:
Acá hay un ejemplo donde se podría tener un conjunto de “modos” secuenciales que un vehículo de lanzamiento podría recorrer en orden ascendente:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<?xml version="1.0"?>
<?xml version="1.0"?>
Line 166: Line 165:
   </channel>
   </channel>
</syntaxhighlight>
</syntaxhighlight>
As you can see, each mode occurs sequentially and causes a number of properties to be set for each case. Note also the definitions used in the various elements and attributes – these can be used to make the code more readable and comprehensible. Definitions (similar to #defines in C/C++) are declared at the top of the file using the !ENTITY construct.  
Como puedes ver, cada modo ocurre secuencialmente y provoca que un número de propiedades sea fijada en cada elemento <case>. Nótese también las definiciones usadas en los elementos y atributos - estos pueden ser usados para hacer el código más legible y comprensible. Definiciones (similar a #defines en C/C++) son declarados al principio del archivo usando el constructor !ENTITY.


=== FGRun repository changes ===
=== Cambios en el repositorio FGRun ===
The [http://gitorious.org/fg/fgrun FGRun Git repository] now uses the same branch concept as FlightGear and SimGear. Current development takes place in the <code>next</code> branch, while <code>release/X.X</code> branches are created for each release. In addition to that the FGRun version number is now in sync with FlightGear/SimGear, to make it easier to see whether your FGRun and FlightGear builds match.
El {{gitorious source|proj=fg|repo=fgrun|text=repositorio Git FGRun}} ahora usa el mismo concepto de branch que en FlightGear y SimGear. El desarrollo actual toma lugar en la rama <code>next</code>, mientras que las ramas <code>release/X.X</code> son creadas para cada versión. Además, el número de versión de FGRun ahora está sincronizado con FlightGear/SimGear, para poder ver más fácilmente si tus compilaciones de FGRun y FlightGear coinciden.


=== The Walker ===
=== El Walker (transeúnte) ===
The Walker is currently made portable to be easily incorporated in arbitrary aircraft. Additionally, an animatable pilot model for cockpit placement is in development. Walker and crew will be supporting different hand poses, such as pointing, a fist, thumbsup or a victory sign.
El Walker o transeúnte, actualmente está siendo portado para ser fácilmente incorporado en una aeronave arbitraria. Adicionalmente, está en desarrollo un modelo de piloto animado para la carlinga. El Walker y la tripulación soportarán diferentes poses de manos, tales como apuntar, puño, gesto de aprobación o signo de victoria.


[[File:Walker Waldo.png|400px|The male Walker]] [[File:Walker Amelie.png|400px|The female Walker]]
[[File:Walker Waldo.png|400px|La transeúnte femenina]] [[File:Walker Amelie.png|400px|El transeúnte masculino]]


[[File:Walker pilot model.png|400px|A pilot model, co-pilot and crew are to come.]] [[File:Walker hand poses.png|x211px|Hand Poses that will be selectable within the animation dialog]]
[[File:Walker pilot model.png|400px|Un modelo de piloto, copiloto y tripulación están por llegar.]] [[File:Walker hand poses.png|x211px|Poses de manos que serán seleccionables en la ventana de animación]]


=== Getting involved as a programmer ===
=== Unirse como programador ===
Unfortunately, most of the active FG developers are currently very overstretched in terms of the areas that they have ownership of, which is affecting how much can actually be done. Fundamentally we need more core devs.
Desafortunadamente, la mayoría de los desarrolladores activos de FG actualmente están muy agobiados con sus otras responsabilidades, lo cual afecta a cuanto realmente podemos hacer. Fundamentalmente, necesitamos más desarrolladores del núcleo.  


If you are interested in contributing as a core developer, please see [[Howto:Start core development]].
Si estás interesado en aportar como un desarrollador del núcleo, por favor lee [[Howto:Start core development|Comenzar como desarrollador del núcleo]].


== Nasal Internals for hackers: Intern'ing symbols ==
== Internals de Nasal para hackers: internando símbolos ==
''Contributed by Philosopher''
''Aportado por Philosopher''


As some of you experienced Nasal/C-code hackers should recall, or even those familiar with scripting languages internals, namespaces are just hashes, with keys representing symbols - right? Well yes, mostly, but each of those symbols are unique in a way from all of the other strings out there: they're interned. (Interning is a process that takes strings and a dictionary and returns a matching string, adding one if needed. That means equal strings are substituted so they have the same pointer, i.e. one string represents all instances of "io", stored in a pool/hash of all used symbols.) Though these interned strings appear at runtime in the keys in namespaces, they get created during code generation (codegen), where the symbols (TOK_SYMBOL) get converted to Nasal strings, are interned to get the correct string (using the globals->symbols hash), and are stored in the naCode's constants' block. From there, the symbol-strings are used to set and get various lvalues (both local/global symbols and objects' members) in an optimized way (that's the whole point of the exercise). Looking at hash.c, there are some specialized functions that make use of the potential optimizations:
Como algunos de ustedes, experimentados hackers de Nasal/C podrán recordar, o incluso aquellos familiarizados con los detalles de los lenguajes de script, los namespaces son sólo tablas de hashing con llaves que representan símbolos - correcto? Ok bien, practicamente, pero cada uno de esos símbolos son únicos en una forma distinta a todos los otros strings que hay ahí afuera: ellos son internos. (El interning es un proceso que toma strings y un diccionario y retorna una cadena coincidente, añadiendo uno si es necesario). Eso significa que las cadenas iguales son sustituidas tal que tienen el mismo puntero, por ejemplo, un string representa todas las instancias de "io", almacenado en un pool/hash de todos los símbolos usados.) Aunque estas cadenas internadas aparecen en tiempo de ejecución en las keys de los namespaces, ellas se crean durante la generación del código (codegen), donde los símbolos (TOK_SYMBOL) que son convertidos a cadenas Nasal, son internadas para obtener la cadena correcta (usando el globals->symbols hash), y son almacenadas en el bloque de constantes de naCode. Desde allí, los symbol-strings son usados para establecer y obtener varios lvalues (ambos simbolos locales/globales y miembros de objeto) en una forma optimizada (esa es la idea principal del ejercicio). Mirando el hash.c, hay varias funciones especializadas que hacen uso de potenciales optimizaciones:


* naiHash_sym (looks up an interned symbol)
* naiHash_sym (busca un símbolo internado)
* naiHash_newsym (adds a symbol in the first empty slot for the hashcode)
* naiHash_newsym (añade un símbolo en el primer slot vacío del hashcode)


(There's another that looks similar, naiHash_tryset, but it does not deal with interned symbols: it uses the findkey() method, which in turn uses the equals() method that checks for more general key equality instead of simple pointer equality.)
(Hay otro que se parece, naiHash_tryset, pero este no maneja símbolos internados: este usa el método findkey(), el cual a su vez usa el método equals() que comprueba una llave de igualdad más general en vez de simplemente la igualdad de punteros.)


The first, naiHash_sym, is pretty neat and the prime example of the optimization: it runs through a hashcode's potential slots, checking only pointer equality (note that interned symbols' hashcodes are computed during interning, so that's another step that doesn't have to be done are runtime). naiHash_newsym is another nice optimization but a little problematic, due to its assumption that the key doesn't exist already. It's basically used for adding another argument as a local key, but it doesn't care about if it exists already, it just sees an occupied slot and keeps going. Consider the following example that illustrates calling with an argument into a hash that already has the argument's key in it:
Lo primero, naiHash_sym, es bastante claro y el supremo ejemplo de la optimización: este corre los slots del hashcode, comprobando sólo la igualdad de punteros (nótese que el hashcode de los símbolos internados son calculados durante la internación, por lo que es otro paso que no es necesario realizar en tiempo de ejecución). naiHash_newsym es otra buena optimización pero un poco problemática, debido a que asume que la llave ya no existe. Básicamente se utiliza para añadir otro argumento como una llave local, pero no le importa si ya existe, sólo ve un slot ocupado y continúa. Considera el siguiente ejemplo que ilustra la llamada con un argumento en un hash que ya tiene la llave del argumento en él:


<syntaxhighlight lang="nasal">
<syntaxhighlight lang="nasal">
Line 204: Line 203:
</syntaxhighlight>
</syntaxhighlight>


This should print:
Esto mostraría:
<pre>
<pre>
arg
arg
Line 211: Line 210:
</pre>
</pre>


This shows that the key is being set twice (which violates a normal precondition of hashes): once as an argument and once to create an existing key in the namespace. The one set first is the one being picked up (e.g. the arg in {arg:nil} versus the arg... that equals []). And this behavior persists even through resizing: hashset() (which is used to reinitialize a hash after reallocation) only keeps appending keys in empty slots, so the number of keys doesn't change (even if there are multiple of the same keys).
Esto muestra que la llave está siendo establecida dos veces (lo cual viola la condición de las tablas de hashing): una vez como argumento y otra vez para crear una llave existente en el espacio de nombres. El primer set es el que está siendo recogido (por ejemplo, el arg en {arg:nil} versus el arg... que iguala []). Y este comportamiento persiste incluso a través del redimensionado: hashset() (el cual es usado para reiniciar un hash después de la redistribución) sólo sigue añadiendo llaves en slots vacíos, tal que el número de llaves no cambia (incluso si hay varias de la mismas llaves).  


For this reason, I would suggest amending naiHash_newsym to check keys' pointer equality before continuing; that way symbols aren't "trodden" over like this. (Please note that if "arg" exists in the hash as non-interned, then it will be trodden over anyways; having to look for non-interned symbols would mainly violate the point of the optimization at this step, and doesn't actually matter in the long run.) I would argue that finding an existing key (a few simple pointer comparisons!) would be more efficient generally, because the hash would never need to be resized if an existing one is found, whereas the old version would append regardless. (I think I once counted well over a hundred "arg" symbols in the __js0 namespace from the continual firing of bindings, which obviously isn't good.)
Por esta razón, sugeriría modificar el naiHash_newsym para comprobar la igualdad de punteros de las llaves antes de continuar; de esa forma los símbolos no son "pisados" como acá. (Por favor considera que si "arg" existe en el hash como un no-internado, entonces éste será pisado de todos modos; tener que buscar símbolos no internados principalmente violaría el punto de la optimización en este paso, y a la larga realmente no importa.) Yo sostendría que encontrar una llave existente (¡unas simples comparaciones de punteros!) generalmente sería más eficiente, porque el hash nunca necesitaría ser redimensionado si encuentra uno existente, mientras que la vieja versión añadiría de todas formas. (Creo que una vez conté más de cien símbolos "arg" in the namespace __js0 desde el continuo lanzamiento de vínculos, lo cual obviamente no es bueno.)


Continue reading at [http://forum.flightgear.org/viewtopic.php?f=30&t=21308&p=193935#p193935].
Continúa leyendo en [http://forum.flightgear.org/viewtopic.php?f=30&t=21308&p=193935#p193935].


== FlightGear addons and mods ==
== Addons y mods para FlightGear ==
=== New textures and lightmaps for random buildings ===
=== Nuevas texturas y luces para edificios aleatorios ===
[[File:Lightmap terrain at noon.png|thumb|220px|Lightmap terrain at noon]]
[[File:Lightmap terrain at noon.png|thumb|220px|Luces del terreno al mediodía]]
[[File:Lightmap terrain at night.png|thumb|220px|Lightmap terrain at night]]
[[File:Lightmap terrain at night.png|thumb|220px|Luces del terreno en la noche]]
The urban lightmap works using a modified urban shader + modified urban effect, the modified files need to be improve to make work the original urban shader when the random building function is off and enable new shader when the random building function is on.
Las luces urbanas trabajan usando un sombreado urbano modificado + efecto urbano modificado, los archivos modificados necesitan ser mejorados para hacer funcionar el sombreado urbano original cuando la función de edificios aletorios está desactivada y habilitar el nuevo sombreado cuando la función de edificios aleatorios está activada.


Installation:
Instalación:
# Download from [https://www.dropbox.com/s/r3o06xtxn9gp27m/New_Urban_effects.zip here]
# Descargar desde [https://www.dropbox.com/s/r3o06xtxn9gp27m/New_Urban_effects.zip acá]
# Unzip the file
# Descomprimer el archivo
# Copy, paste and replace
# Copia, pega y reemplaza
#* urban.eff at [[$FG_ROOT]]/Effects/
#* urban.eff en [[$FG_ROOT]]/Effects/
#* urban.frag , urban-gbuffer.frag and urban-lightfield.frag at $FG ROOT/Shaders/
#* urban.frag , urban-gbuffer.frag y urban-lightfield.frag en $FG_ROOT/Shaders/
#* buildings.png and buildings-lightmap at $FG ROOT/Textures/
#* buildings.png y buildings-lightmap en $FG_ROOT/Textures/
# I suggest to change the random building density to the middle of your computer default settings, you can make this by edit at [[FlightGear configuration via XML|autosave.xml or autosave_2_12.xml]] (depend your version), at the line "<building-density type="double">1</building-density>"
# Sugiero cambiar la densidad de los edificios aleatorios a la mitad de la configuración por defecto de tu equipo, puedes hacerlo editando el archivo [[FlightGear configuration via XML|autosave.xml o autosave_2_12.xml]] (dependiendo de tu versión), en la línea "<building-density type="double">1</building-density>"


If you want to go back to the default effects, please download [https://www.dropbox.com/s/75jodt5psqc5yzl/Default_eff.zip this package] and follow the installation instructions again.
Si quieres volver a los efectos por defecto, por favor descarga [https://www.dropbox.com/s/75jodt5psqc5yzl/Default_eff.zip este paquete] y sigue las instrucciones de instalación nuevamente.


<gallery>
<gallery>
Line 242: Line 241:
</gallery>
</gallery>


== In the hangar ==
== En el hangar ==
==== Tupolev Tu-134 ====
==== Tupolev Tu-134 ====
[[File:Tu134_aeroflot.png|thumb|270px|The "whistle" taking speed for take-off.]]
[[File:Tu134_aeroflot.png|thumb|270px|El "whistle" tomando velocidad para despegar.]]
[[File:Tu-134 liveries nose.gif|thumb|270px|You can choose one of the 3 noses.]]
[[File:Tu-134 liveries nose.gif|thumb|270px|Puedes escoger uno de tres radomos.]]
The [[Tupolev Tu-134]] development team proudly announce a new soviet airliner for FlightGear! Some have already read a topic about it at the forum. The release of version 1.0 is available for download [https://www.dropbox.com/s/kskswdwm0ue3xj1/Tu-134.zip from here]. This YAsim aircraft has a very good FDM, great exterior and a basic cockpit. To contribute (improve the cockpit for example) contact us at the [http://forum.flightgear.org/viewtopic.php?f=4&t=15908 forum]
El equipo de desarrollo del [[Tupolev Tu-134]] orgullosamente anuncia una nueva línea aérea soviética para FlightGear! Algunos ya han leído el topic acerca de él en el foro. El lanzamiento de la versión 1.0 está disponible para descargar [https://www.dropbox.com/s/kskswdwm0ue3xj1/Tu-134.zip desde acá]. Esta aeronave YASim tiene un muy buen [[:es:FDM|FDM]], bello exterior y una carlinga básica. Para aportar (a mejorar la carlinga, por ejemplo) contactanos en el [http://forum.flightgear.org/viewtopic.php?f=4&t=15908 foro].


{{#ev:youtube|IbUMgRvEih0}}
{{#ev:youtube|IbUMgRvEih0}}
Many thanks to Helijah, Buckaroo, Cossack90.


=== New aircraft ===
Muchas gracias a Helijah, Buckaroo y Cossack90.
Not an aircraft but a cruise ship, Oasis of the Seas has been released to the public and getting updates, it's sister ships and ferries are coming in from the ACJZA Hangar as well! If you have any skill with coding, it'll be thankful if you could help me. More information and download at [http://forum.flightgear.org/viewtopic.php?f=4&t=21277 the forum topic]


=== Updated aircraft ===
=== Nueva aeronave ===
No una aeronave sino un crucero, Oasis de los Mares ha sido lanzado al público, estas naves y ferries vienen del Hangar ACJZA también! Si tienes alguna habilidad para programar, estaré agradecido de que me puedas ayudar. La descarga y más información la encontrarán en [http://forum.flightgear.org/viewtopic.php?f=4&t=21277 el foro].
 
=== Aeronave actualizada ===
==== Eurocopter EC130-B4 Ecostar ====
==== Eurocopter EC130-B4 Ecostar ====
[[File:EC130 MedFlight N130NE.jpg|thumb|The EMS variant of EC130-B4, used by MedFlight, Ohio, USA]]
[[File:EC130 MedFlight N130NE.jpg|thumb|La variante EMS del EC130-B4, usado por MedFlight, Ohio, USA]]
[[File:EC130 Grand Canyon Helicopters.jpg|thumb|New Livery of Grand Canyon Helicopters]]
[[File:EC130 Grand Canyon Helicopters.jpg|thumb|Nueva librea de Helicópteros Gran Cañón]]
[[File:EC130 Mainrotor front.png|thumb|Closeup of EC130 Mainrotor, fully animated in all details]]
[[File:EC130 Mainrotor front.png|thumb|Primer plano del rotor del EC130 , completamente animado en todos los detalles]]
[[File:EC130-B4 MedFlight using SX-16 Nightsun.jpg|thumb|EC130 Helicopter using the SX-16 Nightsun searchlight]]
[[File:EC130-B4 MedFlight using SX-16 Nightsun.jpg|thumb|EC130 usando el reflector SX-16 Nightsun]]
[[File:EC130 Pilot window.jpg|thumb|Even the pilot window can be opened now]]
[[File:EC130 Pilot window.jpg|thumb|Ahora, incluso la ventana del piloto puede ser abierta]]


The [[Eurocopter EC130 B4]] helicopter is on short final for a new major upgrade.  
El helicóptero [[Eurocopter EC130 B4]] está a poco de una nueva gran actualización.
The existing model, which already had been of very high quality, has been refined in various aspects with lots of effort by '''mhab'''. The outside model has been enriched to a degree which should justify a '''''5*''''' rating and the overall status of the aircraft improves to "'''''production'''''".  
El modelo existente, el cual ya tenía una muy alta calidad, ha sido refinado en varios aspectos con mucho esfuerzo de '''mhab'''. El modelo exterior ha sido enriquecido a un grado que justificaría una votación de '''''5*''''' y un cambio del estatus de la aeronave a "'''''production'''''".


The '''Rotorhead''' has been brought to a new level of detail, a full detailed '''Fenestron''' was added and animations were introduced to all moving parts.  
El '''Rotorhead''' ha sido llevado a un nuevo nivel de detalle, y un '''Fenestron''' completamente detallado fue añadido y las animaciones fueron introducidas a todas las partes móviles.


'''Cockpit''' was enriched for Pilot/Copilot controls, seats are textured now and a variable cabin configuration allows to set up an '''Emergency Medical Services (EMS) variant''', which comes preconfigured with a new Livery of '''N130NE MedFlight''' (Ohio).
La '''carlinga''' fue enriquecida para los controles del piloto/copiloto, ahora los asientos son texturados y una configuración de cabina variable permite montar una variante '''Servicios Médicos de Emergencia (EMS)''', el cual viene preconfigurado con una nueva librea de '''N130NE MedFlight''' (Ohio).


Fans of '''Grand Canyon Helicopters''' now find a livery of the N155GC and the colorful painting in red/gold.
Los fanáticos de '''Helicópteros Gran Cañón" ahora encontrarán una librea del N155GC y la colorida pintura rojo/dorado.


A lot of '''equipment''' (most of which was there already but hidden) can now be used, including a full blown '''SX16-Nightsun searchlight'''.
Un montón de '''equipo''' (la mayoría del cual estaba ahí pero escondido) ahora puede ser usado, incluyendo un verdadero '''foco SX16-Nightsun'''.


All of this has been brought together in a fully integrated configuration dialog which allows to set-up livery, fuel, extra views, weights, cabin setup and equipment.
Todo esto ha sido realizado en una configuración completamente integrada para ser manipulado mediante una ventana que permite cambiar las libreas, combustible, vistas extras, pesos, configuración de cabina y equipamiento.


Extra gimmics include a fully animated pilot, glass reflection on windows and front shield and variable rotor wakes depending on the strength of the downwash.
Los artilugios extras incluyen un piloto completamente animado, reflejos en las ventanas y parabrisas frontal, y el rotor variable dependen de la fuerza de la corriente descendente.


'''If you can't wait''' for the next release '''[https://gitorious.org/ec130/ check it out from the Git-Hangar]'''
'''Si no puedes esperar''' hasta el lanzamiento, '''{{gitorious source|proj=ec130|repo=ec130|text=dale un vistazo al Git-Hangar}}'''


<gallery>
<gallery>
File:EC130 Fenestron.jpg|A closeup of the full detailed fenestron
File:EC130 Fenestron.jpg|Un primer plano del Fenestron completamente detallado
File:EC130 snowshoes hook.jpg|EC130 fitted with snowshoes and hook
File:EC130 snowshoes hook.jpg|EC130 equipado con patines para nieve y gancho
File:EC130 cabin seats.jpg|EC130 Grand Canyon Helicopters cabin and pilots' controls
File:EC130 cabin seats.jpg|EC130 Cabina y controles del piloto del Grand Canyon Helicopters  
File:EC130 stretcher.png|EC130 cabin configuration (EMS) with stretcher
File:EC130 stretcher.png|EC130 Configuración de cabina EMS con camilla
File:EC130 luggage door back.jpg|EC130 luggage door
File:EC130 luggage door back.jpg|EC130 puerta de equipaje
File:EC130 pilot.jpg|EC130 pilot controls
File:EC130 pilot.jpg|EC130 controles del piloto
</gallery>
</gallery>


'''Some of the most interesting changes:'''
'''Alguno de los cambios más interesantes:'''
 
* '''Mainrotor''' fully animated and adapted to original                                 
* '''Fenestron''' fully designed and animated, incl. control rod                         
* '''Cockpit Controls''' added: Stick, Collective, Pedals,  Co-Pilot Controls (optional)                                                           
* '''Doors''' movable                                                                 
* '''Searchlight'''                                                                     
* '''Snowshoes'''                                                                         
* '''Hoist/Hook'''                                                                       
* '''Checklists''' implemented with conditional display                                   
* '''Pilot''': ''fully animated''                                                             
* '''Autostart/Autoshutdown''' enabled after 15 flights                                   
* '''Rotor-Wakes''' off-low-medium-high cyclable                                         
* '''Sound improved''' (doors moving, low/high rotor rpm, overspeed warning, and noise inside depends on open doors/window)                                                                   
 


'''Configuration Dialogs and Help Screens:'''
* '''Rotor Principal''' completamente animado y adaptado al original
* '''Fenestron''' completamente diseñado y animado, incluyendo barra de control
* '''Controles de la carlinga''' añadidos: cíclico, colectivo, pedales, controles del co-piloto (opcional)
* '''Puertas''' móviles
* '''Reflector'''
* '''Patines para nieve'''
* '''Gancho/monta cargas'''
* '''Listas de comprobación''' implementado con pantallas condicionales
* '''Piloto''': ''completamente animado''
* '''Auto-arranque'''/'''Auto-parada''' habilitado después de 15 vuelos
* '''Flujo del rotor''' modificable entre apagado, bajo, medio y alto
*''' Sonido mejorado''' movimiento de puertas, rpm del motor altas y bajas, advertencia de sobre velocidad, y ruido en la carlinga que depende de si las puertas y ventanas están abiertas o cerradas.


'''Ventanas de configuración y pantallas de ayuda:'''
<gallery>
<gallery>
File:EC130 Config.jpg|EC130 fully integrated configuration dialog
File:EC130 Config.jpg|EC130 Ventana de configuración completamente integrada.
File:EC130 Help.jpg|EC130 Help screen with all shortcuts and additional info
File:EC130 Help.jpg|EC130 Ventana de ayuda con todos los atajos e información adicional
File:EC130 Config Help 2.jpg|EC130 Config Help with explanation of dependencies
File:EC130 Config Help 2.jpg|EC130 Configuración de la ayuda con explicación de dependencias
File:EC130 Options.jpg|EC130 Simulation Options
File:EC130 Options.jpg|EC130 Opciones de simulación
</gallery>
</gallery>


'''Things on stack for FG 3.0:'''
'''Mejoras para FG 3.0:'''
* Rembrandt support
* Soporte para Rembrandt
* BUG fixing
* Corrección de errores


== Wiki updates ==
== Actualizaciones de la wiki ==
=== Translators required ===
=== Se necesitan traductores ===
{|
{|
|[[File:en.gif]]
|[[File:en.gif]]
Line 334: Line 331:
|}
|}


== And finally ... ==
== Y finalmente ... ==
=== Contributing ===
=== Contribuir ===
One of the regular thoughts expressed on the FlightGear forums is "I'd like to contribute but I don't know how to program, and I don't have the time". Unfortunately, there is a common mis-conception that contributing requires programming and lots of free time. In fact, there are a huge range of ways to contribute to the project without needing to write code or spending days working on something.  
Una de las ideas comunes expresadas en los foros de FlightGear es "Me gustaría aportar pero no sé programar, y no tengo tiempo". Desafortunadamente, hay una idea errónea generalizada respecto a que contribuir requiere programar y mucho tiempo libre. De hecho, hay De hecho, hay una gran variedad de formas de contribuir al proyecto sin necesidad de escribir código o gastar días trabajando en algo.


For ideas on starting to contribute to FlightGear, you may want to check out: [[Volunteer]].
Para obtener ideas sobre cómo comenzar a contribuir con FlightGear, tal vez desees revisar esta sección: [[:es:Voluntarios|Voluntarios]].


To learn more about how the project works, please see [http://flightgear.org/forums/viewtopic.php?f=42&t=15267#p149971 this short essay] written by Thorsten, for a more detailed article see [[How the FlightGear project works]].
Para aprender más acerca de cómo trabaja el proyecto, por favor revisa [http://forum.flightgear.org/viewtopic.php?f=42&t=15267#p149971 este breve ensayo] escrito por Thorsten, y para un artículo más detallado revisa [[How the FlightGear project works|Cómo funciona el proyecto FlightGear]].


=== Call for volunteers ===
=== Llamado a voluntarios ===
* The [[Target4Today]] team is looking for volunteers to help improving FlightGear's combat support
* El equipo [[Target4Today]] está buscando voluntarios para ayudar a mejorar el soporte de combate de FlightGear.


[[en:FlightGear Newsletter November 2013]]
[[Category:FlightGear Newsletter|2013 11]]
[[Category:FlightGear Newsletter|2013 11]]
[[Category:Changes after 2.12]]
[[Category:Changes after 2.12]]

Latest revision as of 10:45, 12 March 2016

Magagazine.png
Welcome to the FlightGear Newsletter!
Please help us write the next edition!
Enjoy reading the latest edition!


Nos gustaría enfatizar que el boletín de noticias mensual no podría ser posible sin los aportes de los usuarios de FlightGear y los desarrolladores. Cualquiera con una cuenta wiki (con libertad para registrarse) puede editar el boletín y toda contribución es bienvenida. Si conoces acerca de alguna noticia o proyecto relacionado a FlightGear tales como por ejemplo una actualización del escenario o alguna aeronave, porfavor siéntete invitado a añadir esas noticias al boletín.

Noticias del proyecto

Dispersión de Luz Atmosférica

El framework de renderizado de Dispersión de Luz Atmosférica (ALS, de Atmospheric Light Scattering), el cual adopta una técnica que recientemente ha sido introducida por defecto, y el framework de renderizado Rembrandt permiten utilizar un mapa global de la profundidad del océano. Esto posibilita el dibujar las aguas poco profundas alrededor de las islas de una forma realista. Combinado con la posibilidad de ALS de cambiar el color básico del agua basado en la ubicación y condición climática o apariencia del cielo, ahora es posible dibujar varias combinaciones de aguas poco profundas, contenido de lodo y condiciones climáticas mediante un mayor detalle del efecto de sombreado del agua.

Mapeo de la profundidad del agua en ALS

Integración inicial de OsgEarth

Gracias al reciente trabajo de un usuario del foro, poweroftwo, ahora tenemos una integración inicial de osgEarth mediante una opción seleccionable en tiempo de ejecución para la escena del terreno. Una vez activado, osgEarth dibuja el terreno construyendo las geometrías texturadas en tiempo de ejecución desde las imágenes en bruto y los datos de elevación. El tiempo de carga para un lugar no visitado es sorprendentemente rápido si se tiene una velocidad de bajada de Internet adecuada. Para ubicaciones previamente visitadas, se guarda un archivo optimizado de datos en caché para una carga rápida.

Los datos de entrada pueden venir de una variedad de fuentes incluyendo servicios web de mapeo o fuentes de datos locales (por ejemplo, geotiff) almacenados en disco. Una vez que el dibujado es activado, toda la escena del terreno de FlightGear es reemplazada, así como las consultas de elevación de la escena. Sin embargo, la implementación del terreno nativo permanece completamente intacto y puede ser restaurada deshabilitando osgEarth desde su ventana de configuración.

Los beneficios obtenidos de esta integración inicial de osgEarth incluyen el dibujado de imágenes geo-específicas en tiempo real desde una variedad de fuentes que están disponibles mundialmente; terreno en mosaico a demanda; y vistas a gran altitud desde cualquier lugar de la Tierra. Sin embargo, esta implementación con FlightGear incluye algunas limitaciones importantes listadas en la sección de acuerdos.

Aprende más en el tema del foro.

Presentamos dos nuevos frameworks: NavDisplay (ND) y MapStructure

Demo de MapStructure
NavDisplay
Instancias independientes de NavDisplay en el 777-200ER de Hyde

En un esfuerzo conjunto, el código NavDisplay/Canvas original de Gijs del Boeing 747-400 (programado completamente con Nasal; mira el boletín de octubre) por ahora ha sido suficientemente generalizado para ser usable en otra aeronave sin tener que copiar/pegar un montón de código (normalmente, ahora serán alrededor de 30 líneas).

El Boeing 777-200ER de Hyde es el primero en adoptarlo por ahora, con la ventaja extra de que el 777-200ER ahora también soporta instancias independientes de ND, por ejemplo, pantallas e interruptores independientes para cada piloto. Hyde, también está planeando implementar características faltantes específicas del 777.

Por ahora, Philosopher y Hooray han comenzado a trabajar en un framework Nasal llamado MapStructure, para crear fácilmente pantallas de cartas como el NavDisplay, tal que se necesite muy poco código Nasal especializado. Cuando el framework MapStructure esté completo, trabajaremos en vista de portar nuestros viejos archivos *.layer/*.draw/*.model para hacer uso del nuevo framework MapStructure y adaptar el framework NavDisplay conjuntamente.

MapStructure va a ser la base común para todas las necesidades gráficas de FlightGear, no sólo en instrumentos (por ejemplo, pantallas multifunción MDF como el NavDisplay), sino también en ventanas (Map, consola del instructor, ATC, etc).

Actualmente, aún hay algunos problemas de rendimiento menores (especialmente en computadores menos potentes), los cuales esperamos resolver al mover algunas partes al espacio C++, con la esperanza de que esté para la versión 3.0 (nuestros chicos Canvas/C++, TheTom y Zakalawe, están trabajando para eso).

Por favor, contáctate si tienes alguna pregunta o si te gustaría unirte en alguna forma.

Comenzando con CppBind

Nasal, el lenguaje de scripting integrado en FlightGear, viene con un conjunto de librerías estándar y puede ser extendido usando las APIs específicas de FlightGear.

Hasta FlightGear 2.8, el motor de scripting de Nasal sólo entragaba una API C para exponer ciertos vínculos (hooks, bindings) al espacio de scripting o para exponer estructuras de datos del espacio de scripting de regreso a C/C++.

Exponer el aspecto interno del simulador a un espacio de scripting es un asunto útil y bastante común, porque permite a los desarrolladores del paquete base acceder a estas partes internas sin tener que compilar FlightGear desde los fuentes, tal que la barrera de entrada es significativamente menor y hemos visto un incremento en el número de características novedosas implementadas completamente en el espacio de scripting, gracias a las poderosas APIs disponibles para desarrolladores de aeronaves y del paquete base.

A diferencia del núcleo de Nasal, el cual está escrito en C, FlightGear está programado y siendo escrito principalmente en C++. Eso significa que, hace un tiempo, la API Nasal fue casi de "bajo nivel" y a veces también complicado de usar al crear funciones, estructuras de datos u objetos accesibles entre C++ y Nasal.

Gracias al sistema Canvas de Tom, ahora hay un nuevo framework de vínculos que se encuentran en simgear/nasal/cppbind. Es completamente orientado a objeto y soporta características modernas de C++.

Notarás que la mayoría del código "antiguo" en $FG_SRC/Scripting aún usa esas viejas APIs-C para interactuar con el motor Nasal. Sólo el nuevo código, #include'ing <simgear/nasal/cppbind>, usa las plantillas potenciadas que esconden los detalles de bajo nivel.

La mayoría del código en el subsistema Nasal (FGNasalSys) también aún usa las APIs de C antiguas - esto es sólo para explicar las dos soluciones, para evitar confusiones innecesarias. Las antiguas APIs de bajo nivel las encontrarás explicadas en Howto:Extend Nasal.

El framework CppBind es mucho más genérico y de alto nivel que las APIs C puras, cppbind incluye soporte para pruebas unitarias y hace uso de características modernas de C++ como templates y soporte STL, incluyendo tipos específicos de SimGear como SGPath/SGGeod, etc, su gasto es bastante pequeño (no sólo rendimiento, sino también líneas de código para crear nuevos vínculos). El framework cppbind ya es extensamente usado por el sistema Canvas y los vínculos NasalPositioned_cppbind, ambos muy buenos lugares para buscar ejemplos de código.

Continúa leyendo en Nasal/CppBind...

Trabajo de Validación del Modelo de Dinámica de Vuelo JSBSim

JSBSim (uno de los modelos de vuelo presentes en FlightGear) actualmente está siendo validado en función de un conjunto de simulaciones en varios centros de la NASA. Un conjunto de casos de verificación está bajo desarrollo y se espera que sean publicados el próximo año. Los casos de verificación son numerosos y rigurosos, y abarcan escenarios atmosféricos y orbitales. Las primeras comparaciones entre JSBSim y las otras simulaciones muestran una muy buena concordancia para las pruebas atmosféricas realizadas hasta ahora.

Nuevo Componente del Sistema de Control en JSBSim

Un nuevo componente del sistema de control ha sido añadido recientemente a JSBSim. Este es llamado el componente distribuidor. Este artículo es una introducción rápida al componente distribuidor, e incluye una descripción de una forma en la que ha sido usada. Sabemos que el componente switch posee un valor por defecto, tal que el switch toma ese valor por defecto si ninguna de las condiciones de prueba se cumple. Además, la primera condición de prueba que resulta verdadera determina el valor que toma el switch. Con el componente distribuidor, el componente no toma un valor por sí mismo (de hecho, el valor del componente - el cual todavía debe ser indentificado - es siempre cero).

La sintáxis exacta del componente distribuidor es la siguiente:

<distributor name="name/is/irrelevant" type="exclusive|inclusive">

  <case>
    [<test logic="{AND|OR}" value="{property|value}">
      {property} {conditional} {property|value}
      <test logic="{AND|OR}">
        {property} {conditional} {property|value}
        ...
      </test>
      ...
    </test>]
    <property value="number|property"> property_name </property>
    ...
  </case>

  ... <!-- Casos opcionales adicionales -->

</distributor>

Este es uno de los más potentes, pero complejos, componentes en el conjunto de componentes de control de JSBSim. El componente distribuidor posee uno o más elementos <case>. Cada <case> puede contener un elemento <test> (el cual puede contener sentencias de prueba condicional, o uno o más <test> anidados). Además, cada <case> tendrá una o más propiedades con un valor a ser establecido. Un elemento <case> sin <test>'s siempre será ejecutado (los valores de sus propiedades son según se estableció). Un componente distribuidor puede tener tener un tipo exclusivo o inclusivo. Un distribuidor exclusivo sólo ejecutará el primer elemento <case> que resulte verdadero. Un distribuidor inclusivo, ejecutará todos los elementos <case> para el cual la prueba resulte verdadera. En ambos casos, todos y cada uno de los elementos <case> que no tengan test siempre serán ejecutados en el orden en que son encontrados. Cada elemento <case> tendrá uno o más valores de propiedad a ser fijadas, y cada elemento <case> no necesita poseer el mismo conjunto de propiedades a ser establecido.

Este componente es muy útil in casos donde (por ejemplo) la guía, navegación y leyes de control están definidos, donde - para ciertos modos de operación - varias estrategias de sistemas de control y valores objetivo deben ser fijados simultáneamente. El componente distribuidor puede también servir como una suerte de relé, presentando un elemento <case> sin test, y varios elementos <property>. Acá hay un ejemplo donde se podría tener un conjunto de “modos” secuenciales que un vehículo de lanzamiento podría recorrer en orden ascendente:

<?xml version="1.0"?>
<!DOCTYPE system [
  <!ENTITY Off "0">
  <!ENTITY On  "1">
  <!ENTITY InitialRise  "1">
  <!ENTITY GravityTurn  "1">
  <!ENTITY EngineCutoff "2">
  <!ENTITY RateHold     "0">
]>
<system name="Demo Rocket Guidance Executive"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://jsbsim.sf.net/JSBSimSystem.xsd"
        xsi:noNamespaceSchemaLocation="http://jsbsim.sf.net/JSBSimSystem.xsd">

  <property value="0"> executive/mode </property>
  <property value="0"> executive/clock/advance-burn-clock </property>
  <property value="1"> executive/clock/advance-met-clock </property>
  <property value="0"> guidance/pitch/rate-target-rad_sec </property>
  <property value="0"> guidance/yaw/rate-target-rad_sec </property>
  <property value="0"> guidance/roll/rate-target-rad_sec </property>

  <channel name="Executive Mode Sequencer">

    <integrator name="executive/clock/mission-elapsed-time">
      <input> executive/clock/advance-met-clock </input>
      <c1> 1 </c1>
    </integrator>

    <integrator name="executive/clock/elapsed-burn-time">
      <input> executive/clock/advance-burn-clock </input>
      <c1> 1 </c1>
    </integrator>
    
    <distributor name="executive/sequencer" type="exclusive">

      <case>
        <test>
          executive/clock/mission-elapsed-time gt 0.1
          executive/mode eq &Off;
        </test>
        <property value="&InitialRise;"> executive/mode </property>
        <property value="&On;"> propulsion/engine[0]/throttle-cmd </property>
        <property value="&On;"> propulsion/engine[1]/throttle-cmd </property>
        <property value="&RateHold;"> control/pitch/mode </property>
        <property value="&RateHold;"> control/roll/mode </property>
        <property value="&RateHold;"> control/yaw/mode </property>
        <property value="&On"> executive/clock/advance-burn-clock </property>
      </case>

      <case>
        <test>
          executive/clock/mission-elapsed-time ge 10
          executive/mode eq &InitialRise;
        </test>
        <property value="&GravityTurn;"> executive/mode </property>
        <property value="-0.05"> guidance/pitch/rate-target-rad_sec </property>
      </case>

      <case>
        <test>
          executive/clock/mission-elapsed-time gt 122
          executive/mode eq &GravityTurn;
        </test>
        <property value="&EngineCutoff;"> executive/mode </property>
        <property value="&Off;"> propulsion/engine[0]/throttle-cmd </property>
        <property value="&Off;"> propulsion/engine[1]/throttle-cmd </property>
        <property value="&Off;"> executive/clock/advance-burn-clock </property>
      </case>

    </distributor>

  </channel>

Como puedes ver, cada modo ocurre secuencialmente y provoca que un número de propiedades sea fijada en cada elemento <case>. Nótese también las definiciones usadas en los elementos y atributos - estos pueden ser usados para hacer el código más legible y comprensible. Definiciones (similar a #defines en C/C++) son declarados al principio del archivo usando el constructor !ENTITY.

Cambios en el repositorio FGRun

El repositorio Git FGRun ahora usa el mismo concepto de branch que en FlightGear y SimGear. El desarrollo actual toma lugar en la rama next, mientras que las ramas release/X.X son creadas para cada versión. Además, el número de versión de FGRun ahora está sincronizado con FlightGear/SimGear, para poder ver más fácilmente si tus compilaciones de FGRun y FlightGear coinciden.

El Walker (transeúnte)

El Walker o transeúnte, actualmente está siendo portado para ser fácilmente incorporado en una aeronave arbitraria. Adicionalmente, está en desarrollo un modelo de piloto animado para la carlinga. El Walker y la tripulación soportarán diferentes poses de manos, tales como apuntar, puño, gesto de aprobación o signo de victoria.

La transeúnte femenina El transeúnte masculino

Un modelo de piloto, copiloto y tripulación están por llegar. Poses de manos que serán seleccionables en la ventana de animación

Unirse como programador

Desafortunadamente, la mayoría de los desarrolladores activos de FG actualmente están muy agobiados con sus otras responsabilidades, lo cual afecta a cuanto realmente podemos hacer. Fundamentalmente, necesitamos más desarrolladores del núcleo.

Si estás interesado en aportar como un desarrollador del núcleo, por favor lee Comenzar como desarrollador del núcleo.

Internals de Nasal para hackers: internando símbolos

Aportado por Philosopher

Como algunos de ustedes, experimentados hackers de Nasal/C podrán recordar, o incluso aquellos familiarizados con los detalles de los lenguajes de script, los namespaces son sólo tablas de hashing con llaves que representan símbolos - correcto? Ok bien, practicamente, pero cada uno de esos símbolos son únicos en una forma distinta a todos los otros strings que hay ahí afuera: ellos son internos. (El interning es un proceso que toma strings y un diccionario y retorna una cadena coincidente, añadiendo uno si es necesario). Eso significa que las cadenas iguales son sustituidas tal que tienen el mismo puntero, por ejemplo, un string representa todas las instancias de "io", almacenado en un pool/hash de todos los símbolos usados.) Aunque estas cadenas internadas aparecen en tiempo de ejecución en las keys de los namespaces, ellas se crean durante la generación del código (codegen), donde los símbolos (TOK_SYMBOL) que son convertidos a cadenas Nasal, son internadas para obtener la cadena correcta (usando el globals->symbols hash), y son almacenadas en el bloque de constantes de naCode. Desde allí, los symbol-strings son usados para establecer y obtener varios lvalues (ambos simbolos locales/globales y miembros de objeto) en una forma optimizada (esa es la idea principal del ejercicio). Mirando el hash.c, hay varias funciones especializadas que hacen uso de potenciales optimizaciones:

  • naiHash_sym (busca un símbolo internado)
  • naiHash_newsym (añade un símbolo en el primer slot vacío del hashcode)

(Hay otro que se parece, naiHash_tryset, pero este no maneja símbolos internados: este usa el método findkey(), el cual a su vez usa el método equals() que comprueba una llave de igualdad más general en vez de simplemente la igualdad de punteros.)

Lo primero, naiHash_sym, es bastante claro y el supremo ejemplo de la optimización: este corre los slots del hashcode, comprobando sólo la igualdad de punteros (nótese que el hashcode de los símbolos internados son calculados durante la internación, por lo que es otro paso que no es necesario realizar en tiempo de ejecución). naiHash_newsym es otra buena optimización pero un poco problemática, debido a que asume que la llave ya no existe. Básicamente se utiliza para añadir otro argumento como una llave local, pero no le importa si ya existe, sólo ve un slot ocupado y continúa. Considera el siguiente ejemplo que ilustra la llamada con un argumento en un hash que ya tiene la llave del argumento en él:

var f_creates_arg = func(arg...) {
    foreach (var k; keys(caller(0)[0]))
        print(k);
    debug.dump(arg);
}
call(f_creates_arg, nil, nil, {arg:nil}); # call into namespace: arg=nil; with arguments of: arg=[]

Esto mostraría:

arg
arg
nil

Esto muestra que la llave está siendo establecida dos veces (lo cual viola la condición de las tablas de hashing): una vez como argumento y otra vez para crear una llave existente en el espacio de nombres. El primer set es el que está siendo recogido (por ejemplo, el arg en {arg:nil} versus el arg... que iguala []). Y este comportamiento persiste incluso a través del redimensionado: hashset() (el cual es usado para reiniciar un hash después de la redistribución) sólo sigue añadiendo llaves en slots vacíos, tal que el número de llaves no cambia (incluso si hay varias de la mismas llaves).

Por esta razón, sugeriría modificar el naiHash_newsym para comprobar la igualdad de punteros de las llaves antes de continuar; de esa forma los símbolos no son "pisados" como acá. (Por favor considera que si "arg" existe en el hash como un no-internado, entonces éste será pisado de todos modos; tener que buscar símbolos no internados principalmente violaría el punto de la optimización en este paso, y a la larga realmente no importa.) Yo sostendría que encontrar una llave existente (¡unas simples comparaciones de punteros!) generalmente sería más eficiente, porque el hash nunca necesitaría ser redimensionado si encuentra uno existente, mientras que la vieja versión añadiría de todas formas. (Creo que una vez conté más de cien símbolos "arg" in the namespace __js0 desde el continuo lanzamiento de vínculos, lo cual obviamente no es bueno.)

Continúa leyendo en [1].

Addons y mods para FlightGear

Nuevas texturas y luces para edificios aleatorios

Luces del terreno al mediodía
Luces del terreno en la noche

Las luces urbanas trabajan usando un sombreado urbano modificado + efecto urbano modificado, los archivos modificados necesitan ser mejorados para hacer funcionar el sombreado urbano original cuando la función de edificios aletorios está desactivada y habilitar el nuevo sombreado cuando la función de edificios aleatorios está activada.

Instalación:

  1. Descargar desde acá
  2. Descomprimer el archivo
  3. Copia, pega y reemplaza
    • urban.eff en $FG_ROOT/Effects/
    • urban.frag , urban-gbuffer.frag y urban-lightfield.frag en $FG_ROOT/Shaders/
    • buildings.png y buildings-lightmap en $FG_ROOT/Textures/
  4. Sugiero cambiar la densidad de los edificios aleatorios a la mitad de la configuración por defecto de tu equipo, puedes hacerlo editando el archivo autosave.xml o autosave_2_12.xml (dependiendo de tu versión), en la línea "<building-density type="double">1</building-density>"

Si quieres volver a los efectos por defecto, por favor descarga este paquete y sigue las instrucciones de instalación nuevamente.

En el hangar

Tupolev Tu-134

El "whistle" tomando velocidad para despegar.
Puedes escoger uno de tres radomos.

El equipo de desarrollo del Tupolev Tu-134 orgullosamente anuncia una nueva línea aérea soviética para FlightGear! Algunos ya han leído el topic acerca de él en el foro. El lanzamiento de la versión 1.0 está disponible para descargar desde acá. Esta aeronave YASim tiene un muy buen FDM, bello exterior y una carlinga básica. Para aportar (a mejorar la carlinga, por ejemplo) contactanos en el foro.

Muchas gracias a Helijah, Buckaroo y Cossack90.

Nueva aeronave

No una aeronave sino un crucero, Oasis de los Mares ha sido lanzado al público, estas naves y ferries vienen del Hangar ACJZA también! Si tienes alguna habilidad para programar, estaré agradecido de que me puedas ayudar. La descarga y más información la encontrarán en el foro.

Aeronave actualizada

Eurocopter EC130-B4 Ecostar

La variante EMS del EC130-B4, usado por MedFlight, Ohio, USA
Nueva librea de Helicópteros Gran Cañón
Primer plano del rotor del EC130 , completamente animado en todos los detalles
EC130 usando el reflector SX-16 Nightsun
Ahora, incluso la ventana del piloto puede ser abierta

El helicóptero Eurocopter EC130 B4 está a poco de una nueva gran actualización. El modelo existente, el cual ya tenía una muy alta calidad, ha sido refinado en varios aspectos con mucho esfuerzo de mhab. El modelo exterior ha sido enriquecido a un grado que justificaría una votación de 5* y un cambio del estatus de la aeronave a "production".

El Rotorhead ha sido llevado a un nuevo nivel de detalle, y un Fenestron completamente detallado fue añadido y las animaciones fueron introducidas a todas las partes móviles.

La carlinga fue enriquecida para los controles del piloto/copiloto, ahora los asientos son texturados y una configuración de cabina variable permite montar una variante Servicios Médicos de Emergencia (EMS), el cual viene preconfigurado con una nueva librea de N130NE MedFlight (Ohio).

Los fanáticos de Helicópteros Gran Cañón" ahora encontrarán una librea del N155GC y la colorida pintura rojo/dorado.

Un montón de equipo (la mayoría del cual estaba ahí pero escondido) ahora puede ser usado, incluyendo un verdadero foco SX16-Nightsun.

Todo esto ha sido realizado en una configuración completamente integrada para ser manipulado mediante una ventana que permite cambiar las libreas, combustible, vistas extras, pesos, configuración de cabina y equipamiento.

Los artilugios extras incluyen un piloto completamente animado, reflejos en las ventanas y parabrisas frontal, y el rotor variable dependen de la fuerza de la corriente descendente.

Si no puedes esperar hasta el lanzamiento, dale un vistazo al Git-Hangar

Alguno de los cambios más interesantes:

  • Rotor Principal completamente animado y adaptado al original
  • Fenestron completamente diseñado y animado, incluyendo barra de control
  • Controles de la carlinga añadidos: cíclico, colectivo, pedales, controles del co-piloto (opcional)
  • Puertas móviles
  • Reflector
  • Patines para nieve
  • Gancho/monta cargas
  • Listas de comprobación implementado con pantallas condicionales
  • Piloto: completamente animado
  • Auto-arranque/Auto-parada habilitado después de 15 vuelos
  • Flujo del rotor modificable entre apagado, bajo, medio y alto
  • Sonido mejorado movimiento de puertas, rpm del motor altas y bajas, advertencia de sobre velocidad, y ruido en la carlinga que depende de si las puertas y ventanas están abiertas o cerradas.

Ventanas de configuración y pantallas de ayuda:

Mejoras para FG 3.0:

  • Soporte para Rembrandt
  • Corrección de errores

Actualizaciones de la wiki

Se necesitan traductores

En.gif The FlightGear Wiki still needs help for translating it into various languages. If you are interested in making the FlightGear Wiki multi-language then start at Help:Translate.
De.gif Das FlightGear Wiki benötigt immer noch Hilfe bei der Übersetzung in verschiedene Sprachen. Wenn Du Interesse daran hast, das FlightGear Wiki Mehrsprachig zu machen, dann fang doch mit Help:Übersetzen an.
Nl.gif De FlightGear Wiki kan nog steed hulp gebruiken bij het vertalen van artikelen. Als je interesse hebt om de wiki meertalig te maken, raden we je aan om een kijkje te nemen bij Help:Vertalen.
Es.gif La FlightGear wiki todavía necesita ayuda para traducirla a varios lenguajes. Si estás interesado en hacer la FlightGear wiki multilingüe, entonces comienza en Help:Traducir.

Y finalmente ...

Contribuir

Una de las ideas comunes expresadas en los foros de FlightGear es "Me gustaría aportar pero no sé programar, y no tengo tiempo". Desafortunadamente, hay una idea errónea generalizada respecto a que contribuir requiere programar y mucho tiempo libre. De hecho, hay De hecho, hay una gran variedad de formas de contribuir al proyecto sin necesidad de escribir código o gastar días trabajando en algo.

Para obtener ideas sobre cómo comenzar a contribuir con FlightGear, tal vez desees revisar esta sección: Voluntarios.

Para aprender más acerca de cómo trabaja el proyecto, por favor revisa este breve ensayo escrito por Thorsten, y para un artículo más detallado revisa Cómo funciona el proyecto FlightGear.

Llamado a voluntarios

  • El equipo Target4Today está buscando voluntarios para ayudar a mejorar el soporte de combate de FlightGear.