Laravel Pipeline 遵循 UNIX 管道的风格

查看原文

Laravel 的 Pipeline 遵循了 UNIX 管道设计的原则。它的目的是提供一个数据处理的流水线,可以将一系列的处理流程按顺序串在一起。如果有场景是很明确要一步一步处理数据直到输出结果,那么管道可能是很适合的场景。一般支持管道处理的库都会设定输入,设定每个步骤的函数,拼装在一起,最后得到结果。

read more

HTTP 协议发展变迁

查看原文

这篇文章介绍了 HTTP 协议关于传输方式上的重大改变。HTTP 协议 是基于 TCP/IP 协议的关于内容请求和传输的标准。HTTP/0.9 的请求只有一行,使用 GET /index.html 这样的请求,响应只能返回 HTML 内容然后关闭 腾出连接,请求和响应都没有header。HTTP/1.0 也是在响应完后关闭连接。一个缺点是在 TCP 三路握手客户端最后一个 ACK 到达服务器前服务器无法处理请求;一些 HTTP 实现定义了 Connection: keep-alive 来告诉服务器不要关闭连接,客户端还要用。HTTP 还是一个无状态的协议,所以客户端在每个请求都需要自己携带信息以告知服务器其所在状态,重复的信息会到达服务器很多遍。HTTP/1.1 默认响应结束不关闭 tcp 连接除非带上了 …

read more

使用 IPython 作为系统 Shell

查看原文

IPython 其实也可以做系统 Shell。默认加载的 Profile 就附带了很多功能。例如:

  • %env foo 可以查看环境变量 $foo 的值;
  • %env foo=bar 可以设定环境变量 $foo 的值为 bar ;
  • %env foo=$bar 可以设定环境变量 $foo 的值为另一个环境变量 $bar 的值。
  • 运行 %rehashx 之后可以加载 Shell 里你之前设定过的 alias。
  • 运行 !your-cmd (例如 !ls /tmp ) 可以运行 Shell 命令,除了 !cd /path/to/dir 不能真的跳到那个目录。
  • 对于调目录,如果 …
read more

Make help

查看原文

Makefile 的维护很经常让人觉得很头疼。当命令变多以后,非常希望能在命令行就能看到每个命令有简单的解释。一般的 Unix 程序输入 -h/--help 能看到一系列的参数选项和解释。这篇文章给我们介绍了给 make 命令加上 help 文档的小技巧。我们在每个 make 命令后面跟上 # comment 注释。然后将默认命令定义为 help: .DEFAULT_GOAL := help。最后定义 help 命令为使用 grep 寻找注释行,然后使用 awk 输出命令名和命令的解释。

read more

源码阅读 - Python Lib/queue.py

查看原文

我们可以通过查看 python queue 模块的源代码知道它是怎么工作的。类 Queue 包含了几个线程相关的实例变量: 一把锁 (mutex),几个条件变量(是否为非空,是否为非满,是否处理完了),以及一个普通变量(剩余任务个数)。类 Queue 的关键操作都被套上锁,执行完操作后再解锁。写入任务到任务队列里时,需要申请 mutex,执行完后释放 mutex。mutex 操作可以确保写事务不会互相影响,而是线性写入。条件变量可以在适当的地方堵塞队列,再解除堵塞。

read more

简单函数无需安装库

查看原文

NPM 社区曾经出过一个很大的事故:一个人因为商标原因撤下了自己写的几十个包,其中一个包只有一行源代码却是无数 nodejs 项目的依赖。当时各大厂的项目的构建都因此挂了。例如一个项目有四十个 NPM 包,包还依赖别的包,解析后会有上千个包。事故中的那个包只有一行代码,但却需要下载好几K的数据,包括了证书,元信息等等。上千个包下载到本地需要不少时间,也需要不少硬盘空间。这个事故还引出的问题是代码依赖过多引来了非常多的法务风险(证书)和安全/审计风险。万一作者在包里面暗戳戳地加了后门呢?万一作者帐号被黑客盗走了呢?万一作者的 Key 不小心泄漏了呢?其实像一些简单的工具函数,简单的 Copy/Paste 才是更经济的选择。

read more

文档阅读 - Python queue

查看原文

Python Queue 模块是为生产者-消费者模型而设计的。在多线程的场景里,我们需要有一个线程安全的手段将信息在线程之间交换。基本上这个模块基于 threading 模块,做了一些锁的操作。这个模块有 Queue (FIFO), LifoQueue (LIFO), PriorityQueue (小值最优先) 三种队列。它设计了几个简单的 API:我们可以通过 put 放个 Python 对象进去,然后使用 get 取出来。get 对象出来时,如果用 get(block=True) 那么操作会堵塞直到有对象取出来;如果用 get(block=True, timeout=3) 那么操作会堵塞三秒直到有对象取出来,否则抛异常 Empty。取出来的对象用 .task_done() 标记取出来的对象处理完了。我们可以用 .qsize() 看队列长度 …

read more

« Page 51 / 54 »