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 gave a presentation on HTTP/3 and how to enable it in curl. He discussed how HTTP/3 uses QUIC to improve on HTTP/1 and HTTP/2 by eliminating head of line blocking, enabling faster handshakes and earlier data, and always using encryption. He explained how to build curl with either the Quiche or ngtcp2 libraries to support HTTP/3 and demonstrated commands to test HTTP/3 functionality. While the implementation is still experimental, Stenberg welcomed help from the community to further develop HTTP/3 and QUIC support in curl.
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.
Daniel Stenberg discusses the progress being made to enable HTTP/3 support in the curl tool and libcurl library. HTTP/3 uses QUIC as its underlying transport protocol. Several challenges remain, including fallback options, stability testing, and full browser/server support. Stenberg explains how to build curl with various QUIC libraries like Quiche and ngtcp2. HTTP/3 support in curl is still experimental but aims to provide a similar user experience to HTTP/1. Support may be included in future releases as QUIC and HTTP/3 specifications continue development and more servers/browsers are deployed.
Curl is an open source command line tool and library for transferring data using various internet protocols. The document discusses curl's history, features, usage, and options. Curl supports many protocols including HTTP, HTTPS, FTP, FTPS, and more. It has over 230 command line options and has been ported to many operating systems. The document provides examples of common curl commands and options for making HTTP requests, handling cookies and redirects, uploading and downloading files, and more.
Daniel Stenberg gave a presentation about security best practices for curl and open source projects. He discussed how curl implements thorough testing, code reviews, fuzz testing, and monitoring of dependencies to minimize vulnerabilities. Stenberg also noted that curl employs a full-time maintainer, responds quickly to issues, and has an active bug bounty program to further improve security.
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF.
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
Daniel Stenberg does a presentation about HTTP/3 and QUIC. Why the new protocols are deemed necessary, how they work, how they change how things are sent over the network and what some of the coming deployment challenges will be.
Daniel Stenberg gave a presentation on using Rust with curl. He discussed how curl has traditionally used C but now supports alternative backends implemented in other languages like Rust. He described challenges in integrating the Hyper, rustls, and quiche Rust crates but curl now supports HTTP/1-2 with Hyper and TLS with rustls in an experimental way. Future work includes improving test coverage when using Rust backends and potentially enabling them by default.
curl - a hobby project that conquered the worldDaniel Stenberg
This document summarizes the open source project curl, a command line tool and library for transferring data with various protocols. It began as a hobby project in 1998 and has grown significantly over time to support many protocols, platforms, and use by thousands of companies. It is developed openly on GitHub by a small core team and many volunteers contributors over its 20+ year history.
- The document summarizes Daniel Stenberg's presentation on HTTP/3 and QUIC.
- It describes how QUIC improves on TCP by allowing multiple streams over a single connection and enabling faster handshakes. HTTP/3 runs over QUIC and provides improvements like 0-RTT handshakes.
- There are still challenges to widespread HTTP/3 adoption like CPU overhead and lack of standardization, but implementations are progressing and benefits include faster page loads.
Daniel Stenberg gave a presentation on the evolution of HTTP from versions 1 to 2 to the upcoming version 3. He explained the problems with HTTP/1 and how HTTP/2 aimed to address these by using a single TCP connection with multiple streams. However, middleboxes in the internet slow the adoption of upgrades. QUIC was developed as a new transport protocol to run over UDP and enable always-encrypted connections with fewer head-of-line blocking problems. HTTP/3 defines how HTTP can be run over QUIC, providing features like independent streams and faster handshakes while keeping the basic request-response model of HTTP the same. Several challenges around implementations and tooling remain before HTTP/3 is widely adopted.
Curl is an open source command line tool and library for transferring data with various internet protocols. It supports many protocols including HTTP, HTTPS, FTP, FTPS, SFTP, SCP, SMTP, IMAP, POP3, and more. Curl has over 2,000 contributors and is widely used across operating systems like Linux, Windows, macOS, and others. The presentation discussed curl's history, features, usage examples, and how it can be used to mimic browser behavior and inspect HTTPS traffic.
Daniel Stenberg explains HTTP/3 and QUIC at GOTO 10, January 22, 2019. This is the slideset, see https://daniel.haxx.se/blog/2019/01/23/http-3-talk-on-video/ for the video.
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF.
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
Why the new protocols are deemed necessary, how they work, how they change how things are sent over the network and what some of the coming deployment challenges will be.
As you will see in this film, there are a lot of questions from an interested and educated audience.
Daniel Stenberg is the founder and lead developer of the curl project. He has worked on HTTP implementations for over twenty years. He has been involved in the HTTPbis working group in IETF for ten years and he worked with HTTP in Firefox for years before he left Mozilla. He participates in the QUIC working group and is the author of the widely read documents ”HTTP2 explained” and ”HTTP/3 explained”.
HTTP/3 is a new version of the HTTP network protocol that is expected to be finalized in late 2019. It uses QUIC, a new transport protocol built on UDP, to address issues with HTTP/1.1 and HTTP/2 like head-of-line blocking and network ossification. By running at the transport layer in userspace over encrypted connections, QUIC and HTTP/3 provide features like 0-RTT handshakes, stream multiplexing and faster connection establishment compared to TCP. HTTP/3 maintains the HTTP request/response API but delivers it over QUIC's multiplexed streams for improved performance and reliability compared to previous HTTP versions over TCP.
HTTP/3 over QUIC. All is new but still the same!Daniel Stenberg
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF. HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
Daniel Stenberg does a presentation about HTTP/3 and QUIC. Why the new protocols are deemed necessary, how they work, how they change how things are sent over the network and what some of the coming deployment challenges will be.
This document summarizes a presentation comparing gRPC and REST by Alex Borysov and Mykyta Protsenko. It begins with introductions of the presenters and their backgrounds. It then discusses key differences between gRPC and REST such as gRPC using protocol buffers for defining APIs and being non-blocking via streaming, while REST focuses on resources and uses JSON/HTTP. Examples are provided of implementing services and clients for both approaches. Challenges of microservices and distributed systems that both aim to address are also covered.
"Enabling Googley microservices with gRPC" VoxxedDays Minsk editionAlex Borysov
Alex Borysov presents on enabling microservices with gRPC. gRPC is an open source, high performance RPC framework that uses HTTP/2. It provides abstractions and best practices for designing distributed systems and has default implementations from Google. gRPC supports 10+ programming languages and provides high throughput and low latency compared to REST/JSON solutions. The presentation demonstrates how to define gRPC services with protocol buffers, implement services and clients, and compose services for microservices architectures.
"Enabling Googley microservices with gRPC" Riga DevDays 2018 editionAlex Borysov
The document describes a presentation about gRPC (Google's Remote Procedure Call framework) given by Alex Borysov. Some key points:
- gRPC is an open source, high performance RPC framework that uses HTTP/2 for transport. It was developed at Google and is now part of the Cloud Native Computing Foundation.
- It provides language-independent client and server APIs that can be used to define and consume services. Over 10 programming languages are supported.
- Compared to alternatives like JSON/HTTP, gRPC provides much higher throughput and lower latency. It has been shown to provide 3x throughput and 11x better CPU efficiency than JSON/HTTP for Google Cloud Pub/Sub.
- The presentation
The document summarizes a presentation given by Alex Borysov and Mykyta Protsenko comparing gRPC and REST. It provides an overview of gRPC, describing it as a high performance RPC framework. It then discusses some issues with REST including heterogeneous data formats and service discovery. Examples are given of implementing a sample aggregator service using both REST and gRPC to illustrate their differences.
"gRPC vs REST: let the battle begin!" OSCON 2018 editionAlex Borysov
This document compares REST and gRPC for building microservices. It discusses how REST uses HTTP requests to access resources on a URL, while gRPC uses protocol buffers to define APIs and services. It provides examples of implementing services and clients using both approaches. The document argues that gRPC performs better for microservices due to features like streaming, automatic client generation, and language-independent services.
stackconf 2020 | Speeding up Linux disk encryption by Ignat KorchaginNETWAYS
Encrypting data at rest is a must-have for any modern SaaS company. And if you run your software stack on Linux, LUKS/dm-crypt [1] is the usual go-to solution. However, as the storage becomes faster, the IO latency, introduced by dm-crypt becomes rather noticeable, especially on IO intensive workloads.
At first glance it may seem natural, because data encryption is considered an expensive operation. But most modern hardware (specifically x86 and arm64) platforms have hardware optimisations to make encryption fast and less CPU intensive. Nevertheless, even on such hardware transparent disk encryption performs quite poorly.
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019Alex Borysov
This document summarizes a presentation about gRPC-Web given by Alex Borysov and Yevgen Golubenko. The presentation introduced gRPC-Web as a way to enable gRPC communication between web clients and servers. It demonstrated how to define gRPC services with protocol buffers, generate client code for the web with protocol buffer compilation, and use Envoy as a proxy for gRPC-Web requests. The presentation also covered tools, error handling, API changes, and server reflection with gRPC-Web.
Re-thinking Performance tuning with HTTP2Vinci Rufus
The document discusses how best practices for performance tuning with HTTP/1.1 may need to be re-thought with the introduction of HTTP/2. It provides an overview of how HTTP/2 addresses limitations of HTTP/1.1 like head-of-line blocking through features like multiplexing, binary framing, header compression and server push. It recommends approaches like keeping HTTP requests low and caching resources while avoiding past practices like excessive domain sharding or image sprites that are no longer needed with HTTP/2.
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019Alex Borysov
This document summarizes a presentation about gRPC-Web given by Alex Borysov and Yevgen Golubenko. The presentation discusses how gRPC-Web allows for communication between web clients and gRPC backends by translating gRPC requests to HTTP/1 or HTTP/2. It demonstrates a sample gRPC-Web application using Envoy as a proxy to handle the protocol translation. The document also covers topics like API design with protocol buffers, code generation for different platforms, error handling, and server reflection APIs.
Break me if you can: practical guide to building fault-tolerant systems (with...Alex Borysov
This document summarizes a presentation titled "Break Me If You Can: Practical Guide to Building Fault-Tolerant Systems" given at Devoxx Belgium in November 2018. The presentation discusses building fault tolerance into distributed systems through code and design patterns. It introduces concepts like faults, errors and failures, and provides an example architecture called "Dodging Geese" that incorporates techniques like timeouts and non-blocking calls to upstream services to handle potential faults and slowdowns. The presentation also covers monitoring and tracing distributed requests across services for observability.
Kernel Recipes 2014 - Writing Code: Keep It Short, Stupid!Anne Nicolas
The traditional KISS principle says that you are stupid if you can’t keep it simple. However, keeping it simple is actually very, very hard. But my lasting impression after reading a lot of code (linux kernel and otherwise) over the years is that there is no excuse for not keeping your code short. And usually, keeping it short is a very good first step towards keeping it simple. This presentation will give some simple tricks and pointers to keep your code short and I will also give some guidelines how to do design and implementation from a high-level point of view. These simple rules should make it easier for you to get your code accepted in open source projects such as the linux kernel.
Hans Verkuil
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
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF.
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
Daniel Stenberg does a presentation about HTTP/3 and QUIC. Why the new protocols are deemed necessary, how they work, how they change how things are sent over the network and what some of the coming deployment challenges will be.
Daniel Stenberg gave a presentation on using Rust with curl. He discussed how curl has traditionally used C but now supports alternative backends implemented in other languages like Rust. He described challenges in integrating the Hyper, rustls, and quiche Rust crates but curl now supports HTTP/1-2 with Hyper and TLS with rustls in an experimental way. Future work includes improving test coverage when using Rust backends and potentially enabling them by default.
curl - a hobby project that conquered the worldDaniel Stenberg
This document summarizes the open source project curl, a command line tool and library for transferring data with various protocols. It began as a hobby project in 1998 and has grown significantly over time to support many protocols, platforms, and use by thousands of companies. It is developed openly on GitHub by a small core team and many volunteers contributors over its 20+ year history.
- The document summarizes Daniel Stenberg's presentation on HTTP/3 and QUIC.
- It describes how QUIC improves on TCP by allowing multiple streams over a single connection and enabling faster handshakes. HTTP/3 runs over QUIC and provides improvements like 0-RTT handshakes.
- There are still challenges to widespread HTTP/3 adoption like CPU overhead and lack of standardization, but implementations are progressing and benefits include faster page loads.
Daniel Stenberg gave a presentation on the evolution of HTTP from versions 1 to 2 to the upcoming version 3. He explained the problems with HTTP/1 and how HTTP/2 aimed to address these by using a single TCP connection with multiple streams. However, middleboxes in the internet slow the adoption of upgrades. QUIC was developed as a new transport protocol to run over UDP and enable always-encrypted connections with fewer head-of-line blocking problems. HTTP/3 defines how HTTP can be run over QUIC, providing features like independent streams and faster handshakes while keeping the basic request-response model of HTTP the same. Several challenges around implementations and tooling remain before HTTP/3 is widely adopted.
Curl is an open source command line tool and library for transferring data with various internet protocols. It supports many protocols including HTTP, HTTPS, FTP, FTPS, SFTP, SCP, SMTP, IMAP, POP3, and more. Curl has over 2,000 contributors and is widely used across operating systems like Linux, Windows, macOS, and others. The presentation discussed curl's history, features, usage examples, and how it can be used to mimic browser behavior and inspect HTTPS traffic.
Daniel Stenberg explains HTTP/3 and QUIC at GOTO 10, January 22, 2019. This is the slideset, see https://daniel.haxx.se/blog/2019/01/23/http-3-talk-on-video/ for the video.
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF.
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
Why the new protocols are deemed necessary, how they work, how they change how things are sent over the network and what some of the coming deployment challenges will be.
As you will see in this film, there are a lot of questions from an interested and educated audience.
Daniel Stenberg is the founder and lead developer of the curl project. He has worked on HTTP implementations for over twenty years. He has been involved in the HTTPbis working group in IETF for ten years and he worked with HTTP in Firefox for years before he left Mozilla. He participates in the QUIC working group and is the author of the widely read documents ”HTTP2 explained” and ”HTTP/3 explained”.
HTTP/3 is a new version of the HTTP network protocol that is expected to be finalized in late 2019. It uses QUIC, a new transport protocol built on UDP, to address issues with HTTP/1.1 and HTTP/2 like head-of-line blocking and network ossification. By running at the transport layer in userspace over encrypted connections, QUIC and HTTP/3 provide features like 0-RTT handshakes, stream multiplexing and faster connection establishment compared to TCP. HTTP/3 maintains the HTTP request/response API but delivers it over QUIC's multiplexed streams for improved performance and reliability compared to previous HTTP versions over TCP.
HTTP/3 over QUIC. All is new but still the same!Daniel Stenberg
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF. HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and instead it uses QUIC.
Daniel Stenberg does a presentation about HTTP/3 and QUIC. Why the new protocols are deemed necessary, how they work, how they change how things are sent over the network and what some of the coming deployment challenges will be.
This document summarizes a presentation comparing gRPC and REST by Alex Borysov and Mykyta Protsenko. It begins with introductions of the presenters and their backgrounds. It then discusses key differences between gRPC and REST such as gRPC using protocol buffers for defining APIs and being non-blocking via streaming, while REST focuses on resources and uses JSON/HTTP. Examples are provided of implementing services and clients for both approaches. Challenges of microservices and distributed systems that both aim to address are also covered.
"Enabling Googley microservices with gRPC" VoxxedDays Minsk editionAlex Borysov
Alex Borysov presents on enabling microservices with gRPC. gRPC is an open source, high performance RPC framework that uses HTTP/2. It provides abstractions and best practices for designing distributed systems and has default implementations from Google. gRPC supports 10+ programming languages and provides high throughput and low latency compared to REST/JSON solutions. The presentation demonstrates how to define gRPC services with protocol buffers, implement services and clients, and compose services for microservices architectures.
"Enabling Googley microservices with gRPC" Riga DevDays 2018 editionAlex Borysov
The document describes a presentation about gRPC (Google's Remote Procedure Call framework) given by Alex Borysov. Some key points:
- gRPC is an open source, high performance RPC framework that uses HTTP/2 for transport. It was developed at Google and is now part of the Cloud Native Computing Foundation.
- It provides language-independent client and server APIs that can be used to define and consume services. Over 10 programming languages are supported.
- Compared to alternatives like JSON/HTTP, gRPC provides much higher throughput and lower latency. It has been shown to provide 3x throughput and 11x better CPU efficiency than JSON/HTTP for Google Cloud Pub/Sub.
- The presentation
The document summarizes a presentation given by Alex Borysov and Mykyta Protsenko comparing gRPC and REST. It provides an overview of gRPC, describing it as a high performance RPC framework. It then discusses some issues with REST including heterogeneous data formats and service discovery. Examples are given of implementing a sample aggregator service using both REST and gRPC to illustrate their differences.
"gRPC vs REST: let the battle begin!" OSCON 2018 editionAlex Borysov
This document compares REST and gRPC for building microservices. It discusses how REST uses HTTP requests to access resources on a URL, while gRPC uses protocol buffers to define APIs and services. It provides examples of implementing services and clients using both approaches. The document argues that gRPC performs better for microservices due to features like streaming, automatic client generation, and language-independent services.
stackconf 2020 | Speeding up Linux disk encryption by Ignat KorchaginNETWAYS
Encrypting data at rest is a must-have for any modern SaaS company. And if you run your software stack on Linux, LUKS/dm-crypt [1] is the usual go-to solution. However, as the storage becomes faster, the IO latency, introduced by dm-crypt becomes rather noticeable, especially on IO intensive workloads.
At first glance it may seem natural, because data encryption is considered an expensive operation. But most modern hardware (specifically x86 and arm64) platforms have hardware optimisations to make encryption fast and less CPU intensive. Nevertheless, even on such hardware transparent disk encryption performs quite poorly.
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019Alex Borysov
This document summarizes a presentation about gRPC-Web given by Alex Borysov and Yevgen Golubenko. The presentation introduced gRPC-Web as a way to enable gRPC communication between web clients and servers. It demonstrated how to define gRPC services with protocol buffers, generate client code for the web with protocol buffer compilation, and use Envoy as a proxy for gRPC-Web requests. The presentation also covered tools, error handling, API changes, and server reflection with gRPC-Web.
Re-thinking Performance tuning with HTTP2Vinci Rufus
The document discusses how best practices for performance tuning with HTTP/1.1 may need to be re-thought with the introduction of HTTP/2. It provides an overview of how HTTP/2 addresses limitations of HTTP/1.1 like head-of-line blocking through features like multiplexing, binary framing, header compression and server push. It recommends approaches like keeping HTTP requests low and caching resources while avoiding past practices like excessive domain sharding or image sprites that are no longer needed with HTTP/2.
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019Alex Borysov
This document summarizes a presentation about gRPC-Web given by Alex Borysov and Yevgen Golubenko. The presentation discusses how gRPC-Web allows for communication between web clients and gRPC backends by translating gRPC requests to HTTP/1 or HTTP/2. It demonstrates a sample gRPC-Web application using Envoy as a proxy to handle the protocol translation. The document also covers topics like API design with protocol buffers, code generation for different platforms, error handling, and server reflection APIs.
Break me if you can: practical guide to building fault-tolerant systems (with...Alex Borysov
This document summarizes a presentation titled "Break Me If You Can: Practical Guide to Building Fault-Tolerant Systems" given at Devoxx Belgium in November 2018. The presentation discusses building fault tolerance into distributed systems through code and design patterns. It introduces concepts like faults, errors and failures, and provides an example architecture called "Dodging Geese" that incorporates techniques like timeouts and non-blocking calls to upstream services to handle potential faults and slowdowns. The presentation also covers monitoring and tracing distributed requests across services for observability.
Kernel Recipes 2014 - Writing Code: Keep It Short, Stupid!Anne Nicolas
The traditional KISS principle says that you are stupid if you can’t keep it simple. However, keeping it simple is actually very, very hard. But my lasting impression after reading a lot of code (linux kernel and otherwise) over the years is that there is no excuse for not keeping your code short. And usually, keeping it short is a very good first step towards keeping it simple. This presentation will give some simple tricks and pointers to keep your code short and I will also give some guidelines how to do design and implementation from a high-level point of view. These simple rules should make it easier for you to get your code accepted in open source projects such as the linux kernel.
Hans Verkuil
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
This document provides an overview of graphics programming in C++ using the G3D library. It discusses that C++ is widely used for computer graphics and combines low-level and high-level features. It also introduces the G3D library, which is an open source cross-platform library for 3D graphics that handles much of the complex infrastructure. The document then provides tips for programmers with Java experience on some key differences between C++ and Java and aspects of C++ they should be aware of for graphics programming.
This document provides an overview of the C++ Boot Camp for CSE 380. It includes:
- A disclaimer that the presenter is not the grader and their opinions are their own.
- An outline of topics to be covered in the boot camp over two weeks, including basic C++ syntax like if/else statements, loops, functions, pointers, references, classes and inheritance.
- Code snippets demonstrating many of these basic C++ concepts like main program structure, preprocessor directives, exceptions, constructors and destructors.
This document provides an overview of the C++ Boot Camp for CSE 380. It includes:
- A disclaimer that the presenter is not the grader and their opinions are their own.
- An outline of topics to be covered in this week's session, including basic C++ structure, control flow, pointers, references, classes and more.
- Code snippets demonstrating basic C++ syntax for many of these concepts.
The document serves as an introduction to the C++ Boot Camp, outlining what will be covered and including examples to demonstrate fundamental C++ concepts and syntax.
Secure Programming Practices in C++ (NDC Oslo 2018)Patricia Aas
Bjarne Stroustrup, the creator of C++, once said : “C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.” He has also said : “Within C++, there is a much smaller and cleaner language struggling to get out.” Both are true.
This talk is for programmers wishing to feel more comfortable navigating the C++ landscape. Motivated by going through well known vulnerability patterns that have been used in exploits for decades, we will explore the programming culture that has developed around the C++ language. Specifically, we will look at programming patterns that navigate around or through some of the dangerous parts of the C++ language. The goal is to build a set of programming practices based in the “smaller and cleaner language” inside C++. And by doing so, we will also build an awareness around code constructs that can potentially “blow your whole leg off”.
The document discusses making Symfony bundles more reusable by removing unnecessary conventions and dependencies. It suggests extracting code from bundles into plain PHP libraries and removing bundle-specific conventions from controllers, entities, and templates. This would allow code to be more portable between frameworks.
The document discusses weaknesses in random number generation and pseudorandom number generation (PRNG) that can be exploited by attackers. It provides examples of programs that used weak PRNGs, allowing session IDs and keys to be guessed. Lessons learned are that numbers used to derive keys and IDs must be truly random and unpredictable, and PRNGs must be cryptographically secure. Two types of randomness are defined: true randomness from unpredictable sources, and pseudorandomness from cryptographically secure PRNGs seeded with true randomness.
The document discusses various Python tips and tricks. It covers topics like *args and **kwargs, debugging with pdb, generators, map filter and reduce functions, set data structure, ternary operators, decorators, global and return statements, mutation, __slots__ magic, virtual environments, collections, enumerate, zip and unzip functions, object introspection, comprehensions, exceptions, classes, lambdas, one-liners, for/else loop, Python C extensions, open function, targeting Python 2+3, coroutines, function caching, and context managers. The document is intended as a reference for intermediate and advanced Python programmers to learn additional useful concepts.
This document summarizes the Linux audit system and proposes improvements. It begins with an overview of auditd and how audit messages are generated and processed in the kernel. Issues with auditd's performance, output format, and filtering are discussed. An alternative approach is proposed that uses libmnl for netlink handling, groups related audit messages into JSON objects, applies Lua-based filtering, and supports multiple output types like ZeroMQ and syslog. Benchmark results show this rewrite reduces CPU usage compared to auditd. The document advocates for continued abstraction and integration of additional data sources while avoiding feature creep.
Strategy and best practice for modern RPGAlemanalfredo
This document provides strategies and best practices for modernizing RPG code, including using data structures for I/O, passing parameters with options like *TRIM and *STRING, avoiding the RPG cycle by using linear main procedures, working with partial arrays, and using naming conventions to improve readability. It recommends qualifying names, using alias names for files, and bulletproofing copy files to avoid mismatches between modules.
The document discusses the C++ Core Guidelines and the Guideline Support Library. The Core Guidelines provide rules for writing good C++ code that avoids crashes, undefined behavior, and other issues. The Guideline Support Library (GSL) implements concepts, types and functions that support following the guidelines. Examples of guidelines include using RAII to avoid resource leaks, preferring compile-time checking over runtime checking, keeping interfaces strongly typed, and avoiding unnecessary heap allocations. Tools like CppCoreCheck and clang-tidy can check code for adherence to the guidelines.
This document discusses using libcurl's share API to share data like cookies and DNS caches between multiple easy handles. It explains that some curl state is kept in the easy handle, so transfers using different handles may not be fully independent. The share API allows creating share objects that specify what data to share, such as cookies and DNS caches. Easy handles can then specify which share objects to use to share data between transfers and achieve better performance than using separate handles independently.
It has been said that one should code as if the person maintaining the code is a violent psychopath who knows where you live. But why do we work with psychopaths? That question unfortunately cannot be answered in this presentation. However, we can shed some light on how to code for readability hopefully avoiding the problem altogether.
Readable code is about a lot more than producing beautiful code. In fact, it has nothing really to do with the beauty of the code and everything to do with the ability to quickly understand what the code does.
In this presentation we will discuss why readable code is so important. We will cover six commonly reoccurring patterns that made code hard to read, why they occur, and how they can easily be avoided:
* Deep Nesting
* Unnecessary Generalization
* Ambiguous Naming
* Hard to Follow Flow of Execution
* Code Style vs. Individualism
* Code Comments
These concepts may be applied to any programming language.
This document summarizes a presentation given by Blair Schneider McKay on October 22, 2003. The presentation covered design patterns including Adapter, Bridge, Factory Method, and Observer. It also included a section on "How to Keep an Information-Technology Job". The agenda outlined the topics to be covered in the 50 minute presentation on design patterns and the 20 minute section on keeping an IT job.
Drupal 101: Tips and Tricks for Troubleshooting DrupalAcquia
The site is published, your design is pristine, and it is ready for action... so, now what? While you may think you’re in the clear, site issues are likely to arise at some point. To protect your business from a site-crash nightmare, there are necessary precautions you should take.
Customer support engineers Lanette and Ally are here to prepare you for the worst; using their 3.5 years of Drupal experience to explain common issues they’ve encountered, how to identify them, and how to remedy problems quickly.
In this webinar, you will learn:
- Early steps to take to maintain site health
- Preparing your team for common site complications
- Tips and tricks for troubleshooting if problems arise
- Third-party tools to help you resolve issues
Joxean Koret - Database Security Paradise [Rooted CON 2011]RootedCON
The document discusses vulnerabilities found in various database software products through analyzing their code and installation directories. Local privilege escalation bugs were found in IBM DB2 and Informix by exploiting how environment variables and shared libraries were handled. Remote code execution bugs were also discovered in UniData and Informix through fuzzing protocols and by exploiting unsafe functions. The document encourages searching for more bugs in database software.
GPU resets are a common problem for every vendor, due to the nature of the
stack. A bad shader can put the render node in an infinite loop, and we need to
reset the GPU, partially or completely. However, each driver (both at userspace
and kernelspace) have different ideas of what to do when a reset happens.
The goal of this session is to try to find a better common ground of how to
manage such resets and how to test this part of the driver.
An initial work on that topic can be find documented here:
https://docs.kernel.org/gpu/drm-uapi.html#device-reset
(c) Linux Plumbers Conference 2024
Vienna, Austria
September 18-20, 2024
https://lpc.events/event/18/
What comes after world domination with Daniel Stenberg, April 2025Daniel Stenberg
Open Source has in many ways already won. It is used in every product by every company, to a very a large degree. But we are not done. We can improve: we can take this further, we can make our projects better, we can enhance our communities and make sure it is done sustainably. The future is ours.
Tightening every bolt at FOSDEM 2025 by Daniel StenbergDaniel Stenberg
Things to do in order to sleep well while having your C code in twenty billion installations. A talk about what the curl project does to minimize security risks: Security, Safety, Reproducibility, Vulnerability handling and the processes and tooling around it.
As BDFL of the curl project, Daniel talks about what this project does to avoid it causing the world to burn. From code style, reviews and tests to signings, reproducibility, running a bug-bounty and becoming a CNA to filter bogus CVEs. curl aims to be top of the class in (Open Source) software security. Here's your chance to point finger and tell us what we should do better.
This document discusses curl security practices such as continuous integration testing on many platforms, custom test servers, tools used for analysis like Valgrind and Clang sanitizers, and "torture tests" that inject errors. It notes that while testing all combinations is impossible, common setups and architectures are tested. The curl bug bounty program is mentioned as paying $40,900 so far. An upcoming code audit and ensuring decreasing CVEs and fuzzing reports over time are discussed as signs the efforts are working. Recent CVE trends and introductions like "dynbuf" are also summarized.
This document provides an overview of curl, an open source command line tool and library for transferring data with Internet protocols. It discusses curl's history starting in 1998, its widespread usage across operating systems, CPU architectures, and planets. It also outlines curl's many supported features and protocols, large number of contributors and commits, extensive testing, and commitment to security and open development. The future of curl is discussed in the context of the growing Internet of Things and connectivity of everyday devices and appliances.
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
👉📱 COPY & PASTE LINK 👉 https://dr-kain-geera.info/👈🌍
Adobe InDesign is a professional-grade desktop publishing and layout application primarily used for creating publications like magazines, books, and brochures, but also suitable for various digital and print media. It excels in precise page layout design, typography control, and integration with other Adobe tools.
Wilcom Embroidery Studio Crack 2025 For WindowsGoogle
Download Link 👇
https://techblogs.cc/dl/
Wilcom Embroidery Studio is the industry-leading professional embroidery software for digitizing, design, and machine embroidery.
Interactive Odoo Dashboard for various business needs can provide users with dynamic, visually appealing dashboards tailored to their specific requirements. such a module that could support multiple dashboards for different aspects of a business
✅Visit And Buy Now : https://bit.ly/3VojWza
✅This Interactive Odoo dashboard module allow user to create their own odoo interactive dashboards for various purpose.
App download now :
Odoo 18 : https://bit.ly/3VojWza
Odoo 17 : https://bit.ly/4h9Z47G
Odoo 16 : https://bit.ly/3FJTEA4
Odoo 15 : https://bit.ly/3W7tsEB
Odoo 14 : https://bit.ly/3BqZDHg
Odoo 13 : https://bit.ly/3uNMF2t
Try Our website appointment booking odoo app : https://bit.ly/3SvNvgU
👉Want a Demo ?📧 business@axistechnolabs.com
➡️Contact us for Odoo ERP Set up : 091066 49361
👉Explore more apps: https://bit.ly/3oFIOCF
👉Want to know more : 🌐 https://www.axistechnolabs.com/
#odoo #odoo18 #odoo17 #odoo16 #odoo15 #odooapps #dashboards #dashboardsoftware #odooerp #odooimplementation #odoodashboardapp #bestodoodashboard #dashboardapp #odoodashboard #dashboardmodule #interactivedashboard #bestdashboard #dashboard #odootag #odooservices #odoonewfeatures #newappfeatures #odoodashboardapp #dynamicdashboard #odooapp #odooappstore #TopOdooApps #odooapp #odooexperience #odoodevelopment #businessdashboard #allinonedashboard #odooproducts
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]saimabibi60507
Copy & Past Link 👉👉
https://dr-up-community.info/
PRTG Network Monitor is a network monitoring software developed by Paessler that provides comprehensive monitoring of IT infrastructure, including servers, devices, applications, and network traffic. It helps identify bottlenecks, track performance, and troubleshoot issues across various network environments, both on-premises and in the cloud.
Maximizing ROI with Odoo Staff Augmentation A Smarter Way to ScaleSatishKumar2651
Discover how Odoo Staff Augmentation can help your business achieve faster ERP implementation, reduced project costs, and a significantly higher return on investment (ROI). In this presentation, we dive deep into the challenges of in-house ERP resource management and showcase a clear, data-backed comparison between traditional hiring and on-demand Odoo staff augmentation.
Whether you're a startup scaling quickly or an enterprise optimizing your ERP workflows, this SlideShare provides valuable insights into:
✅ What is Odoo Staff Augmentation
✅ Key business benefits of augmenting your Odoo team
✅ ROI framework with real-world metrics
✅ Visual cost vs. value comparison
✅ Case study from a successful Odoo implementation
✅ When and why to consider staff augmentation
✅ Engagement models that work for businesses of all sizes
This presentation is ideal for CTOs, project managers, ERP leads, and decision-makers evaluating cost-effective strategies to enhance their Odoo ERP journey.
Navigating EAA Compliance in Testing.pdfApplitools
Designed for software testing practitioners and managers, this session provides the knowledge and tools needed to be prepared, proactive, and positioned for success with EAA compliance. See the full session recording at https://applitools.info/0qj
Top 12 Most Useful AngularJS Development Tools to Use in 2025GrapesTech Solutions
AngularJS remains a popular JavaScript-based front-end framework that continues to power dynamic web applications even in 2025. Despite the rise of newer frameworks, AngularJS has maintained a solid community base and extensive use, especially in legacy systems and scalable enterprise applications. To make the most of its capabilities, developers rely on a range of AngularJS development tools that simplify coding, debugging, testing, and performance optimization.
If you’re working on AngularJS projects or offering AngularJS development services, equipping yourself with the right tools can drastically improve your development speed and code quality. Let’s explore the top 12 AngularJS tools you should know in 2025.
Read detail: https://www.grapestechsolutions.com/blog/12-angularjs-development-tools/
Meet the New Kid in the Sandbox - Integrating Visualization with PrometheusEric D. Schabell
When you jump in the CNCF Sandbox you will meet the new kid, a visualization and dashboards project called Perses. This session will provide attendees with the basics to get started with integrating Prometheus, PromQL, and more with Perses. A journey will be taken from zero to beautiful visualizations seamlessly integrated with Prometheus. This session leaves the attendees with hands-on self-paced workshop content to head home and dive right into creating their first visualizations and integrations with Prometheus and Perses!
Perses (visualization) - Great observability is impossible without great visualization! Learn how to adopt truly open visualization by installing Perses, exploring the provided tooling, tinkering with its API, and then get your hands dirty building your first dashboard in no time! The workshop is self-paced and available online, so attendees can continue to explore after the event: https://o11y-workshops.gitlab.io/workshop-perses
Creating Automated Tests with AI - Cory House - Applitools.pdfApplitools
In this fast-paced, example-driven session, Cory House shows how today’s AI tools make it easier than ever to create comprehensive automated tests. Full recording at https://applitools.info/5wv
See practical workflows using GitHub Copilot, ChatGPT, and Applitools Autonomous to generate and iterate on tests—even without a formal requirements doc.
Surviving a Downturn Making Smarter Portfolio Decisions with OnePlan - Webina...OnePlan Solutions
When budgets tighten and scrutiny increases, portfolio leaders face difficult decisions. Cutting too deep or too fast can derail critical initiatives, but doing nothing risks wasting valuable resources. Getting investment decisions right is no longer optional; it’s essential.
In this session, we’ll show how OnePlan gives you the insight and control to prioritize with confidence. You’ll learn how to evaluate trade-offs, redirect funding, and keep your portfolio focused on what delivers the most value, no matter what is happening around you.
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...Eric D. Schabell
It's time you stopped letting your telemetry data pressure your budgets and get in the way of solving issues with agility! No more I say! Take back control of your telemetry data as we guide you through the open source project Fluent Bit. Learn how to manage your telemetry data from source to destination using the pipeline phases covering collection, parsing, aggregation, transformation, and forwarding from any source to any destination. Buckle up for a fun ride as you learn by exploring how telemetry pipelines work, how to set up your first pipeline, and exploring several common use cases that Fluent Bit helps solve. All this backed by a self-paced, hands-on workshop that attendees can pursue at home after this session (https://o11y-workshops.gitlab.io/workshop-fluentbit).
Download Link 👇
https://techblogs.cc/dl/
Autodesk Inventor includes powerful modeling tools, multi-CAD translation capabilities, and industry-standard DWG drawings. Helping you reduce development costs, market faster, and make great products.
Digital Twins Software Service in Belfastjulia smits
Rootfacts is a cutting-edge technology firm based in Belfast, Ireland, specializing in high-impact software solutions for the automotive sector. We bring digital intelligence into engineering through advanced Digital Twins Software Services, enabling companies to design, simulate, monitor, and evolve complex products in real time.
🌍📱👉COPY LINK & PASTE ON GOOGLE https://techblogs.cc/dl/ 👈
MathType Crack is a powerful and versatile equation editor designed for creating mathematical notation in digital documents.
Why Tapitag Ranks Among the Best Digital Business Card ProvidersTapitag
Discover how Tapitag stands out as one of the best digital business card providers in 2025. This presentation explores the key features, benefits, and comparisons that make Tapitag a top choice for professionals and businesses looking to upgrade their networking game. From eco-friendly tech to real-time contact sharing, see why smart networking starts with Tapitag.
https://tapitag.co/collections/digital-business-cards
4. common libcurl mistakes
Documentation HTTP method CURLOPT_NOSIGNAL
Return codes Certificate checks -DCURL_STATICLIB
Verbose option Zero termination Set the URL
curl_global_init C++ strings callback invokes
Redirects Threading C++ methods
@bagder@bagder
6. Why are these mistakes made?
Humans are lazy
Copy and pasted from questionable sources
Documentation is hard
Internet transfers are complicated
Maybe, just maybe, the curl way isn’t always the smartest...
@bagder@bagder
8. Skipping the documentationSkipping the documentation
Lots of options have plain English names
Might trick you think you know what it does
Still might not work like you presume it does
Copy and paste from random web sites
There are also details
The devil is always in the details
@bagder@bagder
9. Lots of documentationLots of documentation
We offer man pages for every setopt option
We host over 100 stand-alone examples
Consider which docs you rely on (hello
stackoverflow.com)
@bagder@bagder
11. Failure to check return codesFailure to check return codes
@bagder@bagder
12. Return codes areReturn codes are usefuluseful cluesclues
How to know if the call succeeded?
How to know why something doesn’t do what you expected?
What if the feature isn’t even built-in?
Our example source codes might be bad examples
@bagder@bagder
14. Forgetting the verbose option
Strange, how come it doesn’t work?
Hm, why does it act like this?
Also:
/* please be verbose */
rc = curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
/* provide a buffer to store errors in */
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
@bagder@bagder
15. libcurl or content?
By using verbose, you’ll spot if this was libcurl that said it or if this
was actual content delivered from the server!
$ ./app
Error 505: HTTP Version Not Supported
16. Maybe even in production?
Consider it for debug options
Direct the output somewhere suitable with
CURLOPT_STDERR
Alternatively: CURLOPT_DEBUGFUNCTION
@bagder@bagder
18. There's a global init function
It is called implicitly by curl_easy_perform() if not done
explicitly
Not calling it means relying on default, implicit behavior
It typically then implies not calling curl_global_cleanup()
This may result in not releasing all used memory (“Dear sirs,
why does valgrind report that...”)
@bagder@bagder
22. Consider the redirects!
HTTP/1.1 301 Moved Permanently
Server: M4gic server/3000
Retry-After: 0
Location: https://curl.haxx.se/
Content-Length: 0
Accept-Ranges: bytes
Date: Thu, 07 May 2020 08:59:56 GMT
Connection: close
@bagder@bagder
23. Consider the redirects!
Rethink if redirect-following is good
Limit what protocols to allow redirects
Do not set custom HTTP methods on requests that follow
redirects
@bagder@bagder
25. Let users set (parts of) the URL
Scheme (maybe even use another protocol?)
Host name (maybe target a malicious server)
Extreme lengths (pass in 2GB of data?)
Also consider other inputs: user name, password etc risk
getting abused
@bagder@bagder
28. Setting the HTTP method
CURLOPT_CUSTOMREQUEST is a footgun
will be used in follow-up requests as well in
redirects
Does not change libcurl's behavior
@bagder@bagder
30. Disabled certificate checks
Widely abused and misunderstood
Only use while experimenting / developing
Never ship in production
This also goes for HTTPS proxies
SCP and SFTP is different
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
@bagder@bagder
31. Verify server certificates!
Avoid man-in-the-middle attacks
HTTPS is not secure without it!
May require regularly updating the CA store
Alternative: CURLOPT_PINNEDPUBLICKEY
@bagder@bagder
33. Assume zero terminated data in callbacks
CURLOPT_WRITEFUNCTION and CURLOPT_HEADERFUNCTION set
callbacks
Libcurl provide data to the application using these callbacks
The data is provided as a pointer to the data and length of that data
When that data is primarily text oriented, many users wrongly assume
that this means the data comes as zero terminated “strings”.
size_t write_callback(char *dataptr, size_t size, size_t nmemb, void *userp);
@bagder@bagder
35. The callback data is binary
The data isn’t text or “string” based
printf(“%s”, ...), strcpy(), strlen() and similar will not work
on this pointer!
@bagder@bagder
37. C++ strings are not C strings
libcurl provides a C API
C and C++ are similar
C and C++ are also different!
C++ users like their std::string types
C++ Strings are not C strings
curl_easy_setopt() takes a vararg...
@bagder@bagder
38. C++ string bad code
// Keep the URL as a C++ string object
std::string url("https://example.com/");
// Pass it to curl
curl_easy_setopt(curl, CURLOPT_URL, url);
@bagder@bagder
39. C++ string good code
// Keep the URL as a C++ string object
std::string url("https://example.com/");
// Pass it to curl as a C string!
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
@bagder@bagder
41. Threading mistakes
libcurl is thread-safe but there are caveats:
1) No concurrent use of handles
2) OpenSSL < 1.1.0 need mutex callbacks setup
3) curl_global_init is not thread-safe
yet
@bagder@bagder
43. Understanding CURLOPT_NOSIGNAL
Signals is a unix-concept: “an asynchronous notification sent to a
process or to a specific thread within the same process in order to notify it of
an event that occurred”
Signals are complicated in a multi-threaded world and
when used by a library
@bagder@bagder
44. What does libcurl use signals for?
When using the synchronous name resolver, libcurl uses alarm()
to abort slow name resolves (if a timeout is set), which ultimately
sends a SIGALARM to the process and is caught by libcurl
libcurl installs its own sighandler while running, and restores the
original one again on return – for SIGALARM and SIGPIPE.
Closing TLS (with OpenSSL) can trigger a SIGPIPE if the connection
is dead.
Unless CURLOPT_NOSIGNAL is set!
@bagder@bagder
45. What does CURLOPT_NOSIGNAL do?
It stops libcurl from triggering signals
It prevents libcurl from installing its own sighandler
Generated signals must then be handled by the libcurl-
using application!
@bagder@bagder
47. Forgetting -DCURL_STATICLIB
Creating and using libcurl statically is easy and convenient
Seems especially popular on Windows
Requires the CURL_STATICLIB define to be set when building your
application!
Omission causes linker errors:
"unknown symbol __imp__curl_easy_init”
Because Windows need __declspec to be present or absent in the headers
depending on how it links!
@bagder@bagder
48. Static builds mean chasing deps
Libcurl can use many 3rd party dependencies
When linking statically, all those need to be provided to the linker
The curl build scripts (as well as your application linking) usually
need manual help to find them all
@bagder@bagder
50. @bagder@bagder
C++ methods
(Sibling to the C++ strings mistake)
C++ class methods look like functions
C++ class methods cannot be used as callbacks with
libcurl
… since they assume a ‘this’ pointer to the current object
Static member functions work!
51. @bagder@bagder
A C++ method that works
// f is the pointer to your object.
static size_t YourClass::func(void *buffer, size_t sz, size_t n, void *f)
{
// Call non-static member function.
static_cast<YourClass*>(f)->nonStaticFunction();
}
// This is how you pass pointer to the static function:
curl_easy_setopt(hcurl, CURLOPT_XFERINFOFUNCTION, YourClass::func);
curl_easy_setopt(hcurl, CURLOPT_XEFRINFODATA, this);
53. @bagder@bagder
Write callback invokes
Data is delivered by callback (CURLOPT_WRITEFUNCTION)
It might be called none, one, two or many times
Never assume you will get a certain amount of calls
Independently of the data amount
Because of network, server, kernel or other reasons
57. License
This presentation and its contents are
licensed under the Creative Commons
Attribution 4.0 license:
http://creativecommons.org/licenses/by/4.0/
@bagder@bagder