GF47的鱼缸

欸乃一声山水绿


  • 首页

  • 标签

  • 分类

  • 归档

Windows系统中的软链接和硬链接

发表于 2019-01-13 | 分类于 Windows | 阅读次数:

Windows系统中的软链接和硬链接


Linux系统下有一个很好用的命令 ln ,它允许我们为文件在其他目录创建一个同步链接,它就像创建了一个相同的文件,而且不占用存储空间。
这不就是Windows下的快捷方式么……然而并不是。
Windows下常用的快捷方式严格来说是另外一个文件,后缀名为 .lik ,是占用存储空间的,只不过系统处理这个文件时使用了一些有色眼镜,这里就不多赘述了。
那么,有没有一款……
当然是有的,而且Windows自己在C盘偷偷用了好多。
同样,如果我们嫌C盘太挤,也可以自己把相关目录链接到DEF盘里去,但是要注意酌情作死喔。

创建符号链接命令

1
2
3
4
5
6
7
MKLINK [[/D] | [/H] | [/J]] Link Target

/D 创建目录符号链接。默认为文件符号链接。
/H 创建硬链接而非符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(相对或绝对)。

示例

  • 假如我们有这么一个目录 C:\Users\GF47\Documents\A 。
1
2
3
4
5
6
7
8
C:\Users\GF47\Documents\A>tree /f
文件夹 PATH 列表
卷序列号为 A888-2E49
C:.
│ source.txt
│
└─SourceDir
source2.txt
  • 创建一个新目录 C:\Users\GF47\Documents\B 。

  • 为目录 A 中的 source.txt 文件和 SourceDir 文件夹创建普通的快捷方式,放到目录 B 中。

  • 同样在目录 B 中为它们创建符号链接。

1
2
3
4
5
C:\Users\GF47\Documents\B>mklink _s_source.txt ..\A\source.txt
为 _s_source.txt <<===>> ..\A\source.txt 创建的符号链接

C:\Users\GF47\Documents\B>mklink /D _s_Source ..\A\SourceDir
为 _s_source <<===>> ..\A\SourceDir 创建的符号链接
  • 创建硬链接
1
2
3
4
5
C:\Users\GF47\Documents\B>mklink /H _h_source.txt ..\A\source.txt
为 _h_source.txt <<===>> ..\A\source.txt 创建了硬链接

C:\Users\GF47\Documents\B>mklink /H _h_SourceDir ..\A\SourceDir
拒绝访问。

文件夹的硬链接是不允许地,因为文件散落在硬盘的不同角落里,硬链接文件夹这种神奇操作……无法想象。
更正:咩咩的文件夹的硬链接居然也是可以的,/J 创建的链接其实就是文件夹的硬链接……

  • 结果如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Users\GF47\Documents\B>dir
驱动器 C 中的卷没有标签。
卷的序列号是 A888-2E49

C:\Users\GF47\Documents\B 的目录

2019/01/13 17:36 <DIR> .
2019/01/13 17:36 <DIR> ..
2019/01/13 17:35 1,011 source.txt - 快捷方式.lnk
2019/01/13 17:35 923 SourceDir - 快捷方式.lnk
2019/01/13 17:05 2,002 _h_source.txt
2019/01/13 17:32 <SYMLINKD> _s_Source [..\A\SourceDir]
2019/01/13 17:31 <SYMLINK> _s_source.txt [..\A\source.txt]
4 个文件 3,936 字节
3 个目录 157,768,110,080 可用字节
  • 修改 source.txt[_s_source.txt][_h_source.txt] 的任意一个,都会影响其它两个。

  • 移动 A 目录中的原始文件和文件夹,B 目录中软链接的 _s_source.txt 和 _s_Source 失效了,快捷方式则能正确链接到原文件和文件夹上,而且 _h_source 也可以正常链接……

  • 把原始文件和文件夹移回 A 目录中,所有的链接都恢复正常。

  • 删除 A 目录中的原始文件和文件夹,B 目录中除了硬链接的 _h_source.txt 之外,全部失效,_h_source.txt 则保持原有内容。

