Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Report on the robotology software installation procedure #933

Closed
DanielePucci opened this issue Nov 27, 2021 · 11 comments
Closed

Report on the robotology software installation procedure #933

DanielePucci opened this issue Nov 27, 2021 · 11 comments

Comments

@DanielePucci
Copy link
Contributor

DanielePucci commented Nov 27, 2021

Hi all, today I decided to (re-)install the robotology-superbuild. I honestly acknowledge that it is a long time since I last installed it being pretty much busy with other businesses over the last two years. So, thank you very much for all the effort and continuous improvement.

However, I wanted to report my experience and feelings while trying to install the software. On the one hand, I want to apologise in advance if I missed something trivial during the installation procedure; on the other hand, I believe that I could be a good use-case of users that are not up-to-date with the technical details. For the latter reason, I decided to write this report: I think it is worth the risk of appearing shallow or not updated.

During the attempt at installing the software, I experienced many feelings that I also wanted to report. Probably, how people feel has an impact on how quick they drop the attempt of installing our software, and we would like to avoid this as much as we can. I categorise these feelings with keywords, but I associated them with emoticons, so during the report you can quickly see how I felt:

  1. I-am-dumb 😧
  2. This-is-super-cool 🥳
  3. Is-this-really-necessary? 🤔
  4. I-am-scared 😟
  5. I-am-bored 😴
  6. I-give-up 😫

When I have, I also wanted to provide suggestions for improvements - clearly, these are suggestions that you can decide to rule out. In these cases, I use

🟡 Suggestion

To provide the reader with a detailed and sincere feedback, I go through the robotology-superbuild README of this commit (the latest to date). So, let's get started.

robotology-superbuild

This is a meta repository (so-called "superbuild") that uses CMake and YCM

At this point, I clicked on CMake and YCM. I knew the basics, but I clicked and starting looking at these pages randomly. This is fine, but the user is already loosing time on something that - at the end - he does not want to do: he/she just wants to install software. You may think: it is your fault if you clicked. Yeah, but to help users avoid loosing time and going to the point, we may

🟡 Add a Reference section at the end of the README, and we can cite sources with something like [1, 2], where 1 and 2 are not hyperlinked there, but below in the Reference section. By doing so, we may help the reader keep the focus.

After thinking better, I am not sure if adding the details that the superbuild uses CMAKE and YCM is necessary here 🤔 At the end, at this point we are not suggesting the reader to do some action (i.e. check if you installed CMAKE) but just saying additional information that it is not really clear to me the purpose of (at this point specifically).

to automatically download and compile software developed in the robotology GitHub organization

I thought, this is super cool, three clicks and I am done 🥳

such as the YARP middleware or software used to run the iCub humanoid robot.

If people do not know YARP, or they want to know it better, they may start googling for it 🤔. Furthermore, since YARP is basically necessary to run iCub, probably

🟡 we may just leave the sentence such as the software used to run the iCub humanoid robot.

CMake is an open-source

The hyperlink (twice in two paragraphs) is really suggesting the reader: "hey, you gotta click if you did not do it before, and check the amazing site of CMAKE out!"

🟡 I would remove the hyperlink. Sincerely, however, I would remove the entire paragraph below

CMake is an open-source, cross-platform family of tools designed to build, test and package software.
A YCM Superbuild is a CMake project whose only goal is to download and build several other projects.
If you are familiar with ROS, it is something similar to catkin or colcon workspace, but using pure CMake for portability reasons and for customizing the build via CMake options. Furthermore, the robotology-superbuild also contains some infrastructure to build binaries of the contained projects for some platforms.

I felt that the documentation really wanted to inform me about CMake and YCM. But really wanted me. On the one hand, I was not understanding the purpose of these information 🤔 on the other hand, I was not really interested in these details, so I perceived a pedantic will of the documentation. As a consequence, I started interpolating 😴

You can read more about the superbuild concept in YCM documentation or in the related IRC paper.

Probably this was me, but the will of documentation of telling me about YCM here got a little disturbing. It was like someone telling me repeatedly to read about additional details. So, I started and I opened these pages. In a second, I was scared since the amount of things to read was a lot 😟 And I still did not understand if it was necessary to read all this stuff 😧 : I just wanted to install the software, as probably most users would like to.

System Continuous Integration Status
Linux/macOS/Windows GitHub Actions Status

🥳 🥳 🥳

Table of Contents

At this point, I wanted to jump to the Binary Installation section, but I was a little worried - from the section before - that I might have missed information, so I went through the Superbuild section 😧 😟

Superbuild

The robotology-superbuild is an infrastructure to simplify development and use of open source research software developed at the Italian Institute of Technology, in particular as part of the iCub project.

This was cool 🥳 but I felt that these info were somehow redundant with respect to those of the previous section. Furthermore, analogously to what we mentioned before,

🟡 we could remove hyperlinks and transform them into references

Profiles and Optional Dependencies

These titles made me worried 😟 : I did not know if I had to understand all the details for the installation (they seem to be talking about important and related topics) but I was not sure about this 😧

As a huge number of software projects are contained in the robotology-superbuild, and a tipical user is only interested in some of them, there are several options to instruct the superbuild on which packages should be built and which one should not be built. In particular,

🟡 Besides the typo in tipical, I would remove this sentence that looked long and articulated. The sentence next explains pretty well the point, namely.

the robotology-superbuild is divided in different profiles, that specify the specific subset of robotology packages to build.

🟡 Just remove the comma before "that specify"

You can read more on the available profiles and how to enable them in the doc/cmake-options.md#profile-specific-documentation.

Okey, here I felt dumb 😧 so I opened doc/cmake-options.md#profile-specific-documentation to read more, which made me scared 😟 😟 since I found many profiles and I did not know what I should have read/understood. For this reason, I interpolated 😴 and moved forward, but I was not sure if I should have read all of that.

Versioning

For what regards versioning, software in the robotology-superbuild can be consumed in two forms:

I was not understanding why this was necessary at this point 🤔

Rolling update

I started reading about Rolling update 😧 Probably, I lost more time here

