如何找到时间学习

查看原文

本文讲述了程序员们的痛:技术发展太快不好好学习是要被淘汰的。那到底怎么抽时间学习呢?如果真的抽不出时间,那就是工作的时候好好学习。工作中遇到的难题和挑战,分出一点时间找解决方案,看文档,做笔记,都是很好的学习方法。

read more

Python GIL 算法说明

查看原文

本文用代码说话,说明了 GIL 是怎么运行在 Python 解释器中的。简单来说,解释器做了这么几件事情:

bytecode = compile(function)
while True:
    drop_GIL
    take_GIL
    execute_opcode(bytecode.next_intruction())

如果你在写多线程应用,那么这个 GIL 会把所有其他的线程都 hang 住,不执行 execute_opcode。即:任一时刻,不管有多少线程,Python 总是只有一个 thread 执行 opcodes,其他的就傻等着。

几个核心概念:

  • GIL: 它是一个布尔值(锁)
  • GIL 的修改有 gil_mutex 控制访问,有 gil_cond 控制修改。
read more

Docker-app - 管理 docker-compose YAML 依赖的工具

查看原文

docker-app 是最近刚推出来的工具,他要解决的问题是 docker-compose.yaml 有一些东西是可以复用的,但目前还是只能 copy & paste. 举个例子,下面会是很常见的场景:

$ docker-app render | docker-compose -f - up

或者

$ docker-app render --set version=0.2.3 --set port=4567 --set text="hello production" | docker-compose -f - up

它也可以和 helm 结合起来用,不过看起来很水。

衍生思考:YAML 真讨厌。

read more

C10K 问题

查看原文

一篇出名的老文章&好文章,涵盖了现代 Web Server 设计的基础理论,设计目标是写出一个能支持 10k 个连接的服务器软件。

五种常见的 I/O 策略:

  • 多线程,每个线程使用 nonblocking I/O 和 select() / poll() 这类 level-triggered readiness notification 接口处理 data waiting。
  • 多线程,每个线程使用 nonblocking I/O 和 edge-triggered readiness notification,这类接口包括 kqueue(), epoll(), realtime signal, etc.
  • 使用 asynchronous I/O
  • 每个线程对应一个 client …
read more

程序员学习的一天

查看原文

程序员自我修养:好好学习天天向上。

这篇文章介绍的流程跟 Techshack 很像,要去维护一个 feed 列表,好好管理,学习,然后摄入,时不时要过一遍不然会忘记。

  • Feed 主要来自 RSS,不要订阅太多,过犹不及,如果内容太多反而读不过来。
  • 边读边写边思考,键盘在手,命令照着敲一敲。
  • 人有遗忘周期,得通过软件时不时地提醒自己一些重要的知识。
read more

在 macOS 上运行汇编代码

查看原文

本文介绍了如何将 1+1 这个表达式转成在 macOS 上可运行的二进制程序。

  1. 转汇编文件 c.s
# 使 ld 可以找到入口点
global start
start:

# 1 + 1 在寄存器模型上说白了就是 栈和两个寄存器 移来移去的操作
push 1
push 1
pop ebx
pop eax
add eax, ebx
push eax

# 程序结束时放上中断
mov eax, 0x1
int 0x80
  1. 编译成二进制文件
$ nasm -f macho c.s
  1. 链接
$ ld …
read more

函数式编程 pros and cons

查看原文

本文提供了函数式编程的简单概述。函数式编程的核心有:纯函数的 combination,无副作用无共享状态无可变数据,描述式写法而非指令式写法。它的缺点是只有列表这种数据结构,在做 hash table,hash map, graph 这些数据结构时就有点慢(其实 clojure 中就解决了这种问题)。它的优点是高阶,抽象,靠近问题的本质,语法简单到不能再简单。

read more

XML 的安全漏洞

查看原文

本文是 Python XML 的文档,这个章节描述了 Python 内置的 XML 处理模块无法抵抗精心构造过的恶意数据。

攻击者可以通过滥用 XML 的特性达到 Dos,越权访问本地文件,远程连接到别的机器,或者绕开防火墙。

几种常见的攻击:

  • billion laughs / exponential entity expansion: 多级嵌套的 entity 其中的每一级都引用别的级很多次,所以 xml 本身自由一丢丢,但是扩展开以后会指数增长,知道内存撑爆
  • quadratic blowup entity expansion: 同上,也撑爆内存,不过是通过一遍又一遍地扩展千余个字符,虽然效率比上面低,但是可以绕过解析器深度嵌套的防御。
  • external entity expansion: 因为 XML 中可以饮用 local / remote 文件,所以攻击者可以塞入一些本地或者远程的有害 …
read more

Python 安全漏洞若干注意要点

查看原文

本文介绍了 Python 编程需要注意的会产生安全漏洞的写法。

  • 注入:不能直接拼接字符串然后提交到别的系统运行,所有的字符串都要 escape 过一次,可以的话,使用现成的库,例如 shlex,ORM
  • billion laughs 攻击: 解析来自不信任来源的 XML 文件,可能会因为这种攻击类型导致内存上 G 最后进程崩溃。
  • external entity expansion: XML 可以引用别的 xml,这会导致库会默默地发起网络调用。使用 defusedxml 替代 Python 标准库的 xml
  • assert 语句会在 __debug__ = False 时失效。要么只用在 unitest,要么(我觉得)可以自己写一个 yourproject.utils.asserts.ok …
read more

« Page 18 / 54 »