0%

起因是一个多月没写代码,才发现git pull用不了了,错误如下:

$ git pull
Username for 'https://github.com': XUranus
Password for 'https://XUranus@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access 'https://github.com/xuranus/blog/': The requested URL returned error: 403

原来是2021年8月13日后Github为了防黑客禁止了密码验证方式,公告详见:2020-12-15-token-authentication-requirements-for-git-operations,意思是如果使用HTTPS进行Git操作需要使用token替换原来的密码。

阅读全文 »

我以为一个“技术博客”写些无病呻吟或骂街发泄的故事是不合时宜的,但近期工作上一些尤为荒唐的经历还是值得大书特书一番。故事中的人物身份、地点均已隐去,不存在侵权or人身攻击行为。偶然发现这篇博文的朋友们,若有兴趣听我发牢骚的不妨端个小板凳坐下,这故事可能有点长。

阅读全文 »

用deep-learning-4j在Spring项目中集成深度学习模块的时候,目录中出现了一个.so动态链接库文件,我猜到这也许就是所谓的深度学习Backend,用于使用GPU加速计算,于是便对Java中调用本地程序的过程产生了兴趣,想写个Demo来验证以下。

环境:Linux

以一个Fibonacci数列为例,我们想让他作为native方法存在,而不是用Java实现。定义一个Fibonacci类,声明两个方法:

public class Fibonacci {
public native static void init();
public native static int get(int i);
}

本地方法需要native关键字修饰,且无方法体。init()用于初始化一个Fibonacci表,get(i)用于返回序列某个值。用javah Fibonacci生成一个Fibonacci.h头文件:

阅读全文 »

背景

我写了一个矩阵加减的程序,其中main.cpp如下:

// main.cpp
#include <iostream>
#include "matrix.h"

int main() {
double v[12] {
1, 2, 3, 4,
5, 6, 7, 8,
9,10,11,12};
matrix m1(3, 4, v);
matrix m2 = 2 * m1;

std::cout << "m1 = \n" << m1 << std::endl;
std::cout << "m2 = \n" << m2 << std::endl;
std::cout << "m1 + m2 = \n" << m1 + m2 << std::endl;

return 0;
}

他创建了两个矩阵对象m1m2,分别打印m1m2以及m1 + m1。如果注释掉std::cout << "m1 + m2 = \n" << m1 + m2 << std::endl;,可以正常执行,输出结果如下:

阅读全文 »

背景

我写了一个矩阵的基本运算库,头文件matrix.h中是class matrix成员变量和方法的声明,方法的具体实现放在matrix.cpp中。在main.cpp#include <matrix.h>调用库文件。

以往要编译这种文件的时候,往往都是g++ matrix.cpp main.cpp -o main直接生成一个main可执行文件。如果项目还有还多其他的依赖呢?继续把全部代码打包成一个很大的可执行文件吗?如果日后很多程序都复用这个模块,是否会存储和加载冗余的代码?

阅读全文 »