介绍 Bela

前言

在前面,我曾经写过一篇文章 《字符串格式化漫谈》 文章最后提到了 Bela 里面实现了一个类型安全的 bela::StrFormat,实际上 bela 还有很多有趣的功能,本文也就是说一说 Bela 有哪些有趣功能和故事。

2019-05-25    
字符串格式化漫谈

前言

春风化雨,万物复苏,编程始于 Hello world,C 语言的 Hello world 可如下,同样 C++ 亦可如下:

#include <stdio.h>
int main() {
  printf("Hello World!");
  return 0;
}

printf 函数类型为:

int printf(const char *fmt,...);

按照此声明我们可以格式化输出:

#include <stdio.h>
int main() {
  const char *name="Tony Stark";
  printf("Hello %s\n",name);
  return 0;
}

使用 C 编译器 Clang/MSVC/GCC 将其编译运行,在终端或者命令行中会输出如下结果:

2019-04-29    
实现 Git 目录权限控制

前言

Git 与 Subversion 有诸多不同,最核心的一点是前者属于分布式版本控制工具,后者属于集中式版本控制工具。前者的提交行为是离线的,本地的,后者的提交是在线的,需要与远程中央服务器通信,在线创建提交。基于这种现实,Git 和 Subversion 在原生提供的附加功能也存在很大的差别。比如目录权限控制。Git 原生并不支持目录权限控制,而 Subversion 支持。

2019-04-01    
记录 SSH 的一个 Bug

服务器上错误的命令行

最近在改进 BSSHD,将不被允许的命令打印到日志,但是我遇到了一个不符合预期的输出,比如,在客户端运行 SSH,命令如下:

ssh git@localhost echo "There are spaces in the statement" done

我将命令行使用如下处理后输出:

2019-03-18    
构建恰当的 Git SSH Server

前言

相对于 HTTP(HTTPS) 协议,Git 在使用 SSH 协议操作远程存储库时,因为省去了输入用户名密码的环节,往往要更方便一些,并且,在 Gitlab 这样的代码托管服务中,SSH 在时长上更具优势,早期 Gitlab 使用了 Grack 提供 Git HTTP 访问支持,由于 Unicron+Grack 固定数目多线程同步模型导致服务器上的 HTTP 超时不得不设置非常小,而 SSH fork 多线程同步模型反而能够支持更大的访问时长。实际情况中,Gitee 平台里 Git 接入的最大份额也是 SSH。构建恰当的 Git SSH Server 对于整个 Gitee 平台也就非常重要。

2019-03-15    
文件的解析

前言

本文探讨的是计算机文件,计算机文件 用于记录数据到计算机设备上,维基百科上有简短的介绍:

A computer file is a computer resource for recording data discretely in a computer storage device. Just as words can be written to paper, so can information be written to a computer file.

2019-01-25    
Privexec 杂谈

前言

本站的开篇就是讲的 《Windows AppContainer 降权,隔离与安全》,一晃三年多过去了,这三年之中,我开发了一个 Privexec,一个以其他权限启动进程的工具,支持启动 AppContainer 进程,前段实现有用户发起了功能请求1,让 Privexec 支持设置 AppContainerCapabilities,而不是像以前一样在启动 AppContainer 进程时使用 CreateWellKnownSid 创建所有的与 AppContainer 相关的 Capabilities SIDs。于是乎,我就花了一点时间将 Privexec 重构了一番,有所感悟,便将其写下来。

2018-11-30    
基于 Git Namespace 的存储库快照方案

前言

Git 是一种分布式的版本控制系统,分布式版本控制系统的一大特性就是远程存储库和本地存储库都包含存储库的完整数据。 而集中式的版本控制系统只有在中心服务器上才会包含存储库完整的数据,本地所谓的存储库只是远程服务器特定版本的 checkout。当中心服务器故障后,如果没有备份服务器,那么集中式的版本控制系统存储库的数据绝大部分就会被丢失。这很容易得出分布式版本控制系统的代码要必集中式的版本控制系统更加安全。

2018-11-18    
Clangbuilder 已支持自动构建 CURL

cURL

cURL 是一个非常著名的开源 URL 数据传输工具,支持 HTTP,HTTPS,FTP,SCP,SFTP,Telnet 等协议。绝大多数操作系统都自带了,也包括 Windows 10 17134/17763。但系统自带的版本通常都不会及时更新到最新版本,而 cURL 是一个非常活跃的项目,大约2个月就会发布一个新版本。每一次更新都会修复大量 bug,新增很多新特性,比如最近增加了 DOH 更好的 TLS1.3 支持。

2018-11-15    
Git LFS 的反思

前言

在一年多以前,笔者曾经写过一文: 《Git LFS 服务器实现杂谈》,最近笔者开发基于对象存储的 LFS 服务器又有了一些心得,这里分享给大家。

关于 Git LFS

Git LFS 即 Git Large File Storage (大文件存储),即将 git 存储库中的体积较大的,不利于打包的,修改不太频繁的文件单独存储到特定的服务器上,以减小存储库体积,加快用户的克隆拉取体验。其中的原理在 《Git LFS 服务器实现杂谈》 都有说明,如果需要进一步的了解还可以去参考 Git LFS 技术规范: spec.md

2018-07-15