更正:原始文件被删除后,文件的快捷方式并没有失效,居然自动链接到 _h_source.txt 这个硬链接上去了,有点6。看来硬链接是在磁盘上做了什么神奇操作。

  • 分析分析

软链接文件和文件夹显然不占空间,硬链接严格来说也不占新空间,它只是原始文件的另外一个入口,而快捷方式都占用新空间,而且大小和原文件文件夹无关。

一个5的速算法,由此引发的乱七八糟的想法

发表于 2019-01-05 | 阅读次数:

一个5的速算法,由此引发的乱七八糟的想法


过年回家看小侄子在玩算术卡片,跟孩子玩了一会儿。然后逛b呼看见一个挺热的话题——证明:哥德巴赫猜想,突然想起来当年上初一时候胡思乱想碰出来的一个关于5的速算法。当时想着跟同桌装逼,然后验算的时候发现原理极其简单……只是那时候刚刚学代数,还没把xyz用熟练。还好装逼前冷静了一把,233。
由此可见,先进的数学工具是多么重要。感谢傅里叶,感谢泰勒,感谢发明矩阵的那一票人,感谢cctv……

归纳

尾数为5的数的平方

5 * 5 = 25 0 = 0 * 1
15 * 15 = 225 2 = 1 * 2
25 * 25 = 625 6 = 2 * 3
35 * 35 = 1225 12 = 3 * 4
…
(x * 10 + 5) * (x * 10 + 5) = (x * x + x) * 100 + 25

于是可以快速计算 255 * 255 的结果为 (25 * 25 + 25) * 100 + 25 ,即 (((2 * 2 + 2) * 100 + 25) + 25) * 100 + 25 ,即 65025 。
同理, 355 * 355 的结果为 (35* 35 + 35) * 100 + 25 ,即 (((3 * 3 + 3) * 100 + 25) + 35) * 100 + 25 , 即 126025 。
写起来很麻烦,其实心算挺快的,本来到这就想着找个机会把这个b抖出来,不过想了想怎么扩展一下应用范围,然后就有了下边的一坨。

两个不同的尾数为5的数的乘积

15 * 25 = 375 35 = 1 *2 * 10 + (1 + 2) * 5
15 * 45 = 675 65 = 1 * 4 * 10 + (1 + 4) * 5
15 * 65 = 975 95 = 1 * 6 * 10 + (1 + 6) * 5
…
25 * 45 = 1125 110 = 2 * 4 * 10 + (2 + 4) * 5
25 * 65 = 1625 160 = 2 * 6 * 10 + (2 + 6) * 5
25 * 85 = 2125 210 = 2 * 8 * 10 + (2 + 8) * 5
…
(x * 10 + 5) * (y * 10 + 5) = (x * y * 10 + (x + y) * 5) * 10 + 25

记得以上的规律凑出来大概花了我两节自习课的时间,结果把提取出来的规律写成式子瞬间我就笑了。咩咩的这不就普通的因式分解嘛。再仔细想想,大概所有的速算法都是xyz和10的倍数相结合的产物,甚至直接从珠算里挪来口诀啥的。

如果前提是没学代数,这些算法还是挺唬人的,至少在小学阶段是可以笑傲群雄了。但如果接触到更高级点的数学工具,这些特例方法终归会被更具普适性的算法所解释。就如观星仪之于牛顿三定律,牛顿三定律之于爱因斯坦的侠义相对论一样。知乎的那位高中生在高中有限的知识体系下去理解哥德巴赫猜想,就差不多类似于以上情况了。
大概,想证明歌德巴赫猜想真的需要发明一套新的数学工具吧,毕竟我们对这个世界也仅仅是管中窥豹罢了。

gvim8.1版本的YouCompleteMe补全插件安装小结

发表于 2018-12-29 | 更新于 2019-01-03 | 分类于 vim | 阅读次数:

gvim8.1版本的YouCompleteMe补全插件安装小结


一、前置环境

1、Git for windows

2、python 3.x

