Подготовить презентацию для ROS Meetup 2023
This commit is contained in:
parent
825627fe08
commit
346da5efc8
7 changed files with 1535 additions and 0 deletions
3
docs/slides/2023-ros-meetup/README.md
Normal file
3
docs/slides/2023-ros-meetup/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Презентация "Nix/NixOS - ОС-независимая сборка пакетов ROS" на ROS-Meetup'2023
|
||||
|
||||
Для просмотра скопируйте содержимое директории и откройте `ros-meetup-slides.html` в любом браузере.
|
BIN
docs/slides/2023-ros-meetup/drv-cryptohash.png
Normal file
BIN
docs/slides/2023-ros-meetup/drv-cryptohash.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 99 KiB |
BIN
docs/slides/2023-ros-meetup/eelco.jpeg
Normal file
BIN
docs/slides/2023-ros-meetup/eelco.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
751
docs/slides/2023-ros-meetup/map_repo_size_fresh-2018-06-08.svg
Normal file
751
docs/slides/2023-ros-meetup/map_repo_size_fresh-2018-06-08.svg
Normal file
|
@ -0,0 +1,751 @@
|
|||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1140" height="800">
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="2" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L2,3 L0,6 L9,3 z" fill="#000" />
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="1140" height="800" fill="#f0f0f0" />
|
||||
<line x1="40.5" x2="40.5" y1="780.5" y2="15.5" stroke="#000" marker-end="url(#arrow)" />
|
||||
<line x1="40.5" x2="1115.5" y1="780.5" y2="780.5" stroke="#000" marker-end="url(#arrow)" />
|
||||
<g fill="#000" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="13" font-weight="bold">
|
||||
<text x="565.5" y="793.5" text-anchor="middle">Number of packages in repository</text>
|
||||
|
||||
<text x="0" y="0" text-anchor="middle" transform="translate(20.5, 405.5),rotate(-90)">Number of fresh packages in repository</text>
|
||||
</g>
|
||||
<g fill="#000" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||
<text x="1093.5" y="793.5" text-anchor="middle">44000</text>
|
||||
<text x="40.5" y="790.5" text-anchor="middle">0</text>
|
||||
|
||||
<text x="35.5" y="783.5" text-anchor="end">0</text>
|
||||
<text x="35.5" y="33.5" text-anchor="end">30000</text>
|
||||
</g>
|
||||
|
||||
|
||||
<g font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11" text-anchor="start">
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="650.5" y="410.5">DPorts</text>
|
||||
<text fill="#000000" x="650.5" y="410.5">DPorts</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="51.5" y="781.5">MX Linux MX-17</text>
|
||||
<text fill="#000000" x="51.5" y="781.5">MX Linux MX-17</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="61.5" y="773.5">LEDE trunk AArch64 generic</text>
|
||||
<text fill="#000000" x="61.5" y="773.5">LEDE trunk AArch64 generic</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="778.5">RPM Fusion Fedora 27</text>
|
||||
<text fill="#000000" x="53.5" y="778.5">RPM Fusion Fedora 27</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">PlayDeb Yakkety Testing</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">PlayDeb Yakkety Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">GetDeb Zesty Testing</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">GetDeb Zesty Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="59.5" y="779.5">MX Linux MX-15 Testing</text>
|
||||
<text fill="#000000" x="59.5" y="779.5">MX Linux MX-15 Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="47.5" y="781.5">RPM Fusion EL 7</text>
|
||||
<text fill="#000000" x="47.5" y="781.5">RPM Fusion EL 7</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="151.5" y="699.5">Linuxbrew</text>
|
||||
<text fill="#000000" x="151.5" y="699.5">Linuxbrew</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="104.5" y="729.5">Stackage LTS Haskell</text>
|
||||
<text fill="#000000" x="104.5" y="729.5">Stackage LTS Haskell</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="51.5" y="779.5">Libregamewiki</text>
|
||||
<text fill="#000000" x="51.5" y="779.5">Libregamewiki</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="205.5" y="698.5">GNU Guix</text>
|
||||
<text fill="#000000" x="205.5" y="698.5">GNU Guix</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="76.5" y="762.5">CRUX 3.3</text>
|
||||
<text fill="#000000" x="76.5" y="762.5">CRUX 3.3</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="643.5" y="614.5">Ubuntu 16.04</text>
|
||||
<text fill="#000000" x="643.5" y="614.5">Ubuntu 16.04</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="60.5" y="773.5">openSUSE Games Tumbleweed</text>
|
||||
<text fill="#000000" x="60.5" y="773.5">openSUSE Games Tumbleweed</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="502.5" y="597.5">Funtoo</text>
|
||||
<text fill="#000000" x="502.5" y="597.5">Funtoo</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="715.5" y="558.5">Raspbian Stable</text>
|
||||
<text fill="#000000" x="715.5" y="558.5">Raspbian Stable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="780.5">Arch Testing</text>
|
||||
<text fill="#000000" x="48.5" y="780.5">Arch Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="782.5">Sabayon</text>
|
||||
<text fill="#000000" x="48.5" y="782.5">Sabayon</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="540.5" y="655.5">Debian Oldstable</text>
|
||||
<text fill="#000000" x="540.5" y="655.5">Debian Oldstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="345.5" y="468.5">CRAN</text>
|
||||
<text fill="#000000" x="345.5" y="468.5">CRAN</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="78.5" y="770.5">CRUX 3.2</text>
|
||||
<text fill="#000000" x="78.5" y="770.5">CRUX 3.2</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="60.5" y="781.5">SteamOS alchemist</text>
|
||||
<text fill="#000000" x="60.5" y="781.5">SteamOS alchemist</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="67.5" y="774.5">Debian Stable Backports</text>
|
||||
<text fill="#000000" x="67.5" y="774.5">Debian Stable Backports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="61.5" y="771.5">Scoop</text>
|
||||
<text fill="#000000" x="61.5" y="771.5">Scoop</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="46.5" y="782.5">Trisquel 8.0 backports</text>
|
||||
<text fill="#000000" x="46.5" y="782.5">Trisquel 8.0 backports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="57.5" y="782.5">KDE neon Dev Unstable</text>
|
||||
<text fill="#000000" x="57.5" y="782.5">KDE neon Dev Unstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="780.5">UnitedRPMs Fedora 25</text>
|
||||
<text fill="#000000" x="49.5" y="780.5">UnitedRPMs Fedora 25</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="552.5" y="664.5">Trisquel 7.0</text>
|
||||
<text fill="#000000" x="552.5" y="664.5">Trisquel 7.0</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="644.5" y="578.5">Pardus</text>
|
||||
<text fill="#000000" x="644.5" y="578.5">Pardus</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="61.5" y="773.5">LEDE trunk ARM XScale</text>
|
||||
<text fill="#000000" x="61.5" y="773.5">LEDE trunk ARM XScale</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="296.5" y="632.5">openSUSE Tumbleweed</text>
|
||||
<text fill="#000000" x="296.5" y="632.5">openSUSE Tumbleweed</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="55.5" y="782.5">Linux Mint 17.2</text>
|
||||
<text fill="#000000" x="55.5" y="782.5">Linux Mint 17.2</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">Tails stable</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">Tails stable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="779.5">RPM Fusion Fedora 25</text>
|
||||
<text fill="#000000" x="53.5" y="779.5">RPM Fusion Fedora 25</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="140.5" y="753.5">Astra Linux Orel</text>
|
||||
<text fill="#000000" x="140.5" y="753.5">Astra Linux Orel</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="56.5" y="780.5">MX Linux MX-15</text>
|
||||
<text fill="#000000" x="56.5" y="780.5">MX Linux MX-15</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">GetDeb Yakkety Testing</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">GetDeb Yakkety Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="87.5" y="756.5">KaOS</text>
|
||||
<text fill="#000000" x="87.5" y="756.5">KaOS</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="89.5" y="762.5">HaikuPorts master</text>
|
||||
<text fill="#000000" x="89.5" y="762.5">HaikuPorts master</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="699.5" y="438.5">Kali Linux Rolling</text>
|
||||
<text fill="#000000" x="699.5" y="438.5">Kali Linux Rolling</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="93.5" y="776.5">Debian Oldstable Backports</text>
|
||||
<text fill="#000000" x="93.5" y="776.5">Debian Oldstable Backports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="61.5" y="773.5">LEDE trunk ARM Cortex A9 VFPv3</text>
|
||||
<text fill="#000000" x="61.5" y="773.5">LEDE trunk ARM Cortex A9 VFPv3</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="46.5" y="782.5">Ubuntu 18.04 Proposed</text>
|
||||
<text fill="#000000" x="46.5" y="782.5">Ubuntu 18.04 Proposed</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="382.5" y="612.5">pkgsrc current</text>
|
||||
<text fill="#000000" x="382.5" y="612.5">pkgsrc current</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="60.5" y="779.5">LEDE 17.01 x86_64</text>
|
||||
<text fill="#000000" x="60.5" y="779.5">LEDE 17.01 x86_64</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="560.5" y="663.5">Ubuntu 14.04</text>
|
||||
<text fill="#000000" x="560.5" y="663.5">Ubuntu 14.04</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="782.5">Linux Mint 18.2</text>
|
||||
<text fill="#000000" x="49.5" y="782.5">Linux Mint 18.2</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="681.5" y="445.5">PureOS landing</text>
|
||||
<text fill="#000000" x="681.5" y="445.5">PureOS landing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="732.5" y="544.5">Deepin</text>
|
||||
<text fill="#000000" x="732.5" y="544.5">Deepin</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="185.5" y="683.5">OpenMandriva Cooker</text>
|
||||
<text fill="#000000" x="185.5" y="683.5">OpenMandriva Cooker</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="46.5" y="782.5">Rudix</text>
|
||||
<text fill="#000000" x="46.5" y="782.5">Rudix</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="777.5">Deb Multimedia Unstable</text>
|
||||
<text fill="#000000" x="53.5" y="777.5">Deb Multimedia Unstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="962.5" y="147.5">nixpkgs stable</text>
|
||||
<text fill="#000000" x="962.5" y="147.5">nixpkgs stable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="689.5" y="443.5">Debian Testing</text>
|
||||
<text fill="#000000" x="689.5" y="443.5">Debian Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="535.5" y="523.5">Fedora 27</text>
|
||||
<text fill="#000000" x="535.5" y="523.5">Fedora 27</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="254.5" y="627.5">Manjaro Unstable</text>
|
||||
<text fill="#000000" x="254.5" y="627.5">Manjaro Unstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="106.5" y="721.5">RubyGems</text>
|
||||
<text fill="#000000" x="106.5" y="721.5">RubyGems</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="485.5" y="605.5">Rosa 2016.1</text>
|
||||
<text fill="#000000" x="485.5" y="605.5">Rosa 2016.1</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">Tails devel</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">Tails devel</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="55.5" y="782.5">Linux Mint 17.3</text>
|
||||
<text fill="#000000" x="55.5" y="782.5">Linux Mint 17.3</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="61.5" y="773.5">LEDE trunk x86_64</text>
|
||||
<text fill="#000000" x="61.5" y="773.5">LEDE trunk x86_64</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="540.5" y="655.5">Devuan Stable</text>
|
||||
<text fill="#000000" x="540.5" y="655.5">Devuan Stable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="60.5" y="778.5">OpenWrt trunk x86</text>
|
||||
<text fill="#000000" x="60.5" y="778.5">OpenWrt trunk x86</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="58.5" y="780.5">HaikuPorts release</text>
|
||||
<text fill="#000000" x="58.5" y="780.5">HaikuPorts release</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="46.5" y="782.5">PlayDeb Xenial Testing</text>
|
||||
<text fill="#000000" x="46.5" y="782.5">PlayDeb Xenial Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="379.5" y="632.5">pkgsrc-2018Q1</text>
|
||||
<text fill="#000000" x="379.5" y="632.5">pkgsrc-2018Q1</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="728.5" y="478.5">Ubuntu 18.04</text>
|
||||
<text fill="#000000" x="728.5" y="478.5">Ubuntu 18.04</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="254.5" y="637.5">Manjaro Testing</text>
|
||||
<text fill="#000000" x="254.5" y="637.5">Manjaro Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="369.5" y="663.5">pkgsrc-2017Q2</text>
|
||||
<text fill="#000000" x="369.5" y="663.5">pkgsrc-2017Q2</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="781.5">UnitedRPMs Fedora 24</text>
|
||||
<text fill="#000000" x="49.5" y="781.5">UnitedRPMs Fedora 24</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="782.5">antiX-16</text>
|
||||
<text fill="#000000" x="48.5" y="782.5">antiX-16</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="50.5" y="781.5">Sparky</text>
|
||||
<text fill="#000000" x="50.5" y="781.5">Sparky</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="59.5" y="777.5">Vcpkg</text>
|
||||
<text fill="#000000" x="59.5" y="777.5">Vcpkg</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="320.5" y="668.5">MacPorts</text>
|
||||
<text fill="#000000" x="320.5" y="668.5">MacPorts</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="52.5" y="780.5">MX Linux MX-17 Testing</text>
|
||||
<text fill="#000000" x="52.5" y="780.5">MX Linux MX-17 Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="56.5" y="776.5">KDE neon User LTS</text>
|
||||
<text fill="#000000" x="56.5" y="776.5">KDE neon User LTS</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="1086.5" y="523.5">AUR</text>
|
||||
<text fill="#000000" x="1086.5" y="523.5">AUR</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="74.5" y="781.5">Maemo Fremantle</text>
|
||||
<text fill="#000000" x="74.5" y="781.5">Maemo Fremantle</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="205.5" y="729.5">EPEL 7</text>
|
||||
<text fill="#000000" x="205.5" y="729.5">EPEL 7</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">Parabola Testing</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">Parabola Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="774.5">crates.io</text>
|
||||
<text fill="#000000" x="53.5" y="774.5">crates.io</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="471.5" y="697.5">Trisquel 6.0</text>
|
||||
<text fill="#000000" x="471.5" y="697.5">Trisquel 6.0</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="67.5" y="779.5">SteamOS brewmaster beta</text>
|
||||
<text fill="#000000" x="67.5" y="779.5">SteamOS brewmaster beta</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="782.5">Linux Mint 18.3</text>
|
||||
<text fill="#000000" x="49.5" y="782.5">Linux Mint 18.3</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">F-Droid</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">F-Droid</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="254.5" y="637.5">Manjaro Stable</text>
|
||||
<text fill="#000000" x="254.5" y="637.5">Manjaro Stable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="782.5">Trisquel 7.0 backports</text>
|
||||
<text fill="#000000" x="48.5" y="782.5">Trisquel 7.0 backports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="223.5" y="718.5">Hyperbola</text>
|
||||
<text fill="#000000" x="223.5" y="718.5">Hyperbola</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="47.5" y="782.5">Calculate</text>
|
||||
<text fill="#000000" x="47.5" y="782.5">Calculate</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="58.5" y="777.5">Debian Experimental</text>
|
||||
<text fill="#000000" x="58.5" y="777.5">Debian Experimental</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="61.5" y="773.5">Entware</text>
|
||||
<text fill="#000000" x="61.5" y="773.5">Entware</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="787.5" y="413.5">Raspbian Testing</text>
|
||||
<text fill="#000000" x="787.5" y="413.5">Raspbian Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="154.5" y="726.5">AOSC</text>
|
||||
<text fill="#000000" x="154.5" y="726.5">AOSC</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="780.5">UnitedRPMs Fedora 26</text>
|
||||
<text fill="#000000" x="49.5" y="780.5">UnitedRPMs Fedora 26</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="365.5" y="668.5">pkgsrc-2017Q1</text>
|
||||
<text fill="#000000" x="365.5" y="668.5">pkgsrc-2017Q1</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="782.5">Linux Mint 17</text>
|
||||
<text fill="#000000" x="48.5" y="782.5">Linux Mint 17</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="59.5" y="775.5">Gentoo overlay Pentoo</text>
|
||||
<text fill="#000000" x="59.5" y="775.5">Gentoo overlay Pentoo</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="96.5" y="772.5">CentOS 6</text>
|
||||
<text fill="#000000" x="96.5" y="772.5">CentOS 6</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="153.5" y="713.5">Alpine Linux Edge</text>
|
||||
<text fill="#000000" x="153.5" y="713.5">Alpine Linux Edge</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="716.5" y="441.5">Parrot</text>
|
||||
<text fill="#000000" x="716.5" y="441.5">Parrot</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="781.5">Sabayon for-gentoo</text>
|
||||
<text fill="#000000" x="49.5" y="781.5">Sabayon for-gentoo</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="781.5">Antergos Main</text>
|
||||
<text fill="#000000" x="49.5" y="781.5">Antergos Main</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="50.5" y="777.5">DistroWatch.com</text>
|
||||
<text fill="#000000" x="50.5" y="777.5">DistroWatch.com</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="373.5" y="655.5">pkgsrc-2017Q3</text>
|
||||
<text fill="#000000" x="373.5" y="655.5">pkgsrc-2017Q3</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="46.5" y="782.5">RPM Fusion EL 6</text>
|
||||
<text fill="#000000" x="46.5" y="782.5">RPM Fusion EL 6</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="642.5" y="579.5">Devuan Testing</text>
|
||||
<text fill="#000000" x="642.5" y="579.5">Devuan Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="236.5" y="629.5">Arch</text>
|
||||
<text fill="#000000" x="236.5" y="629.5">Arch</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="782.5">Linux Mint 18</text>
|
||||
<text fill="#000000" x="48.5" y="782.5">Linux Mint 18</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="777.5">RPM Fusion Fedora Rawhide</text>
|
||||
<text fill="#000000" x="53.5" y="777.5">RPM Fusion Fedora Rawhide</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="781.5">GetDeb Yakkety</text>
|
||||
<text fill="#000000" x="48.5" y="781.5">GetDeb Yakkety</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="779.5">UnitedRPMs Fedora 28</text>
|
||||
<text fill="#000000" x="48.5" y="779.5">UnitedRPMs Fedora 28</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="723.5" y="420.5">Debian Unstable</text>
|
||||
<text fill="#000000" x="723.5" y="420.5">Debian Unstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="61.5" y="773.5">LEDE trunk MIPS 24Kc</text>
|
||||
<text fill="#000000" x="61.5" y="773.5">LEDE trunk MIPS 24Kc</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="112.5" y="764.5">CentOS 7</text>
|
||||
<text fill="#000000" x="112.5" y="764.5">CentOS 7</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="385.5" y="590.5">Mageia Cauldron</text>
|
||||
<text fill="#000000" x="385.5" y="590.5">Mageia Cauldron</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="256.5" y="635.5">Parabola</text>
|
||||
<text fill="#000000" x="256.5" y="635.5">Parabola</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="778.5">RPM Fusion Fedora 28</text>
|
||||
<text fill="#000000" x="53.5" y="778.5">RPM Fusion Fedora 28</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="92.5" y="752.5">YACP</text>
|
||||
<text fill="#000000" x="92.5" y="752.5">YACP</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="375.5" y="647.5">pkgsrc-2017Q4</text>
|
||||
<text fill="#000000" x="375.5" y="647.5">pkgsrc-2017Q4</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="778.5">RPM Fusion Fedora 26</text>
|
||||
<text fill="#000000" x="53.5" y="778.5">RPM Fusion Fedora 26</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="120.5" y="765.5">Rosa Server 7.3</text>
|
||||
<text fill="#000000" x="120.5" y="765.5">Rosa Server 7.3</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="47.5" y="782.5">MX Linux MX-16</text>
|
||||
<text fill="#000000" x="47.5" y="782.5">MX Linux MX-16</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="780.5">PlayDeb Zesty</text>
|
||||
<text fill="#000000" x="48.5" y="780.5">PlayDeb Zesty</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="305.5" y="695.5">PCLinuxOS</text>
|
||||
<text fill="#000000" x="305.5" y="695.5">PCLinuxOS</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="709.5" y="543.5">Ubuntu 17.10</text>
|
||||
<text fill="#000000" x="709.5" y="543.5">Ubuntu 17.10</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="586.5" y="644.5">Raspbian Oldstable</text>
|
||||
<text fill="#000000" x="586.5" y="644.5">Raspbian Oldstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="324.5" y="635.5">openSUSE Leap 15.0</text>
|
||||
<text fill="#000000" x="324.5" y="635.5">openSUSE Leap 15.0</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="60.5" y="781.5">SteamOS alchemist beta</text>
|
||||
<text fill="#000000" x="60.5" y="781.5">SteamOS alchemist beta</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="109.5" y="770.5">Rosa Server 6.9</text>
|
||||
<text fill="#000000" x="109.5" y="770.5">Rosa Server 6.9</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">PlayDeb Zesty Testing</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">PlayDeb Zesty Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="630.5" y="616.5">Trisquel 8.0</text>
|
||||
<text fill="#000000" x="630.5" y="616.5">Trisquel 8.0</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="57.5" y="776.5">KDE neon User</text>
|
||||
<text fill="#000000" x="57.5" y="776.5">KDE neon User</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="151.5" y="698.5">Homebrew</text>
|
||||
<text fill="#000000" x="151.5" y="698.5">Homebrew</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="247.5" y="673.5">OpenBSD Ports</text>
|
||||
<text fill="#000000" x="247.5" y="673.5">OpenBSD Ports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="553.5" y="481.5">Fedora 28</text>
|
||||
<text fill="#000000" x="553.5" y="481.5">Fedora 28</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="246.5" y="576.5">CPAN</text>
|
||||
<text fill="#000000" x="246.5" y="576.5">CPAN</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="483.5" y="695.5">Ubuntu 12.04</text>
|
||||
<text fill="#000000" x="483.5" y="695.5">Ubuntu 12.04</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="278.5" y="708.5">openSUSE Leap 42.3</text>
|
||||
<text fill="#000000" x="278.5" y="708.5">openSUSE Leap 42.3</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="98.5" y="728.5">Stackage Nightly</text>
|
||||
<text fill="#000000" x="98.5" y="728.5">Stackage Nightly</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="723.5" y="420.5">Devuan Unstable</text>
|
||||
<text fill="#000000" x="723.5" y="420.5">Devuan Unstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="780.5">PlayDeb Xenial</text>
|
||||
<text fill="#000000" x="49.5" y="780.5">PlayDeb Xenial</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="54.5" y="773.5">KaOS Build</text>
|
||||
<text fill="#000000" x="54.5" y="773.5">KaOS Build</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="342.5" y="471.5">Hackage</text>
|
||||
<text fill="#000000" x="342.5" y="471.5">Hackage</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="641.5" y="579.5">Debian Stable</text>
|
||||
<text fill="#000000" x="641.5" y="579.5">Debian Stable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="781.5">GetDeb Xenial</text>
|
||||
<text fill="#000000" x="49.5" y="781.5">GetDeb Xenial</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="780.5">PlayDeb Yakkety</text>
|
||||
<text fill="#000000" x="48.5" y="780.5">PlayDeb Yakkety</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="372.5" y="661.5">Mageia 6</text>
|
||||
<text fill="#000000" x="372.5" y="661.5">Mageia 6</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="502.5" y="559.5">Gentoo</text>
|
||||
<text fill="#000000" x="502.5" y="559.5">Gentoo</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="57.5" y="780.5">OpenWrt 15.05.01 ar71xx</text>
|
||||
<text fill="#000000" x="57.5" y="780.5">OpenWrt 15.05.01 ar71xx</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="57.5" y="782.5">KDE neon Dev Stable</text>
|
||||
<text fill="#000000" x="57.5" y="782.5">KDE neon Dev Stable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="485.5" y="626.5">Rosa 2014.1</text>
|
||||
<text fill="#000000" x="485.5" y="626.5">Rosa 2014.1</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="109.5" y="763.5">BlackArch</text>
|
||||
<text fill="#000000" x="109.5" y="763.5">BlackArch</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="521.5" y="551.5">Fedora 26</text>
|
||||
<text fill="#000000" x="521.5" y="551.5">Fedora 26</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="90.5" y="737.5">Ravenports</text>
|
||||
<text fill="#000000" x="90.5" y="737.5">Ravenports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="67.5" y="779.5">SteamOS brewmaster</text>
|
||||
<text fill="#000000" x="67.5" y="779.5">SteamOS brewmaster</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="780.5">UnitedRPMs Fedora 27</text>
|
||||
<text fill="#000000" x="49.5" y="780.5">UnitedRPMs Fedora 27</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="47.5" y="782.5">Trisquel 6.0 backports</text>
|
||||
<text fill="#000000" x="47.5" y="782.5">Trisquel 6.0 backports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="53.5" y="782.5">Linux Mint 17.1</text>
|
||||
<text fill="#000000" x="53.5" y="782.5">Linux Mint 17.1</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="77.5" y="768.5">OpenIndiana packages</text>
|
||||
<text fill="#000000" x="77.5" y="768.5">OpenIndiana packages</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="50.5" y="782.5">antiX-17</text>
|
||||
<text fill="#000000" x="50.5" y="782.5">antiX-17</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="49.5" y="782.5">Linux Mint 18.1</text>
|
||||
<text fill="#000000" x="49.5" y="782.5">Linux Mint 18.1</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="213.5" y="693.5">SlackBuilds</text>
|
||||
<text fill="#000000" x="213.5" y="693.5">SlackBuilds</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="697.5" y="388.5">FreeBSD Ports</text>
|
||||
<text fill="#000000" x="697.5" y="388.5">FreeBSD Ports</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="45.5" y="782.5">Antergos Staging</text>
|
||||
<text fill="#000000" x="45.5" y="782.5">Antergos Staging</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="78.5" y="770.5">Chocolatey</text>
|
||||
<text fill="#000000" x="78.5" y="770.5">Chocolatey</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="57.5" y="780.5">OpenWrt 15.05.01 x86</text>
|
||||
<text fill="#000000" x="57.5" y="780.5">OpenWrt 15.05.01 x86</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="52.5" y="780.5">RPM Fusion Fedora 24</text>
|
||||
<text fill="#000000" x="52.5" y="780.5">RPM Fusion Fedora 24</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="185.5" y="745.5">EPEL 6</text>
|
||||
<text fill="#000000" x="185.5" y="745.5">EPEL 6</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="129.5" y="762.5">GoboLinux</text>
|
||||
<text fill="#000000" x="129.5" y="762.5">GoboLinux</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="478.5" y="565.5">ALT Sisyphus</text>
|
||||
<text fill="#000000" x="478.5" y="565.5">ALT Sisyphus</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="81.5" y="774.5">OpenMandriva 3.x</text>
|
||||
<text fill="#000000" x="81.5" y="774.5">OpenMandriva 3.x</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="69.5" y="766.5">Wikidata</text>
|
||||
<text fill="#000000" x="69.5" y="766.5">Wikidata</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="676.5" y="461.5">PureOS green</text>
|
||||
<text fill="#000000" x="676.5" y="461.5">PureOS green</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="253.5" y="722.5">openSUSE Leap 42.2</text>
|
||||
<text fill="#000000" x="253.5" y="722.5">openSUSE Leap 42.2</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="48.5" y="781.5">GetDeb Zesty</text>
|
||||
<text fill="#000000" x="48.5" y="781.5">GetDeb Zesty</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="47.5" y="782.5">GetDeb Xenial Testing</text>
|
||||
<text fill="#000000" x="47.5" y="782.5">GetDeb Xenial Testing</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="63.5" y="773.5">freshcode.club</text>
|
||||
<text fill="#000000" x="63.5" y="773.5">freshcode.club</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="60.5" y="778.5">OpenWrt trunk ar71xx</text>
|
||||
<text fill="#000000" x="60.5" y="778.5">OpenWrt trunk ar71xx</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="990.5" y="33.5">nixpkgs unstable</text>
|
||||
<text fill="#000000" x="990.5" y="33.5">nixpkgs unstable</text>
|
||||
<text fill="#f0f0f0" stroke="#f0f0f0" stroke-width="3" stroke-linecap="round" x="557.5" y="451.5">Fedora Rawhide</text>
|
||||
<text fill="#000000" x="557.5" y="451.5">Fedora Rawhide</text>
|
||||
</g>
|
||||
<circle cx="645.5" cy="407.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="645.5" cy="407.5" r="4" fill="#9eff11" />
|
||||
<circle cx="46.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="46.5" cy="778.5" r="4" fill="#6693d6" />
|
||||
<circle cx="56.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="56.5" cy="770.5" r="4" fill="#8f5902" />
|
||||
<circle cx="48.5" cy="775.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="775.5" r="4" fill="#000000" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="54.5" cy="776.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="54.5" cy="776.5" r="4" fill="#6693d6" />
|
||||
<circle cx="42.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="42.5" cy="778.5" r="4" fill="#000000" />
|
||||
<circle cx="146.5" cy="696.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="146.5" cy="696.5" r="4" fill="#fdb130" />
|
||||
<circle cx="99.5" cy="726.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="99.5" cy="726.5" r="4" fill="#293845" />
|
||||
<circle cx="46.5" cy="776.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="46.5" cy="776.5" r="4" fill="#000000" />
|
||||
<circle cx="200.5" cy="695.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="200.5" cy="695.5" r="4" fill="#000000" />
|
||||
<circle cx="71.5" cy="759.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="71.5" cy="759.5" r="4" fill="#000000" />
|
||||
<circle cx="638.5" cy="611.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="638.5" cy="611.5" r="4" fill="#e95420" />
|
||||
<circle cx="55.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="55.5" cy="770.5" r="4" fill="#6da741" />
|
||||
<circle cx="497.5" cy="594.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="497.5" cy="594.5" r="4" fill="#4e4e71" />
|
||||
<circle cx="710.5" cy="555.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="710.5" cy="555.5" r="4" fill="#d6264f" />
|
||||
<circle cx="43.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="777.5" r="4" fill="#0088cc" />
|
||||
<circle cx="43.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="535.5" cy="652.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="535.5" cy="652.5" r="4" fill="#c70036" />
|
||||
<circle cx="340.5" cy="465.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="340.5" cy="465.5" r="4" fill="#000000" />
|
||||
<circle cx="73.5" cy="767.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="73.5" cy="767.5" r="4" fill="#000000" />
|
||||
<circle cx="55.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="55.5" cy="778.5" r="4" fill="#d6264f" />
|
||||
<circle cx="62.5" cy="771.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="62.5" cy="771.5" r="4" fill="#c70036" />
|
||||
<circle cx="56.5" cy="768.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="56.5" cy="768.5" r="4" fill="#000000" />
|
||||
<circle cx="41.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="41.5" cy="779.5" r="4" fill="#669fe7" />
|
||||
<circle cx="52.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="52.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="44.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="777.5" r="4" fill="#261d22" />
|
||||
<circle cx="547.5" cy="661.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="547.5" cy="661.5" r="4" fill="#669fe7" />
|
||||
<circle cx="639.5" cy="575.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="639.5" cy="575.5" r="4" fill="#ffcc00" />
|
||||
<circle cx="56.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="56.5" cy="770.5" r="4" fill="#8f5902" />
|
||||
<circle cx="291.5" cy="629.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="291.5" cy="629.5" r="4" fill="#6da741" />
|
||||
<circle cx="50.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="50.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#56347c" />
|
||||
<circle cx="48.5" cy="776.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="776.5" r="4" fill="#000000" />
|
||||
<circle cx="135.5" cy="750.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="135.5" cy="750.5" r="4" fill="#000000" />
|
||||
<circle cx="51.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="51.5" cy="777.5" r="4" fill="#6693d6" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="82.5" cy="753.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="82.5" cy="753.5" r="4" fill="#1d6fa5" />
|
||||
<circle cx="84.5" cy="759.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="84.5" cy="759.5" r="4" fill="#ffc245" />
|
||||
<circle cx="694.5" cy="435.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="694.5" cy="435.5" r="4" fill="#32638f" />
|
||||
<circle cx="88.5" cy="773.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="88.5" cy="773.5" r="4" fill="#c70036" />
|
||||
<circle cx="56.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="56.5" cy="770.5" r="4" fill="#8f5902" />
|
||||
<circle cx="41.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="41.5" cy="779.5" r="4" fill="#e95420" />
|
||||
<circle cx="377.5" cy="609.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="377.5" cy="609.5" r="4" fill="#ff6600" />
|
||||
<circle cx="55.5" cy="776.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="55.5" cy="776.5" r="4" fill="#8f5902" />
|
||||
<circle cx="555.5" cy="660.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="555.5" cy="660.5" r="4" fill="#e95420" />
|
||||
<circle cx="44.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="676.5" cy="442.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="676.5" cy="442.5" r="4" fill="#000000" />
|
||||
<circle cx="727.5" cy="541.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="727.5" cy="541.5" r="4" fill="#949393" />
|
||||
<circle cx="180.5" cy="680.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="180.5" cy="680.5" r="4" fill="#045e9d" />
|
||||
<circle cx="41.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="41.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="48.5" cy="774.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="774.5" r="4" fill="#c70036" />
|
||||
<circle cx="957.5" cy="144.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="957.5" cy="144.5" r="4" fill="#7eb2dd" />
|
||||
<circle cx="684.5" cy="440.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="684.5" cy="440.5" r="4" fill="#c70036" />
|
||||
<circle cx="530.5" cy="520.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="530.5" cy="520.5" r="4" fill="#294172" />
|
||||
<circle cx="249.5" cy="624.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="249.5" cy="624.5" r="4" fill="#34be5b" />
|
||||
<circle cx="101.5" cy="718.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="101.5" cy="718.5" r="4" fill="#e9573f" />
|
||||
<circle cx="480.5" cy="602.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="480.5" cy="602.5" r="4" fill="#3757a1" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#56347c" />
|
||||
<circle cx="50.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="50.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="56.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="56.5" cy="770.5" r="4" fill="#8f5902" />
|
||||
<circle cx="535.5" cy="652.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="535.5" cy="652.5" r="4" fill="#88839c" />
|
||||
<circle cx="55.5" cy="775.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="55.5" cy="775.5" r="4" fill="#5d6993" />
|
||||
<circle cx="53.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="53.5" cy="777.5" r="4" fill="#ffc245" />
|
||||
<circle cx="41.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="41.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="374.5" cy="629.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="374.5" cy="629.5" r="4" fill="#ff6600" />
|
||||
<circle cx="723.5" cy="475.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="723.5" cy="475.5" r="4" fill="#e95420" />
|
||||
<circle cx="249.5" cy="634.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="249.5" cy="634.5" r="4" fill="#34be5b" />
|
||||
<circle cx="364.5" cy="660.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="364.5" cy="660.5" r="4" fill="#ff6600" />
|
||||
<circle cx="44.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="778.5" r="4" fill="#261d22" />
|
||||
<circle cx="43.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="45.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="45.5" cy="778.5" r="4" fill="#949393" />
|
||||
<circle cx="54.5" cy="774.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="54.5" cy="774.5" r="4" fill="#000000" />
|
||||
<circle cx="315.5" cy="665.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="315.5" cy="665.5" r="4" fill="#1f79e9" />
|
||||
<circle cx="47.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="47.5" cy="777.5" r="4" fill="#6693d6" />
|
||||
<circle cx="51.5" cy="773.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="51.5" cy="773.5" r="4" fill="#000000" />
|
||||
<circle cx="1081.5" cy="520.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="1081.5" cy="520.5" r="4" fill="#0088cc" />
|
||||
<circle cx="69.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="69.5" cy="778.5" r="4" fill="#f68500" />
|
||||
<circle cx="200.5" cy="726.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="200.5" cy="726.5" r="4" fill="#ff0000" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#787dab" />
|
||||
<circle cx="48.5" cy="771.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="771.5" r="4" fill="#e8ad39" />
|
||||
<circle cx="466.5" cy="694.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="466.5" cy="694.5" r="4" fill="#669fe7" />
|
||||
<circle cx="62.5" cy="776.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="62.5" cy="776.5" r="4" fill="#d6264f" />
|
||||
<circle cx="44.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="249.5" cy="634.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="249.5" cy="634.5" r="4" fill="#34be5b" />
|
||||
<circle cx="43.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="779.5" r="4" fill="#669fe7" />
|
||||
<circle cx="218.5" cy="715.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="218.5" cy="715.5" r="4" fill="#c0c0c0" />
|
||||
<circle cx="42.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="42.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="53.5" cy="774.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="53.5" cy="774.5" r="4" fill="#c70036" />
|
||||
<circle cx="56.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="56.5" cy="770.5" r="4" fill="#000000" />
|
||||
<circle cx="782.5" cy="410.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="782.5" cy="410.5" r="4" fill="#d6264f" />
|
||||
<circle cx="149.5" cy="723.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="149.5" cy="723.5" r="4" fill="#000000" />
|
||||
<circle cx="44.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="777.5" r="4" fill="#261d22" />
|
||||
<circle cx="360.5" cy="665.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="360.5" cy="665.5" r="4" fill="#ff6600" />
|
||||
<circle cx="43.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="54.5" cy="772.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="54.5" cy="772.5" r="4" fill="#62548f" />
|
||||
<circle cx="91.5" cy="769.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="91.5" cy="769.5" r="4" fill="#932279" />
|
||||
<circle cx="148.5" cy="710.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="148.5" cy="710.5" r="4" fill="#000000" />
|
||||
<circle cx="711.5" cy="438.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="711.5" cy="438.5" r="4" fill="#95b8c8" />
|
||||
<circle cx="44.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="778.5" r="4" fill="#000000" />
|
||||
<circle cx="44.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="778.5" r="4" fill="#000000" />
|
||||
<circle cx="45.5" cy="774.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="45.5" cy="774.5" r="4" fill="#000000" />
|
||||
<circle cx="368.5" cy="652.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="368.5" cy="652.5" r="4" fill="#ff6600" />
|
||||
<circle cx="41.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="41.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="637.5" cy="576.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="637.5" cy="576.5" r="4" fill="#88839c" />
|
||||
<circle cx="231.5" cy="626.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="231.5" cy="626.5" r="4" fill="#0088cc" />
|
||||
<circle cx="43.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="48.5" cy="774.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="774.5" r="4" fill="#000000" />
|
||||
<circle cx="43.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="778.5" r="4" fill="#000000" />
|
||||
<circle cx="43.5" cy="776.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="776.5" r="4" fill="#261d22" />
|
||||
<circle cx="718.5" cy="417.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="718.5" cy="417.5" r="4" fill="#c70036" />
|
||||
<circle cx="56.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="56.5" cy="770.5" r="4" fill="#8f5902" />
|
||||
<circle cx="107.5" cy="761.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="107.5" cy="761.5" r="4" fill="#932279" />
|
||||
<circle cx="380.5" cy="587.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="380.5" cy="587.5" r="4" fill="#262f45" />
|
||||
<circle cx="251.5" cy="632.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="251.5" cy="632.5" r="4" fill="#787dab" />
|
||||
<circle cx="48.5" cy="775.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="775.5" r="4" fill="#000000" />
|
||||
<circle cx="87.5" cy="749.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="87.5" cy="749.5" r="4" fill="#000000" />
|
||||
<circle cx="370.5" cy="644.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="370.5" cy="644.5" r="4" fill="#ff6600" />
|
||||
<circle cx="48.5" cy="775.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="775.5" r="4" fill="#000000" />
|
||||
<circle cx="115.5" cy="762.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="115.5" cy="762.5" r="4" fill="#3757a1" />
|
||||
<circle cx="42.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="42.5" cy="779.5" r="4" fill="#6693d6" />
|
||||
<circle cx="43.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="777.5" r="4" fill="#000000" />
|
||||
<circle cx="300.5" cy="692.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="300.5" cy="692.5" r="4" fill="#1c5482" />
|
||||
<circle cx="704.5" cy="540.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="704.5" cy="540.5" r="4" fill="#e95420" />
|
||||
<circle cx="581.5" cy="641.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="581.5" cy="641.5" r="4" fill="#d6264f" />
|
||||
<circle cx="319.5" cy="632.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="319.5" cy="632.5" r="4" fill="#6da741" />
|
||||
<circle cx="55.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="55.5" cy="778.5" r="4" fill="#d6264f" />
|
||||
<circle cx="104.5" cy="767.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="104.5" cy="767.5" r="4" fill="#3757a1" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="625.5" cy="613.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="625.5" cy="613.5" r="4" fill="#669fe7" />
|
||||
<circle cx="52.5" cy="773.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="52.5" cy="773.5" r="4" fill="#000000" />
|
||||
<circle cx="146.5" cy="695.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="146.5" cy="695.5" r="4" fill="#fdb130" />
|
||||
<circle cx="242.5" cy="670.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="242.5" cy="670.5" r="4" fill="#f8e808" />
|
||||
<circle cx="548.5" cy="478.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="548.5" cy="478.5" r="4" fill="#294172" />
|
||||
<circle cx="241.5" cy="573.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="241.5" cy="573.5" r="4" fill="#000000" />
|
||||
<circle cx="478.5" cy="692.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="478.5" cy="692.5" r="4" fill="#e95420" />
|
||||
<circle cx="273.5" cy="705.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="273.5" cy="705.5" r="4" fill="#6da741" />
|
||||
<circle cx="93.5" cy="725.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="93.5" cy="725.5" r="4" fill="#293845" />
|
||||
<circle cx="718.5" cy="417.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="718.5" cy="417.5" r="4" fill="#88839c" />
|
||||
<circle cx="44.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="777.5" r="4" fill="#000000" />
|
||||
<circle cx="49.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="49.5" cy="770.5" r="4" fill="#000000" />
|
||||
<circle cx="337.5" cy="468.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="337.5" cy="468.5" r="4" fill="#293845" />
|
||||
<circle cx="636.5" cy="576.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="636.5" cy="576.5" r="4" fill="#c70036" />
|
||||
<circle cx="44.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="778.5" r="4" fill="#000000" />
|
||||
<circle cx="43.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="777.5" r="4" fill="#000000" />
|
||||
<circle cx="367.5" cy="658.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="367.5" cy="658.5" r="4" fill="#262f45" />
|
||||
<circle cx="497.5" cy="556.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="497.5" cy="556.5" r="4" fill="#62548f" />
|
||||
<circle cx="52.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="52.5" cy="777.5" r="4" fill="#5d6993" />
|
||||
<circle cx="52.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="52.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="480.5" cy="623.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="480.5" cy="623.5" r="4" fill="#3757a1" />
|
||||
<circle cx="104.5" cy="760.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="104.5" cy="760.5" r="4" fill="#000000" />
|
||||
<circle cx="516.5" cy="548.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="516.5" cy="548.5" r="4" fill="#294172" />
|
||||
<circle cx="85.5" cy="734.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="85.5" cy="734.5" r="4" fill="#00bcd4" />
|
||||
<circle cx="62.5" cy="776.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="62.5" cy="776.5" r="4" fill="#d6264f" />
|
||||
<circle cx="44.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="777.5" r="4" fill="#261d22" />
|
||||
<circle cx="42.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="42.5" cy="779.5" r="4" fill="#669fe7" />
|
||||
<circle cx="48.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="48.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="72.5" cy="765.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="72.5" cy="765.5" r="4" fill="#000000" />
|
||||
<circle cx="45.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="45.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="44.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="44.5" cy="779.5" r="4" fill="#87cf3e" />
|
||||
<circle cx="208.5" cy="690.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="208.5" cy="690.5" r="4" fill="#000000" />
|
||||
<circle cx="692.5" cy="385.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="692.5" cy="385.5" r="4" fill="#990000" />
|
||||
<circle cx="40.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="40.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="73.5" cy="767.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="73.5" cy="767.5" r="4" fill="#000000" />
|
||||
<circle cx="52.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="52.5" cy="777.5" r="4" fill="#5d6993" />
|
||||
<circle cx="47.5" cy="777.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="47.5" cy="777.5" r="4" fill="#000000" />
|
||||
<circle cx="180.5" cy="742.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="180.5" cy="742.5" r="4" fill="#ff0000" />
|
||||
<circle cx="124.5" cy="759.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="124.5" cy="759.5" r="4" fill="#000000" />
|
||||
<circle cx="473.5" cy="562.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="473.5" cy="562.5" r="4" fill="#baccdd" />
|
||||
<circle cx="76.5" cy="771.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="76.5" cy="771.5" r="4" fill="#045e9d" />
|
||||
<circle cx="64.5" cy="763.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="64.5" cy="763.5" r="4" fill="#339966" />
|
||||
<circle cx="671.5" cy="458.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="671.5" cy="458.5" r="4" fill="#000000" />
|
||||
<circle cx="248.5" cy="719.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="248.5" cy="719.5" r="4" fill="#6da741" />
|
||||
<circle cx="43.5" cy="778.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="43.5" cy="778.5" r="4" fill="#000000" />
|
||||
<circle cx="42.5" cy="779.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="42.5" cy="779.5" r="4" fill="#000000" />
|
||||
<circle cx="58.5" cy="770.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="58.5" cy="770.5" r="4" fill="#000000" />
|
||||
<circle cx="55.5" cy="775.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="55.5" cy="775.5" r="4" fill="#5d6993" />
|
||||
<circle cx="985.5" cy="30.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="985.5" cy="30.5" r="4" fill="#7eb2dd" />
|
||||
<circle cx="552.5" cy="448.5" r="5" fill="#f0f0f0" />
|
||||
<circle cx="552.5" cy="448.5" r="4" fill="#294172" />
|
||||
</svg>
|
After Width: | Height: | Size: 53 KiB |
513
docs/slides/2023-ros-meetup/nix-snowflake.svg
Normal file
513
docs/slides/2023-ros-meetup/nix-snowflake.svg
Normal file
|
@ -0,0 +1,513 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="141.5919mm"
|
||||
height="122.80626mm"
|
||||
viewBox="0 0 501.70361 435.14028"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.0 r15299"
|
||||
sodipodi:docname="nix-snowflake.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5562">
|
||||
<stop
|
||||
style="stop-color:#699ad7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5564" />
|
||||
<stop
|
||||
id="stop5566"
|
||||
offset="0.24345198"
|
||||
style="stop-color:#7eb1dd;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#7ebae4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5568" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5053">
|
||||
<stop
|
||||
style="stop-color:#415e9a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5055" />
|
||||
<stop
|
||||
id="stop5057"
|
||||
offset="0.23168644"
|
||||
style="stop-color:#4a6baf;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#5277c3;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5059" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5960"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop5962"
|
||||
offset="0"
|
||||
style="stop-color:#637ddf;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#649afa;stop-opacity:1"
|
||||
offset="0.23168644"
|
||||
id="stop5964" />
|
||||
<stop
|
||||
id="stop5966"
|
||||
offset="1"
|
||||
style="stop-color:#719efa;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5867">
|
||||
<stop
|
||||
style="stop-color:#7363df;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5869" />
|
||||
<stop
|
||||
id="stop5871"
|
||||
offset="0.23168644"
|
||||
style="stop-color:#6478fa;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#719efa;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5873" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="515.97058"
|
||||
x2="282.26105"
|
||||
y1="338.62445"
|
||||
x1="213.95642"
|
||||
gradientTransform="translate(983.36076,601.38885)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient5855"
|
||||
xlink:href="#linearGradient5960"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="515.97058"
|
||||
x2="282.26105"
|
||||
y1="338.62445"
|
||||
x1="213.95642"
|
||||
gradientTransform="translate(-197.75174,-337.1451)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient5855-8"
|
||||
xlink:href="#linearGradient5867"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="247.58188"
|
||||
x2="-702.75317"
|
||||
y1="102.74675"
|
||||
x1="-775.20807"
|
||||
gradientTransform="translate(983.36076,601.38885)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4544"
|
||||
xlink:href="#linearGradient5960"
|
||||
inkscape:collect="always" />
|
||||
<clipPath
|
||||
id="clipPath4501"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<circle
|
||||
r="241.06563"
|
||||
cy="686.09473"
|
||||
cx="335.13995"
|
||||
id="circle4503"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#adadad;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath5410"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<circle
|
||||
r="241.13741"
|
||||
cy="340.98975"
|
||||
cx="335.98114"
|
||||
id="circle5412"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5053"
|
||||
id="linearGradient5137"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(864.55062,-2197.497)"
|
||||
x1="-584.19934"
|
||||
y1="782.33563"
|
||||
x2="-496.29703"
|
||||
y2="937.71399" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5053"
|
||||
id="linearGradient5147"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(864.55062,-2197.497)"
|
||||
x1="-584.19934"
|
||||
y1="782.33563"
|
||||
x2="-496.29703"
|
||||
y2="937.71399" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5562"
|
||||
id="linearGradient5162"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(70.505061,-1761.3076)"
|
||||
x1="200.59668"
|
||||
y1="351.41116"
|
||||
x2="290.08701"
|
||||
y2="506.18814" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5562"
|
||||
id="linearGradient5172"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(70.505061,-1761.3076)"
|
||||
x1="200.59668"
|
||||
y1="351.41116"
|
||||
x2="290.08701"
|
||||
y2="506.18814" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5562"
|
||||
id="linearGradient5182"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(70.505061,-1761.3076)"
|
||||
x1="200.59668"
|
||||
y1="351.41116"
|
||||
x2="290.08701"
|
||||
y2="506.18814" />
|
||||
<linearGradient
|
||||
y2="506.18814"
|
||||
x2="290.08701"
|
||||
y1="351.41116"
|
||||
x1="200.59668"
|
||||
gradientTransform="translate(70.505061,-1761.3076)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient5201"
|
||||
xlink:href="#linearGradient5562"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="937.71399"
|
||||
x2="-496.29703"
|
||||
y1="782.33563"
|
||||
x1="-584.19934"
|
||||
gradientTransform="translate(864.55062,-2197.497)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient5205"
|
||||
xlink:href="#linearGradient5053"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5562"
|
||||
id="linearGradient4328"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(70.650339,-1055.1511)"
|
||||
x1="200.59668"
|
||||
y1="351.41116"
|
||||
x2="290.08701"
|
||||
y2="506.18814" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5053"
|
||||
id="linearGradient4330"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(864.69589,-1491.3405)"
|
||||
x1="-584.19934"
|
||||
y1="782.33563"
|
||||
x2="-496.29703"
|
||||
y2="937.71399" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.98318225"
|
||||
inkscape:cx="113.58176"
|
||||
inkscape:cy="-45.193301"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer3"
|
||||
showgrid="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1577"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer7"
|
||||
inkscape:label="bg"
|
||||
style="display:none"
|
||||
transform="translate(-23.75651,-24.84972)">
|
||||
<rect
|
||||
transform="translate(-132.5822,958.04022)"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect5389"
|
||||
width="1543.4283"
|
||||
height="483.7439"
|
||||
x="132.5822"
|
||||
y="-957.77832" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="logo-guide"
|
||||
style="display:none"
|
||||
transform="translate(-156.33871,933.1905)">
|
||||
<rect
|
||||
y="-958.02759"
|
||||
x="132.65129"
|
||||
height="484.30399"
|
||||
width="550.41602"
|
||||
id="rect5379"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nix-wiki.png"
|
||||
inkscape:export-xdpi="22.07"
|
||||
inkscape:export-ydpi="22.07" />
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect5372"
|
||||
width="501.94415"
|
||||
height="434.30405"
|
||||
x="156.12303"
|
||||
y="-933.02759"
|
||||
inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nixos-logo-only-hires-print.png"
|
||||
inkscape:export-xdpi="212.2"
|
||||
inkscape:export-ydpi="212.2" />
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect5381"
|
||||
width="24.939611"
|
||||
height="24.939611"
|
||||
x="658.02826"
|
||||
y="-958.04022" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="print-logo"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:inline"
|
||||
transform="translate(-156.33871,933.1905)"
|
||||
sodipodi:insensitive="true">
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||
id="path4861"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||
id="use4863"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||
id="use4865"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||
id="use4867"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4873"
|
||||
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="use4875"
|
||||
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="use4877"
|
||||
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<g
|
||||
id="layer2"
|
||||
inkscape:label="guides"
|
||||
style="display:none"
|
||||
transform="translate(72.039038,-1799.4476)">
|
||||
<path
|
||||
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="1.5707963"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:r2="217.25499"
|
||||
sodipodi:r1="250.86446"
|
||||
sodipodi:cy="377.47382"
|
||||
sodipodi:cx="335.17407"
|
||||
sodipodi:sides="6"
|
||||
id="path6032"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.23600003;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
sodipodi:type="star" />
|
||||
<path
|
||||
transform="translate(0,-308.26772)"
|
||||
sodipodi:type="star"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path5875"
|
||||
sodipodi:sides="6"
|
||||
sodipodi:cx="335.17407"
|
||||
sodipodi:cy="685.74158"
|
||||
sodipodi:r1="100.83495"
|
||||
sodipodi:r2="87.32563"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="1.5707963"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 385.59154,773.06721 -100.83495,0 -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" />
|
||||
<path
|
||||
transform="translate(0,-308.26772)"
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5851"
|
||||
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
|
||||
style="fill:url(#linearGradient5855);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.41499999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c53a3a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect5884"
|
||||
width="48.834862"
|
||||
height="226.22897"
|
||||
x="-34.74221"
|
||||
y="446.17056"
|
||||
transform="rotate(-30)" />
|
||||
<path
|
||||
transform="translate(0,-308.26772)"
|
||||
sodipodi:type="star"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.50899999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="path3428"
|
||||
sodipodi:sides="6"
|
||||
sodipodi:cx="223.93674"
|
||||
sodipodi:cy="878.63831"
|
||||
sodipodi:r1="28.048939"
|
||||
sodipodi:r2="24.291094"
|
||||
sodipodi:arg1="0"
|
||||
sodipodi:arg2="0.52359878"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect5884"
|
||||
id="use4252"
|
||||
transform="rotate(60,268.29786,489.4515)"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.6507937;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4254"
|
||||
width="5.3947482"
|
||||
height="115.12564"
|
||||
x="545.71014"
|
||||
y="467.07007"
|
||||
transform="rotate(30,575.23539,-154.13386)" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="gradient-logo"
|
||||
style="display:inline;opacity:1"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(-156.33871,933.1905)">
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3336-6"
|
||||
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
|
||||
style="opacity:1;fill:url(#linearGradient4328);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(60,407.11155,-715.78724)"
|
||||
id="use3439-6"
|
||||
inkscape:transform-center-y="151.59082"
|
||||
inkscape:transform-center-x="124.43045"
|
||||
xlink:href="#path3336-6"
|
||||
y="0"
|
||||
x="0" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(-60,407.31177,-715.70016)"
|
||||
id="use3445-0"
|
||||
inkscape:transform-center-y="75.573958"
|
||||
inkscape:transform-center-x="-168.20651"
|
||||
xlink:href="#path3336-6"
|
||||
y="0"
|
||||
x="0" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(180,407.41868,-715.7565)"
|
||||
id="use3449-5"
|
||||
inkscape:transform-center-y="-139.94592"
|
||||
inkscape:transform-center-x="59.669705"
|
||||
xlink:href="#path3336-6"
|
||||
y="0"
|
||||
x="0" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
|
||||
id="path4260-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(120,407.33916,-716.08356)"
|
||||
id="use4354-5"
|
||||
xlink:href="#path4260-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="display:inline" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(-120,407.28823,-715.86995)"
|
||||
id="use4362-2"
|
||||
xlink:href="#path4260-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="display:inline" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 26 KiB |
BIN
docs/slides/2023-ros-meetup/reproducible-testing.jpg
Normal file
BIN
docs/slides/2023-ros-meetup/reproducible-testing.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
268
docs/slides/2023-ros-meetup/ros-meetup-slides.md
Normal file
268
docs/slides/2023-ros-meetup/ros-meetup-slides.md
Normal file
|
@ -0,0 +1,268 @@
|
|||
---
|
||||
marp: true
|
||||
theme: uncover
|
||||
paginate: true
|
||||
|
||||
---
|
||||
<!--
|
||||
Чтобы сгенерировать из этого файла презентацию в pdf, html или pptx, нужно воспользоваться утилитой Marp https://marp.app/ или одноимённым расширением VSCode https://marketplace.visualstudio.com/items?itemName=marp-team.marp-vscode.
|
||||
-->
|
||||
# Nix/Nixos
|
||||
ОС-независимая сборка пакетов ROS
|
||||
|
||||
|
|
||||
|
||||
Брылёв Игорь
|
||||
robossembler.org
|
||||
|
||||
---
|
||||
|
||||
# Что же такое ROS?
|
||||
|
||||
<!--
|
||||
В сообществе часто спорят по поводу того чем является или не является ROS. ROS звучит буквально как операционная система для роботов, однако де-факто операционной системой не является. Как правило, все сходятся на том, что ROS включает в себя много разных сущностей - это и стандарт, и фреймворк, и формат взаимодействия приложений, и непосредственно программное обеспечение - стандартная библиотека, если хотите. Но конкретно в этом докладе я бы хотел поговорить о ROS в немного другом свете - как о системе сборки и дистрибьюции программного обеспечения, что тоже имеет место быть. Причём этот аспект я считаю весьма важным, потому что почти любое ROS-приложение в среднем на 95% состоит из подгруженного из пакетных репозиториев кода, из которых на долю ROS-экосистемы приходится меньшая часть.
|
||||
-->
|
||||
|
||||
* Стандарт
|
||||
* Фреймворк
|
||||
* Набор форматов
|
||||
* ...
|
||||
* Система сборки и дистрибьюции ПО
|
||||
---
|
||||
|
||||
<!--
|
||||
Итак метод сборки и дострибьюции пакетов в ROS в значительной опирается на пакетных менеджер apt и пакетные базы debian/ubuntu (по статистике ros index 2100 пакетов представляют собой системные зависимости, предоставляемые операционной системой), а следовательно зависит от них. Многие пакеты ROS-экосистемы представляют в качестве рекомендуемого способа установки именно установку из своих репозиториев собранных заранее бинарных пакетов. Компиляция проектов их исходников редко практикуется и достаточно сложна. В целом, apt свойственны следующие проблемы.
|
||||
-->
|
||||
|
||||
### Проблемы пакетных менеджеров
|
||||
|
||||
* Апгрейд конфигурации безвозвратно изменяет состояние системы
|
||||
* Сборки не детерминированы
|
||||
* Не поддерживаются разные версии бинарников и библиотек
|
||||
* Конфликты пакетов
|
||||
|
||||
---
|
||||
|
||||
#### Проблемы управления зависимостями в ROS
|
||||
|
||||
* Зависимость от Ubuntu и её системных зависимостей (apt-пакеты)
|
||||
* Сложность интеграции с ПО вне ROS-экосистемы
|
||||
* Подготовить для удобного запуска сложный ROS-проект - трудоёмкая задача
|
||||
|
||||
---
|
||||
|
||||
# Тренды
|
||||
|
||||
* Из набора библиотек для одного робота ROS становится стандартом для роботизированных кибер-физических систем
|
||||
* В робототехнику проникают инструменты из других ниш: web, машинное обучение, DevOps
|
||||
|
||||
---
|
||||
<!--
|
||||
Когда рассказываешь про nix часто у инженеров возникает прочная ассциация с Docker. А не решает ли Docker ту же самую проблему? Да, действительно, эти инструменты решают одну и ту же проблему, которую можно было бы кратко сформулировать так
|
||||
-->
|
||||
# А как же Docker?
|
||||
---
|
||||
<!--
|
||||
С проблемой сталкиваются нууууу почти все - от первой линии службы технической поддержки до программистов. Это проблема состояния окружения - если ваша программа или приложение в какой-то степени опирается на него, то неизбежно будут возникать проблемы с его корректной работы на компьютерах с другим окружением.
|
||||
-->
|
||||

