周末在家肝了一天《死亡细胞》,第一次双塔流过了刺客,看了下 Steam 游戏时间记录, 我已经打了 60 个小时了,和《以撒》的 200+ 小时数比起来,简直不值一提。 强忍着“再开一把”的心情关上电脑,第一次通关一款游戏用这么长的时间, 当然这其中有这款游戏现在还是 EA 阶段,难度设计还需要调整的锅, 不过我想从另一方面来谈谈这款游戏给我的不一样的感受。

Read more


最近发现 airflow 任务执行顺序有些奇怪,于是看了下 airflow 关于权重的处理,解答了心中的疑问。

以最新的稳定版(v1.8-stable)为例,代码总共就这么一小段

    @property
    def priority_weight_total(self):
        return sum([
            t.priority_weight
            for t in self.get_flat_relatives(upstream=False)
        ]) + self.priority_weight

Read more


最近在写 airflow 的脚本时遇到一个问题,出于方便把 BaseSensorOperator 包了一层, 后来想改下超时时间和优先级等参数,发现改了没用,于是看了下源码,发现 Operator 都有个 apply_defaults 的装饰器,细看一看,实现挺巧妙,也解释了我遇到的问题。因为我的问题属于个人使用不当导致的, 所以就不放问题代码了,但我会在分析后给出一些使用方面要注意的地方和建议。

Read more


CH41 Creating a Full Plugin

  1. 看到这里你可以停了,因为前面的姿势足够你完善自己的~/.vimrc脚本,去修复别人脚本的bug了,绝无讽刺的意思
  2. 往下学之前,建议先玩下Potion语言,这是个很小的语言,使用它的目的是为了辅助我们写vim script

CH42 Plugin Layout in the Dark Ages

  1. ~/.vim/colors/在这里的文件记录了vim的颜色主题,如果运行:color xxx就能看~/.vim/colors/xxx.vim的配色方案了,查看当前配色都有哪些用:hi
  2. ~/.vim/plugin/在这里的文件每次vim启动都会运行一次
  3. ~/.vim/ftdetect/这里的文件每次启动也会运行一次,ft的意思是filetype,这里的文件应该是包含autocmd用来切换filetype的,所以一般就一行

Read more


上一篇

CH31 Basic Regular Expressions

  1. /?,前者向后找,后者向前找

CH32 Case Study: Grep Operator, Part One

  1. :nnoremap <leader>g :grep -R <cWORD> .<cr>可以搜索<cWORD>,表示光标下的单词(包括连字符,比<cword>更大),之后可以用:cwindow查看quickfix窗口
  2. 以上还有一点要修改,如果光标在一个foo;ls下,使用后实际会执行ls命令,原理和SQL注入类似,所以需要用单引号保证字面值,:nnoremap <leader>g :grep -R '<cWORD>' .<cr>
  3. 但上面对于光标有单引号的不启作用,用:echom shellescape(expand("<cWORD>"))可以显示shellescape后的值
  4. 最终版本:nnoremap <leader>g :silent execute "grep! -R " . shellescape(expand("<cWORD>")) . " ."<cr>:copen<cr> ,前面加个:silent可以防止搜索时的输出,最后再:copen打开结果页

CH33 Case Study: Grep Operator, Part Two

进入.vim/plugin/下,新建一个文件”grep-operator.vim”,写上nnoremap <leader>g :set operatorfunc=GrepOperator<cr>g@function! GrepOperator(type) | echom "Test" | endfunction,这时用<leader>giw会发现打出了Test

Read more