注意python的版本需要对应vim的要求,最新版的vim一般同样是在新版本python环境下编译的。如果机器上默认的是旧版本的python,比如3.6版,又不想升级py,就需要自己编译vim了……

3、64位支持python的vim

跟python版本对应,一般vim for windows的发布页会有 Compiled with 的说明,保证python版本不低于vim需要的版本。
版本对应
如果已经安装了vim,则需要查看是否支持python。在vim中输入 :version ,查看是否有 +python3 ,如果是 -python3 ,则说明不支持,需要重新安装vim;再查看编译方式中是否有类似 -DDYNAMIC_PYTHON3_DLL=\”python37.dll\” 的项,确定具体的python版本。
确定vim是否支持python3
确定支持的python版本

4、CMake

5、7zip

6、Visual Studio 2015 或更新版本

vs需要安装C++模块。

注意要将git、python、cmake、7zip添加到环境变量,保证在命令提示符中输入相关命令不会报错。因为在YCM的编译脚本 install.py 中,默认认为环境变量中是有这些命令的。

7、使用Vundle或Vim-plug等工具来下载YCM

举例通过Vundle安装,修改_vimrc[.vimrc]文件。

1
2
3
4
5
6
7
8
9
filetype off
set rtp+=$HOME/.vim/bundle/Vundle.vim/
call vundle#begin('$HOME/.vim/bundle/')
Plugin 'VundleVim/Vundle.vim'
...
Plugin 'Valloric/YouCompleteMe'
...
call vundle#end()
filetype plugin indent on

打开vim,输入:PluginInstall,等待git克隆完毕。

二、编译YCM

  • 在开始菜单中打开 适用于 VS 2017[5] 的 x64 本机工具命令提示 ,这样可以省略将 msbuild 加入环境变量的步骤,而且能确保ms工具链的完整。
  • cd至YCM路径,默认为 ~/.vim/bundle/YouCompleteMe ,输入 python install.py。

    python install.py 可以添加参数,具体可以参见目录下的 README.md 文件。尽量不要使用--all参数。

  • 每次YCM更新后,需要重新编译。

三、配置YCM

这个见仁见智了,有大佬珠玉在前,按照YCM官方的建议瞎配配就完事了,敲代码的时候哪不爽了再改,只有用过了才知道哪需要修理。

使用Hexo搭建github博客

发表于 2018-03-14 | 阅读次数:

使用Hexo搭建github博客


Hexo

Hexo是一个快速、简洁的博客框架,使用Markdown解析文章,并可使用自定义的主题来生成静态网页。
Hexo官网:https://hexo.io

安装步骤

安装nodejs

Hexo基于nodejs,所以先要确保安装nodejs。网上说apt-get的方式安装的nodejs版本有问题,所以直接上nodejs网站上下载安装即可。
安装好之后查看一下命令是否可用:

1
2
3
4
node -v
v8.10.0
npm -v
5.6.0

如果不能显示版本号,把node和npm软连接到/usr/local/bin下即可,命令为ln -s 源文件 目标文件。

安装Hexo

使用npm安装:

1
npm install -g hexo-cli

安装完成之后,在nodejs目录/lib/node_modules目录下会生成一个hexo-cli文件夹。
同样将hexo软连接到/usr/local/bin下。
测试是否安装完成:

1
2
3
4
5
6
7
pi@GF47_pi:/usr/local/bin $ hexo -v
hexo-cli: 1.1.0
os: Linux 4.9.59-v7+ linux arm
http_parser: 2.7.0
node: 8.10.0
v8: 6.2.414.50
...

建立站点

安装完成后,建立Hexo目录:

1
2
3
4
mkdir HexoBlog
hexo init 博客目录
cd 博客目录
npm install

完成后,博客目录如下:

1
2
3
4
5
6
7
8
9
10
11
pi@GF47_pi:~/Documents/HexoBlog $ ls -l
total 372
-rw-rwxr--+ 1 pi pi 1942 Mar 9 23:23 _config.yml
-rw-r--r-- 1 pi pi 94053 Mar 13 19:07 db.json
drwxr-xr-x 309 pi pi 12288 Mar 9 22:01 node_modules
-rw-r--r-- 1 pi pi 587 Mar 9 21:55 package.json
-rw-r--r-- 1 pi pi 246517 Mar 9 22:01 package-lock.json
drwxr-xr-x 10 pi pi 4096 Mar 13 18:57 public
drwxr-xr-x 2 pi pi 4096 Mar 8 16:48 scaffolds
drwxr-xr-x 6 pi pi 4096 Mar 10 01:14 source
drwxr-xr-x 4 pi pi 4096 Mar 9 18:31 themes

文件夹作用可以查看官方文档:https://hexo.io/zh-cn/docs/setup.html

启动服务

在博客目录下,输入:

1
hexo server

如果正常运行,可以用浏览器访问提示的网址http://localhost:4000/,默认已经有hexo的主页。

配置

打开_config.yml文件,修改默认配置:

网站配置

参数 描述
title 网站标题
subtitle 网站副标题
description 网站描述
author 作者
language 网站使用的语言
timezone 时区

网址配置

参数 描述
url 网址
root 网站根目录
permalink 文章永久链接格式

以上是比较重要的项,如果想详细了解可以查看官方文档。

日常应用

  • hexo new post title
    在博客目录下输入hexo new post title,在博客目录/source/_posts下会生成title.md,然后就可以编辑了。如果title有空格,用””括起来。

  • hexo clean
    清理生成的文件和缓存。

  • hexo generate
    生成静态页面,生成的页面在public文件夹下,可以直接拷贝。
  • hexo server
    开启服务,在浏览器可以预览效果。
  • hexo deploy
    一键部署,可以直接将生成的页面放到github.io上,前提是安装了hexo-deployer-git插件。

    • 安装

      1
      npm install hexo-deployer-git --save
    • 配置
      打开_config.yml文件,修改最后的deploy项。

      1
      2
      3
      4
      deploy:
      type: git
      repo: git@github.com:GF47/GF47.github.io.git
      branch:master

    如何配置可以参考官方文档:部署
    或者自己使用git提交,不过比较麻烦就是了。

Intel i915 driver for ubuntu

发表于 2018-03-14 | 阅读次数:

Intel i915 系列核显的驱动问题


前几天换了个8代i7的cpu和配套主板,装了双系统,Windows+LinuxMint,然后喜闻乐见地出现了驱动问题。
Mint开机之后一直提示处于软渲染模式下,分辨率也只有1024x768没法调。装了个Intel的Intel Graphics Update Tool for Linux也没有用,检查的时候就卡住了。

1
2
3
4
5
Running in software rendering mode

Cinnamon is currently running without video hardware acceleration and, as a result, you may observe much higher than normal cpu usage.

There could be a problem with you drivers or some other issue. For the best experience, it is recommended that you only use this mode for troubleshooting purposes.

原来Ubuntu把Intel i915系列的驱动改为了alpha测试版,装系统时直接被忽略掉了。想安驱动需要在grub阶段加入内核参数:i915.alpha_support=1。

参考:
New PC Build - Ubuntu Not Using Intel Video Driver
Intel UHD Graphics 630 “Coffee Lake” On Linux

解决方式:

  • Install the latest video drivers:

    1
    2
    sudo add-apt-repository ppa:oibaf/graphics-drivers
    sudo apt-get update
  • Install and use Grub Customizer to do it:

    1
    2
    3
    sudo add-apt-repository ppa:danielrichter2007/grub-customizer
    sudo apt update
    sudo apt install grub-customizer
  • Launch grub customizer, go to the General tab, and enter i915.alpha_support=1 under Kernel Parameters.

  • Reboot.

其中第一步是添加第三方驱动的源,第二步和第三步可以用其他方式代替,只要保证在启动的时候有i915.alpha_support=1这个参数就行。

在树莓派上搭建Gogs服务

发表于 2018-03-09 | 分类于 树莓派 | 阅读次数:

新到手了一个树莓派板子,省电又不占地方,遂玩耍一番。