In this form, the superbuild will get the latest changes for a branch of each subproject, and will build it. This has the advantage that you get all the latest changes from the software contained in the robotology-superbuild, while the downside that the specific software that you use may change at each update. The rolling update can be used only when building robotology-superbuild software from source. By default, the robotology-superbuild uses the latest "stable" branches of the robotology repositories, but in some cases it may be necessary to use the "unstable" active development branches.

I felt a pedantic will of the documentation. On the one hand, these info seem not interesting/related for my purpose 😴 on the other hand, I felt dumb because I should have understood probably all the micro details before the installation

For this advanced functionalities, please refer to the documentation on changing the default project tags, available at doc/change-project-tags.md.

Hey, I want the advanced stuff 🥳 ! So, I opened doc/change-project-tags.md but then I got scared about the micro details and other hypelinks to read 😧 😟 For this reason, I skipped 😴 but I was not sure if I should have read all these micro details for the installation

Releases

Once every three months, a set of releases of the software in the robotology-superbuild is freezed and used as a "Distro Release", following the policies of iCub software described in https://icub-tech-iit.github.io/documentation/sw_versioning_table/ . Releases can be used both when building the software from source, and when obtaining it from binaries.

The available releases can be seen on GitHub's release page.

This was fine, although the many hyperlinks are always a subtle invitation to the reader to open them since he/she is not sure if he needs to know all the details to install the software 😧

Binary Installation

At his point I was happy 🥳 but I was also a little tired. It was probably already 20/30 minutes I was on the website. And I did not even start. I was also worried that I did not understood some micro details above was necessary for what was coming 😧

We provide binary packages for Linux, macOS and Windows of the software contained in the robotology-superbuild via the conda package manager, relying on the community-mantained conda-forge channel and for some packages on on our own robotology conda channel.

The presence of these links are tempting for non-expert users since they feel dumb 😧 and they may think that for what comes next (installation) they need to know all the content they are pointing

🟡 I would add a relief sentence for non-expert users. Like: hey, if you are not a ninja in conda, do not worry, we take care of the details and you do not need to go through them

Or something like that. Few times, I have had the feeling that the documentation was for king/ninja open-software conda developers and that you either are at that level, or you do not go through. This was scaring me from times to times.

Please refer to doc/conda-forge.md document for instruction on how to install the conda binary packages, in particualr the Binary Installation section.

Okey, here was the moment of being lost in the dark 😧. I am asked to read doc/conda-forge.md, and in particular the section Binary Installation. First, I was not sure that this section belonged to the same document, so I had to open two tabs. Anyways, I started from doc/conda-forge.md.

The document doc/conda-forge.md is very long, which made me scared 😟 and I already was a little tired, so this was the first moment I thought: I give up, it is too complex and time consuming for me 😫 In particular, the document doc/conda-forge.md starts with a long and pedantic list of prons and cons of conda-forge.

Guys, I trust you since you are the kings of open software and CI, so really, I just want to install the software. I lost here other 10/15 minutes probably to understand the details 🤔

Now, I am at Binary Installation section.

Binary installation

This section describes how to compile and install the binary packages built from the robotology-superbuild on conda on Windows, macOS and Linux.
The binary packages are hosted in the robotology conda channel . Only packages that are built as part of the profiles and options that are supported on Conda (see documentation on CMake options) are available as conda binary packages in the robotology channel.

Here, I am pointed to robotology conda channel, which I opened up, took a look, did not understand what I was looking at, and I closed. I did not understand what I should have done there, or if it was a mere references. So, I had the impression that I just lost some time, and I moved on.

Only packages that are built as part of the profiles and options that are supported on Conda (see documentation on CMake options) are available as conda binary packages in the robotology channel.

Here I was really confused. I did not understand - so I felt dumb 😧 - if I had to go through all the docs and details in the documentation on CMake options to get the installation lift off. Clearly, as soon as I opened the doc, I was really scared 😟 since the document is huge. So, I decided to ignore it - I was not really sure about what I was doing - but this left me with a sense of deep insecurity.

Install a conda distribution

If you do not have a conda distribution on your system,

🟡 we may just add two three commands to verify if the user has the conda installed, like

open the terminal
launch command A
launch comman B

we suggest to use the minimal
mambaforge distribution, that uses conda-forge packages by default and installs the mamba command by default.

I went to mambaforge, and more specifically to https://github.com/conda-forge/miniforge#homebrew. Since I did not know whether or not I installed mambaforge, I just opened the terminal a launched

brew install miniforge

🟡 I would remove the hypelink to mamba that I did not know if I had to go through

While I was writing this report and after having launched brew install miniforge, this popped up
image

After this, I was able to finish the installation

Click to see the installation details
Last login: Fri Nov 26 17:47:14 on ttys000
(base) danielepucci@Danieles-MBP-2 ~ % brew install miniforge

Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 104 formulae.
==> Deleted Formulae
soundpipe

==> Tapping homebrew/cask
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
remote: Enumerating objects: 606516, done.
remote: Total 606516 (delta 0), reused 0 (delta 0), pack-reused 606516
Receiving objects: 100% (606516/606516), 273.04 MiB | 4.68 MiB/s, done.
Resolving deltas: 100% (428891/428891), done.
Updating files: 100% (4003/4003), done.
Tapped 3934 casks (4,014 files, 292.5MB).
==> Caveats
Please run the following to setup your shell:
  conda init "$(basename "${SHELL}")"

