How to use local unpublished crate in Rust by cargo

Cargo is configured to look for dependencies on crates.io by defalut. However I want to use a local crate. Fortunately, cargo supports to use libraries ont only on crates.io, but also ther registries, git repositories or subdirectories on our local file system.

create a lib

Firstly, create a new package:

1
$ cargo new test_crate --lib

Here we pass --lib because we’re making a library. Then the cargo generates:

Read More

Opengl初学

GLFW

GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。

GLAD

因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:

1
2
3
4
5
6
7
// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);

你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。

Read More

聊一聊linux中的cgroup

最近由于工作原因接触了docker,也就研究一下它的原理,主要看了阿里出的<<自己动手写docker>>,感觉蛮有意思,姑且记录一下。docker可以算是当前非常火热的技术了。我们知道docker基于Namespce和Cgroups,其中

  • Namespace主要用于隔离资源
  • Cgroups用来提供对一组进程以及将来子进程的资源限制

Read More

docker技术分析 - linux namespce机制

docker技术是近年来无比火热的技术,不管是哪个领域大家都在研究和使用docker。
我们在使用docker的时候经常听人说,docker是基于linux内核的Namespace和Cgroup技术实现的。那么究竟什么是Namespace技术呢?

linux namespce

linux的namespce机制提供了一种资源隔离方案,它是Linux平台实现容器这种轻量级的虚拟化的基础。namespce使得PID,IPC,NetWork等系统资源不再是全局性,而是属于特定的namespace的,只需要在clone的时候指定相应的flag,就可以创建相应的namespce。大部分容器就是利用了这一技术实现了资源的隔离,不同容器内的进程属于不同的namespace,彼此透明互不干扰。

目前linux实现了以下6种Namespace

  • Mount namespaces(2.4.19)
Read More

如何在docker中运行ubuntukylin桌面系统

背景

由于要和开源社合办一个活动,要求线上线下同时进行,需要使用对方的云平台,本来以为只需要提供iso镜像就行了,没想到对方只支持docker镜像。虽然之前用过docker,但是完全没想过docker里跑桌面。

思路调研和已有开源项目

说实话,由于没怎么接触过docker,所以花了一上午时间看了下docker实践教程,但是对如何运行桌面还是没什么头绪。但是我之前在win10刚出wsl的时候好奇去尝试过,当时有一种使用ximage映射使wsl运行图形界面的方案,我猜测docker也可以通过这种类似远程桌面的方式来跑桌面。

同时我又寻找了一些开源项目,这里不得不吐槽下,大家似乎对在docker里启桌面都没什么兴趣,相关资料是真的少…

首先是kde neno,kde neno有docker镜像的试用,看了下发现采用的是xserver-xwphyr这个方案,但是对于docker镜像的细节并看不到,遂放弃。

然后我想到了deepin,似乎曾经听说过他们有相应的docker镜像,我抱着试试看的心态去找了找,发现确实有一个在docker里运行桌面的方案,然而是使用xdocker,这个显然不符合我的预期,只能放弃。

Read More

Bonding in darwinia and substrate

What does the bond mean? Somehow it can be translated as building up a strong binding relationship with a PoS network. If you want to put your tokens “at stake”, you must bond them first. But what does the bond actually do? What’s the difference between substrate and darwinia-network?

Account abstractions for bondStash and Controller

  • Stash Key: The Stash account is meant to hold large amounts of funds. Its private key should be as secure as possible in a cold wallet.

  • Controller Key: The Controller account signals choices on behalf of the Stash account, like payout preferences, but should only hold a minimal amount of funds to pay transaction fees. Its private key should be secure as it can affect validator settings, but will be used somewhat regularly for validator maintenance.

Read More

Darwinia Eth-Backing

这几天在写Darwinia的eth-backing模块的测试,遇到不少问题,写个记录。

概述

eth-backing模块的主要负责以太坊的跨链功能,darwinia跨链的思路大致如下:
我在以太坊上建立相应的智能合约,以太坊上的token和darwinia上的token应该是可以1:1兑换的。一笔钱当然不能花两次,所以以太坊上的钱转移到darwinia上时,以太坊上的token就应该被销毁。所以总体逻辑应该是:

    1. 以太坊上销毁这笔token
Read More