golang笔记


虽然推荐使用

go get -u golang.org/x/sync

但很不幸,国内无法连接golang.org,所以只能曲线救国,借助github.com来安装相关的package

git clone https://github.com/golang/sync ./
# 或者
git clone https://github.com/golang/sync
mv sync $GOPATH/src/golang/x/

读取配置文件

注: Configuration 里元素(Path …

日上三竿与夜半三更


日上三竿犹在眠
不是神仙
胜似神仙

很舒服

夜半三更竿犹在醒
不是鬼
胜似鬼

很难受

日上三竿犹在醒
不是鬼
胜似鬼

很难受

夜半三更竿犹在眠
不是神仙
胜似神仙

很舒服

为pelican添加文章加密功能


pelican是一个静态博客系统,很早之前就想要实现一个加密pelican文章的功能,但一直没什么时间,这次总算静下心花两天时间搞定了

为什么不用现有的插件encript-content

因为自己实现更有成就感啊!!!

前言

因为我不仅有静态博客honmaple.me,还有一个动态博客honmaple.com,所以此次加密功能我会在动态博客那边添加一个验证密码的接口,来对密码进行验证以及对加密文章进行解密,虽然验证也可以使用crypto-js.js进行双向解密,但还是觉得自定义的接口更安全一些。

自定义pelican插件

加密算法

加密算法我使用cryptography,使用起来很简单

>>> from cryptography.fernet import Fernet
>>> # Put this somewhere safe!
>>> key = Fernet.generate_key()
>>> f = Fernet(key)
>>> token = f.encrypt(b"A really secret message. Not for …

git笔记


git修改提交作者和邮箱

  • 提交前

    如果代码未提交,则可以

    git config  user.name "Author Name"
    git config  user.email "Author Email"
    
  • 提交后

    如果代码已经提交,或者已经push到remote(只能修改最近一次提交)

    git commit --amend --author="NewAuthor <[email protected]>"
    

    修改全部commit,需要使用脚本 参考github官方

    #!/bin/sh
    
    git filter-branch --env-filter '
    OLD_EMAIL="[email protected]"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="[email protected]"
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME …

docker笔记


docker删除硬盘残留的文件

使用 docker rmi ... 或者 docker image rm ... 并不能将镜像完全删除,还会一直占用硬盘空间

docker system prune

该命令不会删除已存在镜像(不管是否正在运行)

(硬盘一下子多个好几个G, 心情不错)

docker构建时禁用缓存

dockerfile 中有多个 RUN 或者 ADD .. 命令时, 每个 RUN 都会创建一个 image, 下一个 image 会以上一个为基础(缓存)继续构建,

可以使用 docker images -a 看到很多 <none> 的 image

不过作为一名有洁癖的coder, 这种情况不能忍

docker build --no-cache -t hello .

flask_maple文档


安装

To install Flask-Maple:

pip install flask-maple

Or alternatively, you can download the repository and install manually by doing:

git clone git …

lua笔记


Table of Contents

lua分割字符串

local ngx_find    = ngx.re.find

local function split(str, sep , count)
    local t = {}
    count = count or -1

    local nfield, nstart = 1, 1
    local nfirst,nlast = string.find(str, sep)
    -- local nfirst,nlast = ngx_find(str, sep, "jo")
    while nfirst and count ~= 0 do
        t[nfield] = string.sub(str, nstart, nfirst - 1)
        nfield = nfield+1
        nstart = nlast+1
        nfirst,nlast = string …

emacs自动更新文件头


前面已经说过,可以使用auto-insert自动添加文件头,今天来说一说自动更新文件头,比如说每次保存时自动更新last updated字段

自动更新Last Updated

如果使用的是header2,直接设置相关的变量就可,假如使用的是auto-insert,同样也可以使用emacs内置的time-stamp对Last Updated进行自动更新

time-stamp默认使用Time-stamp:,如果要对Last Updated进行自动更新,只需要简单的设置

(setq time-stamp-active t)
(setq time-stamp-line-limit 11)
(setq time-stamp-start "[lL]ast[ -][uU]pdate[ \t]*:?")
(setq time-stamp-end "\n")
(setq time-stamp-format " %#A %Y-%02m-%02d %02H:%02M:%02S (%Z)")

然后添加

(add-hook 'before-save-hook 'time-stamp)

这样就能在每次保存时自动更新相应的字段了 …

emacs自动添加文件头


想要在emacs中添加文件头有好几种方法:

  • 直接手打
  • 使用模板yasnippet
  • 使用header2
  • 使用内置的package auto-insert

header2可能是最方便的一种自动添加文件头的方式,但我之前使用过,想要自定义自己想要的内容很难,而且白白浪费header2的功能

今天主要说一说emacs内置里auto-insert,使用它在创建文件时自动添加文件头信息

基础使用

直接(auto-insert-mode) 并且设置

(setq auto-insert-query nil) ;; 不提醒

自定义文件头

(setq auto-insert-alist
      '(((python-mode . "Python program") nil
         "#!/usr/bin/env python\n"
         "# -*- coding: utf-8 -*-\n"
         "# **************************************************************************\n"
         "# Copyright © " (substring (current-time-string) -4) " " (user-full-name) "\n"
         "# File Name: " (file-name-nondirectory buffer-file-name) "\n"
         "# Author: " (user-full-name)"\n"
         "# Email: " user-mail-address "\n"
         "# Created: " (format-time-string "%Y-%m- …

helm与ivy简单对比


我为什么放弃ivy回到了helm

说一说ivy用的不爽的地方吧

counsel-find-file

counsel-find-file作为最常用的命令,ivy竟然没有把默认的find-file进行覆写,比如我在dired中想要复制文件,我习惯使用C-h退回上一个目录,但即使我之前已经设置了

:map counsel-find-file-map
("C-h" . counsel-up-directory)

但只有在使用counsel-find-file时有效,类似dired中是无效的,相比较于helm-find-filesfind-file进行覆写,无论何时都能使用自己自定义的按键,这很不爽

tab键

helm中,tab仅作为补全使用,想要打开选中项,则需要按一下enter键,而在ivy中,我不知道开发者怎么想的, 我需要记住两个或两个以上的按键

在ivy中,tab键就像命令名称ivy-alt-done一样,意味着按一下tab,就能得到helm中tab and enter的效果。

这很方便是不是?

但是,如果我要在emacs中重命名一个文件,把aaa …