Windless
音乐/Music 订阅/Feed
稗田千秋(i@wind.moe)

听,那些过去的和即将到来的

新年快乐(题图pixiv id=60561552),这篇文章敲到一半,整个2016年便已翻了过去,想到什么就写点什么,称不上是一份总结,就当做是情感的宣泄吧。

脑中快速闪过了一年来的些许画面,好像是顺其自然般,年初定下的目标也实现了不过一半(反正原博我已经删了哈哈哈哈

年初受大佬们的影响接触到了Haskell,起先我并不觉得这门语言有吸引我的地方,纯函数,复杂严谨的类型系统,没有变量(let不算),对于习惯了Pascal/C/Python等语言的写法,变量对我仿佛是不可或缺的,更别说循环这种方式了,但是随着不经意间看见Haskell在解题时,短小精悍的代码令人着迷,而后又知晓xmonad是基于Haskell的,开始觉得这或许是一门拥有无限可能的语言,因而九月的时候韩东老师的新书 魔力Haskell 也在第一时间购得一本,加上在线阅读的Real World Haskell,收获颇丰。

稗田千秋
Jan.01 2017 essay

Yubikey 4 使用探索

平安夜舍友都出去浪了,只有我这种单身汪孤零零的在宿舍写着博客 (′_>′ )

心痒Yubikey很久了,恰逢黑五活动,想着能多出个赠品进行容灾备份,走的顺丰转运到今天正好一个月到手,参照匮乏的资料在Arch上面试了一些功能。

稗田千秋
Dec.25 2016 daily

「数论篇」矩阵快速幂

荒废了好久的算法,写几篇关于算法的复习笔记找找手感,在测试 Mathjax 的矩阵时有感而发,便写写矩阵快速幂吧。

幂运算即指数运算,用于表示某数自乘数次,因此易得最基本计算的方法复杂度为 O(N),

快速幂全称快速幂取模,可以在 O(log₂N) 得出结果,用于快速计算某个数的n次幂,此处的n一般很大而导致 O(N) 复杂度超时,而且题目通常会给出一个额外要求使结果对数k取模。

稗田千秋
Dec.24 2016 algorithm

开启BBR拥塞控制

前日在某TG群里碰见大佬强推 BBR 加速并给出了 IDCF 的测速实际对比,颇为心动,于空闲的 Vultr 主机上尝试部署了一下,性能提升虽然没有 Kcptun 那么暴力,不过也值得一试。

稗田千秋
Dec.10 2016 code

君の名は。

走出影院,心中的暖不经意间驱散了初冬的寒意,便想着写些什么来纪念一下(这是观影完第一时间的短文,可能会带点主观倾向

纵观之前的作品,新海诚擅长的是描画宏伟美丽的背景,小而微的感情刻画以及讲述人与人之间的分离、羁绊,在背景上,描画所得与照片拍摄的图片最直观的区别,就是更有一种迎面而来的壮阔感,更具有表现力,也让图片本身带上了鲜明的感情色彩,更加突出了被挟裹在时间中的无力感,这是单纯的照片无法取得的效果。而细微的刻画则为影片增添了一分灵气,轻轻的挑动着心弦,可能一句简短的台词,一首应景的插曲就能泪点迸发,也深化了人物形象。

早在 云之彼端 约定的地方 时新海诚便有了平行世界的构思,不过在本作,时空的交织穿越才是推动剧情发展的重点,相对于之前的几部作品,诚哥确实变得"会讲故事"了。我比较用心看过的诚哥的电影只有秒五、云彼和追逐繁星的孩子,相对于你的名字,剧情上略显拖沓,或许是诚哥想表达的太多,而一部优秀的电影需要取舍,通过铺垫让观众自己来了解领会,所以在观影的时候,能发现本作的剧情节奏把握的十分到位,丝毫没有感觉时间的流逝。此外,本片的基调并不如诚哥前几作那种整体压抑悲伤的基调,取而代之的是轻松欢快的感情,感人处让人保持在眼泪盈眶而又不至溢出,穿插着的一丝丝小幽默,很好的中和了气氛,这也是新海诚从未使用过的表现手法。

ひえだ の ちあき
Dec.02 2016 acgn

实现简单的OTP Generator

之前曾尝试给博客添加了一个 OTP 认证,不过是引用某第三方认证 API,经常会导致请求超时等不可料错误,于是就尝试寻找着在后端本地实现的方法,发现了 PyOTP 这个库,在浅读了源码以及相关文档之后初步了解了 OTP 实现的原理,所以记下来备份。

OTP

OTP(One Time Password,动态密码),一般用来实现双因子认证,通过特殊的构造和哈希,实现了“动态”的特性,可以有效防止重放攻击(Replay Attacks),大大增加暴力破解成本(虽然在被爆破的时候小站服务器肯定先挂了XD

主要的验证方式有两种,HOTP(HMAC-Based One-Time Password)和 TOTP(Time-Based One-Time Password),像常用的 Google authenticator,开启二步验证之后会给予一个二维码,用对应 APP 扫描一下即可得到六位验证码,当然此时若是使用二维码识别工具的话也能发现这个二维码其实就是一段 URI Scheme,诸如 otpauth://totp/Windless:i%40wind.moe?issuer=chiaki&secret=secretkey&algorithm=SHA256

注意到其中传递了密钥 secret 以及摘要算法类型,这样只要客户端与服务端的实现是一致的,就能保证在同一时间得出的 OTP 是一致的。

不会代码小千秋
Nov.15 2016 code

使用 Git Hooks 实现自动化部署

秉着御繁以简的原则,在参考了多种部署方式后,在 Windless 上最后选用了 Git Hooks 自动部署,解放了繁琐的操作,不必每一次提交都去服务端执行 git pull,不但慢且费时费力.

Git Hooks 字面上看就是 Git 提供的一种类似挂钩的工具,其实我更愿意称其为触发器(WE 后遗症,在特定的时机执行对应脚本.

下面是 Windless 的配置手札

稗田千秋
Nov.11 2016 code

新的旅程,新的Windless

终于将博客迁移到 Aliyun 上了,新的博客代号为「Windless」,源代码托管在 Github 上,欢迎 PR。

上一版的博客是基于 Laravel 和 MariaDB 构建的,完成后总是抱有一丝遗憾,许多功能马马虎虎带过,没有使用版本控制,再加上笔者对 PHP 不甚了解,重构的想法也就一直埋着,之前也尝试过使用 Yesod 构建博客后端,无奈功力太浅无法驾驭,那个时候正好在关注 Python 3.5 的新特性 PEP 492,也想试试使用 KV 型数据库来存储数据,也就有了现在的技术选型。

先简单的介绍一下「Windless」的技术栈,后端使用了 aiohttp 进行构建,基于 Python 新 Asynchronous I/O 特性,同时使用 Redis 作为后端数据库,本地的 ab 测试也能勉强跑到 1200+ Req/s 的成绩,前端则沿用上个版本的「Windcore」使用的 Material Design Lite 组件库以及 Pure JavaScript 构建。

稗田千秋
Nov.02 2016 essay

hihoCoder 1291 - Building in Sandbox 题解

描述

Little Hi is playing a sandbox voxel game. In the game the whole world is constructed by massive 1x1x1 cubes. The edges of cubes are parallel to the coordinate axes and the coordinates (x, y, z) of the center of each cube are integers.

At the beginning there is nothing but plane ground in the world. The ground consists of all the cubes of z=0. Little Hi needs to build everything by placing cubes one by one following the rules:

  1. The newly placed cube must be adjacent to the ground or a previously placed cube. Two cubes are adjacent if and only if they share a same face.

  2. The newly placed cube must be accessible from outside which means by moving in 6 directions(up, down, left, right, forward, backward) there is a path from a very far place - say (1000, 1000, 1000) in this problem - to this cube without passing through ground or other cubes.

Given a sequence of cubes Little Hi wants to know if he can build the world by placing the cubes in such order.

稗田千秋
Apr.10 2016 algorithm