<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>JPL DARTS Lab Q&amp;A - Recent questions and answers</title>
<link>https://dartslab.jpl.nasa.gov/qa/qa</link>
<description>Powered by Question2Answer</description>
<item>
<title>Answered: How do I get back missing NFS mounts?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1940/how-do-i-get-back-missing-nfs-mounts?show=1941#a1941</link>
<description>&lt;p&gt;This can happen when the automounter dies. This can be fixed by simply restarting it with:&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;font-size:small&quot;&gt;&lt;span style=&quot;font-size:11pt&quot;&gt;sudo service autofs stop
sudo service autofs start&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</description>
<category>Developer</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1940/how-do-i-get-back-missing-nfs-mounts?show=1941#a1941</guid>
<pubDate>Tue, 23 Jul 2024 17:58:51 +0000</pubDate>
</item>
<item>
<title>Answered: How do I clear the php cache used by our apache web server?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1936/how-do-i-clear-the-php-cache-used-by-our-apache-web-server?show=1937#a1937</link>
<description>&lt;p&gt;You can purge the php cache on our web server (einstein at time of writing) by running with sudo:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:Courier New,Courier,monospace&quot;&gt;systemctl reload php-fpm&lt;/span&gt;&lt;/p&gt;</description>
<category>Documentation</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1936/how-do-i-clear-the-php-cache-used-by-our-apache-web-server?show=1937#a1937</guid>
<pubDate>Thu, 14 Mar 2024 22:09:07 +0000</pubDate>
</item>
<item>
<title>Answered: How do I restart the GitLab elastic search?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1934/how-do-i-restart-the-gitlab-elastic-search?show=1935#a1935</link>
<description>&lt;p&gt;From Boltzmann run&lt;/p&gt;&lt;pre&gt;sudo systemctl restart elasticsearch&lt;/pre&gt;</description>
<category>Bug reports</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1934/how-do-i-restart-the-gitlab-elastic-search?show=1935#a1935</guid>
<pubDate>Tue, 12 Mar 2024 18:14:53 +0000</pubDate>
</item>
<item>
<title>Answered: How do I restart the GitLab PlantUML server?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1932/how-do-i-restart-the-gitlab-plantuml-server?show=1933#a1933</link>
<description>&lt;p&gt;From Hamilton run&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;font-size:12pt&quot;&gt;sudo /etc/gitlab/start_plantuml-server&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</description>
<category>Documentation</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1932/how-do-i-restart-the-gitlab-plantuml-server?show=1933#a1933</guid>
<pubDate>Tue, 12 Mar 2024 18:11:13 +0000</pubDate>
</item>
<item>
<title>Answered: How do I restart the pyam mysql server?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1930/how-do-i-restart-the-pyam-mysql-server?show=1931#a1931</link>
<description>&lt;p&gt;&lt;span style=&quot;font-family:Slack-Lato, Slack-Fractions, appleLogo, sans-serif&quot;&gt;&lt;span style=&quot;font-size:15px; font-variant-ligatures:common-ligatures&quot;&gt;On einstein run&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;font-family:Slack-Lato, Slack-Fractions, appleLogo, sans-serif&quot;&gt;&lt;span style=&quot;font-size:15px; font-variant-ligatures:common-ligatures&quot;&gt;sudo systemctl restart mariadb&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</description>
<category>Version Control</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1930/how-do-i-restart-the-pyam-mysql-server?show=1931#a1931</guid>
<pubDate>Wed, 31 Jan 2024 14:35:41 +0000</pubDate>
</item>
<item>
<title>Answered: How can I convert a regular python script into a doctest script?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1928/how-can-i-convert-regular-python-script-into-doctest-script?show=1929#a1929</link>
<description>&lt;p&gt;Given a doctest script.py, you can convert it into a regular script using&lt;/p&gt;&lt;pre&gt;srun doctest-converter --to-doctest --input-file-name script.py --output-file-name doctest.py&lt;/pre&gt;&lt;p&gt;This will create a doctest&amp;nbsp;script called doctest.py.&lt;/p&gt;</description>
<category>Testing</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1928/how-can-i-convert-regular-python-script-into-doctest-script?show=1929#a1929</guid>
<pubDate>Tue, 21 Nov 2023 17:05:32 +0000</pubDate>
</item>
<item>
<title>Answered: My VPN is connected but I can&#039;t access any JPL websites or machines.</title>
<link>https://dartslab.jpl.nasa.gov/qa/1925/my-vpn-is-connected-but-cant-access-any-jpl-websites-machines?show=1926#a1926</link>
<description>&lt;p&gt;If you can connect to the VPN, but cannot connect to any JPL machines or websites, you may have a DNS issue. On Fedora, you may be able to resolve this by doing the following&lt;/p&gt;&lt;pre&gt;1. Edit /etc/nsswitch.conf 


2. Comment out this line: hosts: files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] 

i.e. make  that line

# hosts: files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] 


