用Rclone在Linux下与OneDrive同步

接触Obsidian以后,决心将笔记从OneNote转换成Markdown格式,再由Obisian管理,同步则还是用OneDrive。OneDrive在Linux下没有客户端,不过可以借助Rclone与OneDrive API交互做同步。 安装 curl https://rclone.org/install.sh | sudo bash 配置 Rclone的文档相当齐全,这里参考https://rclone.org/onedrive/ 进行配置。终端输入 rclone config 按提示设定storage的名称(这里设定为onedrive),选择storage类型为Microsoft OneDrive,随后Rclone会唤起浏览器打开登录页面 e) Edit existing remote n) New remote d) Delete remote r) Rename remote c) Copy remote s) Set configuration password q) Quit config e/n/d/r/c/s/q> n name> onedrive Type of storage to configure. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value [snip] XX / Microsoft OneDrive \ "onedrive" [snip] Storage> onedrive Microsoft App Client Id Leave blank normally....

2022-02-25 · Qiao

poor-man-s-profiler

背景 Linux下perf可以说是首选的性能调优工具——无需重新编译目标软件,支持采样多种类型的事件,开销相对较小。不过perf也有明显的缺点,perf是通过采样事件(并且通常都是采样CPU事件)来记录软件运行情况的,因此它的结果往往只能反映程序在某一方面的表现。 换而言之,如果perf采样的是CPU事件,那么其结果只能代表程序On-CPU的表现,至于Off-CPU部分则需要另外采样。虽然也可以通过采样sched:sched_stat_sleep、sched:sched_switch、sched:sched_process_exit来间接分析Off-CPU的情况,但Off-CPU瓶颈的类型可能有很多(IO、线程同步、内存等),只采样特定事件分析容易有所遗漏。 这自然地引出一个问题:有没有工具能够按固定时间间隔记录程序当前调用栈? 不幸的是,perf虽然支持记录cpu-clock、task-clock事件,但内核并没有提供类似于wall-clock的事件。其它采样工具,诸如gprof、gperftools、Valgrind也是如此。 poor man’s profiler 所谓的poor man’s profiler,其原理非常简单。用GDB启动(或关联到)进程,并按一定间隔中断进程并检查当前调用栈,函数的开销则与其在调用栈中出现的频率成正比。 一个简单的实现,poor-profiler.sh: #!/bin/bash set -e command="" sample_number=100 sleep_time=0.01 output_file="poorman-profiler.log" PID=0 # parse arguments while getopts e:n:t:o:p: flag do case "${flag}" in e) command=${OPTARG} ;; n) sample_number=${OPTARG} ;; t) sleep_time=${OPTARG} ;; o) output_file=${OPTARG} ;; p) PID=${OPTARG} ;; *) echo "${OPTARG} are ignored" >&2 ;; esac done # remove old log if [ -f "$output_file" ] ; then rm -v "$output_file" fi # run command in background if not empty if [ -n "$VAR" ]; then ${command} & PID=$!...

2022-02-11 · Qiao

处理托管C++的EEFileLoadException

背景 因为业务的原因,需要从C++端调用一个C#库,设计的调用流程如下: graph LR; n["Native C++"]-->m["Managed C++"]; m-->s["C#"]; 工程的组织如下: graph LR; subgraph "Native C++" user["Native C++库使用者"] nt["Native C++库单元测试"]; n["Native C++库"]; end m["Managed C++库"]; subgraph "C#" s["C#库"]; st["C#库单元测试"]; end user-.->|显式加载|n; nt-->n; n-->m; m-->s; st-->s; 动态库工程: Native C++库:生成Unmanaged.lib和Unmanaged.dll Managed C++库:生成Wrapper.lib和Wrapper.dll C#库:生成Managed.dll 可执行文件工程: Native C++库单元测试:生成UnmanagedTest.exe C#库单元测试:生成ManagedTest.exe Native C++库使用者:生成LibConsumer.exe。与单元测试工程不同的是,LibConsumer.exe会在运行期间调用::LoadLibrary()显示加载Unmanaged.dll,在链接期也不会链接到Unmanaged.lib和Wrapper.lib 现在情况如下:C#库编写完成,且C#库单元测试通过,但Native C++库单元测试未通过,LibConsumer.exe加载Unmanaged.dll也会失败(::LoadLibrary()返回句柄为NULL)。调试发现在托管C++层创建C#对象时会出现EEFileLoadException导致程序崩溃。 EEFileLoadException Microsoft Docs没有找到对EEFileLoadException的描述,不过Stackoverflow上有个简要的回答,见EEFileLoadException When Loading C++ DLL in Managed DLL: An EEFileLoadException indicates the executable cannot find or load one of it’s dependencies. That can of course has different causes (path problem, mixing configurations, mixing platforms)....

2020-11-04 · Qiao

在Windows环境下编译Qt-5-15-1