==> Downloading https://github.com/conda-forge/miniforge/releases/download/4.10.
==> Downloading from https://github-releases.githubusercontent.com/221584272/7c2
######################################################################## 100.0%
==> Installing Cask miniforge
==> Running installer script 'Miniforge3-4.10.3-7-MacOSX-x86_64.sh'
PREFIX=/usr/local/Caskroom/miniforge/base
Unpacking payload ...
Extracting "pycparser-2.20-pyh9f0ad1d_2.tar.bz2"
Extracting "python_abi-3.9-2_cp39.tar.bz2"
Extracting "six-1.16.0-pyh6c4a22f_0.tar.bz2"
Extracting "brotlipy-0.7.0-py39h89e85a6_1001.tar.bz2"
Extracting "pyopenssl-21.0.0-pyhd8ed1ab_0.tar.bz2"
Extracting "cryptography-3.4.8-py39ha2c9959_0.tar.bz2"
Extracting "pysocks-1.7.1-py39h6e9494a_3.tar.bz2"
Extracting "wheel-0.37.0-pyhd8ed1ab_1.tar.bz2"
Extracting "urllib3-1.26.7-pyhd8ed1ab_0.tar.bz2"
Extracting "ruamel_yaml-0.15.80-py39h89e85a6_1004.tar.bz2"
Extracting "colorama-0.4.4-pyh9f0ad1d_0.tar.bz2"
Extracting "sqlite-3.36.0-h23a322b_2.tar.bz2"
Extracting "setuptools-58.2.0-py39h6e9494a_0.tar.bz2"
Extracting "tk-8.6.11-h5dbffcc_1.tar.bz2"
Extracting "yaml-0.2.5-haf1e3a3_0.tar.bz2"
Extracting "pycosat-0.6.3-py39h89e85a6_1006.tar.bz2"
Extracting "xz-5.2.5-haf1e3a3_1.tar.bz2"
Extracting "zlib-1.2.11-h9173be1_1013.tar.bz2"
Extracting "tqdm-4.62.3-pyhd8ed1ab_0.tar.bz2"
Extracting "ca-certificates-2021.10.8-h033912b_0.tar.bz2"
Extracting "openssl-1.1.1l-h0d85af4_0.tar.bz2"
Extracting "idna-3.1-pyhd3deb0d_0.tar.bz2"
Extracting "ncurses-6.2-h2e338ed_4.tar.bz2"
Extracting "libcxx-12.0.1-habf9029_0.tar.bz2"
Extracting "requests-2.26.0-pyhd8ed1ab_0.tar.bz2"
Extracting "pip-21.3-pyhd8ed1ab_0.tar.bz2"
Extracting "libzlib-1.2.11-h9173be1_1013.tar.bz2"
Extracting "libffi-3.4.2-he49afe7_4.tar.bz2"
Extracting "charset-normalizer-2.0.0-pyhd8ed1ab_0.tar.bz2"
Extracting "cffi-1.14.6-py39he338e87_1.tar.bz2"
Extracting "chardet-4.0.0-py39h6e9494a_1.tar.bz2"
Extracting "conda-package-handling-1.7.3-py39h89e85a6_0.tar.bz2"
Extracting "python-3.9.7-h1248fe1_3_cpython.tar.bz2"
Extracting "conda-4.10.3-py39h6e9494a_2.tar.bz2"
Extracting "certifi-2021.10.8-py39h6e9494a_0.tar.bz2"
Extracting "readline-8.1-h05e3726_0.tar.bz2"
Extracting "tzdata-2021c-he74cb21_0.tar.bz2"

                                           __
          __  ______ ___  ____ _____ ___  / /_  ____ _
         / / / / __ `__ \/ __ `/ __ `__ \/ __ \/ __ `/
        / /_/ / / / / / / /_/ / / / / / / /_/ / /_/ /
       / .___/_/ /_/ /_/\__,_/_/ /_/ /_/_.___/\__,_/
      /_/


