INT_MIN
0x00 INT_MIN的值为什么不能直接表示
如果你写出下面的代码,然后使用Visual Studio编译的话,就会爆出C4146错误来。告诉你这个数字不能直接写进代码里。
12345void check(int i){ if (i > -2147483648) // 爆出错误:C4146 // do somethings}
这是为什么呢?
编译器在处理数字-2147483648时,不会将其看做是一个数字,而是看做一个表达式,在处理时会走两步:
首先处理数字2147483648,这个数字超出了int类型的定义域,故其被临时存储成了unsigned int类型,这在内存中是这样的:0x80000000
对这个unsigned int类型的数字2147483648作用负号,负数在计算机中使用补码表示,对0x80000000计算补码:
1234567 0x80000000表示为二进制为: 1000 0000 0000 0000 0000 0000 0000 0000 其反码为: 0111 1111 1111 11 ...
GNUcash 与复式记账
0x00 历程
大学四年记了4年的账,用了好多方法来记账,感觉自己记账的历程都快赶上一部会计记账的发展史了。
大一一开始的记账用Excel,当时还没有深入学习Excel,不会使用公式和VBA编程,而且所有的数字都是自己手算的,导致用Excel记账的效率极差,这基本上也可以折射会计发展中手工记账的年代了。
后来呢,自己开发了一款记账软件,用C++开发的,纯命令行工具,这个工具呢一共开发了2版,第一版代码可参考GitHub,第二版的代码可参考GitHub,均是我大一时的作品。这2个作品有2个共同的缺陷:
所有货币数额均使用double类型进行存储和计算,这其实是不合乎编码规范的。实际使用中应使用int或long乃至long long这样的整数类型来存储货币,将货币数额乘以100就可以消除掉小数点,比如10.24元就可以存储为整数1024分,然后在显示的时候除以100再显示就好了。
没有引入货币符号的概念,两个作品均只支持一种货币记账——人民币,主要是设计程序的时候没有考虑到后来会买美元花美元这种情况,这就导致算总账的时候,两个货币不能在总账上直接加减计算余额啊,然后就不知道怎么弄。后来我 ...
文件管理
0x00 基本概念
系统运行时,计算机以进程为基本单位进行资源的调度和分配,在用户进行输入、输出中,则以文件为基本单位。 文件系统提供了与二级存储相关的资源的抽象,让用户能在不了解文件的各种属性、文件存储介质的特征以及文件在存储介质上的具体位置等情况下,方便快捷地使用文件。
用户通过文件系统建立文件,提供应用程序的输入、输出,对资源进行管理。我们通过自底向上的形式来描述文件的结构如下:
数据项:数据项是文件系统中最低级的数据组织形式,分为如下两种类型:
基本数据项:用于描述一个对象的某种属性的一个值,如姓名、日期或证件号等,是数据中可命名的最小逻辑数据单位,即原子数据。
组合数据项:由多个基本数据项组成
记录:记录是一组相关的数据项的集合,用于描述一个对象在某方面的属性,如一个考生报名记录包括姓名、出生日期、报考学校代号、身份证等一系列域
文件:文件是指由创建者所定义的一组相关信息的集合,逻辑上可分为两种:
有结构文件:文件由一组相似记录组成,如报考某学校的所有考生的报考信息记录,又称为记录式文件
无结构文件:则被看成是一个字符流,比如一个二进制文件或字符文件,又称为流式文件 ...
Docker 鉴权机制的基本原理
0x00 docker鉴权的工作流程
当用户使用docker pull、docker push从一个registry拉取或上传镜像或者使用docker login命令登陆registry时,就会诱发registry和docker客户端间的鉴权授权机制。官方提供的registry镜像中,仅包含极为有限的权限管理机制,而且其用户的身份信息是存储在容器中的,这显然不适合大多数registry的适用场景。因此官方的registry对外提供一组接口,以适配第三方的鉴权服务器,鉴权的方式基于Json Web Token,下面我们来了解一下这种鉴权授权方式,首先看官方给出的一个流程图:
首先,用户在控制台使用了docker pull或docker push命令,此时docker守护进程(docker daemon)首先会与registry通信,试探一下什么权限都没有能不能拉取或上传镜像;
registry收到请求后,如果需要进一步的授权才能继续操作,那么返回一个401 Unauthorized HTTP响应,告诉docker daemon你需要进一步的权限才能进行操作;
这个时候在客户端,用户就 ...
Docker Cannot Be Stopped
0x00 问题简述
docker container根本停不下来,使用docker rm -f命令强行删除容器也不行,错误称我没有足够的权限,即便我是以root用户在运行docker。错误代码示例:
1ERROR: for yattyadocker_web_1 cannot stop container: 1f04148910c5bac38983e6beb3f6da4c8be3f46ceeccdc8d7de0da9d2d76edd8: Cannot kill container 1f04148910c5bac38983e6beb3f6da4c8be3f46ceeccdc8d7de0da9d2d76edd8: rpc error: code = PermissionDenied desc = permission denied
0x01 起因
Apparmor由于某些未知原因无法正常工作引起,Apparmor是一个应用于Linux下的安全程序。
0x02 解决方案
12systemctl disable apparmor.service --nowservice apparmor te ...
使用 Atom 打造一个无可挑剔的 LaTeX 编辑器
0x00 工具
Atom是GitHub出品的一款编辑器,号称是A hackable text editor for the 21st Century,其最大的亮点当属其插件系统,像Chrome浏览器一样,经由插件(package)的增强可以实现多彩的功能。当然,除了明显的性能的问题,尤其是内存占用上,我对他没有什么别的坏的意见。真是搞不懂,同样是基于electron的vscode为什么就没有这么明显的性能问题。我对比过,打开同样的项目,vscode的内存占用只有atom的五分之一。我估计这可能由于vscode基于TypeScript的原因。我看来atom对vscode的唯一的优势就是颜值高,当然是配置了插件主题以后的颜值高。
0x01 基于Atom搭建LaTeX\LaTeXLATEX编辑器
我们要用到的核心的插件如下:
latex:用于在Atom下调用外部tex编译器编译tex文件
这个插件是不带latex编译器的,需要你自己单独安装,推荐使用tex live,tex live如果完全安装的话,体积是十分庞大的,建议部分安装,以后如果有什么需要的包,可以使用其自带的tex live ...
Docker Registry 基本配置
0x00 配置文件撰写规则
首先给出其官方文档地址:
Configuring a registry
Compose file version 3 reference
我们先来明白registry配置属性的覆盖规则,有两种:
第一种,如果你不想复写整个registry配置文件,而是想仅仅改变其中的几个属性。可以将Configuring a registry中给出的yml文件配置属性转换为相应的环境变量,然后在docker run -e命令中或者在docker-compose.yml中的environment标签下进行复写即可,基本规则为,首先对应的环境变量的名称以REGISTRY开头,然后按照yml文件中的层级,从上往下将名称转换为全大写,然后依次列出,中间以_作为分隔,例如如下yml配置的环境变量转换:
123storage: filesystem: rootdirectory: /somewhere
转换的环境变量即为:
1REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere
第二种,复写整个registry配置文件,首先依 ...
Code of Conduct
0x00 前言
本人为非英语专业,只不过是一名计算机专业的学生,对英语和英文计算机文献翻译工作颇有兴趣,所以自己制定了这么一个翻译守则。无规矩不成方圆,本文主要作为一个对自己平时翻译工作的一个规约。
!> 请注意
!>
!> 此规约诞生于我的译作RESTful API Tutorial完成之后,故RESTful API Tutorial的翻译中,可能由许多不符合此规约的点。
0x01 守则
翻译工作不应该更改原文排版,当然一些由前端实现的特效渲染出的文字效果可以适当地更改在译文中的排版
原文中的超链接,如果其指向的文章也被或将要被翻译过的话,将原链接指向译文,如果没有被翻译过或不打算进一步翻译的话,不应修改原链接指向
专业的词汇的翻译应尽量参考普适性或者被大众广泛接受过的翻译,如果某专业词汇查不到或很难查到前人的翻译,那:
给定自己的翻译,并给出原词汇
实在想不出切当、合适、言简意赅的翻译,可以在译作中直接使用原词汇
对英文技术文献的翻译,专业词汇的解释应尽量做到精准,应依据其定义翻译或解释,而不是单纯地从字面上或者照搬词典翻译,对数据结构的翻译中要避免形译, ...
对富 Js 网站的一点思考
0x00 前言
最近刚刚用docsify重建了blog,docsify是由js驱动的,这样的网站一般称之为JavaScript-rich,我一般将其翻译为富js网站。在重构的过程中产生了一点思考,也是这类富js网站的缺陷,记录如下。
0x01 对CDN不友好
CDN溯源只会简单地回溯源站内容,也就是说,只会回溯网站源代码并缓存,而对于使用js驱动的网站来说,网站源代码往往就只有一份,就像我现在的这个blog网站一样,所有的网页内容全部是通过js渲染上的,CDN溯源只会在CDN结点缓存上网页源代码,CDN结点是不会执行js代码来获取网页实际内容的,这就导致了CDN无法依据实际的URL缓存网站内容。
这点我问了腾讯云的CDN工程师:
0x02 对SEO不友好
目前绝大多数搜索引擎的爬虫们还只会爬取网页源代码,对于客户端使用js渲染后的内容,他们一无所知。这就导致了对SEO不友好,网站搜索引擎权重下降,用户使用搜索引擎来导向到你的网站的难度就愈发增加,而对于大多数个人网站而言,搜索引擎往往是网站访客的主要来源,一下子把这个主要来源给架空了,着实让我有点难受。
在这一方面我查了一些资料,大家 ...
同学的钓鱼网站
0x00 同学的钓鱼网站
今天发生了一个小插曲,我们班,有一位学信息安全的同学,他做了一个假冒我们学校教务处的钓鱼网站,然后将其发到我们班的班级群里面,试图迷惑同学上钩访问,然后盗取教务处的登录账号和密码。
我们学院教务处网站没有专门的子域名,只有IP的形式,从http://210.44.176.43/ 开始一直到http://210.44.176.46/ 一共4个服务器,他发在群里的IP是这样的:http://119.28.隐藏.隐藏/ ,着实让我起了疑心,于是去查了一下IP的来源,发现其来自香港特别行政区腾讯集团,这很明显就是腾讯云香港的服务器,我们学校指定不会将教务处网站服务器的地址设置在香港,然后我试着输入我的学号和一个错误的密码,点击登录,发现他做了一步跳转,到我们学校教务处的真实IP地址,实际并没有登录也没有弹出密码错误的提示信息,所以,我断定他是一个钓鱼网站。
我在班级群里揭发了他,然后就有了下面的对话:
中间跟他私聊了一下,他也坦白向我承认这是他做的一个钓鱼网站:
这种行为在本质上来说属于欺骗,透支同学间的信用,是不可取的。但是我又不想“识破不说破”,最后我还是在班 ...