自Qt 5.15开始,Qt对于开源用户只提供源码包的下载,不再提供预编译安装包。这一策略或是为了促使更多人购买Qt的商用授权。无论对这一决策的态度如何,自Qt 5.15开始,无论是使用静态库还是动态库,编译Qt都将是一个必不可少的步骤了。 1 源码下载 Qt 5.15.1的下载地址:Qt 5.15.x source packages 也可以从国内的镜像下载,Qt的镜像列表:https://download.qt.io/static/mirrorlist/ 下载qt-everywhere-src-5.15.1.zip后解压,这里假定将源码解压到qt5.15.1-src目录。 2 编译环境搭建 在Windows环境下从源码编译安装Qt,除VS开发环境外,还需要先安装Perl和Python。此外,还有一些可选的三方库可以安装,如OpenSSL Toolkit、ICU、ANGLE,这些库可以为Qt提供额外的特性,但并不是必要的,参见Qt官方文档对编译环境的描述:Qt for Windows - Requirements Qt 5.14。 2.1 Visual Studio Qt可以使用VS 2015,VS 2017,VS 2019进行构建。这里选择使用VS 2019,从https://visualstudio.microsoft.com/zh-hans/ 下载安装即可。 2.2 Perl Perl的Windows版本有2种可以下载,分别是ActivePerl和StrawberryPerl。其中ActivePerl需要注册后下载,StrawberryPerl可以直接下载,推荐StrawberryPerl。 StrawberryPerl下载地址:Strawberry Perl for Windows 安装时默认会添加perl到环境变量。安装完成后,可以通过命令行执行perl -v测试环境变量是否安装成功。 2.3 Python 对于Python,Python 2只被qpdf、qwebengine等几个模块需要,如果不需要这几个模块可以只安装Python 3。这里选择只安装Python 3。 在Windows 10下安装Python的注意事项 从Windows 10 2019 五月更新以来,微软试图把 Python 带到 Windows,因此在C:\Users\%USERNAME%\AppData\Local\Microsoft\WindowsApps路径下加入了python.exe、python3.exe几个占位文件。 这几个文件并非真正的python解释器,执行后会弹出Windows Store页面并定位到Python App的详情页。由于这几个文件也处在系统的PATH环境变量内,当用户执行python时有可能会调用占位文件而非实际的python解释器,从而导致运行错误。 可以通过以下步骤关闭该设置: 输入app exec打开Windows的“应用程序别名”界面 关闭为python.exe和python2.exe设置的别名 下载Python:Python Releases for Windows Python.org 安装时选择将Python加入环境变量。可以在命令行内输入python,检查Python解释器是否会运行。 2.4 LLVM 从Qt 5....

2020-09-21 · Qiao

在Windows上编译VTK-9-0-1及其示例

1 准备工作 在Windows下编译VTK需要以下内容: CMake 3.10及以上 Visual Studio及MSVC编译环境 VTK源码 1.1 下载VTK源码 可以在https://vtk.org/download/ 下载VTK的源码、测试数据、文档等内容 其中,VTKData-9.0.1.tar.gz是VTK用于测试的数据,VTKLargeData-9.0.1.tar.gz是VTK部分示例程序所用的数据,这两个文件都可以不用下载,只下载VTK-9.0.1.tar.gz即可。 2 生成VTK 2.1 创建目录 为VTK创建一个文件夹 在文件夹内,创建src和build目录,分别存放源码和生成的文件 将VTK-9.0.1.tar.gz解压到src内 目录结构类似于: c:\data\cpp\vtk\build <--空 c:\data\cpp\vtk\src c:\data\cpp\vtk\src\Accelerators c:\data\cpp\vtk\src\Charts c:\data\cpp\vtk\src\.... 2.2 运行CMake 打开CMake-GUI 选择VTK的源码路径和生成路径 点击“Configure” 选择需要的“generator”,这里选择Visual Studio 15 2017 Win64作为生成器 根据需要调整CMake选项。以下为部分常见的选项: CMAKE_INSTALL_PRFIX:生成的VTK库的安装路径。根据需要选择即可 VTK_BUILD_EXAMPLES:默认为OFF,勾选后生成测试时将一并生成示例代码。由于源码中的测试工程管理不便,且测试资源需要单独下载和配置,这里选择不生成源码中的示例,后续单独克隆VTK的测试代码仓库并生成。 VTK_USE_CUDA:默认为OFF,勾选后开启对CUDA的支持 VTK_GROUP_QT:勾选后将开启对Qt的支持,编译VTK在Qt中的控件类等 再次点击“Configure”进行配置 点击“Generator”生成VS 2017对应的工程 点击"Open Project",这时会调用VS 2017打开CMake生成的工程 2.3 构建 在VS 2017中将配置切换到"Release",右键ALL_BUILD项目,选择“生成”即可。构建完成后,在build/bin/Release下便能看到编译好的动态库文件。 2.4 安装 右键INSTALL项目,选择“生成”即可将VTK相关的头文件、库文件、动态库文件安装到CMAKE_INSTALL_PREFIX指定的位置。安装完成后,目录结构应类似于: c:\program file\VTK\bin c:\program file\VTK\include c:\program file\VTK\lib c:\program file\VTK\share 其中,\bin目录包含了所有的VTK动态库文件,可以该路径加入环境变量。 如果需要更改安装路径,再次打开CMake-GUI更改CMAKE_INSTALL_PREFIX后,重新加载工程生成INSTALL即可 3 生成示例 3.1 示例的来源 如前所言,VTK源码包内已经附带了一些示例程序,这些示例程序旨在以简单一致的格式来说明VTK的一些概念,然而这些例子只涵盖了VTK功能的一小部分。...

2020-09-17 · Qiao