Transaction

  Prefix: /usr/local/Caskroom/miniforge/base

  Updating specs:

   - python==3.9.7=h1248fe1_3_cpython
   - ca-certificates==2021.10.8=h033912b_0
   - libcxx==12.0.1=habf9029_0
   - libzlib==1.2.11=h9173be1_1013
   - ncurses==6.2=h2e338ed_4
   - tzdata==2021c=he74cb21_0
   - xz==5.2.5=haf1e3a3_1
   - yaml==0.2.5=haf1e3a3_0
   - libffi==3.4.2=he49afe7_4
   - openssl==1.1.1l=h0d85af4_0
   - readline==8.1=h05e3726_0
   - zlib==1.2.11=h9173be1_1013
   - sqlite==3.36.0=h23a322b_2
   - tk==8.6.11=h5dbffcc_1
   - charset-normalizer==2.0.0=pyhd8ed1ab_0
   - colorama==0.4.4=pyh9f0ad1d_0
   - idna==3.1=pyhd3deb0d_0
   - pycparser==2.20=pyh9f0ad1d_2
   - python_abi==3.9=2_cp39
   - six==1.16.0=pyh6c4a22f_0
   - wheel==0.37.0=pyhd8ed1ab_1
   - certifi==2021.10.8=py39h6e9494a_0
   - cffi==1.14.6=py39he338e87_1
   - chardet==4.0.0=py39h6e9494a_1
   - pycosat==0.6.3=py39h89e85a6_1006
   - pysocks==1.7.1=py39h6e9494a_3
   - ruamel_yaml==0.15.80=py39h89e85a6_1004
   - setuptools==58.2.0=py39h6e9494a_0
   - tqdm==4.62.3=pyhd8ed1ab_0
   - brotlipy==0.7.0=py39h89e85a6_1001
   - conda-package-handling==1.7.3=py39h89e85a6_0
   - cryptography==3.4.8=py39ha2c9959_0
   - pip==21.3=pyhd8ed1ab_0
   - pyopenssl==21.0.0=pyhd8ed1ab_0
   - urllib3==1.26.7=pyhd8ed1ab_0
   - requests==2.26.0=pyhd8ed1ab_0
   - conda==4.10.3=py39h6e9494a_2


  Package                     Version  Build               Channel                                                                      Size
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Install:
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  + brotlipy                    0.7.0  py39h89e85a6_1001   conda-forge/osx-64/brotlipy-0.7.0-py39h89e85a6_1001.tar.bz2                Cached
  + ca-certificates         2021.10.8  h033912b_0          conda-forge/osx-64/ca-certificates-2021.10.8-h033912b_0.tar.bz2            Cached
  + certifi                 2021.10.8  py39h6e9494a_0      conda-forge/osx-64/certifi-2021.10.8-py39h6e9494a_0.tar.bz2                Cached
  + cffi                       1.14.6  py39he338e87_1      conda-forge/osx-64/cffi-1.14.6-py39he338e87_1.tar.bz2                      Cached
  + chardet                     4.0.0  py39h6e9494a_1      conda-forge/osx-64/chardet-4.0.0-py39h6e9494a_1.tar.bz2                    Cached
  + charset-normalizer          2.0.0  pyhd8ed1ab_0        conda-forge/noarch/charset-normalizer-2.0.0-pyhd8ed1ab_0.tar.bz2           Cached
  + colorama                    0.4.4  pyh9f0ad1d_0        conda-forge/noarch/colorama-0.4.4-pyh9f0ad1d_0.tar.bz2                     Cached
  + conda                      4.10.3  py39h6e9494a_2      conda-forge/osx-64/conda-4.10.3-py39h6e9494a_2.tar.bz2                     Cached
  + conda-package-handling      1.7.3  py39h89e85a6_0      conda-forge/osx-64/conda-package-handling-1.7.3-py39h89e85a6_0.tar.bz2     Cached
  + cryptography                3.4.8  py39ha2c9959_0      conda-forge/osx-64/cryptography-3.4.8-py39ha2c9959_0.tar.bz2               Cached
  + idna                          3.1  pyhd3deb0d_0        conda-forge/noarch/idna-3.1-pyhd3deb0d_0.tar.bz2                           Cached
  + libcxx                     12.0.1  habf9029_0          conda-forge/osx-64/libcxx-12.0.1-habf9029_0.tar.bz2                        Cached
  + libffi                      3.4.2  he49afe7_4          conda-forge/osx-64/libffi-3.4.2-he49afe7_4.tar.bz2                         Cached
  + libzlib                    1.2.11  h9173be1_1013       conda-forge/osx-64/libzlib-1.2.11-h9173be1_1013.tar.bz2                    Cached
  + ncurses                       6.2  h2e338ed_4          conda-forge/osx-64/ncurses-6.2-h2e338ed_4.tar.bz2                          Cached
  + openssl                    1.1.1l  h0d85af4_0          conda-forge/osx-64/openssl-1.1.1l-h0d85af4_0.tar.bz2                       Cached
  + pip                          21.3  pyhd8ed1ab_0        conda-forge/noarch/pip-21.3-pyhd8ed1ab_0.tar.bz2                           Cached
  + pycosat                     0.6.3  py39h89e85a6_1006   conda-forge/osx-64/pycosat-0.6.3-py39h89e85a6_1006.tar.bz2                 Cached
  + pycparser                    2.20  pyh9f0ad1d_2        conda-forge/noarch/pycparser-2.20-pyh9f0ad1d_2.tar.bz2                     Cached
  + pyopenssl                  21.0.0  pyhd8ed1ab_0        conda-forge/noarch/pyopenssl-21.0.0-pyhd8ed1ab_0.tar.bz2                   Cached
  + pysocks                     1.7.1  py39h6e9494a_3      conda-forge/osx-64/pysocks-1.7.1-py39h6e9494a_3.tar.bz2                    Cached
  + python                      3.9.7  h1248fe1_3_cpython  conda-forge/osx-64/python-3.9.7-h1248fe1_3_cpython.tar.bz2                 Cached
  + python_abi                    3.9  2_cp39              conda-forge/osx-64/python_abi-3.9-2_cp39.tar.bz2                           Cached
  + readline                      8.1  h05e3726_0          conda-forge/osx-64/readline-8.1-h05e3726_0.tar.bz2                         Cached
  + requests                   2.26.0  pyhd8ed1ab_0        conda-forge/noarch/requests-2.26.0-pyhd8ed1ab_0.tar.bz2                    Cached
  + ruamel_yaml               0.15.80  py39h89e85a6_1004   conda-forge/osx-64/ruamel_yaml-0.15.80-py39h89e85a6_1004.tar.bz2           Cached
  + setuptools                 58.2.0  py39h6e9494a_0      conda-forge/osx-64/setuptools-58.2.0-py39h6e9494a_0.tar.bz2                Cached
  + six                        1.16.0  pyh6c4a22f_0        conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2                         Cached
  + sqlite                     3.36.0  h23a322b_2          conda-forge/osx-64/sqlite-3.36.0-h23a322b_2.tar.bz2                        Cached
  + tk                         8.6.11  h5dbffcc_1          conda-forge/osx-64/tk-8.6.11-h5dbffcc_1.tar.bz2                            Cached
  + tqdm                       4.62.3  pyhd8ed1ab_0        conda-forge/noarch/tqdm-4.62.3-pyhd8ed1ab_0.tar.bz2                        Cached
  + tzdata                      2021c  he74cb21_0          conda-forge/noarch/tzdata-2021c-he74cb21_0.tar.bz2                         Cached
  + urllib3                    1.26.7  pyhd8ed1ab_0        conda-forge/noarch/urllib3-1.26.7-pyhd8ed1ab_0.tar.bz2                     Cached
  + wheel                      0.37.0  pyhd8ed1ab_1        conda-forge/noarch/wheel-0.37.0-pyhd8ed1ab_1.tar.bz2                       Cached
  + xz                          5.2.5  haf1e3a3_1          conda-forge/osx-64/xz-5.2.5-haf1e3a3_1.tar.bz2                             Cached
  + yaml                        0.2.5  haf1e3a3_0          conda-forge/osx-64/yaml-0.2.5-haf1e3a3_0.tar.bz2                           Cached
  + zlib                       1.2.11  h9173be1_1013       conda-forge/osx-64/zlib-1.2.11-h9173be1_1013.tar.bz2                       Cached

  Summary:

  Install: 37 packages

  Total download: 0  B

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────



