科学 物理
2019-11-03
光、电、磁三者好像完全没有关系。但是近代的一些科学研究表明它们其实是一种东西 —— 电磁波。
1873 年,42 岁的麦克斯韦出版了《论电和磁》,预言了电磁波的存在,同时认为光是电磁波的一种。
PS: 1879 年,48 岁的麦克斯韦因病去世,同年,爱因斯坦诞生。
1905 年,奇迹之年,最著名的“民科” —— 26 岁的专利局职员爱因斯坦发表了一篇论文《On the Electrodynamics of Moving Bodies》,中文翻译为“论动体的电动力学”。论文中指出,电和磁是在不同参考系中观察到的同一种现象。
最后,科学家发现 光、电、磁 的本质,和微观粒子,和量子力学有很大的关系。
我敢说,对于 光、电、磁 三者本质的认知,目前,最顶尖的科学家也不敢打包票。
什么是光?
我们所说的光,又称之为可见光,与紫外线、红外线、X 光等区分开。
实质上来讲,可见光只是电磁波谱上一小段频谱,我们的肉眼对这一段比较敏感而已。
PS: 不同动物对不同频段的电磁波敏感度不同,所以其他动物(比如昆虫)看到的世界和我们很大有很大差异。

高中物理就告诉我们:
- 光是一种电磁波,波长在 500nm 左右。
- 光是由光子组成的粒子流。
- 光同时具有波的特性、粒子的特性,这叫做波粒二象性。
电和磁
我们初中就开始学习电,老师教我们,电是由于电子运动产生的物理现象。通过施加电压,电子就会沿着电场运动。
磁则来自磁铁,或者电流。
电磁波
电磁波是指同相振荡且互相垂直的电场与磁场,在空间中以波的形式传递能量和动量,其传播方向垂直于电场与磁场的振荡方向。
- 电场和磁场相互垂直,同生同灭。
- 电场和磁场同相振荡。
- 电磁波可以传输能量和动量。
左手定律,右手定律,相信很多朋友记忆深刻。
电磁波的频率

