Clean Coder — Robert Martin

查看原文

本文是关于 Clean Coder 的一篇读书笔记。

  • 学会处理 bug:因为不可避免会写出 bug,所以要负责,修复它,学习到经验。
  • 多写测试和文档。
  • 一直去改代码。如果遇到一块代码很难修改,那就重新设计,好让下次修改好过一些。
  • 要学习理解自己正在做的这个领域的一些 solutions。
  • 谦逊,带新人,不要嘲笑别人。
  • 累了困了就别写代码了,糟心。
  • 不要参加浪费时间的会议。
read more

Redis 数据持久化

查看原文

本文是 Redis Persistence 的 tech spec,是一篇每个 Redis 用户都建议读的文章。

  • RDB 是定时存储快照
  • AOF 是增量添加写操作的日志(append-only fashion)
  • 两个都是可选关掉的,或者同时打开。AOF 优先用于重启时的数据恢复

比较:

  • RDB
    • 单文件,压缩好,适合备份做灾难恢复,恢复速度快,备份进程不影响提供服务的父进程的性能。
    • 可能会丢数据(总不能每秒都 dump 吧?一般隔几个分钟小时的),备份时 fork 会可能卡住父进程一会会儿。
    • 基本流程:Redis fork, 子进程把数据全量写到 rdb 文件,写完后替换老的 rdb 文件。
  • AOF
    • 优点:性能好!能在日志太大时自动 rewrite, 也不会影响现有的插入 …
read more

Python 代码打包必知必会

查看原文

本文是 Python 打包的官方文档,介绍了如何打包一个最简单的 Python 代码库,是几乎每个 Python 开发工程师都要掌握的技能。

  • 首先得有一个可以被打包的模块,或者包。
  • 然后写一个 setup.py, 其中有固定的模板写上 name, version, description, packages 等必须要填的信息。
  • 跟上 LICENSE,README.md
  • 运行 python3 setup.py sdist bdist_wheel, 查看 dist/
  • 测试上传包到 pypi 上:twine upload --repository-url https://test.pypi.org/legacy/ dist/*
    • 去 https://test.pypi.org …
read more

Python 包 ssh-decorator 有后门

查看原文

这篇是 Reddit 上关于 ssh-decorator 这个有后门包的讨论。这个垃圾 Python 包居然堂而皇之地写了 urlopen('http://ssh-decorator.cf/index.php') 这样的代码,甚至尝试将扫描到的服务器的用户密码什么的发送到后台服务器去。就指着万一哪天有人不小心下了这个包就钓大鱼了。这个包的技术还是很低劣的,甚至没用上混淆什么的技术,太容易让人查出来。由于 PIP 不关心包的安全,应用开发的时候一定要注意每个包都要安全审核一下。

read more

DO NOT SUDO PIP

查看原文

这个可爱的网站谆谆告诫程序员们,不要 sudo pip install russian_roulette, EVER! 因为太危险了啊,想想万一安装包的时候出事了怎么办,python 安装包可是实打实地运行代码的,万一有安全漏洞呢?就算你再怎么小心,typo 也是有可能打出来的:sudo pip install uincode 这个包可是认证的钓鱼包!总之,不要 sudo pip, 运行到 virtualenv 里面,或者用 pip install --user package-x.

不要忘记:setup.py can run system commands.

read more

WHAT IS SUID AND HOW TO SET SUID IN LINUX

查看原文

Linux 权限管理不是只有 rwx 三个这么简单,还有 SUID, SGID, Sticky Bit, ACL’s, SUDO 等等。本文简单介绍了 SUID - Set owner User ID up on execution 这个概念,它可以让获得权限的程序运行的时候获得 file owner 的权限,获得 owner UID,GID。听起来很危险,但它是 passwd, ping, crontab 等程序的基本原理。譬如说,passwd 将会修改密码,数据写入 /etc/passwd, /etc/shadow,而这两个文件owner都是 root。

$ ls -al …
read more

Productivity x Simplicity

查看原文

这则推文及以下的讨论的话题是系统保持简单能帮助提高生产力。

  • 系统拆成一个个简单地组件,可能会导致组件间的交互变得很复杂。
  • 复杂无法避免,尝试在接口层保持简单,让客户端容易调用,把复杂度隐藏在接口后面。
  • 有人认为如果将系统解读为软件,可以通过隔离来做到简化;如果将系统解读为一个组织,那可以通过简化层级和跨组协作来完成。
read more

Kubernetes 文档 - Application Introspection and Debugging

查看原文

本文是 Kubernetes 叫你怎么 debug application 的文档。简单来说记住两条命令:kubectl get pod -o yamlkubectl describe pod name-of-your-pod-xxxxxxxxxx-yyyy。Kubernetes 很复杂,甚至于在教完你各种概念后教你怎么 debug,这篇还是 debug 中最简单的一篇,还不涉及 service,deployment,logging 等。

  • kubectl describe pod nginx-deployment-1006230814-6winp:类似这样的命令可以列出 pod 所有的状态,我们查看不同寻常的状态来找病灶。根据不同的 state ( Waiting, Running, or Terminated )来看更多信息。比如说 ready 表示是否可以接受流量了,Restart Count …
read more

Pyre - Python 静态检查工具

查看原文

Pyre 可以为 Python 3.5+ 程序提供静态检查,前提是代码中标注了 type hint,由于 Python 的类型只是标记,要想真正检查出问题还得上这类工具。

使用:

$ pip install pyre-check
$ cd /path/to/proj
$ pyre init
$ pyre check
read more

EdgeDB - 下一代对象关系型数据库

查看原文

这个工具旨在解决的问题应该是将原先软件层的逻辑挪到数据库层面来,数据库不再是行列关系,而是对象驱动的数据,这让我们也许在实现业务逻辑时可以用更少代码解决问题。它内建 GraphQL 支持,这个文档对于尝鲜的人来说非常容易理解。

这篇 Quick Start 简述了实现简单的 PullRequest 业务。

  • Migration 是个好玩的设计,鉴于大部分数据库框架都让程序员可以用 xyz-framework run migrations 这种方法建表,删表,改表,EdgeDB 直接提供了 Migration 来做任何表模式的变更,在数据库层面帮我们解决表模式的迁移,体验蛮好的。使用时,感受到了运行一次 Migration 耗时比较长,应该是有锁库,可能现在还处于早期试验阶段,实现还不完善。
  • INSERT 的同时可以带上 SELECT, FILTER ,这个跟 SQL 能做的事情没有差太多。
  • SELECT 使用 GraphQL 的语法来查数据。

翻看 源码 …

read more

« Page 22 / 54 »