Transaction starting
Linking ca-certificates-2021.10.8-h033912b_0
Linking libcxx-12.0.1-habf9029_0
Linking libzlib-1.2.11-h9173be1_1013
Linking ncurses-6.2-h2e338ed_4
Linking tzdata-2021c-he74cb21_0
Linking xz-5.2.5-haf1e3a3_1
Linking yaml-0.2.5-haf1e3a3_0
Linking openssl-1.1.1l-h0d85af4_0
Linking libffi-3.4.2-he49afe7_4
Linking zlib-1.2.11-h9173be1_1013
Linking readline-8.1-h05e3726_0
Linking tk-8.6.11-h5dbffcc_1
Linking sqlite-3.36.0-h23a322b_2
Linking python-3.9.7-h1248fe1_3_cpython
Linking wheel-0.37.0-pyhd8ed1ab_1
Linking python_abi-3.9-2_cp39
Linking setuptools-58.2.0-py39h6e9494a_0
Linking pip-21.3-pyhd8ed1ab_0
Linking ruamel_yaml-0.15.80-py39h89e85a6_1004
Linking pysocks-1.7.1-py39h6e9494a_3
Linking pycosat-0.6.3-py39h89e85a6_1006
Linking chardet-4.0.0-py39h6e9494a_1
Linking certifi-2021.10.8-py39h6e9494a_0
Linking six-1.16.0-pyh6c4a22f_0
Linking pycparser-2.20-pyh9f0ad1d_2
Linking idna-3.1-pyhd3deb0d_0
Linking colorama-0.4.4-pyh9f0ad1d_0
Linking charset-normalizer-2.0.0-pyhd8ed1ab_0
Linking cffi-1.14.6-py39he338e87_1
Linking tqdm-4.62.3-pyhd8ed1ab_0
Linking cryptography-3.4.8-py39ha2c9959_0
Linking brotlipy-0.7.0-py39h89e85a6_1001
Linking conda-package-handling-1.7.3-py39h89e85a6_0
Linking pyopenssl-21.0.0-pyhd8ed1ab_0
Linking urllib3-1.26.7-pyhd8ed1ab_0
Linking requests-2.26.0-pyhd8ed1ab_0
Linking conda-4.10.3-py39h6e9494a_2
Transaction finished
installation finished.
==> Linking Binary 'conda' to '/usr/local/bin/conda'
🍺  miniforge was successfully installed!
(base) danielepucci@Danieles-MBP-2 ~ % 

To install mambaforge, please follow the instructions in our install-mambaforge documentation.

Here I was confused. To me, I had just installed miniforge with brew install miniforge by following https://github.com/conda-forge/miniforge#homebrew. Anyways, I went to install-mambaforge documentation, and in particular to https://github.com/robotology/robotology-superbuild/blob/master/doc/install-mambaforge.md#macos

macOS

Install

First of all, download the installer and install it in its default location:

# Download
curl -fsSLo Mambaforge.sh https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-$(uname -m).sh
# Install with default options
sh ./Mambaforge.sh -b

🟡 I launched these commands in a terminal, so it would be better to say this

I started feeling that I am doing something I already did, in fact, the outcome of the terminal was

(base) danielepucci@Danieles-MBP-2 ~ % curl -fsSLo Mambaforge.sh https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-$(uname -m).sh

(base) danielepucci@Danieles-MBP-2 ~ % sh ./Mambaforge.sh -b

ERROR: File or directory already exists: '/Users/danielepucci/mambaforge'
If you want to update an existing installation, use the -u option.

I did not use the -u option. So, I tried to go forward

To use the conda command, you need to add the ~/mambaforge/condabin directory to the PATH environment variable.
You can do this persistently by modifying the appropriate file via the command:

~/mambaforge/condabin/conda init

I launched the command above, and I obtained

Last login: Sat Nov 27 16:01:22 on ttys000
(base) danielepucci@Danieles-MBP-2 ~ % ~/mambaforge/condabin/conda init

no change     /Users/danielepucci/mambaforge/condabin/conda
no change     /Users/danielepucci/mambaforge/bin/conda
no change     /Users/danielepucci/mambaforge/bin/conda-env
no change     /Users/danielepucci/mambaforge/bin/activate
no change     /Users/danielepucci/mambaforge/bin/deactivate
no change     /Users/danielepucci/mambaforge/etc/profile.d/conda.sh
no change     /Users/danielepucci/mambaforge/etc/fish/conf.d/conda.fish
no change     /Users/danielepucci/mambaforge/shell/condabin/Conda.psm1
no change     /Users/danielepucci/mambaforge/shell/condabin/conda-hook.ps1
no change     /Users/danielepucci/mambaforge/lib/python3.9/site-packages/xontrib/conda.xsh
no change     /Users/danielepucci/mambaforge/etc/profile.d/conda.csh
no change     /Users/danielepucci/.bash_profile
No action taken.

At this point, I started thinking that something was not working out. I was tired sincerely: I was probably inside the third or fourth .md file (starting from robotology) and the feeling of being lost was really high. Anyways, I went on.

If you are using a non-bash shell such as zsh, you also need to run:

~/mambaforge/condabin/conda init zsh

I then realised that I was using a zsh, so I launched the command, and then I obtained

(base) danielepucci@Danieles-MBP-2 ~ % ~/mambaforge/condabin/conda init zsh

no change     /Users/danielepucci/mambaforge/condabin/conda
no change     /Users/danielepucci/mambaforge/bin/conda
no change     /Users/danielepucci/mambaforge/bin/conda-env
no change     /Users/danielepucci/mambaforge/bin/activate
no change     /Users/danielepucci/mambaforge/bin/deactivate
no change     /Users/danielepucci/mambaforge/etc/profile.d/conda.sh
no change     /Users/danielepucci/mambaforge/etc/fish/conf.d/conda.fish
no change     /Users/danielepucci/mambaforge/shell/condabin/Conda.psm1
no change     /Users/danielepucci/mambaforge/shell/condabin/conda-hook.ps1
no change     /Users/danielepucci/mambaforge/lib/python3.9/site-packages/xontrib/conda.xsh
no change     /Users/danielepucci/mambaforge/etc/profile.d/conda.csh
no change     /Users/danielepucci/.zshrc
No action taken.

At this point, I really did not know if what I was doing was making sense

🟡 Probably, if we add the expected outcome of the terminal the user would know more if he/she is on the right way

By default, this command also automatically initialize the base conda environment whenever you start a terminal.
As this could interfere with other uses of your system (for example compilation against libraries installed via brew), it is recommended to disable this by setting:

conda config --set auto_activate_base false

I launched the command, and did not get any output. I was grasping a little in the dark at that point. But I went forward

After this configuration, whenever you open a new terminal, you should be able to access the conda command, but no environment should be enabled by default, i.e. if you execute conda info you should see:

$ conda info
     active environment : None
            shell level : 0
            [...]

At that point, I tried to launch the conda info command, and then I got

danielepucci@Danieles-MBP-2 ~ % conda info

     active environment : None
            shell level : 0
       user config file : /Users/danielepucci/.condarc
 populated config files : /Users/danielepucci/mambaforge/.condarc
                          /Users/danielepucci/.condarc
          conda version : 4.10.3
    conda-build version : not installed
         python version : 3.9.7.final.0
       virtual packages : __osx=12.0.1=0
                          __unix=0=0
                          __archspec=1=x86_64
       base environment : /Users/danielepucci/mambaforge  (writable)
      conda av data dir : /Users/danielepucci/mambaforge/etc/conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/conda-forge/osx-64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : /Users/danielepucci/mambaforge/pkgs
                          /Users/danielepucci/.conda/pkgs
       envs directories : /Users/danielepucci/mambaforge/envs
                          /Users/danielepucci/.conda/envs
               platform : osx-64
             user-agent : conda/4.10.3 requests/2.26.0 CPython/3.9.7 Darwin/21.1.0 OSX/12.0.1
                UID:GID : 501:20
             netrc file : None
           offline mode : False

This was a relief moment, after probably one hour and half 🥳 I was lost: I no longer had the feeling at which readme I was and where I had to go back, but the fact that the output was somehow the expected gave me little dopamine to continue

To activate in any terminal the base environment, just run:

mamba activate base

At this point I did, mamba activate base

danielepucci@Danieles-MBP-2 ~ % mamba activate base

Run 'mamba init' to be able to run mamba activate/deactivate
and start a new shell session. Or use conda to activate/deactivate.

    $ conda activate base

But I did not know what and why I was activating. At that point, I closed https://github.com/robotology/robotology-superbuild/edit/master/doc/install-mambaforge.md but I completely forgot where I was and from where I had to restart.

For this reason, I restarted from https://github.com/robotology/robotology-superbuild and went back to https://github.com/robotology/robotology-superbuild/blob/master/doc/conda-forge.md#binary-installation

Probably, I was here

Even if you are not using mambaforge and you are using instead a different conda distribution, to follow the instructions on this document you need to install the mamba package in your base environment. mamba is a re-implementation of some functionalities of the conda package manager, that is much faster.

I was tired at this point, so I did not understand/read quickly these details that seemed not important for my purpose.

Create an environment

Differently from apt and homebrew, the conda package manager is an environment-oriented package manager, meaning that packages are not
installed in some global location, but rather you install packages in an environment (that is just a directory in your filesystem), so that you
can easily have multiple different environments with different packages installed on your system. To read more about this, check https://docs.conda.io/projects/conda/en/4.6.1/user-guide/tasks/manage-environments.html .

Here the documentation is somehow suggesting to read more about https://docs.conda.io/projects/conda/en/4.6.1/user-guide/tasks/manage-environments.html which is a very heavy document and still not really related to my purpose that was to install software

At this point, I was lost since after a couple of hours I did not have the idea of how far I was from actually installing the software (Monia started calling me to do stuff), so was really tempted to give up 😫 😫

For this reason, to use the robotology conda packages it is suggested to first create a conda environment, and then install in it all the packages you want to use. To create a new environment called robotologyenv, execute the following command:

mamba create -n robotologyenv

I launched the command, and I got

danielepucci@Danieles-MBP-2 ~ % mamba create -n robotologyenv

                  __    __    __    __
                 /  \  /  \  /  \  /  \
                /    \/    \/    \/    \