3. Replace with this line: dns hosts: files myhostname mdns4_minimal resolve dns &lt;/pre&gt;&lt;pre&gt;
&lt;/pre&gt;</description>
<category>JPL wide</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1925/my-vpn-is-connected-but-cant-access-any-jpl-websites-machines?show=1926#a1926</guid>
<pubDate>Wed, 15 Nov 2023 20:08:44 +0000</pubDate>
</item>
<item>
<title>Answered: How do I restart the svn server?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1923/how-do-i-restart-the-svn-server?show=1924#a1924</link>
<description>&lt;p&gt;On einstein, run&lt;/p&gt;&lt;pre&gt;svnserve -d -r /alt&lt;/pre&gt;</description>
<category>Version Control</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1923/how-do-i-restart-the-svn-server?show=1924#a1924</guid>
<pubDate>Fri, 27 Oct 2023 14:24:06 +0000</pubDate>
</item>
<item>
<title>Answered: How do we use glade to generate gui code?</title>
<link>https://dartslab.jpl.nasa.gov/qa/619/how-do-we-use-glade-to-generate-gui-code?show=1922#a1922</link>
<description>&lt;p&gt;&lt;strong&gt;glade&lt;/strong&gt; is a tool for interactively generating GTK widget-based GUIs. It allows you to create windows and widgets, adjust their layout and properties, and assign callback methods to the various events supported by the widgets. It saves the GUI information in an XML object, which can be directly built and displayed using the &lt;strong&gt;GTK Python library&lt;/strong&gt;. This process is very intuitive and clean, and is a great way to create GUIs.&lt;/p&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Use &lt;strong&gt;glade-3&lt;/strong&gt; to create a simple GUI. I would recommend watching/following along to a YouTube tutorial to get the hang of how everything is laid out. Kevin O&#039;Kane has a great &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/playlist?list=PLmMgHNtOIstZEvqYJncYUx52n8_OV0uWy&quot;&gt;playlist&lt;/a&gt; that helped me get going. In short:&lt;ol&gt;&lt;li&gt;Add a &lt;strong&gt;Window&lt;/strong&gt; object and within it, put some &lt;strong&gt;Containers &lt;/strong&gt;(Boxes, Grids, etc.). Then, you can select which type of element you want to add and add it to those containers. You can nest containers as much as you want.&lt;/li&gt;&lt;li&gt;Specify &lt;strong&gt;signal handler&lt;/strong&gt; names under the &lt;strong&gt;Signal&lt;/strong&gt; tab for GUI components you wish to be interactive.&lt;/li&gt;&lt;li&gt;Saving the GUI in glade will generate a &lt;strong&gt;.ui&lt;/strong&gt; XML file which we will feed into the GTK Python library.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;In Python, create a class with all the &lt;strong&gt;signal handlers&lt;/strong&gt;. &lt;em&gt;Make sure all the signal handlers are in the one class, and that the names match exactly&lt;/em&gt;. This class can also have other helper functions - i.e. it is not strictly limited to just the signal handlers.&lt;/li&gt;&lt;li&gt;In Python main, create the builder object and connect its signals to the class created in step 2. For example:&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;div style=&quot;color: #cccccc;background-color: #1f1f1f;font-family: &#039;Droid Sans Mono&#039;, &#039;monospace&#039;, monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color:#c586c0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt; gi&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;gi.require_version(&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;&quot;Gtk&quot;&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;&quot;3.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#c586c0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt; gi.repository &lt;/span&gt;&lt;span style=&quot;color:#c586c0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt; Gtk&lt;/span&gt;&lt;/div&gt;&amp;nbsp;&lt;div&gt;&lt;span style=&quot;color:#6a9955&quot;&gt;# build the GUI from the .ui file created using Glade&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;builder &lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt; Gtk.Builder()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;builder.add_from_file(&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;&quot;file.ui&quot;&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;span style=&quot;color:#6a9955&quot;&gt;# connect the signals from the GUI elements to the corresponding methods in GUIController&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;gui_controller &lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt; GUIController()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;builder.connect_signals(gui_controller)&lt;/span&gt;&lt;/div&gt;&amp;nbsp;&lt;div&gt;&lt;span style=&quot;color:#6a9955&quot;&gt;# show the window&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;window &lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt; builder.get_object(&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;&quot;window&quot;&lt;/span&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;window.show_all()&lt;/span&gt;&lt;/div&gt;&amp;nbsp;&lt;div&gt;&lt;span style=&quot;color:#cccccc&quot;&gt;Gtk.main()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;As you make updates to the .ui file in glade, the GTK builder will automatically update the GUI when you rerun the program, making incremental development and testing very easy. You can also change, add, and remove GTK components in the GUI programmatically, meaning that you can make custom effects and behavior on the fly.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;For a sophisticated example of this process in use in DARTS, take a look at the movie maker source code, located under &lt;em&gt;FacadeLogScene/movieMaker&lt;/em&gt;. &lt;em&gt;guiController.py&lt;/em&gt; contains the GUIController class that implements the signal handlers for the GUI.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description>
<category>Building</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/619/how-do-we-use-glade-to-generate-gui-code?show=1922#a1922</guid>
<pubDate>Mon, 25 Sep 2023 18:17:55 +0000</pubDate>
</item>
<item>
<title>Answered: How do I add the JPL root certificate to my laptop?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1920/how-do-i-add-the-jpl-root-certificate-to-my-laptop?show=1921#a1921</link>
<description>&lt;ol&gt;&lt;li&gt;Copy&amp;nbsp;JPLICA.Issuing1.pem and JPLICA.Root.pem from the /home/dartsfn/pkgs/etc&amp;nbsp;directory of a JPL machine to&amp;nbsp;your laptop at&amp;nbsp;/etc/pki/ca-trust/source/anchors.&lt;/li&gt;&lt;li&gt;Run&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;pre&gt;sudo update-ca-trust&lt;/pre&gt;&lt;ol start=&quot;3&quot;&gt;&lt;li&gt;Restart your web browser.&lt;/li&gt;&lt;/ol&gt;</description>
<category>Software</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1920/how-do-i-add-the-jpl-root-certificate-to-my-laptop?show=1921#a1921</guid>
<pubDate>Mon, 18 Sep 2023 23:17:43 +0000</pubDate>
</item>
<item>
<title>Are there examples of integrating DARTS with MONTE for simulating autonomous navigation?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1919/there-examples-integrating-simulating-autonomous-navigation</link>
<description>I would like to see examples of DARTS+MONTE integration for simulating autonomous navigation to a body (e.g., a moon, a planet, or a small-body asteroid).</description>
<category>Math library</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1919/there-examples-integrating-simulating-autonomous-navigation</guid>
<pubDate>Mon, 14 Aug 2023 16:02:17 +0000</pubDate>
</item>
<item>
<title>Answered: How do I checkout a module on the main branch after saving it from a regtest sandbox?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1916/checkout-module-main-branch-after-saving-from-regtest-sandbox?show=1918#a1918</link>
<description>&lt;p&gt;Use the &lt;strong&gt;-w&lt;/strong&gt; option. &lt;strong&gt;pyam save -w X&lt;/strong&gt; will save the module and check it out as a work module as well after that.&lt;/p&gt;</description>
<category>Version Control</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1916/checkout-module-main-branch-after-saving-from-regtest-sandbox?show=1918#a1918</guid>
<pubDate>Fri, 07 Jul 2023 20:52:42 +0000</pubDate>
</item>
<item>
<title>Answered: How do I check how much space I (or a Team) have left in office365 (onedrive/sharepoint)?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1914/check-much-space-team-have-left-office365-onedrive-sharepoint?show=1915#a1915</link>
<description>&lt;p&gt;The following instructions are valid as of 7/7/2023 and explain how to view storage usage and storage capacity for an Office365 account (i.e.&amp;nbsp;OneDrive or&amp;nbsp;Team) via the browser.&lt;/p&gt;&lt;p&gt;1. Log into OneDrive (&lt;a href=&quot;https://jpl365prod-my.sharepoint.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://jpl365prod-my.sharepoint.com/&lt;/a&gt;). You can also access this from Outlook, or other office365 access application by selecting&amp;nbsp;&quot;OneDrive&quot; from the application menu.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;2. Select &quot;Return to classic OneDrive&quot; in the lower left-hand corner. I have not found a way to view the usage metrics in the new OneDrive interface.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;3. Select the settings icon on the top right of the screen, and select &quot;Site settings&quot; from the menu.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;4. On the Site Settings page, find and select &quot;Storage Metrics&quot;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;5. You should be able to view your individual usage metrics, including the total storage used and your storage capacity in the top right corner.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;To view the storage metrics for a specific Team, the process is similar. However, once you&#039;ve landed on the classic OneDrive page, you&#039;ll need to select the Team in question before selecting &quot;settings -&amp;gt; site settings&quot; as before. If you see no option to click &quot;settings -&amp;gt; site settings from the Team page, you have likely been returned to the modern interface. Check the lower left corner for a &quot;return to classic OneDrive&quot; or &quot;return to classis SharePoint&quot;, select this, and try again. &lt;strong&gt;Note: you will only be able to view a Team&#039;s usage metrics if you are a Team admin.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
<category>Developer</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1914/check-much-space-team-have-left-office365-onedrive-sharepoint?show=1915#a1915</guid>
<pubDate>Fri, 07 Jul 2023 18:42:07 +0000</pubDate>
</item>
<item>
<title>Answered: How do we handle loops in model data flow when using the assembly builder?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1912/how-handle-loops-model-data-flow-when-using-assembly-builder?show=1913#a1913</link>
<description>&lt;p&gt;The error occurs because &lt;strong&gt;sim.createAssemblies()&lt;/strong&gt; by default locks the simulation object at the end, which kicks in the model sorting process which will error out when there are loops. The solution is to pass in the &lt;strong&gt;lock=False&lt;/strong&gt; optional argument to disable the locking, then externally add the model breaks, and then to manually lock the simulation object. The pseudo code will look something like:&lt;/p&gt;&lt;pre&gt;sim.createAssemblies(config, lock=False)
# can do this multiple times for different model pairs
&amp;lt;look up model pair, and make mdl1.addSortingBreak(mdl2) call.&amp;gt;
sim.lockObject()
&lt;/pre&gt;</description>
<category>Dshell Assemblies</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1912/how-handle-loops-model-data-flow-when-using-assembly-builder?show=1913#a1913</guid>
<pubDate>Sat, 10 Jun 2023 15:25:58 +0000</pubDate>
</item>
<item>
<title>Answered: How can I create a complie_commands.json file for my DARTS sandbox?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1910/how-can-create-complie_commands-json-file-for-darts-sandbox?show=1911#a1911</link>
<description>&lt;p&gt;There is a make target you can run from the top level&lt;/p&gt;&lt;pre&gt;make compile-commands&lt;/pre&gt;&lt;p&gt;This make target will create a compile_command.json file for you. It uses compiledb, which does not require recompliing everything like bear does. In addition, this make target will create the compile commands for both work and link modules.&lt;/p&gt;</description>
<category>Coding</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1910/how-can-create-complie_commands-json-file-for-darts-sandbox?show=1911#a1911</guid>
<pubDate>Fri, 09 Jun 2023 17:31:23 +0000</pubDate>
</item>
<item>
<title>Answered: How do I connect to the CAE WENG servers?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1908/how-do-i-connect-to-the-cae-weng-servers?show=1909#a1909</link>
<description>&lt;p&gt;If you are on a Windows or Mac, instructions on how to use WENG can be found &lt;a rel=&quot;nofollow&quot; href=&quot;https://wiki.jpl.nasa.gov/display/opencae/WENG+FAQ+1%3A+Getting+Started&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you are on a Linux machine, you cannot use Microsoft Remote Desktop. Hence, you will need to use a different RDP application. One easy, free one to use is freerdp. This can be installed on Fedora using:&lt;/p&gt;&lt;pre&gt;sudo dnf install freerdp&lt;/pre&gt;&lt;p&gt;Once this is installed, you connect to the WENG machines using the xfreerdp command. For example, to connect to the GPU machines use&lt;/p&gt;&lt;pre&gt;xfreerdp /u:&amp;lt;YOUR_JPL_USERNAME&amp;gt; /v:cae-weng-gpu.jpl.nasa.gov&lt;/pre&gt;&lt;p&gt;You will be prompted for your password (use your LDAP password), and then you should log in. The first login will take a while since it sets things up for you the first time. Subsequent logins should be quicker.&lt;/p&gt;&lt;p&gt;If you want things in full-screen mode (the above does Windowed mode), you can use&lt;/p&gt;&lt;pre&gt;xfreerdp /f /u:&amp;lt;YOUR_JPL_USERNAME&amp;gt; /v:cae-weng-gpu.jpl.nasa.gov
&lt;/pre&gt;&lt;p&gt;If you start in full-screen mode, then you can use Ctrl+Alt+Enter to toggle full-screen mode and windowed mode.&lt;/p&gt;</description>
<category>Software</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1908/how-do-i-connect-to-the-cae-weng-servers?show=1909#a1909</guid>
<pubDate>Mon, 08 May 2023 15:07:49 +0000</pubDate>
</item>
<item>
<title>Answered: How do I import Python modules that use HDF5 when the DARTS libraries use a different HDF5 version?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1906/import-python-modules-that-darts-libraries-different-version?show=1907#a1907</link>
<description>&lt;p&gt;You can modify the dlopen flags to import Python modules in a context where previously loaded symbols will not conflict. For example, suppose we want to import tables in this way. We can do&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;font-family:sans-serif,Arial,Verdana,&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;Apple Color Emoji&amp;quot;,&amp;quot;Segoe UI Emoji&amp;quot;,&amp;quot;Segoe UI Symbol&amp;quot;&quot;&gt;from contextlib import contextmanager&lt;/span&gt;
import os

@contextmanager
def use_local_symbols():
    dl_flags = sys.getdlopenflags()
    try:
        sys.setdlopenflags(os.RTLD_NOW | os.RTLD_DEEPBIND)
        yield 0
    finally:
        sys.setdlopenflags(dl_flags)

with use_local_symbols() as _:
    import tables&lt;/pre&gt;&lt;p&gt;This temporarily modifies the dlopen flags (via the Python context) in the following way:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;RTLD_NOW resolves all symbols before dlopen returns&lt;/li&gt;&lt;li&gt;RTLD_DEEPBIND places the symbols for this object before global, so it will use its own symbols rather than the global ones.&lt;/li&gt;&lt;/ul&gt;</description>
<category>Coding</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1906/import-python-modules-that-darts-libraries-different-version?show=1907#a1907</guid>
<pubDate>Wed, 05 Apr 2023 22:53:45 +0000</pubDate>
</item>
<item>
<title>Answered: How do I implemented doc tests in a Dclick file-exec script?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1903/how-do-i-implemented-doc-tests-in-a-dclick-file-exec-script?show=1904#a1904</link>
<description>&lt;p&gt;Suppose we want to run the following doc test&lt;/p&gt;&lt;pre&gt;&quot;&quot;&quot;
x = 2+2

assert(x==4)
&quot;&quot;&quot;&lt;/pre&gt;&lt;p&gt;The recipe to run this in a Dclick --file-exec script is:&lt;/p&gt;&lt;pre&gt;doc_test = &quot;&quot;&quot;
x = 2+2

assert(x==4)
&quot;&quot;&quot;

from tempfile import NamedTemporaryFile
import doctest, sys, os

tf = NamedTemporaryFile(suffix=&quot;.txt&quot;, dir=&quot;.&quot;)
with open(tf.name, &quot;w&quot;) as f:
    f.write(doc_test)

(nfails, _) = doctest.testfile(
    tf.name,
    module_relative=False,
    verbose=os.getenv(&quot;DTEST_RUNNING&quot;) != &quot;running&quot;,
    optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,
    globs={&quot;sim&quot;: sim},
)
sys.exit(int(nfails &amp;gt; 0))&lt;/pre&gt;&lt;p&gt;This takes the doc string, stores it in a variable, writes it to a temporary file, and then runs doctest on that temporary file.&amp;nbsp;&lt;/p&gt;</description>
<category>Testing</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1903/how-do-i-implemented-doc-tests-in-a-dclick-file-exec-script?show=1904#a1904</guid>
<pubDate>Thu, 16 Feb 2023 15:17:11 +0000</pubDate>
</item>
<item>
<title>Answered: Is StateAttitudeRELFPAlignParam actually doing what it claims?</title>
<link>https://dartslab.jpl.nasa.gov/qa/237/stateattituderelfpalignparam-actually-doing-what-claims?show=1902#a1902</link>
<description>See APPENDIX H of the &lt;a href=&quot;https://dartslab.jpl.nasa.gov/technotes/Releases/COMPASS/2019-03-25-R10/2019-06-27-COMPASS-Base-Package-R10-Delivery-Notes-v2.pdf&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://dartslab.jpl.nasa.gov/technotes/Releases/COMPASS/2019-03-25-R10/2019-06-27-COMPASS-Base-Package-R10-Delivery-Notes-v2.pdf&lt;/a&gt; for updates made by Clara OFarrell.</description>
<category>DSENDS</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/237/stateattituderelfpalignparam-actually-doing-what-claims?show=1902#a1902</guid>
<pubDate>Tue, 14 Feb 2023 18:50:02 +0000</pubDate>
</item>
<item>
<title>Is there a method for capturing a high/low watermark value for a variable and the associated time stamp?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1901/there-method-capturing-watermark-value-variable-associated</link>
<description>I&amp;#039;m looking for a way to capture a high/low variable value with the associated timestamp, and without triggering an event?</description>
<category>Data logging</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1901/there-method-capturing-watermark-value-variable-associated</guid>
<pubDate>Wed, 08 Feb 2023 18:35:51 +0000</pubDate>
</item>
<item>
<title>Answered: How do I make GitLab use the full width of my screen?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1899/how-do-i-make-gitlab-use-the-full-width-of-my-screen?show=1900#a1900</link>
<description>&lt;p&gt;1. Got to your preferences.&lt;/p&gt;&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://dartslab.jpl.nasa.gov/qa/image/1899_gitlab_preferences.png&quot; style=&quot;height:334px; width:454px&quot;&gt;&lt;/p&gt;&lt;p&gt;2. Scroll down to behavior and change the &quot;Layout width&quot; to &quot;fluid&quot;.&lt;/p&gt;&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://dartslab.jpl.nasa.gov/qa/image/1899_gitlab_preferences_layout_width.png&quot; style=&quot;height:268px; width:750px&quot;&gt;&lt;/p&gt;</description>
<category>Version Control</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1899/how-do-i-make-gitlab-use-the-full-width-of-my-screen?show=1900#a1900</guid>
<pubDate>Tue, 31 Jan 2023 19:24:59 +0000</pubDate>
</item>
<item>
<title>Answered: How can multiple users share a common base sandbox?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1897/how-can-multiple-users-share-a-common-base-sandbox?show=1898#a1898</link>
<description>&lt;p&gt;The terms base and user sandbox will be used in this answer. The base sandbox refers to the common, shared sandbox among many users. The user sandbox refers to the individual, personal sandbox used by a user. The base sandbox contains common modules and code&amp;nbsp;that users do not need to modify. The user sandbox contains modules with code that the user can run directly or change.&lt;/p&gt;&lt;h2&gt;Base sandbox&lt;/h2&gt;&lt;p&gt;The developer releasing the base sandbox should add the following to the site config:&lt;/p&gt;&lt;pre&gt;USER_COMPILE_FLAGS=-I${BASE_SBOX}/include
USER_LINK_FLAGS=-L${BASE_SBOX}/lib/${YAM_TARGET}
CC_COMPILE_FLAGS              += $(USER_COMPILE_FLAGS)
CPLUSPLUS_COMPILE_FLAGS       += $(USER_COMPILE_FLAGS)
CC_STATIC_LINK_FLAGS          += $(USER_LINK_FLAGS)   
CPLUSPLUS_STATIC_LINK_FLAGS   += $(USER_LINK_FLAGS)
CC_SHARED_LINK_FLAGS          += $(USER_LINK_FLAGS)
CPLUSPLUS_SHARED_LINK_FLAGS   += $(USER_LINK_FLAGS)&lt;/pre&gt;&lt;p&gt;This is the only thing that needs to change in the base sandbox.&lt;/p&gt;&lt;h2&gt;User sandbox&lt;/h2&gt;&lt;div&gt;The setup for the user sandbox is as follows:&lt;/div&gt;&lt;div&gt;1. Obtain a copy of the user sandbox.&lt;/div&gt;&lt;div&gt;2. Create an alias that points to the base sandbox&#039;s dlabrun_shared file. For example:&lt;/div&gt;&lt;pre&gt;&lt;code&gt;drun=&amp;lt;BASE_SBOX&amp;gt;/../dlabrun_shared&lt;/code&gt;
&lt;/pre&gt;&lt;p&gt;3. Run&amp;nbsp;&lt;/p&gt;&lt;pre&gt;drun make all&lt;/pre&gt;&lt;p&gt;at the top level of the user sandbox.&amp;nbsp;&lt;/p&gt;</description>
<category>Building</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1897/how-can-multiple-users-share-a-common-base-sandbox?show=1898#a1898</guid>
<pubDate>Wed, 25 Jan 2023 22:53:47 +0000</pubDate>
</item>
<item>
<title>Answered: How do I add new git servers to my gpg credentials?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1895/how-do-i-add-new-git-servers-to-my-gpg-credentials?show=1896#a1896</link>
<description>&lt;p&gt;Once you have gpg credentials setup, you can add&amp;nbsp;new git servers to it by doing the following:&lt;/p&gt;&lt;p&gt;1. Decrypt the file so you can edit it.&amp;nbsp;&lt;/p&gt;&lt;pre&gt;gpg --decrypt --recipient &amp;lt;your_email&amp;gt; ~/.git-credentials.gpg &amp;gt; git-credentials&lt;/pre&gt;&lt;p&gt;This will create a plain text file&amp;nbsp;called git-credentials with all of your current git credential info.&lt;/p&gt;&lt;p&gt;2. Add new information using the same structure as before. For example, to add github.jpl.nasa.gov to your list of know credentials, append the following to the file.&lt;/p&gt;&lt;pre&gt;machine github.jpl.nasa.gov

login YOUR_USERNAME

password YOUR_PASSWORD

protocol https&lt;/pre&gt;&lt;p&gt;3. Re-encrypt your git credentials using&amp;nbsp;&lt;/p&gt;&lt;pre&gt;gpg --encrypt --recipient &amp;lt;YOUR_EMAIL&amp;gt; git-credentials &amp;amp;&amp;amp; mv git-credentials.gpg ~/.git-credentials.gpg&lt;/pre&gt;&lt;p&gt;4. Delete the unencrypted file.&lt;/p&gt;&lt;pre&gt;rm git-credentials
&lt;/pre&gt;</description>
<category>Version Control</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1895/how-do-i-add-new-git-servers-to-my-gpg-credentials?show=1896#a1896</guid>
<pubDate>Tue, 24 Jan 2023 23:31:09 +0000</pubDate>
</item>
<item>
<title>Answered: How do I encrypt my git credentials with gpg?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1892/how-do-i-encrypt-my-git-credentials-with-gpg?show=1893#a1893</link>
<description>&lt;p&gt;1. Create unencrypted credentials file called git-credentials. with the following structure&lt;/p&gt;&lt;pre&gt;machine dartsgitlab-internal.jpl.nasa.gov

login YOUR_USERNAME

password YOUR_PASSWORD

protocol https&lt;/pre&gt;&lt;p&gt;2. Encrypt this file by doing&amp;nbsp;&lt;/p&gt;&lt;pre&gt;gpg --encrypt --recipient &amp;lt;YOUR_EMAIL&amp;gt; git-credentials &amp;amp;&amp;amp; mv git-credentials.gpg ~/.git-credentials.gpg
&lt;/pre&gt;&lt;p&gt;If you do not have a GPG key, you will need to generate one with&lt;/p&gt;&lt;pre&gt;gpg --generate-key&lt;/pre&gt;&lt;p&gt;If you are using this for a cron job, you should not set a password. That way, the cron job can decrypt the file without an extra password.&lt;/p&gt;&lt;p&gt;3. Check that this worked correctly by doing&lt;/p&gt;&lt;pre&gt;gpg --decrypt --recipient &amp;lt;YOUR_EMAIL&amp;gt; ~/.git-credentials.gpg | diff -s git-credentials -&lt;/pre&gt;&lt;p&gt;4. Delete the original, unencrypted file.&lt;/p&gt;&lt;pre&gt;rm git-credentials&lt;/pre&gt;&lt;p&gt;5. Get&amp;nbsp;the &lt;strong&gt;git-credential-netrc.perl&lt;/strong&gt; script put it&amp;nbsp;somewhere on your PATH. This script is located &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/git/git/blob/master/contrib/credential/netrc/git-credential-netrc.perl&quot;&gt;here&lt;/a&gt;. You can use the following command to save it to some place on your path and make executable (saved to /home/dlab/pggs/bin on our system):&lt;/p&gt;&lt;pre&gt;curl -o ./git-credential-netrc.perl https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl&lt;/pre&gt;&lt;p&gt;6. To tell git to use these gpg credentials, run&lt;/p&gt;&lt;pre&gt;git config --global credential.helper &#039;netrc -f ~/.git-credentials.gpg&#039;
&lt;/pre&gt;&lt;p&gt;7. To check that git has switched to gpg run&lt;/p&gt;&lt;pre&gt;git config --global --list
&lt;/pre&gt;&lt;p&gt;It should show the&amp;nbsp;&#039;credential.helper=netrc -f ~/.git-credentials.gpg&#039; line in the output&lt;/p&gt;</description>
<category>Version Control</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1892/how-do-i-encrypt-my-git-credentials-with-gpg?show=1893#a1893</guid>
<pubDate>Sat, 14 Jan 2023 18:00:46 +0000</pubDate>
</item>
<item>
<title>Answered: How does one get plantUML working on the gitlab server?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1890/how-does-one-get-plantuml-working-on-the-gitlab-server?show=1891#a1891</link>
<description>&lt;p&gt;On &lt;strong&gt;hamilton&lt;/strong&gt;, run&amp;nbsp;&lt;em&gt;/etc/gitlab/stop_plantuml-server&lt;/em&gt; to stop the server, and&amp;nbsp;&lt;em&gt;/etc/gitlab/start_plantuml-server&lt;/em&gt; to start the plantUML server.&lt;/p&gt;</description>
<category>Admin</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1890/how-does-one-get-plantuml-working-on-the-gitlab-server?show=1891#a1891</guid>
<pubDate>Fri, 13 Jan 2023 06:44:09 +0000</pubDate>
</item>
<item>
<title>Answered: How do I add a self-signed certificate to git?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1887/how-do-i-add-a-self-signed-certificate-to-git?show=1888#a1888</link>
<description>&lt;h1&gt;DARTS lab machines&lt;/h1&gt;&lt;p&gt;If you&#039;re on a dlab, machine then all you need to do is run&lt;/p&gt;&lt;pre&gt;git config --global http.sslCAInfo /home/dartsfn/pkgs/etc/cert.perm&lt;/pre&gt;&lt;p&gt;This will add the common SSL certificates that we use. To add a new certificate to the common set, you need to modify the&amp;nbsp;script that auto-generates certificates each day via the ssl_certs&amp;nbsp;job. Servers can be added to the list in&amp;nbsp;/home/dartsfn/pkgs/etc/generate_cert.py&lt;/p&gt;&lt;h1&gt;Local machine and custom SSL servers&lt;/h1&gt;&lt;p&gt;If you need to run things from your local machine, you can copy the cert.perm file specified above to a location and then set git to use it. The instructions below can be used to add extra servers to a cert.perm file.&lt;/p&gt;&lt;p&gt;There are three steps needed to do this:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Get the certificate.&lt;/li&gt;&lt;li&gt;Save it to your computer in a file.&lt;/li&gt;&lt;li&gt;Set git to trust certificates in this file.&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Get the certificate and save it to your computer&lt;/h2&gt;&lt;p&gt;You can obtain the certificate from your web browser.&amp;nbsp;&lt;/p&gt;&lt;p&gt;In Chrome, this can be done by doing the following:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Got to the main &lt;a rel=&quot;nofollow&quot; href=&quot;https://dartsgitlab-internal.jpl.nasa.gov&quot;&gt;https://dartsgitlab-internal.jpl.nasa.gov&lt;/a&gt; site&lt;/li&gt;&lt;li&gt;Click the Secure button (a padlock) in an address bar. If using JPL servers, this may be a warning sign that says &quot;Not secure&quot;.&lt;/li&gt;&lt;li&gt;Click the Certificate(Valid). Again, if using JPL servers this may say &quot;Certificate is not valid.&quot;&lt;/li&gt;&lt;li&gt;Go to the Details tab.&lt;/li&gt;&lt;li&gt;Click the &quot;Export ...&quot; button, and save it to a file.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;In Firefox, this can be done by doing the following:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Click the Secure button (a padlock) in an address bar.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Click the right arrow next to &quot;Connection secure.&quot;&amp;nbsp;If using a JPL server, this may say &quot;Connection not secure.&quot;&lt;/li&gt;&lt;li&gt;Click the &quot;More information&quot; button.&lt;/li&gt;&lt;li&gt;Click &quot;View certificate.&quot;&lt;/li&gt;&lt;li&gt;Click the &quot;Download&quot; button to save it to a file.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;You can also retrieve it using Python by running&lt;/p&gt;&lt;pre&gt;import ssl
ssl.get_server_certificate((server, 443))&lt;/pre&gt;&lt;p&gt;where server is the name of the server. For example, for the JPL GitHub, this would be:&lt;/p&gt;&lt;pre&gt;ssl.get_server_certificate((&#039;github.jpl.nasa.gov&#039;, 443))&lt;/pre&gt;&lt;h2&gt;Set&amp;nbsp;git to trust certificates in this file&lt;/h2&gt;&lt;p&gt;Run the following command:&lt;/p&gt;&lt;pre&gt;git config --global http.sslCAInfo &amp;lt;path_to_cert_file&amp;gt;
&lt;/pre&gt;&lt;p&gt;In the previous step, suppose you saved this file to ~/.git-certs/cert.perm, then the command would be:&lt;/p&gt;&lt;pre&gt;git config --global http.sslCAInfo ~/.git-certs/cert.perm
&lt;/pre&gt;</description>
<category>Version Control</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1887/how-do-i-add-a-self-signed-certificate-to-git?show=1888#a1888</guid>
<pubDate>Thu, 12 Jan 2023 15:44:29 +0000</pubDate>
</item>
<item>
<title>Answered: How do I deliver a DSENDS package as  a github repo?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1884/how-do-i-deliver-a-dsends-package-as-a-github-repo?show=1885#a1885</link>
<description>For the DsendsSRLPkg delivery to nexus, see:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://dartslab.jpl.nasa.gov/technotes/Talks/2022-03-24%20Moving%20DsendsSRLPkg%20to%20Git.pdf&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://dartslab.jpl.nasa.gov/technotes/Talks/2022-03-24%20Moving%20DsendsSRLPkg%20to%20Git.pdf&lt;/a&gt;</description>
<category>Building</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1884/how-do-i-deliver-a-dsends-package-as-a-github-repo?show=1885#a1885</guid>
<pubDate>Thu, 01 Dec 2022 00:34:21 +0000</pubDate>
</item>
<item>
<title>Answered: How do I query part geometries and turn their visibility off?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1881/how-do-i-query-part-geometries-and-turn-their-visibility-off?show=1882#a1882</link>
<description>&lt;p&gt;Part geometries for a particular body are accessed from the body.&lt;/p&gt;&lt;p&gt;For example, given an instance of a body, &lt;strong&gt;bd&lt;/strong&gt;, to view all part geometries associated with that body:&lt;/p&gt;&lt;pre&gt;bd.partGeometrySpecs().keys()
&lt;/pre&gt;&lt;p&gt;To toggle off the visibility for a particular part geometry:&lt;/p&gt;&lt;pre&gt;bd.getPartGeometry(&#039;visual&#039;).visibility(False)&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</description>
<category>Dspace visualization</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1881/how-do-i-query-part-geometries-and-turn-their-visibility-off?show=1882#a1882</guid>
<pubDate>Wed, 02 Nov 2022 02:11:51 +0000</pubDate>
</item>
<item>
<title>Answered: How can I share a remote terminal session with other developers?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1879/how-can-share-remote-terminal-session-with-other-developers?show=1880#a1880</link>
<description>&lt;p&gt;The &lt;strong&gt;tmate&lt;/strong&gt; tool is very handy for sharing terminal sessions. The tool can be readily installed using apt, dnf or any other package manager.&lt;/p&gt;&lt;p&gt;Now, lets say user &lt;strong&gt;A&lt;/strong&gt; wants to get help from user &lt;strong&gt;B&lt;/strong&gt; to debug a problem on &lt;strong&gt;A&#039;s&lt;/strong&gt; computer.&amp;nbsp; In this case user &lt;strong&gt;A&lt;/strong&gt; may find it useful to share a terminal with &lt;strong&gt;B&lt;/strong&gt; so that &lt;strong&gt;B&lt;/strong&gt; can use the keyboard to work directly on it. For this, &lt;strong&gt;A&lt;/strong&gt; should&amp;nbsp;run &lt;strong&gt;tmate&lt;/strong&gt;&amp;nbsp; in a local terminal, and cut and paste the keys it prints out in a slack message to &lt;strong&gt;B&lt;/strong&gt;.&amp;nbsp; &lt;strong&gt;B&lt;/strong&gt; can&amp;nbsp;can then simply run &lt;strong&gt;ssh &amp;lt;key&amp;gt;&lt;/strong&gt; (normally the last of the 4 keys) on a local terminal.&amp;nbsp; After this&amp;nbsp;both &lt;strong&gt;A&lt;/strong&gt; and &lt;strong&gt;B&lt;/strong&gt;&amp;nbsp;can type in their local&amp;nbsp;terminals and see each other&#039;s output as for a shared terminal. The only thing missing will be&amp;nbsp;mousing which would require a VNC session. However&amp;nbsp;a shared terminal&amp;nbsp;can be very useful in its own right.&lt;/p&gt;</description>
<category>Developer</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1879/how-can-share-remote-terminal-session-with-other-developers?show=1880#a1880</guid>
<pubDate>Fri, 28 Oct 2022 14:20:09 +0000</pubDate>
</item>
<item>
<title>How do I model a spacecraft bus with two solar arrays connected by a flexible hinge</title>
<link>https://dartslab.jpl.nasa.gov/qa/1878/model-spacecraft-with-solar-arrays-connected-flexible-hinge</link>
<description>I have a spacecraft that I model as a rectangular bus with two large solar panels. &amp;nbsp;I want to allow the joint to be flexible and have been looking at using the SpringDamperMotor model.&lt;br /&gt;
&lt;br /&gt;
I essentially want to have a flexible &amp;#039;BALL&amp;#039; joint, meaning the joint can flex up/down and left/right, along with twist.&lt;br /&gt;
&lt;br /&gt;
Is there an example of this? &amp;nbsp;I think the SpringDamperMotor model is a single-axis motor (all the examples are &amp;#039;PIN&amp;#039; joints and robot arms), is there an example of a more complicated flexible joint?</description>
<category>Q&amp;A site</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1878/model-spacecraft-with-solar-arrays-connected-flexible-hinge</guid>
<pubDate>Thu, 08 Sep 2022 15:25:26 +0000</pubDate>
</item>
<item>
<title>Answered: How does one profile C++ code called from a Python script?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1875/how-does-one-profile-c-code-called-from-a-python-script?show=1876#a1876</link>
<description>&lt;h1&gt;Usage&lt;/h1&gt;&lt;p&gt;The google profiling tools and yep Python library can be used to do this.&amp;nbsp;&lt;/p&gt;&lt;p&gt;In the Python code do:&lt;/p&gt;&lt;pre&gt;import yep
yep.start(&quot;my_profile.prof&quot;)
# code you want to run goes here
yep.stop()&lt;/pre&gt;&lt;p&gt;The output file, my_profile.prof, can then be analyzed using the google pprof tool. Note, this is different than the regular pprof tool, and has a different name on the dlab machines: gpprof. To analyze the output file simply run (on the dlab machines)&lt;/p&gt;&lt;pre&gt;gpprof my_profile.prof&lt;/pre&gt;&lt;p&gt;This will open the my_profile.prof file in the google profiler. Then, simply run one of the commands, e.g., web, to view the output. See&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://dartsgitlab-internal.jpl.nasa.gov/darts-lab/jpl-internal/all-access/projects/eels/-/issues/58#note_8921&quot;&gt;page&lt;/a&gt;&amp;nbsp;for example output.&lt;/p&gt;&lt;p&gt;Information on how to interpret the graph can be found &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/google/pprof/blob/main/doc/README.md#interpreting-the-callgraph&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Wall time&lt;/h2&gt;&lt;p&gt;By default, yep uses cpu time. However, in some instances, e.g., mutlithreading, it can be more useful to measure wall time. This can be done by setting the following environment variable:&lt;/p&gt;&lt;pre&gt;CPUPROFILE_REALTIME=1&lt;/pre&gt;&lt;p&gt;e.g., in bash this can be done with&lt;/p&gt;&lt;pre&gt;export CPUPROFILE_REALTIME=1
&lt;/pre&gt;&lt;h1&gt;Installation&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;The yep Python library can be installed via pip, i.e., pip install yep&lt;/li&gt;&lt;li&gt;The google profiler can be installed through the package manager. For example, on Fedora it is dnf install golang-github-google-pprof. Note, this may cause a name conflict if pprof is already installed. In that case, I recommend renaming the current pprof to temp_pprof. Install the library, rename the google pprof to gpprof, and then move temp_pprof back to pprof. In the end, this will keep the original pprof with the original name, and install the google pprof as gpprof.&lt;/li&gt;&lt;/ul&gt;</description>
<category>Testing</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1875/how-does-one-profile-c-code-called-from-a-python-script?show=1876#a1876</guid>
<pubDate>Wed, 17 Aug 2022 17:33:50 +0000</pubDate>
</item>
<item>
<title>Answered: How do I set up VSCode to start working with a DARTS sandbox?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1869/how-do-i-set-up-vscode-to-start-working-with-a-darts-sandbox?show=1872#a1872</link>
<description>&lt;h3&gt;Useful extensions&lt;/h3&gt;&lt;p&gt;Extensions can be installed to add features to VSCode. These are some of the extensions that are useful when working on DARTS code. To install an extension (or a set of extensions), open the &quot;Extensions&quot; panel on the left (Ctrl+Shift+X) and search for the name of the extension.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Python: this is a set of extensions that enables features like type hinting, linting, jupyter notebooks renderers... Extremely recommended for any developer of python code.&lt;ul&gt;&lt;li&gt;Additionally, once this set is installed, I recommend going to the &quot;Pylance&quot; page in the &quot;Extensions&quot; marketplace, clicking on the &quot;Manage&quot; cog symbol below the description of Pylance, clicking on &quot;Extension settings&quot;, and then finding &quot;Python &amp;gt; Analysis &amp;gt; Type Checking Mode&quot; and switching from &quot;off&quot; to &quot;basic&quot;. This will tell VSCode to add squiggly error lines under python code that Pylance finds incorrect (such as adding a string and a float).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;autoDocstring: allows autogenerating python docstrings for functions and classes. Since we use numpy-style docstrings, I recommend going into the &quot;Extension settings&quot; and changing &quot;Auto Docstring:&amp;nbsp;Docstring Format&quot; to &quot;numpy&quot;&lt;/li&gt;&lt;li&gt;AsciiDoc: useful for writing documentation files in AsciiDoc format in a local file before uploading to GitLab. Allows live-preview of how the AsciiDoc would look and syntax highlighting.&lt;/li&gt;&lt;/ul&gt;</description>
<category>JPL wide</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1869/how-do-i-set-up-vscode-to-start-working-with-a-darts-sandbox?show=1872#a1872</guid>
<pubDate>Mon, 04 Jul 2022 17:05:14 +0000</pubDate>
</item>
<item>
<title>Answered: How can edit and modify the contents of an HDF5 file?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1865/how-can-edit-and-modify-the-contents-of-an-hdf5-file?show=1866#a1866</link>
<description>&lt;p&gt;Lets say the file is &lt;em&gt;foo.h5&lt;/em&gt;.&amp;nbsp; First thing to do is to view its contents using&amp;nbsp;&lt;/p&gt;&lt;pre&gt;HDFView foo.h5&lt;/pre&gt;&lt;p&gt;Browse through the content to find the dataset you want to modify and note the path for it, eg. &#039;_dbase/object_43File/ints/_type&#039;. Now fire up python and at is prompt run&lt;/p&gt;&lt;pre&gt;import h5py
file = h5py.File(&#039;HDF5Store&#039;, mode=&#039;r+&#039;)
h = file[&#039;_dbase/object_43File/ints/_type&#039;]  # look up the dataset
h[&#039;&amp;lt;data key&amp;gt;&#039;][...]   # to examine the data (the ... are important)
h[&#039;&amp;lt;data key&amp;gt;&#039;][...] = 5   # set the scalar data
file.close()     # save the data&lt;/pre&gt;&lt;p&gt;Run HDFView again to verify that the data has changed.&lt;/p&gt;</description>
<category>Coding</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1865/how-can-edit-and-modify-the-contents-of-an-hdf5-file?show=1866#a1866</guid>
<pubDate>Sat, 25 Jun 2022 02:29:47 +0000</pubDate>
</item>
<item>
<title>Answered: How do I convert GitLab flavored markdown to a PDF?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1863/how-do-i-convert-gitlab-flavored-markdown-to-a-pdf?show=1864#a1864</link>
<description>&lt;p&gt;There are many ways to convert markdown to a PDF. However, most of these do not work with GitLab flavored markdown. The best way I have found is to make use of Python&#039;s markdown and a few extensions to convert to HTML, and then use &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/weasyprint/&quot;&gt;weasyprint &lt;/a&gt;to convert the HTML to a PDF. Specifically, we will be using the extra and &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/markdown-katex/&quot;&gt;katex&lt;/a&gt;&amp;nbsp;extensions.&lt;br&gt;&lt;br&gt;Example Python conversion script:&lt;/p&gt;&lt;pre&gt;import markdown
from markdown_katex import KatexExtension
from weasyprint import HTML

markdown.markdownFromFile(input=&#039;test.md&#039;, output=&#039;test.html&#039;, extensions=[KatexExtension(), &#039;extra&#039;])
HTML(&quot;test.html&quot;).write_pdf(&quot;test.pdf&quot;)
&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;</description>
<category>Documentation</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1863/how-do-i-convert-gitlab-flavored-markdown-to-a-pdf?show=1864#a1864</guid>
<pubDate>Fri, 24 Jun 2022 21:40:11 +0000</pubDate>
</item>
<item>
<title>Answered: How do I set up my non-JPL account on the dartsgitlab.jpl.nasa.gov site?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1861/how-do-set-up-non-jpl-account-the-dartsgitlab-jpl-nasa-gov-site?show=1862#a1862</link>
<description>&lt;p&gt;Check that&amp;nbsp;you can access &amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://einstein.jpl.nasa.gov&quot;&gt;https://einstein.jpl.nasa.gov&lt;/a&gt;. If not send your IP address (or a range) so they can be whitelisted. Once you can access the page:&lt;/p&gt;&lt;p&gt;1. Click Standard Tab at the login screen&lt;/p&gt;&lt;p&gt;2. Enter your specified username &amp;nbsp;with no quotes.&lt;/p&gt;&lt;p&gt;3. Enter default password and choose new password&amp;nbsp; and validate then will return to the login&amp;nbsp;screen&lt;/p&gt;&lt;p&gt;4. Log in again with your user name&amp;nbsp;and password chosen in step 3.&lt;/p&gt;&lt;p&gt;5. Will specify that two-factor authentication is required and will need to set that up&lt;/p&gt;&lt;p&gt;6. User will need to download 2FA app like &quot;Google Authenticator&quot; with steps shown.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
<category>Bug reports</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1861/how-do-set-up-non-jpl-account-the-dartsgitlab-jpl-nasa-gov-site?show=1862#a1862</guid>
<pubDate>Mon, 20 Jun 2022 12:41:08 +0000</pubDate>
</item>
<item>
<title>Answered: How do I convert Markdown to Asciidoc?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1857/how-do-i-convert-markdown-to-asciidoc?show=1858#a1858</link>
<description>&lt;p&gt;Although pandoc can be used to convert Markdown to Asciidoc, I found that pandoc sometimes had issues resolving embedded lists. In my experience, Kramdoc works much better; especially for GitLab flavored Markdown.&lt;/p&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;p&gt;To install Kramdoc run:&lt;/p&gt;&lt;pre&gt;gem install kramdown-asciidoc&lt;/pre&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;p&gt;To use Kramdoc I recommend running the following:&lt;/p&gt;&lt;pre&gt;kramdoc --format=GFM --output=&amp;lt;output_file_name.asciidoc&amp;gt; --wrap=preserve &amp;lt;input_file_name.md&amp;gt;
&lt;/pre&gt;&lt;h2&gt;Extras&lt;/h2&gt;&lt;p&gt;For more information on Kramdoc, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://matthewsetter.com/technical-documentation/asciidoc/convert-markdown-to-asciidoc-with-kramdoc/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
<category>Documentation</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1857/how-do-i-convert-markdown-to-asciidoc?show=1858#a1858</guid>
<pubDate>Tue, 24 May 2022 22:04:59 +0000</pubDate>
</item>
<item>
<title>Answered: How can I trigger deprecation warnings for a module variable?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1853/how-can-i-trigger-deprecation-warnings-for-module-variable?show=1854#a1854</link>
<description>&lt;p&gt;This can be achieved through the deprecated_module_attributes method in Dutils.deprecated.&lt;/p&gt;&lt;p&gt;Imagine your module test_module.py used to have the module-level attributes OLD_VARIABLE and DELETED_VARIABLE. You wish to replace OLD_VARIABLE with NEW_VARIABLE, while DELETED_VARIABLE should not be used at all. However, you do not wish yet to completely remove OLD_VARIABLE and DELETED_VARIABLE as they might be in use by customers. Then, if your original file is:&lt;/p&gt;&lt;pre style=&quot;text-align:left&quot;&gt;&lt;span style=&quot;color:#000000&quot;&gt;# test_module.py

OLD_VARIABLE = 42
DELETED_VARIABLE = 101
&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;then the new file should read:&lt;/p&gt;&lt;pre style=&quot;text-align:left&quot;&gt;&lt;span style=&quot;color:#000000&quot;&gt;# test_module.py
from Dutils.deprecated import deprecated_module_attributes

NEW_VARIABLE = 42

__getattr__ = deprecated_module_attributes(
    old_values = {
        &quot;OLD_VARIABLE&quot;: NEW_VARIABLE,
        &quot;DELETED_VARIABLE&quot;: 101
    },
    new_names = {
        &quot;OLD_VARIABLE&quot;: &quot;NEW_VARIABLE&quot;,
    }
)&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;If one imports either `OLD_VARIABLE` or `DELETED_VARIABLE`, then deprecation warnings will be displayed:&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;color:#000000&quot;&gt;import test_module

print(&quot;--- Warnings on use:&quot;)
test_module.OLD_VARIABLE
test_module.DELETED_VARIABLE

print(&quot;--- Warnings on import:&quot;)
from test_module import &lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;OLD_VARIABLE
&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;from test_module import &lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;DELETED_VARIABLE&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;which will show the following&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;color:#000000&quot;&gt;--- Warnings on use:
~/script.py:4: DeprecationWarning: The variable OLD_VARIABLE is deprecated. Use the variable: NEW_VARIABLE.
  test_module.OLD_VARIABLE
&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;span style=&quot;color:#000000&quot;&gt;~&lt;/span&gt;/script.py:5: DeprecationWarning: The variable DELETED_VARIABLE is deprecated.
  test_module.DELETED_VARIABLE
--- Warnings on import:
&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;span style=&quot;color:#000000&quot;&gt;~&lt;/span&gt;/script.py:8: DeprecationWarning: The variable OLD_VARIABLE is deprecated. Use the variable: NEW_VARIABLE.
  from test_module import OLD_VARIABLE
&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;span style=&quot;color:#000000&quot;&gt;~&lt;/span&gt;/script.py:9: DeprecationWarning: The variable DELETED_VARIABLE is deprecated.
  from test_module import DELETED_VARIABLE&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
<category>Coding</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1853/how-can-i-trigger-deprecation-warnings-for-module-variable?show=1854#a1854</guid>
<pubDate>Mon, 16 May 2022 20:29:51 +0000</pubDate>
</item>
<item>
<title>How do I get plugins for my Unreal Engine project despite me running Linux?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1852/how-get-plugins-unreal-engine-project-despite-running-linux</link>
<description>&lt;p&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;Since we get plugins through the Epic Games store, we can&#039;t get plugins directly while using linux.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;Instead, use your PC or Mac to get Epic Games Launcher and Unreal Engine. Buy various plugins and install them to either the engine or a project. Sometimes these plugins might add functionality or they may add art assets.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;In the case that they add functionality, they will install themselves directly into the engine or your plugins folder.&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;If they install to the Engine, you need to navigate to the Engine plugins folder and find the folder with your plugins name and copy it into the linux Engine.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;If they install to the project itself, in your project directory look for a folder called &quot;plugins&quot; and copy that folder into your linux unreal project.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;In the case that they add art assets, they might either install itself into the engine or project, if so look above for how to deal with it.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;If it imports art assets into your project (or makes its own), just copy that project into linux, open the project up using the linux unreal engine and &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/watch?v=qEK-Dtk9Ank&quot;&gt;migrate&lt;/a&gt; the files into the&amp;nbsp;Unreal Engine project you&#039;re working in (i.e. UnrealDarts)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;&lt;strong&gt;Warning!&lt;/strong&gt; Migrating assets between projects may mess up your file hierarchy, so after you get your wanted assets be sure to move them (in the Unreal Engine) into their proper place. After moving it be sure to right-click the top-level Contents folder and &quot;Fix up redirectors&quot;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#1d1c1d; font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif; font-size:15px&quot;&gt;Also, &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.unrealengine.com/marketplace/en-US/assets?count=20&amp;amp;sortBy=effectiveDate&amp;amp;sortDir=DESC&amp;amp;start=0&amp;amp;tag=4910&quot;&gt;every month Epic Games releases a bunch of free plugins. &lt;/a&gt;These plugins range from sound effects&amp;nbsp;to art assets and programmed feature packs (like an inventory system). Might be something to check every month as these plugins can be very high quality.&lt;/span&gt;&lt;/p&gt;</description>
<category>Q&amp;A site</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1852/how-get-plugins-unreal-engine-project-despite-running-linux</guid>
<pubDate>Sat, 07 May 2022 01:06:41 +0000</pubDate>
</item>
<item>
<title>Answered: How can I determine which events in the FSM have triggered and which have not?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1850/how-can-determine-which-events-the-have-triggered-which-have?show=1851#a1851</link>
<description>&lt;p&gt;To get the triggered/untriggered states for the current time:&lt;/p&gt;&lt;pre&gt;fsm = sim.fsm()

# get all state names
[s.name() for s in fsm.allStates()]

# use fsm.event_table to get triggered states
triggered_states = [i.name() for i in fsm.event_table]

# get untriggered states
untriggered_states = []
for s in fsm.allStates():
   if s.name() not in triggered_states:
      untriggered_states.append(s.name())&lt;/pre&gt;&lt;p&gt;If you want to get a history, you will need log the triggered/untriggered states in DataRecorder or&amp;nbsp;Dwatch.&lt;/p&gt;</description>
<category>Math library</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1850/how-can-determine-which-events-the-have-triggered-which-have?show=1851#a1851</guid>
<pubDate>Wed, 04 May 2022 22:50:15 +0000</pubDate>
</item>
<item>
<title>Answered: How do I use UnrealScene for development?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1845/how-do-i-use-unrealscene-for-development?show=1849#a1849</link>
<description>&lt;h1&gt;Working with multiple people (using source control)&lt;/h1&gt;&lt;p&gt;Working with Unreal Engine projects with multiple people can be a headache if done improperly. Often times when people are working in projects they may be unknowingly working in the same maps or files.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here&#039;s how you can best avoid merge conflicts inside of Unreal Engine and Blueprints.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;C++ merge conflicts get handled the usual way.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Set the startup map of the project to be blank&lt;ul&gt;&lt;li&gt;Blank map means no one can accidentally change things of the startup map.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Work in separate testing maps in a directory under _Maps/TestMaps&lt;ul&gt;&lt;li&gt;i.e. MAP_Matthew, MAP_Carolina&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;If people are trying to add functionality to a blueprint, try to create a child class from a&amp;nbsp;common blueprint first and work separately that way.&amp;nbsp;&lt;ul&gt;&lt;li&gt;When you want to merge your changes together you should be able to copy/paste your code into the blueprint.&lt;/li&gt;&lt;li&gt;Risky, but an alternative:&amp;nbsp;is to work in the same file, but before merging with upstream duplicate your conflicted files and add the postfix: _CONFLICT and then merge and override your conflicted files with their version and copy manually the blueprints from your _CONFLICT file.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Unreal Engine has source control functionality, but it&#039;s not useable for us because of how DARTS lab handles source control.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</description>
<category>Q&amp;A site</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1845/how-do-i-use-unrealscene-for-development?show=1849#a1849</guid>
<pubDate>Tue, 03 May 2022 17:37:41 +0000</pubDate>
</item>
<item>
<title>I need a frame that is always located at the CM but is fixed to the body</title>
<link>https://dartslab.jpl.nasa.gov/qa/1844/need-frame-that-is-always-located-at-the-cm-but-fixed-the-body</link>
<description>I need a frame that is always located at the center of mass of the main body but which is also fixed relative the body frame. &amp;nbsp;I thought simObj.mbody().cmFrame() would do this, but it seems like it&amp;#039;s fixed relative to the pcr frame. &amp;nbsp;Will &amp;quot;CapsuleBase_obj103_cm_frame&amp;quot; or &amp;quot;cegraph_cm_frame&amp;quot; give me what I&amp;#039;m looking for? &amp;nbsp;I can also create one, but it&amp;#039;s not clear to me how to create one that has both of these properties (i.e. always at the cm and rotates with the body).&lt;br /&gt;
&lt;br /&gt;
If the answer is CapsuleBase_obj103_cm_frame, then will the object number of this frame always be the same?</description>
<category>DSENDS</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1844/need-frame-that-is-always-located-at-the-cm-but-fixed-the-body</guid>
<pubDate>Thu, 21 Apr 2022 00:20:30 +0000</pubDate>
</item>
<item>
<title>Answered: How do I improve exceptions thrown by SWIG directors?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1842/how-do-i-improve-exceptions-thrown-by-swig-directors?show=1843#a1843</link>
<description>&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.swig.org/Doc4.0/Python.html#Python_nn36&quot;&gt;SWIG documentation&lt;/a&gt;&amp;nbsp;recommends adding the following to improve SWIG director exception handling:&lt;/p&gt;&lt;pre&gt;%feature(&quot;director:except&quot;) {
  if ($error != NULL) {
    throw Swig::DirectorMethodException();
  }
}

%exception {
  try { $action }
  catch (Swig::DirectorException &amp;amp;e) { SWIG_fail; }
}&lt;/pre&gt;&lt;p&gt;WARNING: As is, this block will re-define exceptions for all functions after the exception block. This may lead to undesirable behavior. A better approach is to refine the scope of exception. For example, to apply it to a specific method of a class within a namespace do:&lt;/p&gt;&lt;pre&gt;%feature(&quot;director:except&quot;) mynamespace::myclass::mymethod {
  if ($error != NULL) {
    throw Swig::DirectorMethodException();
  }
}

%exception mynamespace::myclass::mymethod {
  try { $action }
  catch (Swig::DirectorException &amp;amp;e) { SWIG_fail; }
}&lt;/pre&gt;&lt;p&gt;This improves the error message by include the Python stack trace. For example, here is an error message before adding the improved exception handling:&lt;/p&gt;&lt;pre&gt;File &quot;/home/leake/Documents/eelsPkg/lib/PYTHON/DScene/DScene_Py.py&quot;, line 2239, in executeReverse
    return _DScene_Py.CallbackRegistry_executeReverse(self)                                                               
SystemError: SWIG director method error. Error detected when calling &#039;_CallbackPyBase.execute&#039;&lt;/pre&gt;&lt;p&gt;Here is the same exception after adding the improved exception handling:&lt;/p&gt;&lt;pre&gt;File &quot;/home/leake/Documents/eelsPkg/lib/PYTHON/DScene/DScene_Py.py&quot;, line 2239, in executeReverse                           
    return _DScene_Py.CallbackRegistry_executeReverse(self)                                                                    
  File &quot;/home/leake/Documents/eelsPkg/lib/PYTHON/DScene/DScene_Py.py&quot;, line 2401, in execute       
    self._f()                                                                                                                  
  File &quot;test.py&quot;, line 30, in closeExtraDVars                                                                                  
    dv.thisown = True 
AttributeError: &#039;tuple&#039; object has no attribute &#039;thisown&#039;&lt;/pre&gt;&lt;p&gt;The improved exception points to the exact line in Python that caused the error, whereas the original did not.&lt;/p&gt;</description>
<category>SWIG</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1842/how-do-i-improve-exceptions-thrown-by-swig-directors?show=1843#a1843</guid>
<pubDate>Wed, 20 Apr 2022 18:03:56 +0000</pubDate>
</item>
<item>
<title>Answered: What are options for performing convex decomposition in DARTS, and how do they differ?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1840/what-options-performing-convex-decomposition-darts-differ?show=1841#a1841</link>
<description>&lt;p&gt;The following is a list of the available methods in DARTS:&lt;br&gt;1. MeshToBullet2. This script available with DBullet implements interfaces to the VHACD-4.0, VHACD-2.0, and HACD convex decomposition algorithms. For a more detailed discussion on these algorithms, see the &lt;a rel=&quot;nofollow&quot; href=&quot;https://dartsgitlab-internal.jpl.nasa.gov/darts-lab/jpl-internal/all-access/development/scene-geometry/dbullet/-/wikis/DBullet-documentation&quot;&gt;DBullet wiki&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;2. MeshToBullet. This binary file available with DBullet is a standalone script that can help user&#039;s generate convex hulls from mesh files; it uses Bullet&#039;s original &quot;ConvexDecomposition&quot; algorithm.&amp;nbsp;In forms, example &lt;a rel=&quot;nofollow&quot; href=&quot;https://pybullet.org/Bullet/phpBB3/viewtopic.php?t=7095&quot;&gt;here&lt;/a&gt;, it&#039;s noted that this algorithm is a bit more intuitive in terms of the settings the user can tweak compared to HACD and VHACD-2.0; however, the author of this post feels the intuitiveness of the settings for the VHACD-4.0 algorithm is similar. Moreover, the algorithms behind&amp;nbsp;MeshToBullet2 should yield better results than those in MeshToBullet for most cases. Another useful note here is DBullet itself now uses HACD as the default for convex decomposition, and PyBullet uses a version of VHACD.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The following is a list of methods that exist, but have not been utilized heavily yet:&lt;br&gt;1. The DMesh module can perform convex decompositions on DMeshes by using the &quot;computeConvexDecomposition&quot; method. This internally uses CGAL&#039;s&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://doc.cgal.org/latest/Convex_decomposition_3/index.html&quot;&gt;Convex_decomposition_3 function&lt;/a&gt;.&lt;/p&gt;</description>
<category>DBullet collision det.</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1840/what-options-performing-convex-decomposition-darts-differ?show=1841#a1841</guid>
<pubDate>Tue, 05 Apr 2022 16:02:07 +0000</pubDate>
</item>
<item>
<title>Answered: How do I redirect C-level streams in Python?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1838/how-do-i-redirect-c-level-streams-in-python?show=1839#a1839</link>
<description>&lt;p&gt;There is a nice article &lt;a rel=&quot;nofollow&quot; href=&quot;https://eli.thegreenplace.net/2015/redirecting-all-kinds-of-stdout-in-python/&quot;&gt;here&lt;/a&gt;&amp;nbsp;that gives a great explanation on how streams work at the system level, and why &quot;redirect_stdout&quot; does not work for C-level&amp;nbsp;streams. Then, it discusses how to create a&amp;nbsp;re-director that will redirect C-level streams. I am posting that code below for convenience:&lt;/p&gt;&lt;pre style=&quot;box-sizing: border-box; font-family: Consolas, monaco, monospace; font-size: 13.6px; white-space: pre; padding: 9.5px; margin-top: 0px; margin-bottom: 10px; line-height: 1.42857; word-break: break-all; overflow-wrap: normal; background: rgb(247, 247, 247); border: 1px solid rgb(204, 204, 204); border-radius: 4px; overflow: auto;&quot;&gt;&lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nn&quot;&gt;contextlib&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;contextmanager&lt;/span&gt;
&lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nn&quot;&gt;ctypes&lt;/span&gt;
&lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nn&quot;&gt;io&lt;/span&gt;
&lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nn&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nn&quot;&gt;sys&lt;/span&gt;
&lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nn&quot;&gt;tempfile&lt;/span&gt;

&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;libc&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;ctypes&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;CDLL&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;kc&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;c_stdout&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;ctypes&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;c_void_p&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;in_dll&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;libc&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box; color:#a31515&quot; class=&quot;s1&quot;&gt;&#039;stdout&#039;&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nd&quot;&gt;@contextmanager&lt;/span&gt;
&lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nf&quot;&gt;stdout_redirector&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;stream&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# The original fd stdout points to. Usually 1 on POSIX systems.&lt;/span&gt;
    &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;original_stdout_fd&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;stdout&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;fileno&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;()&lt;/span&gt;

    &lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;nf&quot;&gt;_redirect_stdout&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;to_fd&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#a31515&quot; class=&quot;sd&quot;&gt;&quot;&quot;&quot;Redirect stdout to the given file descriptor.&quot;&quot;&quot;&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Flush the C-level buffer stdout&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;libc&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;fflush&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;c_stdout&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Flush and close sys.stdout - also closes the file descriptor (fd)&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;stdout&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Make original_stdout_fd point to the same file as to_fd&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;dup2&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;to_fd&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;original_stdout_fd&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Create a new sys.stdout that points to the redirected fd&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;stdout&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;TextIOWrapper&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;fdopen&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;original_stdout_fd&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box; color:#a31515&quot; class=&quot;s1&quot;&gt;&#039;wb&#039;&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;))&lt;/span&gt;

    &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Save a copy of the original stdout fd in saved_stdout_fd&lt;/span&gt;
    &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;saved_stdout_fd&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;dup&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;original_stdout_fd&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Create a temporary file and redirect stdout to it&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;tfile&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;tempfile&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;TemporaryFile&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;mode&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box; color:#a31515&quot; class=&quot;s1&quot;&gt;&#039;w+b&#039;&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;_redirect_stdout&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;tfile&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;fileno&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;())&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Yield to caller, then redirect stdout back to the saved fd&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;k&quot;&gt;yield&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;_redirect_stdout&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;saved_stdout_fd&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box; color:#008000&quot; class=&quot;c1&quot;&gt;# Copy contents of temporary file to the given stream&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;tfile&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;flush&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;tfile&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;seek&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;SEEK_SET&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;stream&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;tfile&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;())&lt;/span&gt;
    &lt;span style=&quot;box-sizing:border-box; color:#0000ff&quot; class=&quot;k&quot;&gt;finally&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;tfile&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;n&quot;&gt;saved_stdout_fd&lt;/span&gt;&lt;span style=&quot;box-sizing:border-box&quot; class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;</description>
<category>Coding</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1838/how-do-i-redirect-c-level-streams-in-python?show=1839#a1839</guid>
<pubDate>Mon, 04 Apr 2022 21:04:30 +0000</pubDate>
</item>
<item>
<title>Answered: What are good practices for setting up a Kanban board on gitlab?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1836/what-are-good-practices-for-setting-up-kanban-board-on-gitlab?show=1837#a1837</link>
<description>&lt;p&gt;Kanban boards can be used for managing project issues, individual developer assigned issues etc. gitlab supports the creation of multiple Kanban boards that can be saved and revisited later. The key idea with a Kanban board is populate it with lists, with &lt;strong&gt;Open&lt;/strong&gt; issues being on the left end, and &lt;strong&gt;Closed&lt;/strong&gt; ones on the right end. The goal is to move issues progressively from the left to the right over time.&lt;/p&gt;&lt;p&gt;See the&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://dartsgitlab-internal.jpl.nasa.gov/groups/darts-lab/jpl-internal/-/boards/19?milestone_title=Cadre%20v5.0&quot;&gt;CADRE project Kanban board&lt;/a&gt;&amp;nbsp;for an example of the ideas listed below for setting up Kanban boards.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Our gitlab projects most map into YaM modules. Project issues normally span multiple modules. So to manage a projects issues, create the Kanban board at a higher group level which contains all the module projects of interest. Good places would be the&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://dartsgitlab-internal.jpl.nasa.gov/darts-lab/jpl-internal&quot;&gt;JPL Internal group&lt;/a&gt;&amp;nbsp;level. Give the board a name that makes it easy to pick out, since we expect to have many boards over time.&lt;/li&gt;&lt;li&gt;Once you create the board, we want to narrow it down its&amp;nbsp;issues to the ones relevant to the project. You can do this by going to the &lt;strong&gt;Edit board&lt;/strong&gt; link on the upper right and using milestone, assignee etc filters to filter down the list of issues. For the CADRE board the issues are narrowed down to the ones tied to the &lt;strong&gt;CADRE v5&lt;/strong&gt; delivery gitlab milestone.&lt;/li&gt;&lt;li&gt;Now use labels to add lists to the board via the &lt;strong&gt;Create list&lt;/strong&gt; link on the upper right. We want to keep the number of lists as small as possible to reduce clutter. Note that you can drag and drop issues across lists and this will automatically update the labels. Here is a suggested list in left to right order:&lt;ul&gt;&lt;li&gt;&lt;strong&gt;stage::DEVELOP&lt;/strong&gt; label: these are issues that are open, and ready to be worked on. That is, ones where we have sufficient description and understood approach.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;priority::HIGH&lt;/strong&gt; label:&amp;nbsp; these are the issues that are the highest priority among the list of develop ready issues.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;stage::INPROGRESS&lt;/strong&gt; label: these are issues from the high priority ones that are actively being worked.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;stage::REVIEW&lt;/strong&gt; label: these are issues on whom work has been completed, but are ready for review by the team before closing them out. This list can be dropped if there is only one member on the team.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;stage::ONHOLD&lt;/strong&gt; label: these are issues that were in progress, but have been side tracked for now due to some circumstances with the expectation that they will be moved back to the stage::INPROGRESS stage in the near future.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Tips on periodically managing the boards:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Start with the open items on the left and see if any have evolved in their definition can can be &amp;nbsp;moved to the develop list&lt;/li&gt;&lt;li&gt;Scan the develop list to see if any are priorities that should be moved to the high list on the right.&amp;nbsp;Also, any items that are no longer a priority should be removed altogether, or moved to the right into the open items list.&lt;/li&gt;&lt;li&gt;Scan the high priority list and see which are the ones that you are ready to work on, and move them to the on progress list. This action should only be done by the developer actually doing the work. In general we expect there be very small number of in progress items for any one developer.&lt;/li&gt;&lt;li&gt;Scan your assigned in progress items, and see if they are completed and can be moved to the review list, or if you are stuck waiting on something and in which case they should be moved to the on hold list. Again these actions should only done by the developer actually doing the work.&lt;/li&gt;&lt;li&gt;At a team meeting, go over the issues in the review column and see if there is agreement that they are indeed done, and if so, close the item.&lt;/li&gt;&lt;/ul&gt;</description>
<category>Developer</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1836/what-are-good-practices-for-setting-up-kanban-board-on-gitlab?show=1837#a1837</guid>
<pubDate>Fri, 01 Apr 2022 15:08:22 +0000</pubDate>
</item>
<item>
<title>Answered: What are dlopenflags?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1834/what-are-dlopenflags?show=1835#a1835</link>
<description>&lt;h2&gt;Answer&lt;/h2&gt;&lt;p&gt;The dlopenflags are used to control the flags Python uses when making calls to dlopen. dlopen is used to open dynamic shared objects, e.g., shared libraries. These can be get/set using the sys module, e.g., sys.getdlopenflags().&lt;br&gt;&lt;br&gt;In DARTS, these flags are set to&amp;nbsp;os.RTLD_GLOBAL | os.RTLD_NOW, which means the shared object will be made&amp;nbsp;available for symbol resolution of subsequently loaded&amp;nbsp;shared objects&#039; undefined symbols, and symbols in the shared object are resolved before dlopen finishes. For more information, see the &lt;a rel=&quot;nofollow&quot; href=&quot;https://man7.org/linux/man-pages/man3/dlopen.3.html&quot;&gt;man page on dlopen&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In DARTS, the&amp;nbsp;Dshell++Scripts/DebugLog_Py.py module sets these values.&amp;nbsp;&lt;/p&gt;&lt;h2&gt;Corner cases&lt;/h2&gt;&lt;p&gt;Sometimes, the global sharing of symbols can cause an issue. For example, if the Python noise package is loaded and used immediately after, intermittent seg faults can occur. The stack traces of these seg faults may point to missing files or missing symbols. In these cases, the opendlflags may need to temporarily be reset to os.RTLD_NOW for the import of such packages. See DMesh_Py.applySimplexNoise for an example.&lt;/p&gt;</description>
<category>Coding</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1834/what-are-dlopenflags?show=1835#a1835</guid>
<pubDate>Tue, 29 Mar 2022 18:16:54 +0000</pubDate>
</item>
<item>
<title>Answered: How do I generate a terrain using simplex noise?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1831/how-do-i-generate-a-terrain-using-simplex-noise?show=1832#a1832</link>
<description>&lt;h2&gt;Breakdown&lt;/h2&gt;&lt;p&gt;This question can be divided into two parts:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;How do we generate simplex noise?&amp;nbsp;&lt;/li&gt;&lt;li&gt;How do we apply this noise to a mesh and bring in into DARTS?&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;1. How do we generate simplex noise?&lt;/h2&gt;&lt;p&gt;The Python&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/noise/&quot;&gt;noise&lt;/a&gt;&amp;nbsp;package can be used to easily generate simplex noise. &lt;a rel=&quot;nofollow&quot; href=&quot;https://medium.com/@yvanscher/playing-with-perlin-noise-generating-realistic-archipelagos-b59f004d8401#:~:text=octaves%3A%20the%20number%20of%20levels,overall%20shape%20(adjusts%20amplitude).&quot;&gt;This article&lt;/a&gt; is also useful in helping understand the simplex noise parameters.&lt;/p&gt;&lt;h2&gt;2.&amp;nbsp;How do we apply this noise to a mesh and bring in into DARTS?&lt;/h2&gt;&lt;p&gt;The DMesh::applySimplexNoise function can be used to apply simplex noise to a function. Moreover, DMesh meshes can easily be incorporated with the rest of the DARTS framework. The arguments for applySimplexNoise&amp;nbsp;are the mesh that the noise should be applied to, and a layers argument that contains the simplex noise parameters. For more information on the layers argument, see the doc string for the applySimplexNoise function.&amp;nbsp;&lt;/p&gt;&lt;h2&gt;Alternative solution&lt;/h2&gt;&lt;p&gt;Alternatively, one could write the noise function themselves and use the DMesh::Mesh::perturbMesh function, which can be used to perturb a mesh using a user-defined function. An example is given here using the Python&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/noise/&quot;&gt;noise&lt;/a&gt;&amp;nbsp;package.&amp;nbsp;&lt;/p&gt;&lt;h2&gt;Example:&lt;/h2&gt;&lt;p&gt;The following script shows an example:&lt;/p&gt;&lt;pre&gt;import os
import noise
from DScene import DMesh_Py

# Constants

name = &quot;NoisyTerrain&quot;
x_len = 10
y_len = 10
numX = 40
numY = 40

layers = [
    dict(amp=4, seed=5, res=1, octaves=10, persistence=0.5, lacunarity=2.0),
]

# Calculated constants
size = max(x_len, y_len)

# Noise function
def add_simplex_noise(x, y, res, seed, amp=1, octaves=1, persistence=0.5, lacunarity=2.0):
    scale = size/res
    return amp*noise.snoise3(
        x/scale,
        y/scale,
        seed,
        octaves=octaves,
        persistence=persistence,
        lacunarity=lacunarity)

def generate_simplex(x,y,z):
    for layer in layers:
        amp = layer.get(&quot;amp&quot;, 1)
        res = layer.get(&quot;res&quot;, 1)
        octaves = layer.get(&quot;octaves&quot;,2)
        persistence = layer.get(&quot;persistence&quot;, 0.5)
        lacunarity = layer.get(&quot;lacunarity&quot;, 2.0)
        seed = layer.get(&quot;seed&quot;, 0)
        z += add_simplex_noise(x,y,res,seed,amp=amp, octaves=octaves, persistence=persistence,lacunarity=lacunarity)

    return x,y,z


# Create flat mesh
mesh = DMesh_Py.constructPlanarMesh(name, x_len, y_len, numX, numY)

# Perturb it using the noise function above
mesh.perturbMesh(generate_simplex)

# Visualize the mesh
mesh.show()&lt;/pre&gt;</description>
<category>SimScape terrains</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1831/how-do-i-generate-a-terrain-using-simplex-noise?show=1832#a1832</guid>
<pubDate>Fri, 18 Mar 2022 22:43:26 +0000</pubDate>
</item>
<item>
<title>Answered: Given a tar ball on a telerbotics machine, How do you copy and run it on nexus?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1829/given-tar-ball-telerbotics-machine-how-you-copy-and-run-nexus?show=1830#a1830</link>
<description>&lt;p&gt;To copy to nexus from a telerobotics machine:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color:#dddddd&quot;&gt;scp /home/dlabdriveS/repo/docker/deliv/JplDartsLab-DsendsEnceladusPkg-R1-00-2022-03-16-mintps-nexus7.4_monte158.tar &amp;lt;your user name&amp;gt;@nexus:/home/&amp;lt;your user name&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;For example, my user name is `cslim` so if I&#039;m logged into hertz, the copy command would be:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color:#dddddd&quot;&gt;scp&amp;nbsp; /home/dlabdriveS/repo/docker/deliv/JplDartsLab-DsendsEnceladusPkg-R1-00-2022-03-16-mintps-nexus7.4_monte158.tar cslim@nexus:/home/cslim&lt;/span&gt;&lt;/p&gt;&lt;p&gt;On nexus, untar the tar ball&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color:#dddddd&quot;&gt;ssh -Y nexus&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color:#dddddd&quot;&gt;tar xvf JplDartsLab-DsendsEnceladusPkg-R1-00-2022-03-16-mintps-nexus7.4_monte158.tar&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Use DsendsEnceladusPkg-R1-00-2022-03-16-monte158-nexus7.4_conda_mdnav_11.2_monte_158-PY3/dlabrun instead of srun to run scripts. For example:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color:#dddddd&quot;&gt;DsendsEnceladusPkg-R1-00-2022-03-16-monte158-nexus7.4_conda_mdnav_11.2_monte_158-PY3/dlabrun python &amp;lt;your script.py&amp;gt;&lt;/span&gt;&lt;/p&gt;</description>
<category>Q&amp;A site</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1829/given-tar-ball-telerbotics-machine-how-you-copy-and-run-nexus?show=1830#a1830</guid>
<pubDate>Thu, 17 Mar 2022 19:36:33 +0000</pubDate>
</item>
<item>
<title>Answered: How do I visualize a DAT file?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1826/how-do-i-visualize-a-dat-file?show=1827#a1827</link>
<description>&lt;h1&gt;Gmsh&lt;/h1&gt;&lt;p&gt;Gmsh is a free, open-source tool that can be used to view NASTRAN files.&amp;nbsp;&lt;br&gt;&lt;br&gt;To use it do:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Run &quot;gmsh &amp;lt;filename&amp;gt;&quot; from the terminal. Alternatively, just run &quot;gmsh&quot; and open the file via the GUI.&lt;/li&gt;&lt;li&gt;Turn on nodes and 1-D elements by going to Tools --&amp;gt; Options --&amp;gt; Mesh and check the appropriate boxes. Node labels (numbers) can also be enabled via this window.&lt;/li&gt;&lt;/ol&gt;&lt;h1&gt;Hypermesh&lt;/h1&gt;&lt;p&gt;&lt;br&gt;Hypermesh can also be used to visualize NASTRAN files. However, I found it less intuitive to use than gmsh. Also, see warning below.&lt;br&gt;&lt;br&gt;&lt;strong&gt;WARNING: This is&amp;nbsp;CAE software, specifically HyperWorks. If you use it you will likely get an email from the CAE General Community regarding the subscription fee, which at the time I am writing this answer is &quot;$6.46 per work hour against the accounts on your timecard – about $221 per week. It is not an hourly use charge.&quot; This charge grants you access&amp;nbsp;to all CAE tools.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;To use it do:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Add the following to your .bashrc file:&lt;br&gt;&lt;br&gt;alias hm=&quot;cd ~/2017 &amp;amp;&amp;amp; /home/dlab/pkgs/src/altair/altair/scripts/hm&quot;&lt;br&gt;export ALTAIR_LICENSE_PATH=&quot;6200@cae-lm-prod1.jpl.nasa.gov&quot;&lt;br&gt;&lt;br&gt;or if you are using tcshrc, use:&lt;br&gt;&lt;br&gt;alias hm &quot;cd ~/2017 &amp;amp;&amp;amp; /home/dlab/pkgs/src/altair/altair/scripts/hm&quot;&lt;br&gt;setenv ALTAIR_LICENSE_PATH &quot;6200@cae-lm-prod1.jpl.nasa.gov&quot;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;This alias uses the ~/2017 as a temporary folder for all Hypermesh files. If you do not have a 2017 folder in your home directory, create one. If you want to use a different temporary folder name, create one.&lt;/li&gt;&lt;li&gt;From the terminal, type hm to start Hypermesh.&lt;/li&gt;&lt;li&gt;Import the DAT file to visualize.&lt;ul&gt;&lt;li&gt;Choose Nastran from the User Profiles menu that opens at the beginning.&lt;/li&gt;&lt;li&gt;Select File --&amp;gt; Import --&amp;gt; Solver Deck&lt;/li&gt;&lt;li&gt;Use the file selector to navigate to the DAT&amp;nbsp;file you wish to open.&lt;/li&gt;&lt;li&gt;Select Import&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;</description>
<category>Running s/w</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1826/how-do-i-visualize-a-dat-file?show=1827#a1827</guid>
<pubDate>Tue, 08 Mar 2022 20:29:24 +0000</pubDate>
</item>
<item>
<title>Answered: What does a &quot;stiff&quot; system mean?</title>
<link>https://dartslab.jpl.nasa.gov/qa/1824/what-does-a-stiff-system-mean?show=1825#a1825</link>
<description>&lt;p&gt;There are lots of definitions for a stiff system. I am going to collect some I have found useful here:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If the system has widely varying time scales, and the phenomena that change on fast scales are stable, then the problem is stiff [Ascher &amp;amp; Petzold 1998]. Found &lt;a rel=&quot;nofollow&quot; href=&quot;https://fulbright.uark.edu/departments/math/_resources/pdf/event-related/sls/sls2021-lecture-woodward.pdf&quot;&gt;here&lt;/a&gt;, but there is no reference to source given in the citation.&lt;/li&gt;&lt;li&gt;J. D. Lambert defines stiffness as follows: If a numerical method with a finite region of absolute stability, applied to a system with any initial conditions, is forced to use in a certain interval of integration a step length which is excessively small in relation to the smoothness of the exact solution in that interval, then the system is said to be stiff in that interval. Found on&amp;nbsp;Wikipedia&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://en.wikipedia.org/wiki/Stiff_equation&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If the system is linear:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A linear constant coefficient system is stiff if all of its eigenvalues have negative real part and the stiffness ratio is large. Found on&amp;nbsp;Wikipedia&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://en.wikipedia.org/wiki/Stiff_equation&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Other notes that might be helpful:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&quot;In some cases there may be two different problems with the same solution, yet one is not stiff and the other is. The phenomenon cannot therefore be a property of the exact solution, since this is the same for both problems, and must be a property of the differential system itself. Such systems are thus known as stiff systems.&quot; Found on&amp;nbsp;Wikipedia&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://en.wikipedia.org/wiki/Stiff_equation&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;</description>
<category>State propagation</category>
<guid isPermaLink="true">https://dartslab.jpl.nasa.gov/qa/1824/what-does-a-stiff-system-mean?show=1825#a1825</guid>
<pubDate>Mon, 07 Mar 2022 18:00:13 +0000</pubDate>
</item>
</channel>
</rss>