 Using the Microsoft Graph API to get Office 365 data in your mobile appsUsing the Microsoft Graph API to get Office 365 data in your mobile apps Alex Ziskind Technical Director @digitalix www.nuvious.com Hi, I’m Alex From + 750 Million 50 Million per month Problems0 码力 | 15 页 | 7.00 MB | 1 年前3 Using the Microsoft Graph API to get Office 365 data in your mobile appsUsing the Microsoft Graph API to get Office 365 data in your mobile apps Alex Ziskind Technical Director @digitalix www.nuvious.com Hi, I’m Alex From + 750 Million 50 Million per month Problems0 码力 | 15 页 | 7.00 MB | 1 年前3
 Working with Asynchrony Generically: A Tour of C++ ExecutorsEXAMPLE: LAUNCHING CONCURRENT WORK namespace ex = std::execution; int compute_intensive(int); int main() { unifex::static_thread_pool pool{8}; ex::scheduler auto sched = pool.get_scheduler(); ex::sender EXAMPLE: LAUNCHING CONCURRENT WORK namespace ex = std::execution; int compute_intensive(int); int main() { unifex::static_thread_pool pool{8}; ex::scheduler auto sched = pool.get_scheduler(); ex::sender Use pipe syntax if you want to. namespace ex = std::execution; int compute_intensive(int); int main() { unifex::static_thread_pool pool{8}; ex::scheduler auto sched = pool.get_scheduler(); ex::sender0 码力 | 121 页 | 7.73 MB | 6 月前3 Working with Asynchrony Generically: A Tour of C++ ExecutorsEXAMPLE: LAUNCHING CONCURRENT WORK namespace ex = std::execution; int compute_intensive(int); int main() { unifex::static_thread_pool pool{8}; ex::scheduler auto sched = pool.get_scheduler(); ex::sender EXAMPLE: LAUNCHING CONCURRENT WORK namespace ex = std::execution; int compute_intensive(int); int main() { unifex::static_thread_pool pool{8}; ex::scheduler auto sched = pool.get_scheduler(); ex::sender Use pipe syntax if you want to. namespace ex = std::execution; int compute_intensive(int); int main() { unifex::static_thread_pool pool{8}; ex::scheduler auto sched = pool.get_scheduler(); ex::sender0 码力 | 121 页 | 7.73 MB | 6 月前3
 Harbor Deep Dive - Open source trusted cloud native registry(selected) x x Main Features 6 Web Portal • Based on open source Clarity • Image operation full capabilities • Batch operations Restful API • Complete API for integration • Swagger API doc Replication for audit Distribution Policy • Based on content trust • Based on vulnerability • Based on RBAC Main Features ( Cont. ) 7 Vulnerability Scanning • Kinds of scanning policies • Elaborate scanning report project and system scopes • Mark labels to image and chart Harbor Architecture API Routing API Routing Core Service (API/Auth/GUI) Image Registry Trusted Content Vulnerability Scanning Job Service0 码力 | 15 页 | 8.40 MB | 1 年前3 Harbor Deep Dive - Open source trusted cloud native registry(selected) x x Main Features 6 Web Portal • Based on open source Clarity • Image operation full capabilities • Batch operations Restful API • Complete API for integration • Swagger API doc Replication for audit Distribution Policy • Based on content trust • Based on vulnerability • Based on RBAC Main Features ( Cont. ) 7 Vulnerability Scanning • Kinds of scanning policies • Elaborate scanning report project and system scopes • Mark labels to image and chart Harbor Architecture API Routing API Routing Core Service (API/Auth/GUI) Image Registry Trusted Content Vulnerability Scanning Job Service0 码力 | 15 页 | 8.40 MB | 1 年前3
 C++23: An Overview of Almost All New and Updated FeaturesCollection Support34 Trim Whitespace Before Line Splicing  What is the output of the following? int main() { int i = 1 // \ + 42 ; std::cout << i; }  It’s undefined by the standard pre C++23 wrapper headers (e.g. ::fopen()) Standard Library Modules42  Modern “Hello World”: import std; int main() { std::println("Hello World!"); } Standard Library Modules43 Agenda  C++23 Core Language // Yield a value to the caller, and suspend the coroutine. co_yield i; } } int main() { auto gen { getSequenceGenerator(10, 5) }; for (const auto& value : gen) { std::print("{}0 码力 | 105 页 | 759.96 KB | 6 月前3 C++23: An Overview of Almost All New and Updated FeaturesCollection Support34 Trim Whitespace Before Line Splicing  What is the output of the following? int main() { int i = 1 // \ + 42 ; std::cout << i; }  It’s undefined by the standard pre C++23 wrapper headers (e.g. ::fopen()) Standard Library Modules42  Modern “Hello World”: import std; int main() { std::println("Hello World!"); } Standard Library Modules43 Agenda  C++23 Core Language // Yield a value to the caller, and suspend the coroutine. co_yield i; } } int main() { auto gen { getSequenceGenerator(10, 5) }; for (const auto& value : gen) { std::print("{}0 码力 | 105 页 | 759.96 KB | 6 月前3
 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南CONFIGURE_DEPENDS src/*.cpp) • 疑问 1 :都是按照通配符批量匹配文件,有什么区别? • GLOB : src/main.cpp (√) src/test/main.cpp ( × ) • GLOB_RECURSE : src/main.cpp (√) src/test/main.cpp (√) • 区别在于 GLOB_RECURSE 允许 * 匹配嵌套的目录。 • 疑问 2 :加了 CONFIGURE_DEPENDS C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南CONFIGURE_DEPENDS src/*.cpp) • 疑问 1 :都是按照通配符批量匹配文件,有什么区别? • GLOB : src/main.cpp (√) src/test/main.cpp ( × ) • GLOB_RECURSE : src/main.cpp (√) src/test/main.cpp (√) • 区别在于 GLOB_RECURSE 允许 * 匹配嵌套的目录。 • 疑问 2 :加了 CONFIGURE_DEPENDS- . - • 例如: 1.2.0 , 0.6.8 , 18.11.0 • major 称为主版本号,出现功能重大变更,以至于和旧 API 不兼容的时候会增加该号。 • minor 称为次版本号,功能有所变更或增加,但依然和旧的 API 兼容时会增加该号。 • patch 称为补丁版号,功能没有改变,只是修复了一些 bug 就重新发布时会增加该号。 • 也有的软件不拘一格(例如我们的 0 码力 | 56 页 | 6.87 MB | 1 年前3
 C++20 STL Features: 1 Year of Development on GitHub17 Comparing Integers8 Usual Arithmetic Conversions #include C++20 STL Features: 1 Year of Development on GitHub17 Comparing Integers8 Usual Arithmetic Conversions #include- using namespace std; int main() { cout << boolalpha; short s = -1; unsigned int ui = 1729; cout << (s < • GH-621 implemented by Neargye #include - #include - using namespace std; int main() { cout << boolalpha; short s = -1; unsigned int ui = 1729; cout << cmp_less(s - #include - #include - #include - using namespace std; int main() { static constexpr array skipped_extensions{".dll"sv, ".exe"sv, ".obj"sv}; static_ass 0 码力 | 45 页 | 702.09 KB | 6 月前3
 C++高性能并行编程与优化 -  课件 - 03 现代 C++ 进阶:模板元编程• 这是因为编译器对模板的编译是惰性的,即只有当前 .cpp 文件用到了这个模板,该模板 里的函数才会被定义。而我们的 sumto.cpp 中没有用到 sumto<> 函数的任何一份定义, 所以 main.cpp 里只看到 sumto<> 函数的两份声明,从而出错。 • 解决:在看得见 sumto<> 定义的 sumto.cpp 里,增加两个显式编译模板的声明: 一般来说,我会建议模板不要 分离声明和定义,直接写在头 • 要证明模板的惰性,只需看这个例子: • 要是编译器哪怕细看了一眼:字符串怎么可能被写入呢?肯定是会出错的。 • 但是却没有出错,这是因为模板没有被调用,所以不会被实际编译! • 而只有当 main 调用了这个函数,才会被编译,才会报错! • 用一个假模板实现延迟编译的技术,可以加快编译的速度,用于代理模式等。 模板函数:一个例子 • 比如,要打印任意一个 vector : 模板函数:配合运算符重载 lambda 表达式:捕获 main 中的变量 • lambda 函数体中,还可以使用定义他的 main 函数中的变量,只需要把方括号 [] 改成 [&] 即可: • 函数可以引用定义位置所有的变量,这个 特性在函数式编程中称为闭包 (closure) 。 lambda 表达式:修改 main 中的变量 • [&] 不仅可以读取 main 中的变量,还可 以写入 main 中的变量,比如可以通过0 码力 | 82 页 | 12.15 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 03 现代 C++ 进阶:模板元编程• 这是因为编译器对模板的编译是惰性的,即只有当前 .cpp 文件用到了这个模板,该模板 里的函数才会被定义。而我们的 sumto.cpp 中没有用到 sumto<> 函数的任何一份定义, 所以 main.cpp 里只看到 sumto<> 函数的两份声明,从而出错。 • 解决:在看得见 sumto<> 定义的 sumto.cpp 里,增加两个显式编译模板的声明: 一般来说,我会建议模板不要 分离声明和定义,直接写在头 • 要证明模板的惰性,只需看这个例子: • 要是编译器哪怕细看了一眼:字符串怎么可能被写入呢?肯定是会出错的。 • 但是却没有出错,这是因为模板没有被调用,所以不会被实际编译! • 而只有当 main 调用了这个函数,才会被编译,才会报错! • 用一个假模板实现延迟编译的技术,可以加快编译的速度,用于代理模式等。 模板函数:一个例子 • 比如,要打印任意一个 vector : 模板函数:配合运算符重载 lambda 表达式:捕获 main 中的变量 • lambda 函数体中,还可以使用定义他的 main 函数中的变量,只需要把方括号 [] 改成 [&] 即可: • 函数可以引用定义位置所有的变量,这个 特性在函数式编程中称为闭包 (closure) 。 lambda 表达式:修改 main 中的变量 • [&] 不仅可以读取 main 中的变量,还可 以写入 main 中的变量,比如可以通过0 码力 | 82 页 | 12.15 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程t0 + 3; // 当前时间的三秒后 • usleep(3000000); // 让程序休眠 3000000 微秒,也就是 3 秒 • C 语言原始的 API ,没有类型区分,导致很容易弄错单位,混淆时间点和时间段。 • 比如 t0 * 3 ,乘法对时间点而言根本是个无意义的计算,然而 C 语言把他们看做一样的 long 类型,从而容易让程序员犯错。 从而延长其生命周期到 myfunc 函数体外 。 • 这样就可以等下载完再退出了。 main 函数退出后自动 join 全部线程 • 但是需要在 main 里面手动 join 全部线 程还是有点麻烦,我们可以自定义一个类 ThreadPool ,并用他创建一个全局变量, 其解构函数会在 main 退出后自动调用。 std::jthread :符合 RAII 思想,解构时自动 join() • std::async 接受一个带返回值的 lambda ,自身返回一个 std::future 对象 。 • lambda 的函数体将在另一个线程里执行 。 • 接下来你可以在 main 里面做一些别的事 情, download 会持续在后台悄悄运行。 • 最后调用 future 的 get() 方法,如果此时 download 还没完成,会等待 download 完成,并获取0 码力 | 79 页 | 14.11 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程t0 + 3; // 当前时间的三秒后 • usleep(3000000); // 让程序休眠 3000000 微秒,也就是 3 秒 • C 语言原始的 API ,没有类型区分,导致很容易弄错单位,混淆时间点和时间段。 • 比如 t0 * 3 ,乘法对时间点而言根本是个无意义的计算,然而 C 语言把他们看做一样的 long 类型,从而容易让程序员犯错。 从而延长其生命周期到 myfunc 函数体外 。 • 这样就可以等下载完再退出了。 main 函数退出后自动 join 全部线程 • 但是需要在 main 里面手动 join 全部线 程还是有点麻烦,我们可以自定义一个类 ThreadPool ,并用他创建一个全局变量, 其解构函数会在 main 退出后自动调用。 std::jthread :符合 RAII 思想,解构时自动 join() • std::async 接受一个带返回值的 lambda ,自身返回一个 std::future 对象 。 • lambda 的函数体将在另一个线程里执行 。 • 接下来你可以在 main 里面做一些别的事 情, download 会持续在后台悄悄运行。 • 最后调用 future 的 get() 方法,如果此时 download 还没完成,会等待 download 完成,并获取0 码力 | 79 页 | 14.11 MB | 1 年前3
 Visualize Time Enabled Data using ArcGIS Qt (C++) and ToolkitClone the repository and import the path in .pro file in Qt Creator - Register your components in main.cppArcGIS Runtime Toolkit for Qt • Time slider UI component: - Provides controls to visualize and elementsResources • ArcGIS Runtime API for Qt - https://developers.arcgis.com/qt/ • ArcGIS Runtime Toolkit for Qt API reference - https://developers.arcgis.com/qt/toolkit/api-reference/ • ArcGIS Runtime0 码力 | 10 页 | 734.09 KB | 6 月前3 Visualize Time Enabled Data using ArcGIS Qt (C++) and ToolkitClone the repository and import the path in .pro file in Qt Creator - Register your components in main.cppArcGIS Runtime Toolkit for Qt • Time slider UI component: - Provides controls to visualize and elementsResources • ArcGIS Runtime API for Qt - https://developers.arcgis.com/qt/ • ArcGIS Runtime Toolkit for Qt API reference - https://developers.arcgis.com/qt/toolkit/api-reference/ • ArcGIS Runtime0 码力 | 10 页 | 734.09 KB | 6 月前3
 C++高性能并行编程与优化 -  课件 - 13 C++ STL 容器全解之 vector返回的数组长度一起使用(见上一课《 C 语言指针》中提到,连续的动态数组只需要 知道首地址和数组长度即可完全确定)。 • 用他来获取一个 C 语言原始指针 int * , 很方便用于调用 C 语言的函数和 API 等 ,同时还能享受到 vector 容器 RAII 的安 全性。 • ~vector() noexcept; vector 容器: RAII 避免内存泄露 • 如果用 new/delete 之后即使不直接使用外面的那个临时对象 a , 也可以继续通过 data() 指针来访问数据。 vector 容器:延续生命周期 • 也可以移动到一个全局变量的 vector 对象。 • 这样数组就会一直等到 main 退出了才释放。 • 小彭老师曾经在 taichi 中就是用了一个全局 变量伺候了 unique_ptr 脱离作用域会释放的 麻烦,让 lambda 中仍可访问对象。 • 至于那个全局变量本身有没有被使用则无所谓 至于那个全局变量本身有没有被使用则无所谓 (我们是通过首地址指针间接访问)。他的存 在只是为了延续生命周期,告知 C++ 编译器 什么时候能 delete 而已。 (注: C++ 规定全局变量都会在进入 main 函数之前构造, main 函数返回之后解构) vector 容器: resize 到更大尺寸会导致 data 失效 • 当 resize 的目标长度大于原有的容量时, 就需要重新分配一段更大的连续内存,并0 码力 | 90 页 | 4.93 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 13 C++ STL 容器全解之 vector返回的数组长度一起使用(见上一课《 C 语言指针》中提到,连续的动态数组只需要 知道首地址和数组长度即可完全确定)。 • 用他来获取一个 C 语言原始指针 int * , 很方便用于调用 C 语言的函数和 API 等 ,同时还能享受到 vector 容器 RAII 的安 全性。 • ~vector() noexcept; vector 容器: RAII 避免内存泄露 • 如果用 new/delete 之后即使不直接使用外面的那个临时对象 a , 也可以继续通过 data() 指针来访问数据。 vector 容器:延续生命周期 • 也可以移动到一个全局变量的 vector 对象。 • 这样数组就会一直等到 main 退出了才释放。 • 小彭老师曾经在 taichi 中就是用了一个全局 变量伺候了 unique_ptr 脱离作用域会释放的 麻烦,让 lambda 中仍可访问对象。 • 至于那个全局变量本身有没有被使用则无所谓 至于那个全局变量本身有没有被使用则无所谓 (我们是通过首地址指针间接访问)。他的存 在只是为了延续生命周期,告知 C++ 编译器 什么时候能 delete 而已。 (注: C++ 规定全局变量都会在进入 main 函数之前构造, main 函数返回之后解构) vector 容器: resize 到更大尺寸会导致 data 失效 • 当 resize 的目标长度大于原有的容量时, 就需要重新分配一段更大的连续内存,并0 码力 | 90 页 | 4.93 MB | 1 年前3
共 36 条
- 1
- 2
- 3
- 4