███████████████/  /██/  /██/  /██/  /████████████████████████
              /  / \   / \   / \   / \  \____
             /  /   \_/   \_/   \_/   \    o \__,
            / _/                       \_____/  `
            |/
        ███╗   ███╗ █████╗ ███╗   ███╗██████╗  █████╗
        ████╗ ████║██╔══██╗████╗ ████║██╔══██╗██╔══██╗
        ██╔████╔██║███████║██╔████╔██║██████╔╝███████║
        ██║╚██╔╝██║██╔══██║██║╚██╔╝██║██╔══██╗██╔══██║
        ██║ ╚═╝ ██║██║  ██║██║ ╚═╝ ██║██████╔╝██║  ██║
        ╚═╝     ╚═╝╚═╝  ╚═╝╚═╝     ╚═╝╚═════╝ ╚═╝  ╚═╝

        mamba (0.16.0) supported by @QuantStack

        GitHub:  https://github.com/mamba-org/mamba
        Twitter: https://twitter.com/QuantStack

█████████████████████████████████████████████████████████████


Looking for: []

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate robotologyenv
#
# To deactivate an active environment, use
#
#     $ conda deactivate

So, at this point I was just doing stuff quickly and trying to get it as soon as possible. I was starving for a list of actions to execute one after the other without narrative

Once you created the robotologyenv environment, you can "activate" it for the current terminal (i.e. make sure that the installed packages can be found) by the command:

mamba activate robotologyenv

I launched the command and I obtained

danielepucci@Danieles-MBP-2 ~ % mamba activate robotologyenv

Run 'mamba init' to be able to run mamba activate/deactivate
and start a new shell session. Or use conda to activate/deactivate.

    $ conda activate robotologyenv

So it seems that I had to run mamba init. I did it, and then I re-launched mamba activate robotologyenv, but I was not sure about what was going on.

🟡 To improve the awareness of the user, it would be better to add the expected outcomes of the commands

At this point, I gave up with the binary installation: it was probably three hours that I was on the task and I could no longer dedicate time to move on although I had the feeling of being close. I hope to have more time in the next days to continue the task. I thought, however, that already this preliminary user-expereince report may give preliminary inputs on how to improve the documentation.

@traversaro
Copy link
Member

traversaro commented Nov 29, 2021

At this point, I gave up with the binary installation: it was probably three hours that I was on the task and I could no longer dedicate time to move on although I had the feeling of being close. I hope to have more time in the next days to continue the task. I thought, however, that already this preliminary user-expereince report may give preliminary inputs on how to improve the documentation.

First of all, thanks for the detailed report! This is gold. Anyone working too much with robotology-superbuild or the rest of our software stack will be inevitable be affected by the so-called expert blindness. If for you installing the software takes such as long time, that is essentially a bug exactly like any other software bug that could affect the robotology-superbuild, so it is important to try to fix it! On the other hand, the documentation is meant to target different kind of users with different backgrounds, so we try reach the best trade-off of helping all of them, without scaring any of them too much.

I had the feeling of being close.

Indeed! Just to clarify, at this point you could install any library you are interested (I am mentioning just a few MATLAB-library you could be interested in, see https://anaconda.org/robotology/repo/files for more available packages) in with:

mamba activate robotologyenv
mamba install idyntree-matlab-bindings wb-toolbox osqp-matlab casadi-matlab-bindings gazebo-yarp-plugins icub-models  matlab-whole-body-simulator 

Then you can just open MATLAB in a termainal where you called mamba activate robotologyenv environment before, and all the MATLAB and Simulink libraries will be available.

I will address the rest of the report point by point in future comments. I will number all the different points/aspects to track them easily.

@traversaro
Copy link
Member

traversaro commented Nov 29, 2021

P1: Introduction section

robotology-superbuild

[..] content of the introduction

Probably this was me, but the will of documentation of telling me about YCM here got a little disturbing. It was like someone telling me repeatedly to read about additional details. So, I started and I opened these pages. In a second, I was scared since the amount of things to read was a lot 😟 And I still did not understand if it was necessary to read all this stuff 😧 : I just wanted to install the software, as probably most users would like to.

All those details were probably there when the superbuild was only meant to be installed by source and not by binary installation (and then, you really needed to know what CMake is!) and to properly acknoledge YCM without which all the machinery of the superbuild would not be possible. To be perfectly honest, a bit of the focus on the paper there is to make sure that people properly attribute the paper if they use the superbuild in academic works, but probably it is metter to explicitly specify that.

Proposed Action:

  • Transform some of links in "references" to make clear that are not compulsory to read.
  • Simplify this section, moving the necessary CMake details in the "building from source" section and the YCM part in a "Credits" or "Acknowledgments" section still in the README, but outside of the installation path.
  • For the remaining sentence, follow the micro observations in the repo (if they make sense).

@traversaro
Copy link
Member

The document doc/conda-forge.md is very long, which made me scared 😟 and I already was a little tired, so this was the first moment I thought: I give up, it is too complex and time consuming for me 😫 In particular, the document doc/conda-forge.md starts with a long and pedantic list of prons and cons of conda-forge.

Can you check if #932 improves this aspect?

@traversaro
Copy link
Member

traversaro commented Nov 29, 2021

P2: Superbuild section

Leaving this section before "Binary Installation" was probably an error done in #852, especially until we have an easy way (an documentable in a eay way) to install a specific distro with conda (see #727). For the time being, we can just move this section under "source installation".

Action point:
Move "superbuild section" under "Build from source".

@traversaro
Copy link
Member

Ah, I just realized that I am missing a fundemental information here. @DanielePucci Why did you wanted to install the robotology-superbuild/related software? What did you wanted to do?

@DanielePucci
Copy link
Contributor Author

Hi @traversaro, sorry for taking so long to answer: I wanted to reserve some time to this task, and the Christmas break helped in this sense.

First of all, thanks for the detailed report! This is gold. Anyone working too much with robotology-superbuild or the rest of our software stack will be inevitable be affected by the so-called expert blindness. If for you installing the software takes such as long time, that is essentially a bug exactly like any other software bug that could affect the robotology-superbuild, so it is important to try to fix it!

Thank you for your understanding, the report wanted to be a different standpoint on something that - for sure - is working out for many of the experts.

On the other hand, the documentation is meant to target different kind of users with different backgrounds, so we try reach the best trade-off of helping all of them, without scaring any of them too much.

Sure, this is also understandable: finding a trade-off for sure is not an easy task.

Indeed! Just to clarify, at this point you could install any library you are interested (I am mentioning just a few MATLAB-library you could be interested in, see https://anaconda.org/robotology/repo/files for more available packages) in with:

mamba activate robotologyenv
mamba install idyntree-matlab-bindings wb-toolbox osqp-matlab casadi-matlab-bindings gazebo-yarp-plugins icub-models  matlab-whole-body-simulator 

This is super cool, I did not realise I was that close! I did it and it seems that it worked out although I am not sure that the text, e.g.,

- nothing provides requested idyntree-matlab-bindings

is actually saying that it went fine - see below for details.

Click to see the output details (sorry, I mistakenly cleaned the terminal so the following is the output of the second instance of the commands above)

danielepucci@Danieles-MBP-2 ~ % mamba activate robotologyenv

(robotologyenv) danielepucci@Danieles-MBP-2 ~ % mamba install idyntree-matlab-bindings wb-toolbox osqp-matlab casadi-matlab-bindings gazebo-yarp-plugins icub-models  matlab-whole-body-simulator


                  __    __    __    __
                 /  \  /  \  /  \  /  \
                /    \/    \/    \/    \
███████████████/  /██/  /██/  /██/  /████████████████████████
              /  / \   / \   / \   / \  \____
             /  /   \_/   \_/   \_/   \    o \__,
            / _/                       \_____/  `
            |/
        ███╗   ███╗ █████╗ ███╗   ███╗██████╗  █████╗
        ████╗ ████║██╔══██╗████╗ ████║██╔══██╗██╔══██╗
        ██╔████╔██║███████║██╔████╔██║██████╔╝███████║
        ██║╚██╔╝██║██╔══██║██║╚██╔╝██║██╔══██╗██╔══██║
        ██║ ╚═╝ ██║██║  ██║██║ ╚═╝ ██║██████╔╝██║  ██║
        ╚═╝     ╚═╝╚═╝  ╚═╝╚═╝     ╚═╝╚═════╝ ╚═╝  ╚═╝

        mamba (0.16.0) supported by @QuantStack

        GitHub:  https://github.com/mamba-org/mamba
        Twitter: https://twitter.com/QuantStack