为什么选择Gogs而不是GitLab,很明显,以GitLab的量级来说,相当于津巴布韦总统捏着一颗核弹,一搭好,这个板子就可以放那吃灰了。而Gogs这种小当量的玩意,对树莓派来说刚好合适。

在树莓派上搭建Gogs服务


Gogs

  • 首页https://gogs.io
  • 下载https://gogs.io/docs/installation/install_from_binary

安装步骤

gogs是用go语言编写的,树莓派的Raspbian系统是有go运行环境的,而且gogs也提供了树莓派版本,直接下载就好。
下载位置

  • 解压缩到指定位置 unzip raspi2_armv6.zip
  • 转到目录cd gogs
  • 直接运行./gogs会列出相关参数。
  • 输入./gogs web尝试开启服务器

    gogs默认监听3000端口

  • 在同一网段上的浏览器访问树莓派的IP,记得加上3000的端口号

    1
    192.168.1.244:3000
  • 第一次访问会出现gogs配置界面,按需设置

    • 选择数据库类型,由于是在津巴布韦,我们依旧选择一个小当量的SQLite3,数据保存在一个db文件内。
    • 应用名称随便填,怎么搞怪怎么来。
    • 仓库根目录比较重要,默认应该是/home/pi/gogs-repositoryes
    • 运行系统用户就用pi就行,没必要建立一个新用户了。
    • 域名填树莓派的IP地址

      误1,这么玩会在换局域网环境后出现ssh克隆失败的情况,稍后解决

    • 应用URL为http://树莓派IP地址:3000/

      误2,同上,在换局域网环境后出现访问失败的情况

    • 其他基本默认

    • 管理员可选可不选,第一个用户自动为管理员
  • 点击立即安装即可
  • 随后出现控制面板,可以进行注册新用户等操作

    关于添加ssh密钥,如果最开始gogs的运行系统用户选择了pi,请不要选择远程登录树莓派的密钥(即Windows系统的C:\Users\用户名.ssh里的默认密钥和Linux系统中的/home/用户名/.ssh里的默认密钥),不然远程ssh的时候会被gogs拒绝,非常尴尬的问题。要避免也很简单,gogs和ssh远程登录这俩别共用一个账号就行,或者远程的时候sudo一下。

    gogs服务自动启动

  • gogs文件夹里有一个server脚本,位置在~/gogs/scripts/systemd/gogs.service,复制到系统服务目录就行

    1
    sudo cp ~/gogs/scripts/systemd/gogs.service /etc/systemd/system
  • 由于使用的账户是pi,并非新建的git,所以需要修改服务脚本

    1
    2
    sudo vim /etc/systemd/system/gogs.service
    %s/git/pi/g
  • 设置开机自动运行

    1
    sudo systemctl enable gogs
  • 启动gogs

    1
    sudo systemctl start gogs

gogs配置文件

上述操作完成后,转到~/gogs/custom/conf/app.ini,注意server的配置

1
2
3
4
5
6
7
[server]
PROTOCOL = http
DOMAIN = GF47_pi
ROOT_URL = http://localhost/git/
HTTP_ADDR = 127.0.0.1
HTTP_PORT = 3000
...

我这是设置nginx代理的配置,如果不设代理,那就只能使用静态IP了,而且输入地址的时候还要加端口号,这对于我这种瞎折腾的不是很方便。
如果想设置代理可以改成以上的配置,之后我再说一下nginx的配置。
算了,一块贴出来吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name localhost;
location /git/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3000/;
}
location /blog {
rewrite ^/blog(.*) http://$host:4000$1 redirect;
}
}

在浏览器里只需要输入树莓派IP/git就会跳到gogs界面了,不用弄静态IP,怪不方便的。
需要注意的是proxy_pass的地址斜杠问题,加斜杠和不加斜杠意思是不同的。
下边的blog是树莓派上的搭的Hexo博客,有空再说。

GF47

GF47

Unity 3D 咸鱼一条,偶尔在Python和lua里游一游

6 日志
3 分类
15 标签
GitHub E-Mail
© 2018 – 2019 GF47