Sonic Wu

while(!(succeed = try()));

不使用任何数据结构的速率限制算法

没有使用任何数据结构和定时器,最简洁的速率限制算法:Token Bucket(令牌桶)

RateLimiter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import time

class RateLimiter:

    def __init__(self, max_rate=20.0, per_seconds=10.0):
        self.allowance = max_rate
        self.max_rate = max_rate
        self.per_seconds = per_seconds
        self.last_checked = int(time.time())

    def acquire(self):
        current = int(time.time())
        elapsed = current - self.last_checked
        self.last_checked = current

        self.allowance += elapsed * (self.max_rate / self.per_seconds)

        # throttle
        if self.allowance > self.max_rate:
            self.allowance = self.max_rate

        if self.allowance < 1.0:
            return False

        self.allowance -= 1.0
        return True

初始给予max_rate个令牌,每次请求消耗 1 个,每秒钟恢复max_rate / per_seconds个,最多恢复到max_rate个令牌。

效果:每per_seconds秒最多允许max_rate次请求。

在 OS X 下使用 Automator 批量修改图片大小

看到朋友的这篇 OSX下在Finder里批量修改图片大小 ,作为一个业余玩相机的也曾为此而困扰。在此抛砖引玉介绍一个更方便的,使用 OS X 系统自带程序 “Automator” 解决的方法:

  1. 打开Automator
  2. “Document Type” 中选择 Service (意味着功能将会出现在 Finder 的右键菜单)
  3. “Service receives selected” 选择 image files in Finder
  4. 从左侧边栏的 “Library” 中选择 Photos,并从二级菜单中的将 Scale Images 拖到右侧空白区 (出现确认提示点击 “Add”)
  5. 右侧区域会出现两个流程 “Copy Finder Items” 和 “Scale Images”,分别表示缩放的尺寸和输出文件夹
  6. 最后 File - Save ,命名服务为 “缩放图片到50%” 或其他任意名称

至此之后 Finder 中选择任意数量的图片时,右键菜单均会出现这个操作

这只是 Automator 很简单的一次示例,它还能做到的更多。

HackerRank 的编程挑战

最近算是闲下来了,一口气把 Trello 中的 TODO 完成了大半,其中就包括来自 HackerRank 的编程挑战。

HackerRank 提供了不同难度的编程谜题以供挑战,目前已支持到21种编程语言。题目类型涉及 AI、Algorithmic、Code Golf,Weekly Contest 四大类。并且入门级题目并不难,曾经的 Level-1 题目 “Tic-Tac-Toe” 已被提升至 AI 类别的 Track-5,而现在的 Track-1 会从简单的 插入排序 开始。

一口气完成了 AI 分类的 Bot 系列谜题 GitHub Repo ,在这里聊聊过程中碰到的几个问题:

如何保存状态?

由于机器人每一步都是重新执行代码读取输入,所以很多情况下都需要记录状态。目前可以通过读写文件来实现 “FAQ: Can my code write to a file?”

是否需要选择最“好”的算法?

“BotClean” 系列题目为例,这是一个 “TSP”(旅行商、货担郎问题) ,普遍解法有 遗传算法模拟退火贪心算法 等多种。其中“贪心算法”是实现起来最简单但却并不是最优解,但由于结果验证的地图都很小,所以已经足以拿到最高分。

《编写可读代码的艺术》思维导图笔记

根据 豆瓣读书 的统计,2012年共完整的读了7本书,而现在除了一些曾转述给他人的内容,其他阅读时的心得、共鸣,灵光一闪似乎已被大脑回收干净,所以从这里开始尝试用更利于记忆的思维导图来记录读书笔记。

《编写可读代码的艺术》 从变量命名、代码注释、缩进及换行开始,再到控制流、函数,最后的测试代码,从每个环节改善代码的可读性和设计。

而且这些技巧可以立即被运用到当前编码过程中,如果你不是一个非常激进(折腾)的程序员,在面对充满 Bad Smell 的“影碟出租系统”会选择逐步改进而不是推倒重来,那么选择先读此书会比 《重构:改善既有代码的设计》 更有效果。

思维导图

其他格式下载:PDF | MindNode