█████████████████████████████████████████████████████████████


Looking for: ['idyntree-matlab-bindings', 'wb-toolbox', 'osqp-matlab', 'casadi-matlab-bindings', 'gazebo-yarp-plugins', 'icub-models', 'matlab-whole-body-simulator']

conda-forge/osx-64       Using cache
conda-forge/noarch       Using cache
Encountered problems while solving:
  - nothing provides requested idyntree-matlab-bindings
  - nothing provides requested wb-toolbox
  - nothing provides requested osqp-matlab
  - nothing provides requested casadi-matlab-bindings
  - nothing provides requested gazebo-yarp-plugins
  - nothing provides requested icub-models
  - nothing provides requested matlab-whole-body-simulator

Then you can just open MATLAB in a termainal where you called mamba activate robotologyenv environment before, and all the MATLAB and Simulink libraries will be available.

I did this but although I had matlab installed, it seems that I do not have the command matlab -probably, I should make an alias. For this reason, I did in the terminal:

(robotologyenv) danielepucci@Danieles-MBP-2 ~ % open -a MATLAB_R2021a

Once opened, I opened Simulink by clicking on the button. After that, I opened the Simulink library and I looked for, e.g. Whole-Body Toolbox, but it seems to me that I did not find any. So, probably I am missing something

image
image

I will address the rest of the report point by point in future comments. I will number all the different points/aspects to track them easily.

Great!

@DanielePucci
Copy link
Contributor Author

DanielePucci commented Dec 31, 2021

All those details were probably there when the superbuild was only meant to be installed by source and not by binary installation (and then, you really needed to know what CMake is!) and to properly acknoledge YCM without which all the machinery of the superbuild would not be possible.

I see, it made sense back in time I would say

To be perfectly honest, a bit of the focus on the paper there is to make sure that people properly attribute the paper if they use the superbuild in academic works, but probably it is metter to explicitly specify that.

Roger, I also agree that it would be better to add the explicit mention to that even in the beginning, like a short section called How to cite robotology-superbiuld or something like that

Proposed Action:

  • Transform some of links in "references" to make clear that are not compulsory to read.
  • Simplify this section, moving the necessary CMake details in the "building from source" section and the YCM part in a "Credits" or "Acknowledgments" section still in the README, but outside of the installation path.
  • For the remaining sentence, follow the micro observations in the repo (if they make sense).

These make sense to me

@DanielePucci
Copy link
Contributor Author

DanielePucci commented Dec 31, 2021

Can you check if #932 improves this aspect?

It is much better @traversaro, I just approved the PR. What I still notice - but maybe this is just me - is that nesting several READMEs is not helping the user know where he/she is. For instance, what I would suggest is to

  1. move all the details in https://github.com/robotology/robotology-superbuild/blob/simplify_conda_install/doc/conda-forge.md to the README section https://github.com/robotology/robotology-superbuild#binary-installation

or

  1. move the entire README section https://github.com/robotology/robotology-superbuild#binary-installation in https://github.com/robotology/robotology-superbuild/blob/simplify_conda_install/doc/conda-forge.md if the README https://github.com/robotology/robotology-superbuild/blob/master/README.md risks to become too long

@DanielePucci
Copy link
Contributor Author

DanielePucci commented Dec 31, 2021

P2: Superbuild section

Leaving this section before "Binary Installation" was probably an error done in #852, especially until we have an easy way (an documentable in a eay way) to install a specific distro with conda (see #727). For the time being, we can just move this section under "source installation".

Action point:
Move "superbuild section" under "Build from source".

Probably you meant "below" or "after" instead of "under"?

@DanielePucci
Copy link
Contributor Author

DanielePucci commented Dec 31, 2021

Ah, I just realized that I am missing a fundemental information here. @DanielePucci Why did you wanted to install the robotology-superbuild/related software? What did you wanted to do?

My original plan was to install the software for making the Yoga++ with iCub 3 - although the other day passing by the lab, I just saw that @lrapetti did it in a couple of hours 😭. In the hindsight, I could have used the one line installation made by @nunoguedelha, which I actually tested -- see #707 (comment) and https://github.com/ami-iit/element_software-engineering/issues/32

By thinking about it, I do not know if it would make sense to somehow profile the users, even with a list of questions like you just did it here, and put this list of questions in the beginning of the README (e.g. do you want to install software to use matlab/simulink and simulate algorithms in Gazebo?). And then, if the user somehow finds the question for himself/herself on the list, a click on the question opens a set of actions/instructions to follow to install the software he/she is interested in.

The other reason why for me to install the software, however, was to have that old feeling of having the entire robotology-superbuild installed on the laptop, so I was pushed to give it a try and provide you with a feedback above.

@DanielePucci
Copy link
Contributor Author

Today I followed the installation procedure for the sources of robotology-superbuild, the software package we use extensively in our research line @robotology/iit-artificial-mechanical-intelligence.

I wanted to come back to this since I received a new laptop and I didn't even have the brew nor the git installed, so it seemed to me I could be a good testcase of someone not aligned with the recent development or of someone that just arrived in the lab.

I have to say that the improvements of the installation procedure was substantial: it is now clear, linear, and straight to the point. So, thank you very much @traversaro for having taken into account the comments above.

By considering the effective time I dealt with the installation, in about 20 minutes I completed the task, from installing brew, git, the robotology-superbuild, and launching Gazebo.

Being on Mac, the only setback I had was due to #916, both when installing the dependencies and during the compilation. Thanks to the @traversaro quick help, I could quickly overcome the issue during the compilation.

To further simplify the installation procedure for Mac users, I opened #1394 that details the passages that I performed when installing the software.

At this point, I close the issue. Thank you all.

CC
@Gianlucamilani @evalli-iit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants