Join this video course on Udemy. Click the below link
https://www.udemy.com/mastering-rtos-hands-on-with-freertos-arduino-and-stm32fx/?couponCode=SLIDESHARE
>> The Complete FreeRTOS Course with Programming and Debugging <<
"The Biggest objective of this course is to demystifying RTOS practically using FreeRTOS and STM32 MCUs"
STEP-by-STEP guide to port/run FreeRTOS using development setup which includes,
1) Eclipse + STM32F4xx + FreeRTOS + SEGGER SystemView
2) FreeRTOS+Simulator (For windows)
Demystifying the complete Architecture (ARM Cortex M) related code of FreeRTOS which will massively help you to put this kernel on any target hardware of your choice.
200 giochi a tena per la tattica di squadra nel calcio. Michel Dumont
http://www.calzetti-mariucci.it/shop/prodotti/200-giochi-a-tema-per-la-tattica-di-squadra-nel-calcio
I comportamenti difensivi. Situazioni tattiche per la linea a 4
di: Alberto Nabiuzzi - Sergio Buso
Nel calcio moderno le situazioni nelle quali il reparto difensivo si allinea a quattro sono ormai le più utilizzate in tutto il mondo.
http://www.calzetti-mariucci.it/shop/prodotti/i-comportamenti-difensivi
Esercizi propedeutici alla formazione tattica del difensore
Alberto Nabiuzzi
http://www.calzetti-mariucci.it/shop/prodotti/esercizi-calcio-propedeutici-alla-formazione-tattica-del-difensore
Getting up to speed with Kafka Connect: from the basics to the latest feature...HostedbyConfluent
"Kafka Connect is an ideal tool for building data pipelines. It is both reliable and scalable, with a pluggable interface that lets you flow data between Kafka and any system you need. A Connect pipeline is made up of many different components, and understanding how each of these interact together is essential, even for the simplest setup.
In this talk we will introduce the Connect components, from connectors, to transformations to the runtime itself. We will also share some of the new capabilities and best practices that you should be aware of to help you run and manage connectors effectively.
Finally we will talk about some different open source projects that have been built on top of Connect that can help you get the most out of the framework."
Join this video course on Udemy. Click the below link
https://www.udemy.com/mastering-rtos-hands-on-with-freertos-arduino-and-stm32fx/?couponCode=SLIDESHARE
>> The Complete FreeRTOS Course with Programming and Debugging <<
"The Biggest objective of this course is to demystifying RTOS practically using FreeRTOS and STM32 MCUs"
STEP-by-STEP guide to port/run FreeRTOS using development setup which includes,
1) Eclipse + STM32F4xx + FreeRTOS + SEGGER SystemView
2) FreeRTOS+Simulator (For windows)
Demystifying the complete Architecture (ARM Cortex M) related code of FreeRTOS which will massively help you to put this kernel on any target hardware of your choice.
200 giochi a tena per la tattica di squadra nel calcio. Michel Dumont
http://www.calzetti-mariucci.it/shop/prodotti/200-giochi-a-tema-per-la-tattica-di-squadra-nel-calcio
I comportamenti difensivi. Situazioni tattiche per la linea a 4
di: Alberto Nabiuzzi - Sergio Buso
Nel calcio moderno le situazioni nelle quali il reparto difensivo si allinea a quattro sono ormai le più utilizzate in tutto il mondo.
http://www.calzetti-mariucci.it/shop/prodotti/i-comportamenti-difensivi
Esercizi propedeutici alla formazione tattica del difensore
Alberto Nabiuzzi
http://www.calzetti-mariucci.it/shop/prodotti/esercizi-calcio-propedeutici-alla-formazione-tattica-del-difensore
Getting up to speed with Kafka Connect: from the basics to the latest feature...HostedbyConfluent
"Kafka Connect is an ideal tool for building data pipelines. It is both reliable and scalable, with a pluggable interface that lets you flow data between Kafka and any system you need. A Connect pipeline is made up of many different components, and understanding how each of these interact together is essential, even for the simplest setup.
In this talk we will introduce the Connect components, from connectors, to transformations to the runtime itself. We will also share some of the new capabilities and best practices that you should be aware of to help you run and manage connectors effectively.
Finally we will talk about some different open source projects that have been built on top of Connect that can help you get the most out of the framework."
Is Rust Programming ready for embedded development?Knoldus Inc.
The traditional approach to embedded development would be to run an RTOS on a microcontroller and to write the application in C or C++. This gives huge benefits in terms of the resources required compared to a Linux-based system, but now developers are working down in the world of systems programming, where there is nothing between them and a critical memory-safety bug except a keen eye and perhaps some expensive, imperfect and/or tricky-to-use static analysis tools. That bug might just give hackers access to a product and to anything the product is connected to, both locally and remotely.
Of course, there are plenty of things other than memory safety bugs that might give hackers a route straight into a product, but it would be preferable for developers to concentrate on those, instead of worrying about memory leaks, buffer overflows or tracking down the root cause of a random, undefined behaviour.
But after Rust came into existence the programmers are getting memory safety with low-level control.
If you have considered using embedded rust, you may have run into questions such as “What is embedded?”, “What is a driver crate?” “Where does rtfm/rtic and cortex_m fit into the picture?” This webinar will give you answers to these questions and how you can start your embedded rust journey
Una nuova proposta di programmazione dell'allenamento per le categorie dilettanti
Danilo Velini
http://www.calzetti-mariucci.it/shop/prodotti/una-nuova-proposta-di-programmazione-dellallenamento-per-le-categorie-dilettanti
Slides accompanying a presentation delivered at the VII Congresso Nacional de Arquivologia in Fortaleza, Brazil, on October 19th, 2016. The slides provide an overview of the AtoM project's history, its maintenance by Artefactual, and its development philosophy, before proceeding to examine the application as a component used in a digital preservation ecosystem. Aspects of ISO 16363:2012, the Audit and Certification of Trustworthy Digital Repositories standard, are used to evaluate how AtoM can support description, management, administration, and access functions when used to maintain a chain of custody in a trustworthy digital repository ecosystem.
This slides are for a brief seminar that I give in a Ph.D. exam "Perspective in Parallel Computing" (held by prof. Marco Danelutto) at University of Pisa (Italy).
They are a rapid introduction to Apache Storm and how it relates to classical algorithmic skeleton parallel frameworks
Know Your Topics – A Deep Dive on Topic IDs with KIP-516 with Justine Olshan ...HostedbyConfluent
When Apache Kafka® was first created, topics were identified solely by topic name—but this isn't always sufficient. Find out in this talk why the Kafka community decided to add topic IDs to Kafka as a part of KIP-516. Learn which new features related to topic IDs have been rolled out, and learn about some of the benefits that are still on the way.
We'll be covering new features in Kafka versions 2.8, 3.0, and 3.1 and how to upgrade to using topic IDs. We'll see how topic IDs are used in KRaft mode and tiered storage, and take a tour through some of the internals and the thought processes around these changes—as well as some of the future plans for topic IDs.
Increasing Kafka Connect Throughput with Catalin Pop with Catalin Pop | Kafka...HostedbyConfluent
While Apache Kafka® is the central nervous system for streaming data, Kafka Connect is the highway that allows traffic to flow in and out of Kafka without the need to write a producer/consumer. The question that arises here is how do we fit more cars (records) on this highway and get better throughput?
In this presentation, we will use JDBC source and sink connectors as examples of how to tune source/sink connectors:
* Elaborate internals of source vs sink connectors(client/producer vs consumer/client)
* List of configurations to tune for producer/consumer
* List of configurations to tune from source/sink JDBC connector
* Throughput results of tuned vs untuned
* Which metrics to monitor
* What can’t be tuned (data conversion between JDBC client and producer/consumer)
Let us Connect all of our systems through the largest possible highway!
Programmazione annuale dell'allenamento nella Scuola Calcio
Patrice Marseillou
http://www.calzetti-mariucci.it/shop/prodotti/programmazione-annuale-dellallenamento-nella-scuola-calcio
149 esercizi gioco per la formazione del calciatore dai 5 agli 8 anni
C.Dini, M. Badii, M. Lonzi
ANNO EDIZIONE: 2021
GENERE: Libro
CATEGORIE: Giovanile, Esercitazioni e giochi
ISBN: 9788860286413
PAGINE: 144 (formato A4)
.
149 esercizi gioco per la formazione del calciatore dai 5 agli 8 anni raccoglie le esperienze operative dei tre autori con i bambini di una fascia di età decisiva per l’apprendimento, in due importantissimi arcipelaghi calcistici: la Toscana (presso Arezzo, Fiorentina, Livorno, Pisa, Pistoia, Prato) e la Cina.
La proposta è stata volutamente impostata senza offrire sedute pronte o sterili schematizzazioni intese a pianificare l’intera stagione calcistica ma ben 149 Esercizi-gioco suddivisi per i 5 gesti tecnici di base fondamentali del calcio, con indicizzazione del livello di difficoltà esecutiva, allo scopo di permettere ad ogni istruttore di scegliere a piacere quelli utili a costruire velocemente una propria seduta di allenamento focalizzata sul preciso obiettivo che la situazione del momento e dell’ambiente suggerisce come ideale.
Estremamente funzionale anche la ulteriore classificazione, per fasi e aspetti della sessione di allenamento, all’interno di ciascun Capitolo-Gesto tecnico:
Attivazione
Tecnica analitica
Motricità coordinativa
Situazioni di gioco
Partite a tema
Con il fine di stimolare la fantasia nella costruzione del lavoro in campo, un aspetto favorito anche dall’integrazione, rotazione, interscambiabilità delle singole unità: tutte caratteristiche che affidate alla sensibilità, alla pratica e all’esperienza di ciascun istruttore-allenatore ne hanno già fatto sul campo, e continueranno a farlo, uno strumento complessivo di grande praticità ed efficacia. Gli Autori sono i fondatori ed animatori della Elite Soccer Academy.
Daniel Stemberg's presentation on how curl works. From the basic command line use, to URLs, options, curl basics into HTTP specifics.
YouTube:
https://youtu.be/V5vZWHP-RqU?si=IkGJdHqvguYLffeG
Daniel Stenberg goes through some basic libcurl fundamentals and API design and explain how easily you can get your first transfers going in your own application. libcurl is the defacto standard library for Internet transfers and runs on virtually all platforms. The language focus will be on C/C++ but the concepts are generally applicable even if you use libcurl bindings for other languages.
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)sparkfabrik
Our Drupal 8 websites are true applications, often very complex ones.
More and more workload is delegated to external systems, usually microservices, that are used for many different tasks.
Architectures are always more distributed and fragmented.
To trace the lifecycle of a single request that originates in a client, passes through all Drupal subsystems, reaches external (micro)services and comes back, it will become mandatory to track down problems and to optimize for performances. This is often time consuming and without the right tools may become very difficult.
A simple unstructured log stream isn't enough anymore, we need to find a way to observe the details of what is going on.
Observability is all about this and is based on structured logs, metrics and traces. In this talk we will see how to implement these techniques in Drupal, which tools and which modules to use to trace and log all requests that reach our website and how to expose and display useful metrics.
We will integrate Drupal with OpenTelemetry, Monolog and Grafana to collect, scrape, store and visualize telemetry data.
Is Rust Programming ready for embedded development?Knoldus Inc.
The traditional approach to embedded development would be to run an RTOS on a microcontroller and to write the application in C or C++. This gives huge benefits in terms of the resources required compared to a Linux-based system, but now developers are working down in the world of systems programming, where there is nothing between them and a critical memory-safety bug except a keen eye and perhaps some expensive, imperfect and/or tricky-to-use static analysis tools. That bug might just give hackers access to a product and to anything the product is connected to, both locally and remotely.
Of course, there are plenty of things other than memory safety bugs that might give hackers a route straight into a product, but it would be preferable for developers to concentrate on those, instead of worrying about memory leaks, buffer overflows or tracking down the root cause of a random, undefined behaviour.
But after Rust came into existence the programmers are getting memory safety with low-level control.
If you have considered using embedded rust, you may have run into questions such as “What is embedded?”, “What is a driver crate?” “Where does rtfm/rtic and cortex_m fit into the picture?” This webinar will give you answers to these questions and how you can start your embedded rust journey
Una nuova proposta di programmazione dell'allenamento per le categorie dilettanti
Danilo Velini
http://www.calzetti-mariucci.it/shop/prodotti/una-nuova-proposta-di-programmazione-dellallenamento-per-le-categorie-dilettanti
Slides accompanying a presentation delivered at the VII Congresso Nacional de Arquivologia in Fortaleza, Brazil, on October 19th, 2016. The slides provide an overview of the AtoM project's history, its maintenance by Artefactual, and its development philosophy, before proceeding to examine the application as a component used in a digital preservation ecosystem. Aspects of ISO 16363:2012, the Audit and Certification of Trustworthy Digital Repositories standard, are used to evaluate how AtoM can support description, management, administration, and access functions when used to maintain a chain of custody in a trustworthy digital repository ecosystem.
This slides are for a brief seminar that I give in a Ph.D. exam "Perspective in Parallel Computing" (held by prof. Marco Danelutto) at University of Pisa (Italy).
They are a rapid introduction to Apache Storm and how it relates to classical algorithmic skeleton parallel frameworks
Know Your Topics – A Deep Dive on Topic IDs with KIP-516 with Justine Olshan ...HostedbyConfluent
When Apache Kafka® was first created, topics were identified solely by topic name—but this isn't always sufficient. Find out in this talk why the Kafka community decided to add topic IDs to Kafka as a part of KIP-516. Learn which new features related to topic IDs have been rolled out, and learn about some of the benefits that are still on the way.
We'll be covering new features in Kafka versions 2.8, 3.0, and 3.1 and how to upgrade to using topic IDs. We'll see how topic IDs are used in KRaft mode and tiered storage, and take a tour through some of the internals and the thought processes around these changes—as well as some of the future plans for topic IDs.
Increasing Kafka Connect Throughput with Catalin Pop with Catalin Pop | Kafka...HostedbyConfluent
While Apache Kafka® is the central nervous system for streaming data, Kafka Connect is the highway that allows traffic to flow in and out of Kafka without the need to write a producer/consumer. The question that arises here is how do we fit more cars (records) on this highway and get better throughput?
In this presentation, we will use JDBC source and sink connectors as examples of how to tune source/sink connectors:
* Elaborate internals of source vs sink connectors(client/producer vs consumer/client)
* List of configurations to tune for producer/consumer
* List of configurations to tune from source/sink JDBC connector
* Throughput results of tuned vs untuned
* Which metrics to monitor
* What can’t be tuned (data conversion between JDBC client and producer/consumer)
Let us Connect all of our systems through the largest possible highway!
Programmazione annuale dell'allenamento nella Scuola Calcio
Patrice Marseillou
http://www.calzetti-mariucci.it/shop/prodotti/programmazione-annuale-dellallenamento-nella-scuola-calcio
149 esercizi gioco per la formazione del calciatore dai 5 agli 8 anni
C.Dini, M. Badii, M. Lonzi
ANNO EDIZIONE: 2021
GENERE: Libro
CATEGORIE: Giovanile, Esercitazioni e giochi
ISBN: 9788860286413
PAGINE: 144 (formato A4)
.
149 esercizi gioco per la formazione del calciatore dai 5 agli 8 anni raccoglie le esperienze operative dei tre autori con i bambini di una fascia di età decisiva per l’apprendimento, in due importantissimi arcipelaghi calcistici: la Toscana (presso Arezzo, Fiorentina, Livorno, Pisa, Pistoia, Prato) e la Cina.
La proposta è stata volutamente impostata senza offrire sedute pronte o sterili schematizzazioni intese a pianificare l’intera stagione calcistica ma ben 149 Esercizi-gioco suddivisi per i 5 gesti tecnici di base fondamentali del calcio, con indicizzazione del livello di difficoltà esecutiva, allo scopo di permettere ad ogni istruttore di scegliere a piacere quelli utili a costruire velocemente una propria seduta di allenamento focalizzata sul preciso obiettivo che la situazione del momento e dell’ambiente suggerisce come ideale.
Estremamente funzionale anche la ulteriore classificazione, per fasi e aspetti della sessione di allenamento, all’interno di ciascun Capitolo-Gesto tecnico:
Attivazione
Tecnica analitica
Motricità coordinativa
Situazioni di gioco
Partite a tema
Con il fine di stimolare la fantasia nella costruzione del lavoro in campo, un aspetto favorito anche dall’integrazione, rotazione, interscambiabilità delle singole unità: tutte caratteristiche che affidate alla sensibilità, alla pratica e all’esperienza di ciascun istruttore-allenatore ne hanno già fatto sul campo, e continueranno a farlo, uno strumento complessivo di grande praticità ed efficacia. Gli Autori sono i fondatori ed animatori della Elite Soccer Academy.
Daniel Stemberg's presentation on how curl works. From the basic command line use, to URLs, options, curl basics into HTTP specifics.
YouTube:
https://youtu.be/V5vZWHP-RqU?si=IkGJdHqvguYLffeG
Daniel Stenberg goes through some basic libcurl fundamentals and API design and explain how easily you can get your first transfers going in your own application. libcurl is the defacto standard library for Internet transfers and runs on virtually all platforms. The language focus will be on C/C++ but the concepts are generally applicable even if you use libcurl bindings for other languages.
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)sparkfabrik
Our Drupal 8 websites are true applications, often very complex ones.
More and more workload is delegated to external systems, usually microservices, that are used for many different tasks.
Architectures are always more distributed and fragmented.
To trace the lifecycle of a single request that originates in a client, passes through all Drupal subsystems, reaches external (micro)services and comes back, it will become mandatory to track down problems and to optimize for performances. This is often time consuming and without the right tools may become very difficult.
A simple unstructured log stream isn't enough anymore, we need to find a way to observe the details of what is going on.
Observability is all about this and is based on structured logs, metrics and traces. In this talk we will see how to implement these techniques in Drupal, which tools and which modules to use to trace and log all requests that reach our website and how to expose and display useful metrics.
We will integrate Drupal with OpenTelemetry, Monolog and Grafana to collect, scrape, store and visualize telemetry data.
Kubernetes Application Deployment with Helm - A beginner Guide!Krishna-Kumar
Google DevFest2019 Presentation at Infosys Campus Bangalore. Application deployment in Kubernetes with Helm is demo'ed in Google Kubernetes Engine (GKE). This is an introductory session on Helm. Several references are given in it to further explore helm3 as it is in Beta state now.
This presentation provides an introduction to Ansible OpenSource IT automation and Cloud orchestration engine. It comes with an overview of what Ansible is and how it can compete (and outcome) legacy automation systems such as Chef or Puppet. Based on real-life experience, Ansible tips & tricks will be provided as how to automate your servers' deployment ever more easily. Additional software will be presented, allowing people to describe their full Cloud application topology, getting the best out of OpenStack APIs and Ansible Playbooks to fully automatize one's application's deployment and continuous integration.
Pulsar for Kafka People_Jesse andersonStreamNative
Apache Kafka and Apache Pulsar are both popular messaging frameworks. Apache Kafka has a big user base and people will want to know how Kafka and Pulsar are either the same or different in many respects. This talk will cover the key differences and how Pulsar adds new features that missing in Kafka.
We will cover:
The architectural differences and similarities in Pulsar and Kafka. Show use of BookKeeper and what that allows.
The Producer API and functionality differences. Show HelloWorld for both.
The Consumer API and functionality differences. Show HelloWorld for both.
The core use case and functionality differences. Show Pulsar as handling all of Kafka’s use cases and new ones that aren’t possible with Kafka.
This talk will allow people who are choosing between Kafka and Pulsar to have a more accurate and in-depth understanding of the differences between them. For companies considering a switch from Kafka to Pulsar, this talk will give them the cheatsheet to go back and make a more informed decision.
Apache Kafka and Apache Pulsar are both popular messaging frameworks. Apache Kafka has a big user base and people will want to know how Kafka and Pulsar are either the same or different in many respects. This talk will cover the key differences and how Pulsar adds new features that missing in Kafka.
We will cover:
The architectural differences and similarities in Pulsar and Kafka. Show use of BookKeeper and what that allows.
The Producer API and functionality differences. Show HelloWorld for both.
The Consumer API and functionality differences. Show HelloWorld for both.
The core use case and functionality differences. Show Pulsar as handling all of Kafka’s use cases and new ones that aren’t possible with Kafka.
This talk will allow people who are choosing between Kafka and Pulsar to have a more accurate and in-depth understanding of the differences between them. For companies considering a switch from Kafka to Pulsar, this talk will give them the cheatsheet to go back and make a more informed decision.
In this tutorial, we will explain how to get your own GitHub instance running on your own Ubuntu 12.04 VPS. Ubuntu 12.04 is recommended because of some incompatibilities between Python and Ruby on other Linux distributions. Also, make sure you have at least 1GB RAM memory on your VPS. Our first step is to install some required packages and dependencies.
Presented by VEXXHOST, provider of Openstack based Public and Private Cloud Infrastructure
https://vexxhost.com/
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPDana Luther
In this tutorial we will go over setting up a standard LEMP stack for development use and learn how to modify it to mimic your production/pre-production environments as closely as possible. We will go over how to switch from Nginx to Apache, upgrade PHP versions and introduce additional storage engines such as Redis to the equation. We'll also step through how to run both unit and acceptance suites using headless Selenium images in the stack. Leave here fully confident in knowing that whatever environment you get thrown into, you can replicate it and work in it comfortably.
Kubered -Recipes for C2 Operations on KubernetesJeffrey Holden
Outlines the process of using Kubernetes to deploy command and control infrastructure quickly and efficiently into the AWS cloud. Kubred script available at https://github.com/cloudc2/kubered
Cosa Drupal 8 ha da offrire rispetto ad altri framework PHP quando si parla di esporre un servizio REST? Partendo dalle dieci regole per creare una API che i vostri client ameranno, vedremo quali strumenti brillano nel firmamento di PHP all'alba del 2017 e metteremo alcuni di essi a confronto con Drupal 8, la versione più PHP-friendly del nostro CMS preferito. Pezzo per pezzo, costruiremo una mappa che metta in relazione gli strumenti ai casi d'uso cui sono più adatti e che ci permetterà di decidere con più confidenza cosa usare per il nostro prossimo service layer.
di Paolo Pustorino
Be a happier developer with Docker: Tricks of the tradeNicola Paolucci
The talk will teach developers to automate and streamline their development environment setups using Docker, covering awesome tricks to make the experience smooth, fast, powerful and repeatable.The topics covered will be a selection amongst:
- Sharing folders into containers
- Transparent tunnels, dynamic ports for your apps
- Tiny Core Linux - the secret horse to super fast container automation
- Dockerfile caching tricks
- Cheap orchestration tricks
Daniel Stenberg discusses some of the most common mistakes users are doing when using libcurl and what to do about them.
Video: https://youtu.be/0KfDdIAirSI
Daniel Stenberg takes us through how the curl project is doing today. git activity, contributors, committers, mailing list, growth, money and sponsors, his own role and much more. Video here: https://youtu.be/6ueyZGhtj1Q
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
1. @bagder
/* set the options (I left out a few, you will get the point anyway) */
curl_easy_setopt(handles[HTTP_HANDLE], CURLOPT_URL, "https://example.com");
curl_easy_setopt(handles[FTP_HANDLE], CURLOPT_URL, "ftp://example.com");
curl_easy_setopt(handles[FTP_HANDLE], CURLOPT_UPLOAD, 1L);
/* init a multi stack */
multi_handle = curl_multi_init();
/* add the individual transfers */
for(i = 0; i<HANDLECOUNT; i++)
curl_multi_add_handle(multi_handle, handles[i]);
while(still_running) {
CURLMcode mc = curl_multi_perform(multi_handle, &still_running);
if(still_running)
/* wait for activity, timeout or "nothing" */
mc = curl_multi_poll(multi_handle, NULL, 0, 1000, NULL);
if(mc)
break;
}
/* See how the transfers went */
while((msg = curl_multi_info_read(multi_handle, &msgs_left))) {
if(msg->msg == CURLMSG_DONE) {
int idx;
/* Find out which handle this message is about */
for(idx = 0; idx<HANDLECOUNT; idx++) {
int found = (msg->easy_handle == handles[idx]);
if(found)
break;
}
switch(idx) {
case HTTP_HANDLE:
printf("HTTP transfer completed with status %dn", msg->data.result);
break;
case FTP_HANDLE:
printf("FTP transfer completed with status %dn", msg->data.result);
break;
}
}
}
/* remove the transfers and cleanup the handles */
for(i = 0; i<HANDLECOUNT; i++) {
curl_multi_remove_handle(multi_handle, handles[i]);
curl_easy_cleanup(handles[i]);
}
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %sn",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
mastering libcurl
November 16, 2023 Daniel Stenberg
more libcurl source code and details in a single video than you ever saw before
part one
4. Setup - November 16 + 20, 2023
Live-streamed
Expected to last multiple hours
Recorded
Lots of material never previously presented
There will be LOTS of source code on display
https://github.com/bagder/mastering-libcurl
@bagder
6. mastering libcurl
The project
Getting it
API and ABI
Architecture
API fundamentals
Setting up
@bagder
Transfers
Share API
TLS
Proxies
HTTP
Header API
URL API
WebSocket
Future
Part 1 Part 2
November 16, 2023 November 20, 2023
10. Main products
curl - command line tool for client-side internet transfers with URLs
libcurl - library for client-side internet transfers with URLs
★ Always and only client-side
★ An internet transfer: upload or download or both
★ Endpoint described with a URL
@bagder
11. Open Source
Everything in the curl project is open source
Every discussion and decision are held and done in the open
Open source means everyone can reshare and change
curl is (essentially) MIT licensed
@bagder
Free
Open
Gratis
13. Development
curl is developed by “everyone”
only Daniel works on curl full-time
everyone can provide their proposed changes as “pull requests”
No paperwork required
Changes are reviewed and tested thoroughly
A small team of maintainers can accept and merge changes
@bagder
14. Releases
We do releases every 8 weeks (or sooner when necessary)
At 252 releases
We release what is in the master branch at the time
@bagder
19. Asking for help
Mailing lists
library/development/debugging questions: curl-library
https://lists.haxx.se/mailman/listinfo/curl-library
Web “forum”
https://github.com/curl/curl/discussions
@bagder
23. 101 operating systems
@bagder
Syllable OS TPF
Tizen
Symbian Tru64
SunOS tvOS
ucLinux
Genode Hurd
iOS
Integrity
Illumos
HP-UX
HardenedBSD
Haiku
z/OS
Nintendo
Switch
NonStop OS
NetWare
MorphOS MPE/iX MS-DOS
NCR MP-RAS NetBSD
RISC OS
Redox
ReactOS
Sailfish OS SCO Unix Serenity SINIX-Z
Qubes OS
UnixWare WebOS
vxWorks
VMS
Windows
UNICOS
Windows CE
Wii System
Software
AmigaOS Blackberry 10
BeOS
Android
Blackberry
Tablet OS
AIX
Cell OS
Aros
IRIX
RTEMS
Mbed Micrium
macOS
Mac OS 9
Linux Lua RTOS
eCOS
FreeRTOS
FreeBSD
FreeDOS
Fuchsia
DragonFly
BSD
ROS
Cisco IOS
OpenBSD
OS/2 OS/400
Ultrix
ipadOS
NuttX
Solaris
Xbox
System
Chrome OS
MINIX
Garmin OS
QNX
PlayStation
Portable
Plan 9
OS21
OpenStep
Orbis OS
z/TPF
z/VM z/VSE Operating systems known to have run curl
Atari FreeMiNT
DR DOS
Sortix
Zephyr
watchOS
Xenix
DG/UX
ArcaOS
Wii U
SkyOS
Wear OS
Meego
Maemo Moblin
NextStep
CheriBSD
32. Build it yourself
configure
cmake
MSVC
needs third party development packages installed
@bagder
autotools
./configure with-openssl …
make -sj
make install
cmake
mkdir build
cd build
cmake .
make -sj
MSVC
cd winbuild
name /f Makefile.vc mode=dll WITH_SSL=dll
Visual C++ project files
<projects/Windows/VC*/curl-all.sln>
33. Building custom versions
enable/disable features, protocols and 3rd parties
libcurl API functions remain, but may return different values
Common when you build devices / control the environment
@bagder
34. Third party dependencies
Many features require 3rd party libraries
TLS
SSH
LDAP
RTMP
HTTP compression (gzip, brotli, zstd)
HTTP/2
HTTP/3
Asynchronous name resolving without threads
Auth - kerberos, SASL
@bagder
35. Target requirements
a minimal libcurl build with smallest TLS lands on around 100kB
minimum run-time memory requirements for libcurl: 20kB
add memory requirements for the TLS library
the API remains the same
@bagder
37. compatibility
The same API on all platforms
You can always upgrade to the next version without breakage
You may not be able to downgrade
Options and functions are clearly documented when they were added
@bagder
38. versions
libcurl 7.1 released August 7, 2000
libcurl 8.4.0 released October 11, 2023
Differ in features, protocols, performance
Later versions have more functions
@bagder
39. The libcurl API is for C
libcurl provides a C interface
works for C++ as well
We will only speak C today
Users of other languages get to use bindings
@bagder
41. compiling libcurl programs
gcc mycode.c -lcurl
clang mycode.c -lcurl
Your other C compilers work too:
1. Specify where the curl header file is
2. Tell the linker to link with libcurl
@bagder
42. Documentation
We take documentation seriously
Every function has a man page
Every option has a man page
120 stand-alone examples
https://curl.se/ has them all (updated)
https://everything.curl.dev/ provides more resources
Tip: just google the function/option name
@bagder
44. @bagder
When curl started there
was no choice
C89
Only now alternatives
appear for libraries
C keeps curl extremely
portable
C code will remain a build
option
@bagder
49. basic transfers by default
Transfers only do what is asked; basic by default
The API is largely protocol agnostic
Change behavior by setting options
@bagder
50. global init
An application should do a global libcurl init
And a global cleanup
@bagder
global.c
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
curl_global_init(CURL_GLOBAL_DEFAULT);
/* use libcurl, then before exiting... */
curl_global_cleanup();
return 0;
}
51. easy handle
CURL *handle - often referred to as an easy handle
A CURL * is an opaque handle
Compare to FILE *
A handle identifies a single transfer
Can and should be reused
Create one with curl_easy_init()
Free it with curl_easy_cleanup()
@bagder
easy-init.c
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *easy = curl_easy_init();
curl_easy_setopt(easy, CURLOPT_URL,
“https://curl.se/”);
curl_easy_perform(easy);
curl_easy_cleanup(easy);
return 0;
}
52. easy options
An easy handle needs options set to know what to do
sticky
independent
order-independent
Options set copy data
CURLOPT_URL is the only mandatory option
Download is the default action
An application typically sets many options
Options control timeouts, name resolve alternatives, connectivity, protocol version selection,
TLS version selection, authentication, proxies, how to receive or receive data - and much much
more.
@bagder
54. curl_easy_setopt
CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
The parameter type depends on the option.
Beware: varargs makes the type checks lax
Might want extra typecasts
When setting strings, libcurl copies the data
Returns an error code
@bagder
easy-setopt.c
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *easy = curl_easy_init();
CURLcode result;
curl_easy_setopt(easy, CURLOPT_URL,
“https://curl.se/”);
curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
result = curl_easy_perform(easy);
curl_easy_cleanup(easy);
return (int)result;
}
55. curl_easy_perform
For synchronous transfers
Performs to the end, successful or failure
Done as fast as possible
Might take a long - or short - time
You can limit how long time to allow
Returns success as an CURLcode
Stores cached info in the easy handle
@bagder
easy-perform.c
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *easy = curl_easy_init();
CURLcode result;
curl_easy_setopt(easy, CURLOPT_URL,
“https://curl.se/”);
result = curl_easy_perform(easy);
curl_easy_cleanup(easy);
return (int)result;
}
56. curl_easy_cleanup
Kills and frees all resources associated with an easy handle
You might want to call curl_easy_reset() and use it again
@bagder
57. callbacks
provide function pointer to curl (*FUNCTION)
provide a custom pointer to pass to the function (*DATA)
libcurl calls it when it needs things done
do not call libcurl functions from within callbacks
(unless you meet the exceptions)
@bagder
58. write callback
Data is provided to the application using the write callback: CURLOPT_WRITEFUNCTION
libcurl wants to write incoming data somewhere
size_t write_cb(char *ptr, size_t size, size_t nmemb, void *userdata);
ptr - points to the data that arrives
size - is always 1
nmemb - the size of the data in number of bytes
userdata - a custom pointer you set with CURLOPT_WRITEDATA
(prototype looks like fwrite)
@bagder
60. multi handle
A “super handle” made for holding one or more easy handles.
Remember: each easy handle is a single transfer
With multi, all transfers are performed in parallel, in a non-blocking manner
Easy handles can be added and removed from the multi handle at any time
Create a multi handle with CURLM *handle = curl_multi_init()
Add an easy handle to a multi handle with curl_multi_add_handle(multi, easy)
Remove an easy handle again with curl_multi_remove_handle(multi, easy)
@bagder
61. curl_multi_perform
Do drive all transfers in the multi handle, call curl_multi_perform()
Does as much work it can without blocking, then returns
Your application waits until there is more work to do
Easiest done with curl_multi_poll()
Check if any of the transfers are done with curl_multi_info_read()
While there are unfinished transfers, continue performing them
@bagder
62. multi internals
Internally, the easy interface is using the multi interface
This ensures everything always work for either interface
All internals are done non-blocking (almost)
@bagder
63. curl_multi_info_read
The multi interface drives N parallel transfers
curl_multi_perform() does not return status about individual transfers
Returns messages when one or more of the transfers has ended
The message contains individual easy handle and CURLcode for the specific transfer
Call it again to get the next message
@bagder
struct CURLMsg {
CURLMSG msg; /* what this message means */
CURL *easy_handle; /* the handle it concerns */
union {
void *whatever; /* message-specific data */
CURLcode result; /* return code for transfer */
} data;
};
man curl_multi_info_read
65. multi.c
@bagder
CURL *easy = curl_easy_init();
CURL *easy2 = curl_easy_init();
curl_easy_setopt(easy, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(easy2, CURLOPT_URL, "https://curl.se/");
CURLM *multi = curl_multi_init();
curl_multi_add_handle(multi, easy);
curl_multi_add_handle(multi, easy2);
int still = 1;
while(still) {
CURLMsg *msg;
CURLMcode mc = curl_multi_perform(multi, &still);
if(still) {
mc = curl_multi_poll(multi, NULL, 0, 1000, NULL);
if(mc)
break;
}
do {
int queued;
msg = curl_multi_info_read(multi, &queued);
if(msg) {
if(msg->msg == CURLMSG_DONE) {
printf("Completed: %dn", (int)msg->data.result);
}
}
} while(msg);
} /* loop while still is non-zero */
curl_multi_remove_handle(multi, easy);
curl_multi_remove_handle(multi, easy2);
curl_multi_cleanup(multi);
curl_easy_cleanup(easy);
curl_easy_cleanup(easy2);
setup
tear down
transfer
66. caches
curl_easy_perform - caches in the easy handle
curl_multi_perform - caches in the multi handle, shared by all added easy
handles
@bagder
DNS
cache
connection
pool
TLS
session-ID
cache
CA store
cache
cookies
Alt-svc
data
HSTS data
per single handle even in multi handles
67. curl_multi_socket_action
The event-based API flavor
Scales better when going above hundreds of transfers
Applications call libcurl and pass in the socket that has activity
And what specific activity it is (read, write etc)
libcurl tells application what sockets to monitor
libcurl tells application about when its timer expires
@bagder
77. connection pool
connections stored if still alive
only stores up to N connections: CURLOPT_MAXCONNECTS
kept up to a maximum age: CURLOPT_MAXAGE_CONN
reuse is done per name, not IP address
works for all supported protocols
numerous extra conditions and requirements
opt-out reuse: CURLOPT_FRESH_CONNECT
make next transfer not reusable: CURLOPT_FORBID_REUSE
TCP keepalive: CURLOPT_TCP_KEEPALIVE
@bagder
connection
pool
78. Connections: name tricks
Pre-populate the DNS cache: CURLOPT_RESOLVE
@bagder
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
struct curl_slist *host;
host = curl_slist_append(NULL,
"example.com:443:127.0.0.1");
host = curl_slist_append(host,
" .example:443:127.0.0.1");
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_RESOLVE, host);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
curl_slist_free_all(host);
return (int)res;
}
resolve.c
79. Connections: name tricks
Host + port “redirect”: CURLOPT_CONNECT_TO
@bagder
connect-to.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
struct curl_slist *host;
host = curl_slist_append(NULL,
"curl.se:443:example.com:443");
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_CONNECT_TO, host);
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
/* unless we disable the check libcurl
returns CURLE_PEER_FAILED_VERIFICATION */
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
curl_slist_free_all(host);
return (int)res;
}
80. Connections: when you use c-ares
c-ares is a third party name resolver
CURLOPT_DNS_SERVERS
@bagder
dns-servers.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
curl_easy_setopt(curl, CURLOPT_DNS_SERVERS,
“192.168.1.100:53,192.168.1.101”);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return (int)res;
}
81. Connections: network interface
Bind the socket to an interface or address: CURLOPT_INTERFACE
@bagder
interface.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_INTERFACE, "enp3s0");
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return (int)res;
}
82. Connections: local port number
Restrict local TCP port number: CURLOPT_LOCALPORT and
CURLOPT_LOCALPORTRANGE
@bagder
localport.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
/* Try to use a local port number between 20000-20009 */
curl_easy_setopt(curl, CURLOPT_LOCALPORT, 20000L);
curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 10L);
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return (int)res;
}
83. Connections: TCP KEEPALIVE
Prevent TCP connections from being
idle
By default, a connection can be
completely silent over long periods
or disconnected without it getting
noticed
@bagder
keepalive.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
/* enable TCP keep-alive for this transfer */
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
/* keep-alive idle time to 120 seconds */
curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
/* interval time between keep-alive probes: 60 seconds */
curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return (int)res;
}
84. Connections: IP family
libcurl does IPv6 + IPv4 by default
Using happy eyeballs
You can change that
@bagder
ipv6only.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return (int)res;
}
85. Authentication
Most protocols offer authentication
Many more than one type
Set CURLOPT_USERNAME +
CURLOPT_PASSWORD
And optionally the type
For proxy, it has its own set of
credentials and auth type options:
CURLOPT_PROXYUSERNAME,
CURLOPT_PROXYPASSWORD etc
For HTTP, cookies is often used
@bagder
auth.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_USERNAME, "clark");
curl_easy_setopt(curl, CURLOPT_PASSWORD, "kent");
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return (int)res;
}
86. .netrc
old config file for ftp authentication
libcurl supports it for generic credentials per host
defaults to $HOME/.netrc
@bagder
netrc.c
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
curl_easy_setopt(curl, CURLOPT_NETRC_FILE,
“/home/daniel/s3cr3ts.txt”);
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return (int)res;
}
87. return codes
The easy interface returns CURLcode
The multi interface returns CURLMcode
The share interface returns CURLSHcode
The URL interface returns CURLUcode
0 is always success
non-zero is an error code
libcurl-errors.3 has all the details
@bagder