|
||||
|
||||
---
|
||||
<!-- Как добиться того, чтобы программа запущенная успешно на одном компьютере, была также успешно запущена на другом? Современные проекты представляют собой зачастую сложную комбинацию инструментов, библиотек и обеспечить воспроизводимость в этих условиях непросто. Классическое управление зависимостями в Linux-системах не позволяло добиться хорошей воспроизводимости. Docker появился во многом в ответ на эту проблему плохого управления зависимостями в операционной системе. Как это решил Docker? -->
|
||||
|
||||
# "В"
|
||||
воспроизводимость
|
||||
|
||||
---
|
||||
<!-- Как мы знаем, Docker создаёт своеобразную песочницу вокруг вашего приложения и вы передаёте его вместе с ней, чтобы состояние машины пользователя не влияло на работоспособность. Идеальная картика выглядит так: на входе Dockerfile, на выходе Образ. Вроде всё круто -->
|
||||
|
||||
# Теория
|
||||
Dockerfile -> Image
|
||||
|
||||
---
|
||||
<!-- Но де-факто с одним и тем же докерфайлом вы можете получить кучу разных образов. Почему так происходит? -->
|
||||
|
||||
# Реальность
|
||||
Dockerfile -> Image1 || Image2 ... ImageN
|
||||
|
||||
---
|
||||
<!--
|
||||
Если посмотреть вглубь, то можно обнаружить, что в типичном Docker-файле для ROS есть сразу несколько мест, которые сделают вашу сборку невоспроизводимой на другом компьютере:
|
||||
1. hub.docker.com
|
||||
2. apt-репозиторий
|
||||
3. rosdep-репозиторий
|
||||
3. файл, взятый по имени
|
||||
|
||||
Но есть другие недостатки:
|
||||
1. Возможность комбинировать зависимости (docker позволяет создавать контейнеры только наследуя от одного базового - нельзя добавить несколько базовых контейнеров)
|
||||
2. Необходимость тянуть с собой все зависимости, даже если они представлены в системе
|
||||
-->
|
||||
|
||||
# Типичный Dockerfile для ROS
|
||||
FROM ros:foxy-ros-base-focal
|
||||
...
|
||||
RUN rosdep update && apt-get update
|
||||
...
|
||||
RUN apk add --no-cache python g++ make
|
||||
...
|
||||
RUN curl -sSL http://get.gazebosim.org | sh
|
||||
...
|
||||
CMD [ "ros2", "launch", "app", "app_bringup.launch.py" ]
|
||||
---
|
||||
<!-- # Что предлагает Nix? -->
|
||||
# Ключевая идея nix
|
||||
Описывать сборку в виде _чистой функции_ или уравнения(derivation), результат исполнения строго детерминирован входными параметрами.
|
||||
|
||||
---
|
||||
<!-- Именно эта идея и легла в основу диссертации автора nix под названием ___, где как раз и описывались недостатки классической системы использования динамических библиотек в unix-подобных системах. Данный подход получил название декларативным в противовес императивного. -->
|
||||

