From the Command Line, to Make, to CMake, to Conan @ C++ San Diego Meetup

June 23, 2022

2 min read

From the Command Line, to Make, to CMake, to Conan @ the C++ San Diego Meetup

Abstract:
This session examines the layers of tooling used to produce C/C++ applications and make developers’ lives easier. Surveys say a major pain point facing C/C++ developers is long build times. One way to save time is to only re-build an artifact when a change occurs. Although the command line offers the precision of specifying what to build, doing this and tracking changes manually can quickly become a daunting and error-prone proposition. Make as a build system allows developers to specify and execute command-line statements depending on what file changes are detected. However, these statements may be particular to one compiler or operating system. CMake provides the missing flexibility for a makefile file. One CMake file can generate what’s needed for a variety of build systems, compilers, and operating systems. Another major pain point facing C/C++ developers is managing all the libraries needed by an application. Libraries provide the functionality programs need. But it gets tricky when libraries depend on other libraries that depend on other libraries in a spaghetti-like formation. The goal of Conan as a package manager is to alleviate this burden. ConanCenter, for example, features over 1000 recipes. The promise of a recipe is to untangle the spaghetti and list the dependencies for a given library.

Bio:
Nick started in the video games industry, developing titles for console and mobile. Disappointed by the oppressive corporate feel of traditional technical training, Nick’s passion is to create more engaging and powerful learning experiences through game-based learning and other playful techniques. As a Curriculum Developer at Oracle, he focused on Java programming and certification. As a Developer Advocate at JFrog, his focus is on C++, Conan, and other JFrog technologies.

View Slides Here

Speakers

Video Transcript

