视频处理 ffmpeg
2021-08-28
ffprobe
ffprobe movie.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'movie.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2020-02-20T06:07:54.000000Z
Duration: 01:43:14.16, start: 0.000000, bitrate: 2844 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1495 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Metadata:
creation_time : 2020-02-20T06:07:54.000000Z
Stream #0:1(und): Audio: ac3 (ac-3 / 0x332D6361), 44100 Hz, stereo, fltp, 448 kb/s (default)
Metadata:
creation_time : 2020-02-20T06:08:03.000000Z
Side data:
audio service type: main
Stream #0:2(und): Audio: ac3 (ac-3 / 0x332D6361), 44100 Hz, 5.1(side), fltp, 448 kb/s (default)
Metadata:
creation_time : 2020-02-20T06:09:02.000000Z
Side data:
audio service type: main
Stream #0:3(und): Audio: ac3 (ac-3 / 0x332D6361), 44100 Hz, 5.1(side), fltp, 448 kb/s (default)
Metadata:
creation_time : 2020-02-20T06:09:29.000000Z
Side data:
audio service type: main
ffmpeg
ffmpeg -loglevel info -i movie.mp4 -ss 00:29:08.0 -to 00:31:25.0 -s 1280x720 -c copy -map 0:v:0 -map 0:a:0 -map 0:a:1 -map 0:a:2 test.mp4
# 输入,复制,设置第一个音频流为默认,输出
# 发现其他几个音频流不见了,输出文件中只有一个音频流
ffmpeg -i movie.mp4 -c copy -disposition:a:1 default 冰雪奇缘2_new.mp4
ffmpeg -i movie.mp4 -c copy -map 0:v:0 -map 0:a:1 -map 0:a:0 -disposition:a:0 default -disposition:a:1 0 冰雪奇缘2_new2.mp4
解析:输入,复制(不重新编码),
-map 0:v:0
-map 0:a:1
-map 0:a:0
-c / -codec
-c:v
-c:a
-c:s
-c:d
[mp4 @ 0x556a8afca7c0] track 1: codec frame size is not set
ffmpeg -i test.mp4 -frames 1 -f image2 /tmp/image.png
计算机网络 IPv6
2021-08-27
- IPv6 是个好东西
- 我们都知道 IPv6 是个好东西
- 我们都想用上 IPv6
那么问题来了,为什么现在还没有大规模普及 IPv6 呢?我想了半天,得到了一个答案:因为我没做好准备。
确切的说,应该是:无数个我一样的人没有做好准备。
IPv4 很简单的一串数字,虽然世界上大部分人可能都不知道它是个啥,但肯定也存在相当比例能够理解这个概念的人,这对于一项技术的普及很有必要。
但是 IPv6,我作为一个开发者都说不清楚,更别提其他普通用户了。
软件设计
2021-08-24
在满足需求、有良好的使用体验(基于真实的用户看法,不是开发者自己觉得)基础上,进一步提更高的要求:
- 接口响应超时
- CPU load 升高
- 内存
- GC 频繁
- 死锁
- 大数据量存储
一、三高(高可用 + 高性能 + 高并发)
1.1 高可用(可用性) Availability
可用性强调的是服务的总体持续时间,比如可用性级别为三个九(99.9%)意味着一年 365 天里总共停止服务 8.76 个小时。
可靠性 Reliability
- 功能如预期运行(宁可抛出异常,不要默默地给错误运行)
- 出现故障的频率
- 出现故障也应该不对系统造成太大的影响
- 可维修性:故障定位容易、修复步骤简单、修复成本低廉
和高可用的区别:
- 大部分时候,这两个指标都是密切相关的
- 如果我有一个电视机,每天都准时看儿童频道的《动漫世界》一个小时,然后过去三年也都用得挺好,没有送去修过(导致我看不了),那可以说高可用了(正常运行时间 / 预期运行时间),但是如果这个电视机每次看的时候可能隔一会儿需要拍一巴掌(中间出雪花的时间可以忽略),那这就不能说这个电视机是可靠了。
-
又比如说,我又买了另一个电视机,不需要拍巴掌了,我看的挺开心,不过才高兴两年,坏了,看不了了,楼下电器维修店的小哥搞不定,联系厂家售后维修,一下就是两周看不了电视。对于一个家用电器,两年坏一次可以说高可靠,但是可用性就有问题了((365 - 7) / 365 = 98%
)。
-
MTBF Mean Time Between Failure 无故障时间,每隔多久遇到一次故障
- MTTR Mean Time To Repair 修复时间,每次遇到故障需要维修多久
-
MTTF Mean Time To Failure
-
根据当前的可用性级别,然后指定合理的可行性目标
- 操作规范/最佳实践
- 预防性维护 Preventive Maintenance
- 合理的 PM 计划:可实施,正确的时机
- 重点是影响最大的故障
- 不断的改进和优化
稳定性 Stability
连续性 Continuity
故障出现之后的处理能力:故障能否快速修复,能否不影响主要业务的运行。
比如我有两台电视机,坏了一台,我还有另一台可以看,虽然另一台是之前淘汰的一台黑白电视,效果差点,好歹能用啊。
这台电视就是我们常说的灾难备份,或者说容灾备份。
1.2 高性能 HP Performance
1.3 高并发 HC Concurrency
二、安全性
- 基础设施安全:操作系统、网络、数据库
- 数据安全
- 脱敏:降低数据泄漏所产生的消极影响
三、易用性
四、其他
3.1 可测试性
3.2 可维护性
运维方便,运营方便,二次开发方便
- 代码注释与文档
- 合理的日志
- 监控与数据统计
- 误操作发生率低
- 可理解性:代码可读性,合理的技术框架/系统架构
- 可拓展性:新增功能不需要修改现有结构的能力。分层,合理的耦合度(尽可能的高内聚、低耦合),合理的功能抽象,数据结构可拓展
3.3 可伸缩性 Scalable/Scalability
在系统不需要修改(顶多改改配置)的前提下,通过增加或减少硬件资源来动态提升或降低系统各项能力。
- 通常采用服务器集群的方式。
- 集群一上来,就和高可用有很大关联。
3.4 可扩展性 Extensibility
通过合理的设计,使得新增功能时,不需要改动现有功能,或者只需要对现有系统进行少量调整就行。
总之,将新功能对现有业务逻辑的影响降到最低。
3.5 可观测性
能够方便快捷的了解到程序运行情况。
合理的日志,指标数据的暴露(Pull/Push)。
Golang
2021-08-24
- 官方文档镜像:https://docs.studygolang.com/
- Golang PlayGround: https://play.golang.org/ (自动跳到 https://go.dev/play/)
- https://awesome-go.com/
- https://github.com/avelino/awesome-go
- https://github.com/jobbole/awesome-go-cn 中文版
- Go语言爱好者周刊
- 开源图书
- 《Go 入门指南》
《The Way to Go》中文版
- 《高效的 Go 编程》
《Effective Go》中文版
- 《Go语言标准库》
《The Golang Standard Library by Example》中文版
- 极客兔兔,七天用Go从零实现系列
开发者 架构
2021-08-22
阅读了来自公众号PM圈子的一篇文章《如何搭建一个拖垮公司的技术架构?》,反过来说的话,大概就是要注意以下方面。
HTML
2021-08-21
HTML5 的一个重要变化是彻底放弃 XML 化路线,也就是所谓的 “no logger based on SGML”,事实上 HTML5 就是因为浏览器厂商和 W3C 之间存在是否应该 XML 化这个分歧才诞生出来的。最终厂商联盟 WHATWG 获胜,取得了标准制定方面的绝对话语权(W3C 设计的 XHTML2 胎死腹中),其他的功能上的大跨度变化(除了本身的功能增加之外,对外设备连通性,性能)都只能算是副产品。
我们常说的 H5 实际上是 HTML5 + CSS3, JS 一般好像没有要求,应该还是默认 ES5, 不过现在 ES6 目前也已经在主流浏览器上得到了很好的支持。
黄色:废弃
绿色:新增
红色:非标准
标签
基础框架
<!DOCTYPE>
<!-- -->
html
head
body
title
meta
base
basefont
style
link
文档结构
p
h1
... h6
ul
, ol
, li
dl
, dt
, dd
dir
使用 ul 替代
span
div
table
, tr
, td
, th
, thead
, tbody
, tfoot
, col
, colgroup
, caption
a
样式/排版
abbr
, acronym
简写
bdo
文字书写方向
b
, strong
big
, small
center
font
i
斜体
s
, stike
中划线
u
下划线
del
, ins
删除、插入,默认就是加上中划线和下划线
em
强调
dfn
术语
q
, blockquote
, cite
引用
address
var
变量
samp
样本
kbd
br
hr
sub
, sup
ruby
, rt
, rp
pre
, code
图片/视频/音频
img
map
area
canvas
figcaption
figure
piture
svg
audio
video
source
track
表单
form
input
select
textarea
button
option
, optgroup
label
legend
datalist
配合 input 使用
output
Frame
frame
frameset
noframes
iframe
程序
script
noscript
embed
可能是 v4 没有纳入标准
object
param
applet
语义标签
main
header
footer
nav
article
aside
section
details
dialog
menu
menuitem
火狐
summary
Web Components
Custom Elements
H5 特性。
新的 API
- SVG
- Canvas
- 音频/视频
- WebRTC
- 本地存储
WebStorage
: LocalStorage
+ SessionStorage
IndexedDB
WebSQL
PS: WebSQL
相关规范已经冻结,所以现在不属于 HTML5 标准,只有 Safari 和 Chrome 系浏览器支持。
火狐全力支持 IndexedDB
,认为一项标准不应该依赖一个具体的实现(SQLite),而且对于在网页端执行 SQL 非常不看好。
- WebAssembly
这同样不属于 HTML5 的范畴,不过也是一项重要的标准,可能对 Web 开发产生很大的影响。
- WebSockets
- Server-Sent Event
- 2D/3D (WebGL)
- XMLHttpRequest Level 2
参考资料与拓展阅读
论坛 Discuz
2021-08-21
在看腾讯云服务器时,意外看到一个镜像的名称是 Discuz! Q,看这个名字,难道康盛发了新产品?
打开官网,从其介绍中了解到:
- 完全重写的版本
- 真开源:Apache 2.0 协议
从官网下载的包可以看到代码中的版权声明确实是 Apache 2.0 协议,不是之前那种语焉不详的中国特色 “开源” 协议
不过,官网号称即将上到 GitHub,但距离第一个版本发布已经一年半了,依然不能在 GitHub 上找到相关仓库
- 读写分离:后端 PHP7,前端 Vue.js
- H5 友好
其他:
- 更新记录
Discuz! Q alpha v0.1.200124 2020/1/24 第一个版本
Discuz! Q RC v1.0.200715 2020/7/15 第一个正式版本
Discuz! Q RC v3.0.210824 2020/8/24 最新版本
1. 官方演示站:https://discuz.chat/ 如果感兴趣可以打开看看。
既然腾讯有投入,那说明这个东西还是有一定价值啊,不知道阿里巴巴收购的 PHPWind (09 年就歇菜了) 会不会再起来蹦跶蹦跶?
Python PythonSourceCode
2021-08-19
cpython/Include/cpython/tupleobject.h
INIT_TYPE(&PyList_Type, "list");
SETBUILTIN("list", &PyList_Type);
PyTypeObject PyList_Type
的定义在 Objects/listobject.c
中。
成员方法
相关的方法在 #define LIST_.+_METHODDEF
的定义中,比如 extend
方法:
#define LIST_APPEND_METHODDEF \
{"append", (PyCFunction)list_append, METH_O, list_append__doc__},
static PyObject *
list_append(PyListObject *self, PyObject *object)
/*[clinic end generated code: output=7c096003a29c0eae input=43a3fe48a7066e91]*/
{
if (app1(self, object) == 0)
Py_RETURN_NONE;
return NULL;
}
static int
app1(PyListObject *self, PyObject *v)
{
Py_ssize_t n = PyList_GET_SIZE(self);
assert (v != NULL);
if (n == PY_SSIZE_T_MAX) {
PyErr_SetString(PyExc_OverflowError,
"cannot add more objects to list");
return -1;
}
if (list_resize(self, n+1) < 0)
return -1;
Py_INCREF(v);
PyList_SET_ITEM(self, n, v);
return 0;
}
Golang Gin
2021-08-17
:) 本文正在编辑中,暂时不提供浏览...
软件工程
2021-08-15
- 分析:产品需求文档 (Product Requirements Document, PRD)
- 设计:模型,模式,业务规则,软件架构
- 编码:开发,验证,集成
- 测试:测试
- 维护:安装部署 Deploy、升级 Upgrade、配置、迁移 Migration、集成 Integration、评估 Evaluation 、技术支持 Support
https://www.ruanyifeng.com/blog/2019/03/agile-development.html
敏捷开发入门教程
https://docs.microsoft.com/zh-cn/devops/plan/what-is-agile-development
什么是敏捷开发?
净室
CMMI
RUP
极限编程 XP
Scrum
Kanban
RAD
分析
设计
编码
测试
维护:运维,运营,售后工程师
技术写作:
- 用户手册 User Guide
- 开发手册 Developer Guide
- 管理员手册 Administrator Guide
- 故障排除 Troubleshooting
- 问答 FAQs (Frequently Asked Questions)
- 发布说明 Release Notes
- 白皮书 Whitepaper
- How To Guide
- 用户案例 User Cases / Success Stories
开发模型
CMM,能力成熟度模型 Capability Maturity Model
CMMI,能力成熟度模型集成 Capability Maturity Model Integration,还有要给中文商标:希迈
GJB5000
GJB 5000-2003 军用软件能力成熟度模型
GJB 5000A-2008 军用软件研制能力成熟度模型
GJB 5000B-2021 军用软件能力成熟度模型