最新经常在新的环境中安装Oh-My-Zsh,所以就写了一个一键安装脚本
一、安装脚本
1 | apt install zsh -y |
二、一键安装
1 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/killf/install-oh-my-zsh/master/install-oh-my-zsh.sh" |
最新经常在新的环境中安装Oh-My-Zsh,所以就写了一个一键安装脚本
1 | apt install zsh -y |
1 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/killf/install-oh-my-zsh/master/install-oh-my-zsh.sh" |
在Rust中实现动态派发(即多态),在运行时确定具体的函数在某些场景下是非常有用的,比如编写插件系统。Rust中的dyn Trait本质上是一个胖指针,记录数据地址和虚函数表地址。
1 | trait Shape { |
测试一下,结果如下:1
2square: 9
circle: 28.274333882308138
Rust支持no_std模式,即不使用标准库,可以大大的减少包的大小
1 | #![no_std] |
编译命令:1
2
3
4
5
6
7
8rustc \
-C panic=abort \
-C opt-level=z \
-C lto \
-C codegen-units=1 \
-C strip=symbols \
-C link-arg=-nostartfiles \
src/main.rs -o test
测试一下,会显示“hello,world!”,如下:1
./test
快排的时间复杂度$O(n*log(n))$,空间复杂度$O(1)$
1 | #include <iostream> |
给定一个二叉树和二叉树中的两个不同节点,寻找这个两个节点的最小公共祖先。
思路是:先找到一条路径到这个两个节点中的其中一个,然后从下往上遍历这个节点的各级父节点,寻找这个节点是否包含另外一个节点。
1 | #include <iostream> |
LRU全称
Least Recently Used,即最近最久未使用算法,表示如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。时间复杂度$O(1)$,空间复杂度$O(1)$。
1 | #include <iostream> |
为了查看/修改一个长时间运行系统的内部状态,可以集成IPython,代码如下:
1 | import time |
通常,数据库是持久化的最佳方案,几乎每个稍微大一点的系统都会用到数据库,市面上存在各种各样的数据库系统,本文采用一种最常用的数据库系统——MySql。
访问数据库的方式大体上可以分为两种,一种是直接(或间接)基于数据库驱动的类SQL的方式,另外一种在数据库驱动之上更高抽象的ORM方式。pymysql是采用Python语言编写的MySql数据库驱动,其优点是安装便捷(可以查看源码哦~),缺点是速度没有那么快,但也基本能满足日常需求(对于性能要求比较高的场景,可考虑mysqldb)。sqlalchemy是高层次的ORM框架,支持多种数据库和多种数据库驱动。sqlacodegen可以根据已有的数据库生成sqlalchemy的模型文件,避免手工同步数据库和模型。
本文简单介绍pymysql+sqlalchemy+sqlacodegen的联合使用。
more >>周末抽空研究了一下vscode中的lsp,lsp是基于rpc协议的,于是就尝试做了一个简单的RPCServer。
RPCServer的使用与Flask类似,如下:
1 | from rpc_server import RpcServer |
有个需求是寻找一个连续函数,来统计图片中的像素修改数量,使用该函数做为loss,能够迫使模型减少修改图像的像素,因此需要一个绘制函数曲线的方法。
目标函数应该在0处有极大的梯度,在x=0附近以极快的速度从0变为1,因此考虑对sigmoid的函数进行增强,如下图:

代码如下:
1 | import numpy as np |
C++的高效 + Python的简单 = 无与伦比的利器
总结一下使用C++编写Python扩展的方法和基本步骤,其中用到
swig通常需要4类文件,比如
example.h、example.cpp、example.i、setup.py,可以任意选择你喜欢的IDE
example.h头文件需要被C编译器识别,如下:
1 | #ifndef PYTHON_EXAMPLE_H |
example.cpp1 | #include "example.h" |
example.iswig脚本,用于生成胶水代码。注意,应当把头文件添加到生成的文件中,代码如下:
1 | %module example |
setup.py用于生成python扩展的配置文件,代码如下:
1 | from setuptools import setup, Extension |
使用如下命令进行编译:
1 | python setup.py build_ext --inplace # 编译,构建扩展 |
使用时,像使用普通模块一样即可:
1 | import example |
bit数组(位数组)是一个保存大规模对象(通常以万计)状态的有力工具,本文采用内置的bytearray来实现一个轻量级的bit数组,当然你也可以选择使用已发布的bitarray(使用pip进行安装即可),该组件采用c语言编写,功能齐全、性能良好,值得推荐。
既然已经有了类似的工具,为啥还要重复造轮子?
- 为了使项目尽可能少的依赖其他外部组件,使项目轻量化
- 外部组件通常是不可控的,不利于系统结构的优化调整
- 世上只有两种程序员,一种是造过轮子的,另一种是没造过轮子的
1 | class bitarray(): |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true