频率由低到高(波长由长到短):
- 无线电波: 300GHz 1mm ~ 3KHz 100km
- 微波: 300MHz ~ 300GHz 1m
- 我们的微波炉 2.45GHz。
- 红外线 760nm ~ 1000nm (1mm)
- 可见光 380nm ~ 780nm
- 紫外线 10nm ~ 400nm
- X 射线 0.01nm ~ 10nm
- 伽马射线(γ射线): 小于 0.01nm
- 用于医疗:放射治疗(放疗)、伽马刀
- 超新星爆发
为什么光能透过空气、水、玻璃,不能透过墙壁?
参考资料与拓展阅读
容器 K8S
2019-10-15
安装
安装 minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo install minikube-linux-amd64 /usr/local/bin/minikube
$ minikube version
minikube version: v1.0.0
安装 kubectl
https://packages.cloud.google.com/apt/doc/apt-key.gpg
https://apt.kubernetes.io/
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl kubelet kubeadm
Docker 的配置文件:~/.docker/config.json
。至少,docker login 之后会生成一个。
~/.minikube/
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
参考资料与拓展阅读
开发者
2019-10-02
:) 本文正在编辑中,暂时不提供浏览...
WebDev Python Tornado
2019-09-20
由于 Tornado 部署在 Nginx 后面,通过 self.request.remote_ip
总是只能拿到 Nginx 地址。
Python Django
2019-09-16
Django 项目组试图在保持向后兼容的基础之上,对阻塞部分进行改造,使之支持异步(通过装饰器的方式)。
包括 Session、Auth、ORM 与 Handlers 等。
ASGI 模式将 Django 作为原生异步应用程序运行,原有的 WSGI 模式将围绕每个 Django 调用运行单个事件循环,以使异步处理层与同步服务器兼容。
在这个改造的过程中,每个特性都会经历以下三个实现阶段:
- Sync-only,只支持同步,也就是当前的情况
- Sync-native,原生同步,同时带有异步封装器
- Async-native,原生异步,同时带同步封装器
Django 3.0 开始提供运行 ASGI 应用支持,让 Django 逐渐具备异步功能。做了这一改动后,Django 现在会感知到异步事件循环,并将阻止从异步上下文调用标记为 “异步不安全” 的代码(例如 ORM 操作),如果开发者之前使用的是异步代码,则可能会触发。如果看到 SynchronousOnlyOperation 错误,可以仔细检查代码并将数据库操作移到同步子线程中。
其它方面,Django 现在支持 MariaDB 10.1 及更高版本;新的 ExclusionConstraint 类可以在 PostgreSQL 上添加排除约束;输出 BooleanField 的表达式现在可以直接在 QuerySet 过滤器中使用,而无需先注解然后对注解进行过滤;自定义枚举类型 TextChoices、IntegerChoices 和 Choices 现在可用作定义 Field.choices 的方法。
需要特别注意的是:自从 2.2 之后,Django 将不再支持 Python 3.5。
更新说明:https://docs.djangoproject.com/en/dev/releases/3.0
Django
2019-09-16
Ver |
Date |
Notes |
1.0 |
2008-09-03 |
|
1.1 |
2009-07-29 |
|
1.2 |
2010-05-17 |
|
1.3 |
2011-03-23 |
|
1.4 |
2012-03-23 |
LTS |
1.5 |
2013-02-26 |
|
1.6 |
2013-11-06 |
|
1.7 |
2014-09-02 |
|
1.8 |
2015-04-01 |
LTS 2018-04-01 |
1.9 |
2015-12-01 |
|
1.10 |
2016-08-01 |
|
1.11 |
2017-04-04 |
LTS 2020-04-01 |
2.0 |
2017-12-02 |
|
2.1 |
2018-08-01 |
|
2.2 |
2019-04-01 |
LTS 2022-04-01 |
3.0 |
2019-12-02 |
|
3.1 |
2020-08-04 |
|
3.2 |
2021-04-06 |
LTS 2024-04-01 |
4.0 |
2021-12-07 |
|
4.1 |
2022-08 |
|
4.2 |
2023-04 |
LTS 2026-04-01 |
5.0 |
2023-12 |
|
Python asyncio
2019-08-31
:) 本文正在编辑中,暂时不提供浏览...
DB MySQL
2019-08-25
数值
-
bit
[1 - 64]
-
tinyint
1
smallint
2
mediumint
3
int
4
-
bigint
8
-
float
4 浮点(单精度)
double
8 浮点(双精度)
decimal(m, d)
max(m, d) + 2 定点
别名 Synonyms:
integer
-> int
bool
/ boolean
-> tinyint(1)
dec
/ numeric
/ fixed
-> decimal
double precision
/ real
-> double
PS: 如果开启 REAL_AS_FLOAT
模式,REAL
就变成了 FLOAT
的别名。
字符串/文本
char
-
varchar
-
tinytext
text
mediumtext
-
longtext
-
JSON
MySQL 5.7 加入
二进制
binary
-
varbinary
-
tinyblob
blob
mediumblob
longblob
时间
类型 |
长度 |
备注 |
year |
1 |
四位数:1901 ~ 2155 两位数:00 ~ 69 (2000 ~ 2069) 70 ~ 99 (1970 ~ 1999) |
date |
3 |
1000-01-01 ~ 9999-12-31 |
time |
3 |
-838:59:59.999999 ~ 838:59:59.999999 即:-34d23h ~ 34d23h |
datetime |
8 |
1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 |
timestamp |
4 |
1970-01-01 00:00:00 ~ 2038-01-19 11:14:07 |
- 用字符串(
varchar
)表示时间,除了失去数据库这一层的数据类型保证之外,还会在时间比较运算场景下,失去索引命中可能。
- 用整型数
bigint
(8 字节)表示时间,可以扩大 timestamp
时间范围,但要自己维护数据(其实还是比较好维护的)。
- 带时区的时间:
timestamp
- 带精度的时间:
time
、datetime
、timestamp
,精度最大为 6,表示毫秒。比如:timestamp(6)
其他
货币
- 以分为单位
Integer
Decimal
,不要用 float
,double
参考资料与拓展阅读
Linux PowerShell 开发工具
2019-08-22
PowerShell 的最近的一次更新修复了其作为 SSH 的登录 Shell 的一些问题。
Win 10 对 NFS,SSH 的支持推进也是有目共睹。
随着 MS 对 Windows 的策略调整,估计以后 Windows 服务器也会变多。
# Download the Microsoft repository GPG keys
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
# Update the list of products
sudo apt-get update
# Enable the "universe" repositories
sudo add-apt-repository universe
# Install PowerShell
sudo apt-get install -y powershell
# Start PowerShell
pwsh
PS 常用命令
# 获取本地 IP
(invoke-webrequest -uri "http://ifconfig.me/ip").content
get-nettcpconnection | where-object {$_.State -eq "Listen"}
get-nettcpconnection -localport 49667
get-process -id (get-nettcpconnection -localport 49667).owningprocess
stop-process -id (get-nettcpconnection -localport 11).owningprocess
"# README" | out-file README.md
type README.md
Linux Shell
2019-08-21
PS: Shell 编程时总是不能区分什么是 Shell 语法,什么是系统命令。
基础
x=abc
echo hello world
echo 'Just output $x'
echo "The value of x: $x"
echo ${x:?变量未设置}
echo ${x:+变量已设置}
echo ${x:-默认值}
变量
Shell 就是标准的弱类型,所有的数据都是按照字符串的形式存储,然后根据上下文决定如何处理。
x='hello world' # 等于号两边不能有空格
local x='hello world' # 本地作用域,函数体中使用
echo $a
echo ${a}
unset a
readonly a # 将变量设置成只读,不能修改,不能 unset
readonly b=1
# 没有提供方法取消 readonly 属性,但是我看到 SO 上有提供非常规方法来做这件事情
字符串变量
单引号不支持变量和转义(也就是说字符串中不能出现单引号)!
x="hello world"
echo $x
echo ${#x}
echo ${x/world/markjour} # 字符串替换
# 子字符串/字符串切片
echo ${x::5} # hello
echo ${x:7:8} # world
echo ${x::4} # hell
echo ${x::-4} # hello w
特殊变量
$0
$1
...
$n
# 所有参数
$*
$@
$# # 参数个数
$$ # 进程号
$! # 后台进程号
$? # 上一个命令的退出状态
$- # himBHs 当前 Shell 的选项
数组
arr=(zhao qian sun li)
arr[4]=zhou
arr[5]=wu
arr[6]=zheng
arr[7]=wang
echo ${arr[0]} # zhao
echo ${arr[@]} # zhao qian sun li zhao wu zheng wang
# 获取数组元素个数
echo ${#arr} # 4 定义时的长度,后来新加的不算,也就是说这个值定义变量的时候就定了
echo ${#arr[@]} # 8
条件
if condition:
then
:
else:
:
fi
循环
for var in list:
do
:
done
数学计算
test
逻辑
数学比较
字符串比较
文件相关
bcdfgkpurwxse
白菜豆腐干,靠谱如我,羞涩
最常用的:
-e
检查路径是否存在
-d
检查是否为目录
-f
检查是否为文件
-r
检查文件是否可读
-w
检查文件是否可写
-x
检查文件是否可执行
-s
检查文件是否为空
参考资料与拓展阅读