|
||||
Eelco Dolstra
|
||||
## The Purely Functional Software Deployment Model
|
||||
PhD Thesis'2006
|
||||
https://edolstra.github.io/pubs/phd-thesis.pdf
|
||||
|
||||
---
|
||||
# Парадигмы программирования
|
||||
* Императивная (как?) - C, C++, Java
|
||||
* Декларативная (что?) - Lisp, Prolog, Nix
|
||||
|
||||
---
|
||||
<!--
|
||||
nix использует функциональный язык программирования для описания процесса сборки. Тут можно сделать некоторое отступление о том, что ROS создан робототехниками для робототехников, а у них по прежнему был и остаётся доминирующим императивный подход к программированию, что обусловлено высокими требованиями к производительности и реальному времени исполнения. Собственно, императивная парадигма распространилась не только на сферу низкоуровневых программ, но и на управление операционной системой. Однако, сфера сборки ПО не требует гарантий реального времени или высокой производительности, в ней куда важнее как раз воспроизводимость, отсутствие неявных обращений к состоянию системы.
|
||||
-->
|
||||
|
||||
# Парадигмы конфигурации
|
||||
|
||||
* Императивная конфигурация (apt)
|
||||
- Изменение состояния (dependency hell, неконсистентные состояния)
|
||||
* Декларативная конфигурация (nix)
|
||||
- Пакеты = иммутабельные переменные (нельзя изменить напрямую, только через функцию)
|
||||
- Одно и то же nix-выражение даёт всегда один и тот же результат
|
||||
|
||||
---
|
||||
<!-- как выглядит типичное Nix-выражение. Это уравнение превращается в такой json-образный файл, где и прописаны все версии с хэшами конкретных зависимостей. Этот файл и является по сути инструкцией или чистой функцией, на выходе которой мы получаем конкретные артефакты в виде пакетов, бинарников, динамических библиотек и т.п. -->
|
||||
{
|
||||
pname = "hello";
|
||||
version = "2.12.1";
|
||||
src = fetchurl {
|
||||
url = "http://github.com/hello-${version}.tar.bz2";
|
||||
sha256 = "0x2g1jqy...";
|
||||
};
|
||||
buildInputs = [ libbar perl ncurses ];
|
||||
buildPhase = ''gcc hello.c -o hello'';
|
||||
installPhase = ''mkdir -p $out/bin && cp hello $out/bin'';
|
||||
}
|
||||
---
|
||||
{
|
||||
"builder": "/nix/store/561wgc73s0x1250hrgp7jm22hhv7yfln-bash-5.2-p15/bin/bash",
|
||||
"env": {
|
||||
"builder": "/nix/store/561wgc73s0x1250hrgp7jm22hhv7yfln-bash-5.2-p15/bin/bash",
|
||||
"out": "/nix/store/260q5867crm1xjs4khgqpl6vr9kywql1-hello-2.12.1",
|
||||
"src": "/nix/store/pa10z4ngm0g83kx9mssrqzz30s84vq7k-hello-2.12.1.tar.gz",
|
||||
"stdenv": "/nix/store/b09v23lirgvci3wzszh22mbkdfj0h0yq-stdenv-linux",
|
||||
"version": "2.12.1"
|
||||
},
|
||||
"inputDrvs": {
|
||||
"/nix/store/0hnjp6s8k71xm62157v37zg3qzwvl8lx-bash-5.2-p15.drv": [ "out" ],
|
||||
"/nix/store/8n3ib41pb90nkq3vv49z520qinf4q9c0-hello-2.12.1.tar.gz.drv": [ "out" ],
|
||||
"/nix/store/r2h029bx2fbyxxj84s5hf1abp2vfkah2-stdenv-linux.drv": [ "out" ]
|
||||
},
|
||||
"inputSrcs": [ "/nix/store/6xg259477c90a229xwmb53pdfkn6ig3g-default-builder.sh" ],
|
||||
"outputs": {
|
||||
"out": { "path": "/nix/store/260q5867crm1xjs4khgqpl6vr9kywql1-hello-2.12.1" }
|
||||
},
|
||||
"system": "x86_64-linux"
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
<!-- А вот как это выглядит на диске. Заметьте, имя каждого пакета снабжается хэшом, который позволяет избежать коллизий при совпадении имён и даже совпадении имён и версий, а ещё даёт использовать несколько версий библиотеки одновременно. Откуда берётся этот хэш? -->
|
||||
|
||||
$ ls /nix/store/ | grep humble
|
||||
00z4hg8q0cxhsl5jq4s7iq81zz54j8vy-ros-humble-ament-lint-common-0.12.5-r1
|
||||
01nvrmwbf0zbchb3d25kb49rl8jzspv6-ros-humble-ament-cmake-cppcheck-0.12.5-r1
|
||||
02gdrzn2yrngmqih4hq0j17vj2hgiiz3-ros-humble-unique-identifier-msgs-2.2.1-r3
|
||||
08s5gvg7gaypllyxvzd17w21ijqx3hgd-ros-humble-tf2-msgs-0.25.2-r1
|
||||
0hwva9zk3250hd6spwq11ayk0aq4flnm-ros-humble-control-msgs-4.1.0-r1
|
||||
|
||||
---
|
||||
<!-- Собственно этот хэш и получается с помощью криптографической хэш-функции применённой ко всем входным зависимостям -->
|
||||

|
||||
|
||||
---
|
||||
<!-- Вы не полагаетесь на apt, можете при желании собрать систему полностью из исходников. -->
|
||||
|
||||
# Что это даёт для ROS?
|
||||
|
||||
* Возможность запустить проект ROS на любой ОС, даже без apt
|
||||
* Контролируемое управление зависимостями
|
||||
* Возможность использования разных версий одних и тех же пакетов и библиотек
|
||||
* Детерминированные сборки одной командой
|
||||
* CACHE!!!
|
||||
|
||||
---
|
||||
<!--
|
||||
|
||||
-->
|
||||
|
||||
# Основные компоненты nix
|
||||
|
||||
* Nix (менеджер пакетов и язык программирования)
|
||||
* Nixpkgs (репозиторий пакетов и стандартная библиотека)
|
||||
* NixOS (операционная система)
|
||||
* NixOps (DevOps инструмент)
|
||||
|
||||
---
|
||||
<!--
|
||||
# Текущее состояние nixpkgs -->
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Nix ROS Overlay
|
||||
https://github.com/lopsided98/nix-ros-overlay
|
||||
|
||||
Автоматическая генерация nix-выражений для сборки пакетов ROS из официальных репозиториев (github:ros/rosdistro).
|
||||
|
||||
---
|
||||
{ lib, buildRosPackage, fetchurl, ament-cmake ... }:
|
||||
buildRosPackage {
|
||||
pname = "ros-rolling-std-msgs";
|
||||
version = "4.6.1-r1";
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ros2-gbp/common_interfaces/std_msgs/4.6.1-1.tar.gz";
|
||||
name = "4.6.1-1.tar.gz";
|
||||
sha256 = "87eee895c2c60a8335ae2a63b05f99773f0897e451e5bf7f45a14a6c36295640";
|
||||
};
|
||||
|
||||
buildType = "ament_cmake";
|
||||
buildInputs = [ ament-cmake rosidl-default-generators ];
|
||||
checkInputs = [ ament-lint-common ];
|
||||
propagatedBuildInputs = [ builtin-interfaces rosidl-default-runtime ];
|
||||
nativeBuildInputs = [ ament-cmake rosidl-default-generators ];
|
||||
|
||||
meta = {
|
||||
description = ''A package containing some standard message definitions.'';
|
||||
license = with lib.licenses; [ asl20 ];
|
||||
};
|
||||
}
|
||||
---
|
||||
|
||||
# Недостатки
|
||||
|
||||
* Пологая кривая обучения
|
||||
* Некоторая разрозненность документации
|
||||
* Не все пакеты ROS адаптированы в nix
|
||||
* Необходимость сборки мусора
|
||||
|
||||
|
||||
---
|
||||
# Полезные ресурсы
|
||||
|
||||

|
||||
Русскоязычное сообщество Telegram
|
||||
@ru_nixos
|
||||
|
||||
Туториал для новичков
|
||||
zero-to-nix.com
|
Loading…
Add table
Add a link
Reference in a new issue