开发者 安全
2022-04-25
OSCHINA 上听说墨菲安全, 是一个 Golang 写的 cli 工具, 收集项目的依赖信息提交到服务器端, 查询可能的安全风险。
根据官方文档,目前支持 Java(maven,gradle),Golang(go mod),Node(npm,yarn),Python(pip)语言。
本文档就是简单的试用一下。
总结:我感觉挺好的,一般来说对于依赖我们都不上心,其实是有很大安全风险在里面。我觉得应该对线上业务的依赖都应该有严格的审查。
如果是安全方面的需求没有那么强烈,用这个工具可以为依赖的管理提供一些帮助。
可以考虑和 CI/CD 继承,如果有安全风险就发出告警信息。
开发者 Python
2022-04-19
一些阶段性目标:
-
参照网上查到的博客和文档,先列出大纲以及制定学习计划
大概以下五个主题的内容:
-
Python 标准库
- Tornado
- Redis
- RabbitMQ (pika)
-
MySQL (SQLAlchemy/pymysql)
-
如果资源方面允许,可以实现一个内部系统开发,进行编码和设计方面的指导
- 阅读项目文档,理解邮件和短信的处理流程,项目结构,以及每个项目的核心逻辑
- 给定一个周边项目进行开发维护,小任务开发(Code Review)
- 从写文档和单元测试开始,逐渐参与核心项目的开发和维护
其他:Linux 基础,Git,我们的开发流程和规范
标准库
- 常用基础库: os, sys, shutil, re, time, datetime, ramdom, json, pickle ...
- 日志: logging
- HTTP 相关: urllib, http
- 邮件相关: email, smtplib, smtpd
- 编码和加密相关: md5, sha, base64, hmac, binascii
- 单元测试: unitest 非常重要
Tornado
- Web 框架先走起来
- 基本用法,比如
add_timeout, call_later, add_callback ...
- 了解 IOLoop/IOStream
- 项目开发过程中的一些实践
Redis
- 安装
redis-cli
- 数据类型
- 命令清单
redis 库
RabbitMQ
- 基本概念 (Exchange / Queue / Binding / Channel / Connection)
- 安装和使用
pika 库
- 发布/订阅 (生产, 消费)
MySQL
- 数据类型
- 连接
- 索引
pymysql / mysqlclient 库
- SQLAlchemy
开发者
2022-04-14
文本类型
最常见的文本类型数据序列化格式要数 JSON 和 XML 了。
早年间,知名的 RPC 规范 SOAP,XML-RPC 就是定义在 XML 的基础之上。
后来,随着 Web 的流行,JSON 使用得越来越多,基于 JSON 的 RPC 也开始出现。
但是最后 RPC 整体衰弱下来,终究没有抵过 HTTP API 的趋势。大部分 HTTP API 都是基于 JSON,少部分基于 XML。
苹果公司的 plist (Property list) 格式也是基于 XML。
除了 JSON 和 XML 之外,其他常见的文本类型数据序列化格式还有:CSV,YAML。
二进制类型
-
ASN.1 参考 2020/01/31, ASN.1。
-
D-BUS
-
三种语言相关的序列化格式:
-
Java Object Serialization
- Python Pickle
-
PHP serialization format
-
Mongo 引入的 BSON,二进制 JSON。类似的格式(JSON 二进制化)还有:
-
Binn
- CBOR (rfc8949)
- Amazon Ion
- msgpack
- Smile
-
ubjson。
-
也有一些 XML 二进制化的格式(Binary XML),比如:
-
W3C 推荐的 Efficient XML Interchange (EXI)
-
ISO 标准 Fast Infoset。
-
Apache 基金会的 Avro 和 Parquet。
-
近些年,随着微服务的流行,RPC 重新席卷而来。一般都是采用二进制的数据格式。
二进制的编码效率更高,可视化(转换成文本)的问题可以通过网关来提供。
Google 公司的 Protocol Buffers (protobuf) 和 FlatBuffers
Apache Thrift 也有自己独创的序列化格式(同名)。
开发者
2022-04-07
BNF,Backus-Naur Form,或者 Backus Normal Form,巴科斯范式
用来准确地描述一种计算机语言的语法规则,所以可以理解成是 “语言的语言”。
约翰·巴科斯(美国)首次在 ALGOL 58 中实现巴科斯范式。彼得·诺尔(丹麦)在 ALGOL 60 之中,进一步发展它的概念并将它的符号加以简化,称其为巴科斯范式(Backus Normal Form)。但高德纳主张应称为巴科斯-诺尔范式(Backus–Naur Form),因为它不算是一种正规形式(Normal Form)。
BNF 有两种常见变体:
- ABNF,扩充巴科斯范式
- EBNF,扩展巴科斯范式
不用深究 BNF,EBNF,ABNF,或者什么 xBNF 之间到底有什么区别,在需要开发语法解析器之前,只用知道这些是现在最主流的语法语言就行了。
这篇文章讨论的就是 Internet 领域常用的 ABNF。
(ABNF)它是由第68号互联网标准定义的,也就是RFC 5234,经常用于互联网工程任务组(IETF)通信协议的定义语言。
规则
ABNF 语法描述就是一组规则,每个规则分成规则名称、规则说明两部分。
PS:规则说明可以引用其他的规则。
拿 RFC#822 Internet Message Format 中的例子:
date-time = [ day-of-week "," ] date FWS time [CFWS]
day-of-week = ([FWS] day-name) / obs-day-of-week
day-name = "Mon" / "Tue" / "Wed" / "Thu" /
"Fri" / "Sat" / "Sun"
date = day month year
PS:这里只是截取的部分,没有列出来的规则在别处声明。
参考资料与拓展阅读
开发者 英语
2022-04-02
开发者想必都有耳闻,过去一两年间,因为一些美国政治风波的影响,各大社区都被政治正确问题所困扰,然后有一些相关改名的操作。
PS: 连黑人牙膏(高露洁旗下)都改名 “好来牙膏” 了。
最著名的可能就是 GitHub 中的默认主干分支从 master 改成 main,然后很多项目宣布将主从表述由 master/slave 改成 primary/replica,黑名单 Blacklist 改叫 Denylist 或者 Blocklist。
我最近听说有个叫包容性命名促进会的组织(Inclusive Naming Initiative)。
https://inclusivenaming.org/
他们列了一个清单,将开发过程中常用的一些有冒犯性的词,按照冒犯级别分三类,然后还给出来一些他们建议的替换词。
开发者 千年虫
2022-01-28
前些天应该都看过微软 Exchange Server 开发者跨年改 BUG 的新闻了吧 (相关链接)。
Exchange Server 的邮件过滤器采用了 yymmddHHMM 格式的时间,存储在 long 类型字段中。
PS: 微软的 C++ Compiler 会将 long 当做 32 位 int。
32 位有符号整形能够表达的范围:[$-2^{31}$, $2^{31} - 1$],也就是 [-2147483648, 2147483647]。
到了 2022 年,就会超出范围,比如 2022-01-01 12:00:00, 会被存储为 2201011200,会超出 signed int 的表达范围。
2147483647
2201011200 # 超出
可能有一些系统采用 int 类型存储 yymmdd + 4 位数字做编号的方式,比如 2101011234。
相同的原因,到了 2022 年,就行不通了。
2147483647
2201011234 # 超出
最好的办法是改成 long long, 或者 unsigned int。
PS: Linux 下的 C/C++ 编译器——GCC、CLang/LLVM 都是将 long 当做是 64 位。
参考资料与拓展阅读
- 微软文档,Data Type Ranges
Docs > Microsoft C, C, and Assembler > C language > C++ language reference > Built-in types > Data type ranges
- 微软文档,C and C++ Integer Limits
Docs > Microsoft C, C, and Assembler > C language > C language reference > Elements of C > C constants > C integer constants > C and C integer limits
- 人们说 32 位、64 位时,到底是在说啥
开发者 二维码 COVID19 西安
2022-01-07
西安一码通半个月内两次宕机,值此西安疫情突发之时,可是严重的安全故障。相关负责人(西安大数据资源管理局局长)已经停职检查。
为确保系统运行更高效,他们将一张图片从1MB压缩到500KB,再从500KB优化到100KB。这样的工作看似简单,却蕴含着高技术含量,他们连续两天两夜守在电脑前,终于攻下难关。
个人 开发者
2022-01-02
维持之前的设定,走技术专家的路线。
- 能处理工作中的难点问题,需要对业务有全局性的认识
- 对技术有深刻的理解,尤其是基础技术一定要扎实
- 方案设计能力:1. 对产品更多思考 2. 架构能力 3. 编码规范 4. 了解产品测试和运维
- 良好的沟通能力,培养个人影响力
第一点,今年会得到改进。
第二点,需要更长时间周期的投入才能见效。
第三点,比较泛,需要更多思考。
第四点,可能是最难的。我不知道该怎么做。
阅读 开发者
2021-12-30
语言无关
版本控制
编程艺术
编辑器
编译原理
操作系统
程序员杂谈
大数据
分布式系统
管理和监控
函数式概念
计算机图形学
其它
软件开发方法
设计模式
数据库
项目相关
在线教育
正则表达式
智能系统
IDE
Web
WEB 服务器
语言相关
Android
Assembly
AWK
C
C Sharp
C++
CoffeeScript
Dart
Elasticsearch
Elixir
Erlang
- Erlang 并发编程 (《Concurrent Programming in Erlang (Part I)》中文版)
Fortran
Golang
Groovy
Haskell
HTML / CSS
iOS
Java
JavaScript
AngularJS
:information_source: See also … Angular
Backbone.js
D3.js
Electron.js
ExtJS
impress.js
jQuery
Node.js
React.js
Vue.js
Zepto.js
LaTeX
LISP
Lua
Markdown
MySQL
NoSQL
Perl
PHP
Laravel
Symfony
PostgreSQL
Python
Django
R
reStructuredText
Ruby
Rust
Scala
Scheme
Scratch
Shell
Swift
TypeScript
Angular
:information_source: See also … AngularJS
Deno
VBA (Microsoft Visual Basic Applications)
Vim
Visual Prolog
开发者 正则表达式
2021-12-19
正则表达式在我们日常的软件开发过程中被广泛使用,例如编写 Nginx 配置文件、在 Linux 与 macOS 下查找文件,然而不同软件不同操作系统对于正则的应用有着不一样的行为,主要原因是正则表达式演进过程中,出现 POSIX 与 PCRE 派系之分。