special guest today a special company uh probably all and you already know about
it because there is the agenda and the speaker so there’s already a spoiler
uh before we go and introduce the speaker and agenda i just would like to thank qualcomm uh the
wireless research software department which is sponsoring this event uh thank you qualcomm for uh paying uh
the meetup fees especially uh my vp charles vernon which is uh supporting
this meetup just quickly we have our dropbox where we place
a presentations and material we do have slack channel we do have discord that you can you can join if you don’t
have access please let me know we upload uh the san diego zipper pass meetup
recording which i hope it’s recorded right now my machine doesn’t act on me uh we have
a hdcpp meetup youtube channel and i i usually upload that within 24
hours or less we have recent sessions uh in the channel so feel free to browse
it if you are interested we have a twitter handle sdcpp meetup
which i’m managing my specific meetup sorry my specific twitter handle is kobe
underscore ca and i tweet about simplesplash obviously conan
software engineering python rust and everything in between
um i’m also sometimes blogging in
martin’s blog pages and also uploading uh links to
the meetup uh after the after the session so uh we we
basically uh published the meetup in various channels including martin’s uh blog post
so again today we have a special guest speaker
from a special company jfrog uh you i’m not gonna talk about the whole agenda uh kind of
the the uh the abstract because you had it uh in the in the meetup page
uh just the just the title uh from the command line to nade to cmake to conan
by nick i’ll just uh quickly nick if i may i’ll
just talk about your bio nick started in the video games industry developing titles for consoles
and mobile disappointed by the oppressive corporate feel of traditional
technical training nick’s passion is to create more engaging and powerful learning
experiences through game-based learning and other playful techniques as a curriculum
developer at oracle he focused on java programming and certifications as a developer advocate at jfog
his focus is on cbs fast conan and other jfk technologies welcome nick well thank
you yeah i’m glad to be here thank you for having me yeah so before we start with your uh
presentation we have something special from arie so ari you can go ahead i’ll
stop sharing and you can go ahead and share awesome thank you so much kobe hi
everybody i’m ari waller and i have the pleasure of being the meetup event manager for jfrog which is the home of
conan the open source decentralized multi-platform package for c package manager for c plus c and c
plus plus which you’re going to hear about tonight uh we’re very excited to be here with you i’ve always been an
admirer of kobe and his commitment to not only the c plus community but the
several other communities that he supports as well it’s not an easy job sometimes it seems like a thankless job
i know but i can tell that everyone here really appreciates all the efforts that he puts in there
to keep the san diego community up to date on c plus plus i know you are all here to hear nick
tonight talk about command line to cmake to conan
and i want to just share very shortly um one of the reasons i love working for
jprog so much is because we have a core value which is community happiness and
in that spirit i’m going to go ahead and share my screen really quick jfrog would like to do a raffle
for a amazon echo show uh this is not the small one this is the
amazon echo show eight it’s really cool and my kids fight about it all the time they prefer to watch this than their
television ship i can’t figure it out but they do um you can enter um the
raffle for the with the qr code and um kobe is going to go ahead and drop the bitly link
that i sent him in the chat um now due to corporate compliance reasons i can’t do live drawings over the internet
however a winner is going to be randomly selected within three business days and once i contact them
and they claim the prize formally we’re going to share their name with the entire meetup communities but the best
part is there’s no loser tonight um because everyone that enters the raffle i’m gonna email you so i can mail you a
conan t-shirt now kobe is modeling that t-shirt for us i wear mine too often and
i wasn’t able to get mine on tonight i have a different component t-shirt on tonight but uh the one we’re going to be
sending you is conan the frogarian um so we would love to get those out to all of you to enjoy just for being here tonight
and entering the raffle and so forth so i hope everyone um is here and will enjoy the talk tonight
i know we have uh people from the cloning team here tonight to answer some questions in the chat as well we have
diego which is an awesome uh honor for him to be there if you have questions as well so uh we’re excited so kobe i’m
going to turn this back over to you and thank you so much for everything that you do thank you ari thanks uh for their uh
warm boards uh i um a big advocate of uh package managers
specifically conan people know people that work with me know that a lot how much i push that jim jim would that
would uh probably uh yeah so um i also had the pleasure to uh
attend the swap up uh in carlsbad uh a few weeks ago which i had a blast uh i
although i i am a surprise uh developer i really like the whole in
front i think jfrog is in the uh basically controlling everything i
in my opinion that is ready to infra and uh cicd and containers and everything
that you can think about so uh that’s uh that’s it from me i think nick this is
this is your show go ahead and start okay great um let me just go ahead and
start sharing my screen
are you able to see my screen okay
yes yep works fine yeah okay great actually let me just double check to
make sure that i had i didn’t so i have to check a box here for include system audio because i have
a video that i can uh show that i’ll demonstrate uh a tinker forge piano an infrared piano um just
want to make sure you could all hear the beautiful tones all right yeah so let me just go ahead
and get the presentation started
all right yeah um so i’m nick rostuccia i’m a conan developer advocate at jfrog
glad to be here thank you for having me and i want to present about uh my experience of going from the
command line to make to cmake to conan a little bit more about myself
so my background’s in there’s a bit of robotics and there’s a lot of game design type work i just wanted to focus in on maybe some
products that you might find might find interesting so for robotics uh the work that i did
there was uh programmed in interactive c so it’s c
c syntax so you have custom functions for the effectors like your motors and your
servos and uh just various sensors like there’s an infrared distance
sensor there’s a sonar there’s a camera beam brake sensor for an encoder
you can measure some back emf the controllers for that would be fred martin’s handy board and charmed labs
xbc charm last is still around what i found really cool about this was you have the game boy advanced as part of it
from nintendo so that would act as the interface it would also access the processor on the game boy advance so
yeah that’s pretty cool um as far as games yeah i’ve developed games for
various consoles from microsoft sony nintendo ios android and web and they’ve
been done in various languages so that could be action scripting lua javafx c-sharp
sql that’d be for access to a database and one part one project that uh might
be particularly interesting here was the game power gig this is for ps3 at the
time was working uh as quality assurance on the team but it’s you know in the same vein as a rock band or guitar hero
where it’s a beat matching game but the studio wanted to actually have a
game with six a six string guitar and it seems like this would be a really
good use case for c plus plus um considering that c plus c plus has
like the most performant access to hardware in games any any little bit of
lag even like just approaching on the order of 100 milliseconds is enough to draw the player nuts so if you want to
have a peripheral that has like as minimized an amount of leg as possible it seems like that’s a good
good candidate for the peripheral the way it would work is you have a small current going through each
each wire and then when the player presses it down that would make contact with the metal bar between each fret and
that would complete a circuit so you’d be able to tell um what notes are being pressed that way
um also we’re doing a developing java training certification from oracle which
oracle sometimes has this uh yeah just like a a corporate kind of feel to it i very much want to try and
get away from that so last last big gaming project that i worked on was a
game to teach gender programming concepts object-oriented thinking class design inheritance lambda expressions
and multi-threading also able to showcase data visualization by connecting to the oracle autonomous
database but now that i’m at jfrog my focus is on
uh jframe technologies conan c plus plus
so a couple projects that i’m working on there’s a c plus library card game so this is like
if you ever played the card game apples to apples it’s like that had a baby with the tv show shark tank so you’ll have a
various c plus plus technology cards or libraries and each player has to pitch
why they believe their library is good at fulfilling the scenario that the judge has but the
judge is going to have these like science fiction type scenarios so it’s up to you to figure out okay how can
today’s technology power the starbase how can we mine the crystal asteroid how can we do all this great science fiction
type stuff i definitely want to go in that sci-fi direction because i feel like that’s great at just getting you to
have this sense of wonder and thinking critically about how the world came to be and the just the possibilities of
technology another thing i’m working on is a cmake course
so the idea here is that say you have someone who’s learned a little bit of c plus through university or they do it as
a hobbyist learning cmake would be that next logical step as far as growing your
expertise and building up your ability to handle more complex projects and that was that was originally the impetus for
what this presentation was supposed to be but i get the sense that there’s a lot uh definitely a lot of expertise
that uh comes to these meetings so i i want to focus more on
on the conan side of things and not so much on say the command line hello world side of things but i wanted to use the
uh the c plus plus infrared piano as a backdrop
to uh and just to contextualize everything
um so the piano itself was a really uh it’s a really fun way to just get myself reacquainted with c plus plus and
transfer uh what i had been learning about c make and the c ma
i hear that c make practices have been evolving over the past few years and and this project was just another an
opportunity to to you know from the get-go learn the modern uh c
make uh approaches so as far as how the cam how the infrared piano actually works i have
a video uh that’ll speak to that effect let’s see if i can just get that pulled
up these are sensors and devices from
tinker forge an air quality sensor analog joystick
linear potentiometer speaker lcd screen infrared rangefinder and
there are many more we’ve used some of these devices to create an infrared piano
two ir sensors detect where you place your hand over two sets of keys
the speaker beeps at a frequency matching the note for that key
the lcd screen prints the distance detected by each ir sensor
and the linear potentiometer controls volume the software to do this is written in c
it uses the c tanker forge bindings which are available from conan center
and can easily be retrieved using the conan c c plus plus package manager
along with many other libraries that you may feel inspired to use as part of your own projects
i’m going to assume the audio worked because no one said no one said otherwise did you hear that
okay it worked well yeah fantastic um
great so okay let’s get back to
see yeah just uh just an overview of what that piano is all about so a lot of the hardware came from all the
hard work except for the connects uh came from tinker forge so tinker forge is a german company and they provide
various sensors and devices for these maker type projects they support a
variety of languages and this would include bindings for c and c plus plus
and quick they’re quickly available from uh conan center so how to go about using
it just like the the video had shown just a quick matter of retrieving those
from conan and then within the actual source code go ahead and include whatever headers that i would need and
then i’m free to call whatever functions that i would need from the library within
thememakelist.txt this is where i could use find package
to find what i need and then i’ll create the executable and then use target link libraries to
link that library to the executable and then from there it’s just a matter of from
the command line we’ll call cmake create our make file then call make to compile and we are
free to run the program but there’s some there’s a lot of ideas that i had just
thrown out there there’s there’s conan there’s cmake the command line there’s make and as someone who is new to this
uh you know trying to wrap my head around all this was a bit of a bit of a process so i definitely want to
take a step back and try and contextualize all that and show how something like this was
can be put together with a relative ease a project like this so yeah so that’s uh that’s where the
name of the talk came from we have the command line make cmake and conan so as a whole
these help development go pretty quickly i was able to get a hello world
program going within a day and this is just me getting the lcd screen to print
something and the actual piano was honed and treble shot and completed within
about one to two weeks and it was a real pleasant change of pace compared to other technologies that
um you know i hear about a technology that’ll come down the pipeline i’m curious to try it out but for whatever
reason it’s tough to get it to work and maybe something doesn’t work as advertised if at all maybe there’s like
additional dependencies that i need to hunt down and prepare or lots of settings to fill it with that maybe
or may not be properly documented see i definitely have someone new to to
this um not having a clue how to get started or feeling that you know progress is always
out of reach that’s a dif i was thankful to not be put in that
type of position because everything seemed to work as smoothly as it did um but yeah just that perspective as like
as a game designer there’s like no worse feeling to create within a player you’re feeling like your
progress has been robbed for you or no matter what you do you you can’t move you can’t move forward definitely want
to to avoid avoid that um
so yeah let’s as far as like each individual layer though um yeah these could represent
their own separate mystery as far as what are these layers and how do they work with each other what benefits do
they provide to developers and just what i like to do with the curriculum that i develop is find what it is that
clued me in and then try to reproduce that for other developers to help them learn more smoothly and avoid any sort
of dead ends or you know unnecessary banging your head against the wall not that you know there’s there definitely
is value and struggle but um have the struggle to be a bit more like smooth and uh
lead to better learning results so uh let’s start with c c plus plus time to
get myself reacquainted with the language and so my frame of reference was java
and just starting with uh starting with fact about c plus plus what was different was here we have a platform
dependent language which means that the instructions that would be written for one machine like windows wouldn’t be meant to run on
a machine like linux okay but this also means that the artifacts could be optimized for their respective
platforms and so it makes sense when i was researching that why for a long time c and c plus plus had
been the choice for the most performant access to hardware
java by comparison would be platform independent where the code and the assets are supposed to be written once
and then can run anywhere there is a jvm a java virtual machine and so then the challenge that comes for the languages
author is how to how do we prepare a jvm for an array of platforms and of course
suns and oracle’s solution for this to ensure performant access uh to the hardware for the gabm was to
go to reddit in c and c plus plus uh specifically they wrote it in they
say they wrote it in c using c plus plus libraries um the compiler itself is
written in java but the jre java runtime environment that’s c and that’s the that’s the layer that is necessary to
interact with the hardware so so java would be an example of a large c plus plus project
and just to get a sense of scale maybe also a comparison against javascript so there’s an article here that says
that a huge javascript project is 18 000 lines uh what would you define as a huge
project in c plus plus i think there there might be a poll for this would we
be able to throw that up or should we just shout it out or put it in chat no paul and unfortunately i couldn’t i
couldn’t make it so maybe people can either shout it out or put it in the chat
18 very small c plus plus project [Laughter]
being closer to a million yeah millions that’s gonna be probably
yeah yeah um so so we did this um survey i think it was a couple years back and
that’s exactly what we found that the majority of people said it was over a million lines and a good number
of those people would say it’s actually closer to 10 million lines
and so so this seems like this would present a challenge right that you know if you want to have the most performant
access to hardware well you may encounter some long build times given that you’re going to have on the order
of a million or millions of lines of code and this is also the finding from the 2022 annual c plus plus developer
survey from iso cpp uh top point top pain point long
build times so i feel like it would be good to keep that in mind as i’m learning how do i
avoid situations like that so getting myself reacquainted with c c
plus first thing i wanted to do was just create a simple hello world type program so we’ll have our
our source code greeting.cpp just a you know simple simple function printer greeting hello world
something that was missing in java was the idea of headers where i would need to declare a function before being able
to make use of it so there we have our greeting header and then we have our
main function within main.cpp so there’s our source code next challenge is you know what do we do with
this and that’s where the command line comes in so we have what’s uh cpp files and
header files which are you know more or less human readable then the goal is let’s convert it into
something that can be read by a machine our our object object code and then
combine link that with platform specific libraries into a greeting executable
done through various commands on the command line
okay so so so that works so though i’m expecting that as projects grow to
millions of lines across many more source code files that this manual
process of specifying what to compile and and link it seems like this could get
error or tedious or or slow in one way or another
so that’s where mate comes in and i found that make could make would make a difference
so what’s what’s one way to save time compiling uh or at least
with the process would be to not to recompile everything only to
recompile files that may have changed and that’s what i saw as a value of
of make and make files so if we could automatically detect changes um then
we’d save time by just not we’re not recompiling that and there’d be no human error if i’m
able to automate some of that stuff as far as what what to call what to detect uh
what’s the proper order of things um so this make file for example
we have our targets we have our greeting we have our main.o we have our greeting.o and these are the files that
would need to be compiled and the trigger is to do that it would depend on is the chains going to be detected in
our main or greeting because that’s when we need to relink everything to our
executable uh how about the green.oh well if there’s a change in the greeting or the greeting header then we would
need to recompile and the statements to do this it’s just taking the command line statements from before so okay now i have some context
for how how this is all how this is all fitting together now if i go ahead and run
from the command line run make if i do it fresh so it looks like i’m going to have
all three of these statements uh run but if i were to change the greeting afterwards to let’s say hola mundo um
hello world in spanish uh then compile again then only the greeting uh object
code and executable seem to recompile so main.o which was unchanged hadn’t and
so i’m thinking okay now if i scan this up to say a million lines of code and the number of source code files
increases proportionally so then i should be able to save a significant amount of time by not recompiling stuff
uh one drawback though seems to be the degree of inflexibility so what i’ve
written here manually it works for g plus plus but there’s a lot of other compilers out there so what could i do
to get more flexibility is there any way to automate this or to not have to write
the make file myself and so then i found out okay this is where this is where cma comes in
uh the advantage here is that with just a couple you know simple lines in this example from the from the tinker forage
project one cmake list.txt file was able to generate what would be
needed for a variety of configurations so maybe that’s a make file for g plus
plus on linux maybe that’s instead a visual studio project for msvc for
windows great so then there’s also the ability from the cmake
lists text file to declare artifacts would need to be generated i can use this to create my libraries my
executables here we can see we’re adding the executable for for our piano and we’re also finding the
package which would be the libraries that our program intends to consume
and we also have the ability to link libraries we could include various directories and
specify the degree of visibility between targets being public private and
interface great and because this will pre want to go ahead from the command line call cmake this will produce that
that make file on my behalf and it should be a lot more robust than what i had wrote manually and i don’t have to
go back and and manually edit that make file or anything like that so so great i had
i have some more flexibility and this is where live areas come in
because what i want to do is i certainly want to make use of the tinker forge libraries and the millions of lines of
code for for these projects seems to be in no small part coming from libraries which
would make sense why reinvent the wheel when when libraries already exist to offer the project the functionality that
i’d like to leverage so give yourself uh give yourself a
hundred points if you know what each of these libraries are poco for example
a modern powerful c plus libraries for building a network and internet based
applications that run a desktop server mobile and embedded systems rt midi
interact with digital and music devices by using the real-time midi musical
instrument digital interface input output library podelpho would be for
parsing modify and creating pdf files uh live mysql client interact with a my sql
database from the c language and point cloud library would be to assemble and process many 3d spatial and
measurements into a data set that represents a 3d object or shape
and so great that we have that functionality available but also according to the iso cpp
survey managing libraries tends to also be a major pain
major pain point so okay so then what can be done about
that and or maybe just provide a little more color what what what do we mean by that what exactly are the pain points so
i started exploring some of these libraries and in part that was because i wanted to figure out you know what what would be a good you know library good
candidate for the card getting working on but also just to get a you know get a sense of the ecosystem so
so so here’s here’s kind of what i found say you have library a and it has a functionality that you think would be
great it wasn’t as simple as just going and getting it it turns out hey library a
also depends on library b and b happens to have its own
you know complex or unique build system and getting it to work for the configuration that i have uh
that may not be might may not be so easy because often uh open source libraries might be
produced with only you know one configuration in mind so i could try try getting that to work but
um and maybe i succeed if i do what’s my reward it turns out there’s also other libraries that we are dependent on
and those depend on other libraries so yikes okay uh just a couple of real world examples
what some of these might be i had mentioned point cloud library so not not only do i need to just
get point cloud library but that library also has a dependency on boost on again
on flan quite a few dependencies here vkt visualization toolkit
so let’s say i want to go down the rabbit hole let’s get vkt all set up are there
instructions for that instructions for a lot of these um
here’s a note that i found interesting if you if you want to build a point cloud library gui tools you need to
build vkt with qt support so obviously you need to install build and install qt
before vkt so it just seems like i hesitate to say where does it end but
that’s the kind of the sentiment that i’m getting so it’s a point cloud library current i don’t believe is currently
offered um through conan uh conan center and so i actually kind of hesitate to go
down this rabbit hole because in order to have a library offer through conan has to be certain criteria of being able
to run on some of the most popular configurations
so if it’s not there i’m kind of hesitant like does this mean that there’s things that that aren’t going to be supported
am i going to spend all these hours getting this branch of dependencies to work this other branch of dependencies so we’re
going down various rabbit holes and maybe one of them you know one of them is going to be this curveball or duh
that’s going to be a gotcha hey turns out all that work you did uh this part here doesn’t work for your
configuration so all that goes to waste that would be that would be
quite disappointing after putting in all that work it kind of gets back to that feeling of one of the worst things to
for a game player is to lose all your sense of progress um
so yeah let’s um if we can avoid that type of scenario if we can have a lot of the stuff done man
do it quickly or somehow automate some of this that would be you know quite the value proposition
so this is where the c make uh sorry this is where the conan package
manager comes in so conan recipes ended up making this
this process a piece of cake so there’s over 1300 recipes on conan
center and these recipes will list all the dependencies for
a particular library it’ll list uh or to provide license information and it allows
developers to get the libraries as binaries for a variety of configurations
and versions and so that’s yeah that’s a big time saver i don’t need to do this stuff manually i can just
get the binary already compiled from conan center sounds uh sounds great
so for each of these configurations um
there’ll be a package id so if you and your friend request the same library
and your configuration is the same like the the architecture is the same you have the same compiler you have the same
operating system you’ll both get the same binary with the same package id
but if something in one configuration differs like say you want to request a shared
library instead of a static library or you want to release instead of debug
or you want gcc instead of the compiler any sort of variation like that is going
to result in a different uh unique package id and and so conan will use this package
id comes up in in various places with conan uh so for example it’s also the
package id is also a fundamental part of the directory structure that would
store the conan packages and i can show that in just a little bit
so i had mentioned mentioned poco earlier and these would be all of the dependents all the
libraries that would need to come along with poco so
quite a few but thankfully it looks like i can get what i need from conan which is hey
great from the command line so i’ll just go ahead and demonstrate that and then i’ll go ahead
and break down the conan file.txt that you see on the
screen um
okay let’s see here okay so here i have my command
command prompt and i’ll go ahead and pull up [Music]
pull up the folder so you can see all these things getting populated
and then so right here what am i requiring from codefile.txt i’m just requiring poco
and then it should do the job of getting all of the dependencies that i need by
just calling conan install dot meeting just the one directory back which is going to house the conan
file.txt so go ahead and run that
yeah we can see everything uh [Music] i’m getting everything that i seem to
need right here
and so there’s a nice second you’ll lay back have a little stretch and just watch it all take care of itself there’s
not this um going down the red i’m i’m kind of thankful right now that i don’t have to go down the rabbit holes
and hopefully everything should uh should come together as expected and and it does each time i’ve tried so that’s
one thing i definitely appreciated about conan is that it just uh it it works quite smoothly
yeah there we go so we so we have what we need right here if i were to drill down just a little bit let’s say i want to go down into
oh i don’t know what would be good open ssl
and we should see here that we have our package this looks familiar our package id
and we have we have licenses great we have our our actual library
and we should have what do we need to include yes we have our header files great so
we’re getting we’re getting what we need and that was that was fast that was great um
all right so go ahead and go back to the presentation i’ll explain a little bit more about the um
about conan file.txt so taking a look taking a look there so
we specified the requirement for poco um and the recipe for that would be
retrieved from conan center as sure as we find everything that we need as far as generators go
so so the coin should be able to accommodate any number of of generators
and the process is pretty similar if we were to do require instead something from visual studio or auto tools we
happen to be using c make here so c make tool chain as a generator is
the latest way to have compatibility with c make and then cmakedeps generates the find package module needed to find
the binaries when they’re getting referenced later from the cmakelist file
so in fact with the binaries already compiled and in a known location they can be
reused across multiple projects on the same machine without recompilation that’s assuming that all of my
configuration requirements would be the same so so here maybe let’s try and throw in a little bit of a curveball
what if i you know what if i want to mix it up a little bit what if i want to instead have some
options like instead of a a static library i want a shared library
so some of these configuration uh settings are are within our control some of them
aren’t uh so for example if you’re working on a a windows machine uh what’s the sense of trying to get something for
mac but you know options as far as like shared versus uh versus static that’s something that
we have within our control it’s just a simple matter of specifying the options right here and then we can get what we
need um quickly as well so i’ll take this
file right here add the options and
install again you know it’ll skip over some of the stuff that we already have and so we’ll
just go about oh it retrieved it as i was talking so then we have our
uh then we have our package which should contain the shared library and we have a different
different package id for that yep
okay um yeah quite smooth so let’s see now
and sometimes if some of these things aren’t specified uh by the way it’s um the recipe will provide
uh default values um so in this particular case the a default
value for the library that we retrieve would have been a static library but just just at a high level what a conan
recipe is it’s a python file and it describes how
so here it describes how this package artifacts are built from source and some
functions or key functions that are included would describe a source would be how to get the source build to be how
to build from source and package would be how to start the artifacts and create
the final package so the next the next task
we have the tinker forge bindings that were provided from uh from that company from tinker forge for c plus plus what’s
the process of getting those into conan so that other users can benefit from how fast it was to retrieve the stuff that
we need and so the requirement is that is to ensure
compatibility with major platforms that would be according to the
specifications here on this slide
so yeah enough binary binaries we need to be generated provided and available
so that developers can consume them compile and link on all the platforms configurations that are
shown here
in the case of ticker forge this resulted in 60 uh binary packages
available on conan center each of course with its own unique package id so if i
were to go into conan center have a search for
have a search for tinker forge there are the ticker forge bindings
yeah so 60 different configurations and and these all vary
some of them will vary by operating system they’ll vary by architecture they’ll vary by the compiler that we’re
looking for connect center would also provide instructions on how to go about
using these libraries and i’ll i’ll discuss
a bit of overlap with the content on this page with the next few slides that i’ll that i’ll talk about um
it’ll list whatever uh we also have our recipe available here and it’ll list
whatever dependencies we have coincidentally ticker first doesn’t have any dependencies but if i were to search
for instead of poco then you’d see that that aforementioned longer list here
so great and if we were to just drill down to see what exactly is within that that tinker forge package it’s pretty
similar to what we’ve seen for some of these other ones for open ssl for for poco go into tinker forge right here and
we’ll see that we have our package there’s our package id and
we have yeah we have our license we have our library and then we have the header
files that we need for all the functionality for the various sensors and devices great
if it’s okay to ask a question uh sure if you want
um because we do an hour or until the end there’s also a chance that i might answer with the next couple slides okay
oh wait no problem okay i’m glad you have questions though thank you um so yeah we went ahead and examined
the the tinker forge package um so yeah just just to retrace the steps
that we had done um i had provided this in an overview before but um yeah just
what all we got to do to retrieve the packages that we need for conan from the we have our
conan file.txt specifying uh the tinkerforge bindings or what
we’re looking for we specify the generators and just uh from the command line go ahead and type in coin install
dot dot and uh and then we should be good it’s it’s quite smooth and just as fast that we
had seen from the poco example um in fact if i if i wanted to
let’s say i have this uh i’m a very eager type of designer and i’m like hey wouldn’t it be great if we had something
like rt midi that way i can recognize the notes that are being played and then i’ll have podofo for creating pdfs and
i’ll put i’ll create a sheet and use it music based on those notes and and print that out as a pdf so this kind of uh
yeah it becomes quite easy to to to get what you need to start developing um in in in and indulging this kind of
uh feature creep that’s not to say that implementing the features themselves is uh is going to be trivial it’s not but at
least you can focus on instead of the um the leg work like the getting started
kind of stuff the focus is then instead on the actual uh development
um so again yeah just go go ahead and include the headers within the source
code file we have a couple of examples here the various various headers we’re including then
we call whatever functions that we need uh then go ahead and find the package
from our c make list it is in a known location
and we go ahead create our executable and then using target link libraries
we’ll link the though that libraries that we just got to our executable great
so so yeah it’s it’s such a yeah such relief to just be able to get to work and focus on on the
programming side of things and so take it forward actually they’re they’re quite good at providing
documentation um i really appreciated what they had done
so here is an example of so this is the sample code for their
linear potentiometer so we’ll go ahead here and include the headers within the source code and we
have our callback function so this is going to be called periodically in this case it’s just going to print
the value of the sensor i think it’s going to be somewhere between 1 and 100
and then within our main method go ahead create the objects for our our connection our our device
um connect them and then ready our callback function
um and then go ahead and set yeah set the configure set the
configurations a bit um something of note here is going to be the 250. uh
there’ll be the 250 millisecond delay in between when we’re getting the reading of the linear potentiometer
and depending on the the rate of this callback that was actually pretty uh
pretty significant in terms of how the application or how the how the piano was going to function so i have a couple of
examples of how that all went down um just from from a design perspective
so for example uh design considerations for this segment display originally i wanted to
have two of these segments displays and they would each print out the distance
that is measured by the infrared range finder as millimeters so it could be anywhere
between a 100 and 800 and it ended up being really slow
to update if i had a low callback rate meaning that number is very small and i
wanted to update quite frequently the lag was huge sometimes would be like
10 20 seconds until until the up until the proper value was
shown on the segment display and they’re either the reason why i went low so i was thinking in terms of like
frame rate lag or delay that’s that’s a really good way to like break that sense of immersion and frustrate players in a
video game so i thought if i had it as small as possible that would be better to make sure that the information was as
accurate as possible but it seems that um this particular sensor wasn’t able to accommodate
that um at least with a low callback i could have it high which means it updates a lot
less frequently of this risk being inaccurate though so because it was very possible to so it takes the reading you
put your hand there you remove your hand and it never actually updates to to signify that your hand was actually
there to give it a measurement as if it never actually happened and so yeah this was um
i i didn’t like that say lack of uh of accuracy there um but so as as cool as i
thought the sensor was i it has this like 80s retro feel to it that i love but um as much as i wanted to use that i
decided let’s go with lcd display instead
for the speaker the goal here was i wanted to yeah play a tone when the distance is detected
and i wanted the duration of the tone to be to be very very small and and that
way it’s like like um it may be better to describe it using the opposite let’s say
i have a go for for one second well you’re kind of limited in terms of like the notes you’re going to play they have to be like intervals of one second so
uh if you were to put your hand there and take it away really quickly if you want to have a really really very fast
note or a short note it wouldn’t be able to accommodate that so i thought okay if i shrink this
then i’m always going to have the the most accurate measurement as possible but that sounded not good so i
it seems like the sphere could never quite warm up it wasn’t like this constant hill and it was always just like clicking or tapping sound that it
was making because i feel like it never really got a chance to to produce that tone that i really wanted because it was
always stopping and starting right away um and just not uh yeah not getting where i wanted it to be
so so instead i had a little work around and this is just this is just using a bit of logic
so i would play a tone indefinitely and then i would only stop playing that tone
when a new distance was detected a distance that didn’t align with the start position or imposition of a
particular piano key so then that case there was no starting and stopping it was just
uh starting and stopping all the time it’s just you know go forever and then only stop and redo it when you have a
new note and so that that created a much more much smoother more immersive kind of experience um
and so i i i guess i i go into detail about some of these design considerations because even
though it’s meant to be a more of a technical talk on say on say cmake and conan
um i i want to just like really uh drive home that um how happy i was like this
is the kind of challenge that i had the challenge was focusing on the development um
instead of the uh the the getting ready and the prep work
um and like i said before yeah that i was able to just get within within a day get a hello world going and then about
one to two weeks to do up the code and hone everything to get to get the piano uh working
so yeah i felt like the the code and package manager really delivered here
we have we have these reduced build times and i’m saving time by you know not recompiling libraries i’m able to
get what the binaries i need quickly from conan as far as managing goes i
could quickly yeah quickly retrieve whatever dependencies they’re in a known location great and it can have this
great sense of ability to reuse the same library binary across multiple projects
so so who can use conan if your concern is licensing it’s uh
as far as licensing goes conan is an open is open sourced and it’s published with
the mit license it’s multi-platform meaning it can run on linux windows mac os
and anywhere actually uh where python can run so having python would be a requirement for running uh conan i
believe and uh yeah kona is designed to support all the popular the build systems for c
and c plus plus as well as custom build systems which are you know not uncommon for enterprise
environments uh the conan is also very active it has
several full-time developers that sponsored that are sponsored by jfrog
as well as a very active user community which submits dozens of pull requests each month and
there’s a slack channel that has over i think it’s like members maybe 2150
um it’s one of the most active channels in the c plus plus community
uh there is free training available from jfrog academy helpful resources there
and documentation and certainly welcome developers and library
maintainers to take advantage of it so from the developer perspective like yeah great that um that you have
this all this prep work and headache sort of alleviated for you that burden disappears um because of how smoothly i
found conan was to run and then from a from the library maintainer perspective like yeah wouldn’t it be great to see
your your work spread and help out that and be used by that that entire community
and so yeah there you have it we have performant access to hardware and with the with tools to combat the pain points
and that’s how all these pieces fit to how i found all these pieces fit together from
the command line to make to simic to conan and that’s it so yeah thank you everyone
thank you nick thanks a bunch uh i really enjoyed that it’s very pretty impressive
um let’s let’s uh open the floor for q a
anyone uh um i think jim you you had a you had a question yeah i had i have a question nick i was just
wondering my first exposure to conan so this might be a new question
um so the pack so you were showing us how the packages are arranged
and if if you were going to put multiple packages in your requirements.txt file
uh and let’s say there were common dependencies between multiple packages does conan take care of
of uh organizing them so that they only occur once in your download
yeah so so that was actually um i i believe that’s the case and i think
that could actually be seen when i had first gotten the request for poco um it
would it ended up getting all like it got everything i needed first and then when i ran again only two
of them would have been different because i wanted the the shared instead of the static and so it was able to see
oh well you already have these things so let’s just go ahead and get the new the new two that you need
okay so even though the dependencies might exist from another package it won’t bother downloading it again
when i add another package that has the same dependency right i think
i think the only way that it would is if if the configuration is in one way or
another different and then you would get a different package okay just and then just one other quick
question where does it what’s the default location for linux for install installation
good question i’m trying to remember but i can’t remember that offhand
home directory that corner i usually not using my home directory uh
just um it’s usually nfs mounted so i there is an environment variable that
you can tell conan i want the conan home to be there like in a different directory and
this is what i usually like so it’s it’s and we have quota on the directory and also we so it’s it’s better to i kind of
offload it to a different directory okay thanks nick yeah thank you
yeah and i i would like to add that uh we host content packages on artifactor
which is another uh another product that jfk uh it’s a
very common uh platform from jfrog and uh
we we use it to host uh binaries obviously artifactory can host a lot of
uh binaries uh and packages from all kinds of formats so uh uh konan is is
one of them and regarding the uh the community that
nick mentioned i had a pleasure to interact with them a lot uh
i’m nagging them every time that i have questions and the super responsive and i i really appreciate that
usually i i use github to ask questions and
it’s it’s pretty much in within hours it’s it’s being answered and resolved so
i’m very grateful for that
that’s that’s great is there any other questions on uh
i don’t think there is anything on the chat but let me just quickly check i posted the link from ahri so please go
ahead and check it out uh oh there is a question for paul
well do you want you want to uh ask or you want me to ask for it so
there is a question for continuous integration other auto cleaning options for
downloads so i think i think maybe i think what
what paul is asking is is the cash is the current cash is going to grow
or there is a way to eliminate or maybe clean it up i personally don’t know the answer it’s a
good question but i don’t know an answer
yeah so that’s that’s um that’s the layer of detail i haven’t been able to um
uh to investigate too much um would you would you have any thoughts on
that diego um yeah yeah nick so the thing is that
the current cache actually stores packages without limit uh there are explicit
commands that you can use like corner remove and then you can remove the packages that you that you don’t want
anymore uh but i guess the typical question is if we have any like eviction uh
policy or or some automation uh the answer is that we don’t have right now
in the conan cache but in conan one but we have just released conan to zero
beta we are in better stage now and the new connect to zero uh
it has a database and database has the least recently used the uh timestamp for
packages so it’s not used yet but the goal of this people making the nikon cache is
exactly to implement this hey i i want to remove from my cash packages that haven’t been used
uh in the last week for example something like that and that is an interesting feature it will not be in
into zero most likely but it will eventually uh land into one or two two
sometime after two zero so yeah we know this is at the moment thick um at the end of the day conan one you can
just wipe the cast from time to time like weekly it will be a bit slow it’s a cache so you can you can remove
everything and they start from scratch it will be a little slower the first the first iterations but then it will
eventually be repopulated thank you by the way uh diego you had
an excellent uh presentation in the italian civic class i remember
where you presented the conan with all kinds of features related
to developing corner packages while you it’s developing packages while
they they have uh changes like frequent changes how to have uh have this option
enabled which is really useful also for us uh so i
do encourage people to check out it’s it’s recorded it’s in it’s on youtube not not in it’s an italian class so
so it’s a different meetup so i i do encourage people to uh check it out
any any other questions let me check the chat i don’t think i’ve seen anything else but uh
okay okay so i think we can we can close
thank you so much nick it was super useful and super interesting
amazing i’m glad you enjoyed it yeah yeah thank you so much
and uh again thank you for walking on that uh corner for us uh
he’s a great he’s a great tool for us uh silvercus developers making life much much easier
uh for me at least it’s it’s a it’s a big win when i’m using it so yeah keep
keep up it’s a good job thanks all right yeah thank you yeah uh yeah
thank you for having me thanks thank you everyone for attending i’ll see you next time
thank you thanks nick thanks everyone bye have a good night
you