#183 The Pallets Projects

2017-01-30

这个组织下的每个项目单拿出来都是响当当的存在:

  • Click — Beautiful, composable command line interface creation kit.
  • Flask — a flexible and popular web development framework
  • ItsDangerous — Safely pass trusted data to untrusted environments and back.
  • Jinja — a full featured template engine for Python
  • MarkupSafe — Safely add untrusted strings to HTML/XML markup.
  • Quart — an async reimplementation of flask
  • Werkzeug — The comprehensive WSGI web application library.
  • Click 命令行工具
  • Flask 轻量级 Web 框架
  • ItsDangerous
  • Jinja 知名模板库
  • MackupSafe
  • Quart
  • Werkzeug Web 工具箱(WSGI),Flask 的底层

#182 不加 sudo 执行 Docker 命令

2017-01-13

因为公司组织培训 Docker,为了更好参与课程,我提前一周开始预习 Docker 技术。

安装 Docker 之后,首次执行 docker info 时接到错误信息:“Cannot connect to the Docker daemon. Is the docker daemon running on this host?”。
当时,我再三确认了 Docker 服务运行状态,确实没有任何问题,傻眼了。
之后,加上 sudo 试试才运行正确。

#181 计量单位

2017-01-12

国际单位制

基本单位

类型 名称 符号 定义
时间 t s 铯-133 原子 在基态下的两个超精细能级之间跃迁
所对应辐射的 9192631770 个周期的时间
长度 L m 真空中,光一秒行程的 $\frac{1}{299792458}$
质量 m g
电流 I 毫安 A
热力学温度 T 开尔文 K
物质的量 n(v) 摩尔 mol
发光强度 l(lv) 坎德拉 cd

国际单位制词头

词头 符号 中文 系数
yotta Y 尧(它) $10^{24}$
zetta Z 泽(它) $10^{21}$
exa E 艾(可萨) $10^{18}$
peta P 拍(它) $10^{15}$
tera T 太(拉) $10^{12}$
giga G 吉(咖) $10^{9}$
mega M $10^{6}$
kilo k $10^{3}$
hecto h $10^{2}$
daca da $10^{1}$
deci d $10^{-1}$
centi c $10^{-2}$
milli m $10^{-3}$
micro μ, u $10^{-6}$
nano n 纳(诺) $10^{-9}$
pico p 皮(可) $10^{-12}$
femto f 飞(母托) $10^{-15}$
atto a 阿(托) $10^{-18}$
zepto z 仄(普托) ze4 $10^{-21}$
yocto y 幺(科托) $10^{-24}$

时间单位

  • 天 d day
  • 小时 h hour
  • 分 m minute
  • 秒 s second
  • 毫秒 ms millisecond
  • 微妙 us microsecond
  • 纳秒 ns nanosecond

长度单位

长度的基本单位是米,标准是光在真空中 $1 / 299792458$ 秒内运动的距离。

市制

毫厘分寸尺丈

依据民国 18 年(1929 年)《度量衡法》。
1959 年《统一公制计量单位中文名称方案》基本沿用《度量衡法》,只是单位前面加一个 字,另外没有列出引、毫。

 1 米   = 3 尺
10 米   = 3 丈
 1 公里 = 2 里

1 里 =  15 引 = 150       丈 = 500 米
1 引 =  10 丈 =  33.333   米
1 丈 =  10 尺 =   3.333   米
1 尺 =  10 寸 =   0.333   米
1 寸 =  10 分 =   0.333 分米
1 分 =  10 厘 =   0.333 厘米
1 厘 =  10 毫 =   0.333 毫米
         1 毫 =   0.033 微米 = 33.333 微米

天文单位

我知道的四个不属于国际单位制的天文学常用单位:

  1. 光秒, Light Second, ls, 299792458 m, 约等于 30 万公里
    PS: 换算成公制单位,1 ls ≈ 0.3 Gm (吉米)
  2. 光年, Light Year, ly, 大约等于 $9.46 × 10^{18}$ km (9.46 千亿公里)
    $$
    365.25 × 86400 = 31557600 \
    × 299792458 = 9460730472580800
    $$
  3. 天文单位, Astronomical Unit, au, 日地平均距离(地球和太阳之间距离的平均值)
    2012 年国际天文学大会 IAU 将其固定为 149,597,870,700 m, 也就是 1 AU ≈ 1.5 亿公里 ($10^{9}$)。
    PS: 换算成公制单位,1 au ≈ 149.6 Gm (吉米)
    PS: 1 au ≈ 499 ls,也就说光从太阳到地球大概需要 499 秒左右(8 分多钟)。
    PS: 作为参考: 月地距离 $3.844 × 10^{5}$ km 约等于 2.57 ‰ au; 太阳半径 $6.955 × 10^{5}$ km 约等于 4.65 ‰ au (太阳半径 = 1.81 月地距离)

  4. 秒差距, Parsec, pc, 通过时差来表示天文距离
    如果地球和太阳的连线,地球和另一个天体的连线,成 89 度角,那么太阳和这个天体之间的距离为 1 pc
    PS: 视察越大距离越近,视察越小距离越远

示例图(非等比例绘制):
img

根据三角函数的计算,

$$
1 pc = \frac {1 au} {tan 1}
= \frac {1 au} {\frac {1} {360} × \frac {π} {180}}
= \frac {648000} {π} au
$$

约等于 206265 au, 或者 3.26 ly,或者 $3 × 10^{13}$ km (三万亿公里)。

英制

暂无更多信息。

面积单位

平方十米 $dam^{2}$, 平方百米 $hm^{2}$, 平方千米 $km^{2}$ ...
平方米 $m^{2}$,平方分米 $dm^{2}$,平方厘米 $cm^{2}$ ...

市制

毫厘分亩顷

1 顷 = 100 亩 = 600000 平方尺 = 66666.666 平方米
1 亩 =  10 分 =   6000 平方尺 =   666.666 平方米
1 分 =  10 厘 =    600 平方尺 =    66.666 平方米
1 厘 =  10 毫 =     60 平方尺 =     6.666 平方米
         1 毫 =      6 平方尺 =     0.666 平方米

公顷

1 平方米 =     9 平方尺
1 公顷   =    15 亩
         = 90000 平方尺
         = 10000 平方米
1 平方尺 =   100 平方寸
         =   1/9 平方米

英制

暂无更多信息。

体积单位

立方厘米,立方米...

不属于国际单位制的体积单位是:

  1. 升, liter, L, $\frac {1} {1000} m^3$

市制

重量单位

物理学上,叫做质量。

  1. 吨 = 1000 kg
  2. 千克,公斤,kilogram
  3. 克,gram

市制

1 担 = 100 斤 = 50   公斤
1 斤 =  10 两 =  0.5 公斤
1 两 =  10 钱
1 钱 =  10 分
1 分 =  10 厘

PS: 29 年的《度量衡法》中 1 斤 = 16 两,而 59 年的《统一公制计量单位中文名称方案》则是 1 斤 = 10 两。

英制

暂无更多信息。

信息计量单位

这里需要特别说明的是国际单位制是十进制的,而 IT 界一般遵循二进制的计量方式(IEC 60027-2)。

单位 符号 说明 近似 IEC 单位 符号 说明
byte B $10^{0}$bytes byte B $2^{0}$bytes
kilobyte KB $10^{3}$bytes kibibyte KiB $2^{10}$bytes
megabyte MB $10^{6}$bytes mebibyte MiB $2^{20}$bytes
gigabyte GB $10^{9}$bytes gibibyte GiB $2^{30}$bytes
terabyte TB $10^{12}$bytes tebibyte TiB $2^{40}$bytes
petabyte PB $10^{15}$bytes pebibyte PiB $2^{50}$bytes

#180 Shell 重定向

2017-01-10
command >output.txt         # 把标准输出重定向到一个文件中
command >> output.txt           # 把标准输出重定向到一个文件中(追加)

command 1>output.txt        # 把标准输出重定向到一个文件中
command 1>>output.txt        # 把标准输出重定向到一个文件中(追加)

command 2>output.txt        # 把标准错误重定向到一个文件中
command 2>>output.txt           # 把标准错误重定向到一个文件中(追加)

command >output.txt 2>&1    # 把标准输出和标准错误一起重定向到一个文件中
command >>output.txt 2>&1       # 把标准输出和标准错误一起重定向到一个文件中(追加)
command <input.txt              # command命令以output.txt文件作为标准输入
command <input.txt >output.txt  # command命令以output.txt文件作为标准输入, 以 output.txt 文件作为标准输出

# 从标准输出中读入,直至遇到delimiter分界符(不能与已存在的文件重名)
command << delimiter
command <&m  把文件描述符m作为标准输出
command >&m  把标准输出重定向到文件描述符m中
command <&-  关闭标准输入

#179 Linux date 命令

2017-01-02

示例

# %c 表示当前 locale 的日期和时间
$ date +%c
2017年01月02日 星期一 12时00分00秒

# 获取当前时间戳
$ date +%s
1483329600
# -d 表示使用指定时间,而非默认的当前时间
# 获取指定时间的时间戳 (时间字符串 -> 时间戳)
$ date +%s -d "2017/01/01 00:00:00"
1483200000
# @ 表示时间戳
# 时间戳 -> 时间字符串
$ date -d @1483200000  # 等于: date --date="@1483200000"
2017年 01月 01日 星期日 00:00:00 CST
$ date -d @1483200000 +%c
2017年01月01日 星期日 00时00分00秒

# -u 表示使用 UTC 时间
$ date -u
2017年01月02日 星期一 14时00分00秒 UTC
$ date -d @1483200000 -u
2016年 12月 31日 星期六 16:00:00 UTC

$ date +%Y%m%d%H%M%S
20170102120000

# -R, --rfc-email, RFC 5322 格式
$ date -R
Mon, 02 Jan 2017 12:00:00 +0800

$ date --rfc-3339=date     # 可以缩写成 d
2017-01-02
$ date --rfc-3339=seconds  # 可以缩写成 s
2017-01-02 12:00:00+08:00
$ date --rfc-3339=ns       # 可以缩写成 n
2017-01-02 12:00:00.000000000+08:00

常见日期格式占位符

  • Y 年,4 位数字
  • m 月,2 位数字
  • d 日,2 位数字
  • H 时,2 位数字
  • M 分,2 位数字
  • S 秒,2 位数字
  • F 完整日期, 等于 %Y-%m-%d
  • T 完整时间, 等于 %H:%M:%S
  • R 等于 %H:%M

#177 Visual C++

2016-11-07

VC6

Microsoft Visual C(简称Visual C、MSVC、VC或VC)是微软公司的C开发工具,具有集成开发环境,可提供编辑C语言,C以及C/CLI等编程语言。

MS 的 C/C++ 开发工具,继承了他们家的 Win32API,MFC,.NET 等编程框架。

最早是 MSC (Microsoft C);
后来添加 C 支持,改名叫 MS C/C;
再后来,GUI 编程兴起,改名 Visual C,简称 MSVC;
再后来,.NET 框架出来了,改名 Visual C
.NET (Visual C .NET 2002);
再后来,05 年,又给改回去了 (Visual C
2005);
现在最新版本已经到了 Visual C++ 2015。

版本历史

Version Time Notes
MSC 1.0 1983
MSC 7.0 1989
MS C/C++ 7.0 1992 c++, mfc
VC++ 1.0 1993 16bit 版本
VC++ 1.52C 1993 16bit 最后版本
VC++ 1.0 1993 32bit 版本, 重置了版本号
VC++ 2.0 Win95 发布
VC++ 4.0 1995
VC++ 5.0 1997
VC++ 6.0 1998
Visual C++ .NET 2002 2002 7.0
Visual C++ .NET 2003 2003 7.1
Visual C++ 2005 2005 8.0, 开始支持 64bit
Visual C++ 2008 2007 9.0
Visual C++ 2010 2010 10.0
Visual C++ 2012 2012 11.0
Visual C++ 2013 2013 12.0
Visual C++ 2015 2015 14.0
Visual C++ 2017 2017 14.10
Visual C++ 2019 2019 14.20

PS: 大学学 C++ 的时候就是用的 VC6。

VC2015

  • C99
    2013 才开始支持,到 2015,基本上实现了 C99。
    PS: C11 就不要想了。
  • C14
    微软在 C
    领域还是很有发言权的。

.NET

Managed C++

Managed Extensions for C, C托管扩展

微软对 C 做了一个语法拓展(属性和关键字),便于将 C 编译成 .NET 平台中间代码。

非托管代码(没有改写)可以与托管代码进行很好的互操作。

但是由于引入了大量新的代码,代码整体可读性降低了。

C++/CLI

经过多年工程实践,微软为 Managed C 进行了大量改进。然后可能是标准化(ECMA-372)的缘故,新版本改名叫 C/CLI。
VC2005 开始使用 C/CLI 代替 Managed C

根据文档(如何将 C++/CLI 项目移植到 .NET Core)来看,C++/CLI 项目就算移植到 .NET Core 也只能运行于 Windows。原因不明。

参考资料与拓展阅读

#176 PHP 中 foreach 循环赋值给引用的一个特性(坑)

2016-10-17

复现方法

创建一个存文本文件,命名为:test.php,内容如下:

<?php

$menu = [
    1 => ['id' => 1, 'name' => 'a', 'child' => []],
    2 => ['id' => 2, 'name' => 'b', 'child' => []],
];

foreach ($menu as &$submenu) {
    $submenu['class'] = empty($submenu['child']) ? '' : 'hasChild';
}

print_r($menu);

print str_repeat('-', 80) . "\n";

foreach ($menu as $submenu) {
    print_r($submenu);
}
?>

命令行中运行:

php -f test.php

得到以下输出:

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => a
            [child] => Array
                (
                )

            [class] =>
        )

    [2] => Array
        (
            [id] => 2
            [name] => b
            [child] => Array
                (
                )

            [class] =>
        )

)
--------------------------------------------------------------------------------
Array
(
    [id] => 1
    [name] => a
    [child] => Array
        (
        )

    [class] =>
)
Array
(
    [id] => 1
    [name] => a
    [child] => Array
        (
        )

    [class] =>
)

可以发现,第二个 foreach 中的输出是错误的。

来自官网的说明

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)

// without an unset($value), $value is still a reference to the last item: $arr[3]

foreach ($arr as $key => $value) {
    // $arr[3] will be updated with each value from $arr...
    echo "{$key} => {$value} ";
    print_r($arr);
}
// ...until ultimately the second-to-last value is copied onto the last value

// output:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>

参考

#175 技术博客字体选型

2016-10-17

HTML 字体

font: 300 1em/1.8 sans;

参考

阮一峰          Georgia, serif
开源中国        微软雅黑, Verdana, sans-serif, 宋体
typo.sofi.sh    PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans
作业部落        PingFang SC, Hiragino Sans GB, Helvetica Neue, Microsoft Yahei, WenQuanYi Micro Hei, sans-serif
MDN             'Open Sans',Arial,sans-serif
小众软件        Lucida, Verdana, 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif
码弄周刊        'Helvetica Neue', Helvetica, Arial, 'WenQuanYi Micro Hei', 'Microsoft Yahei', SimSun, sans-serif
Django Book     'Microsoft YaHei', 'Lucida Grande', Verdana;

设计

各平台常用字体

OS X      : PingFang SC, Hiragino Sans GB, Helvetica Neue, Helvetica, Heiti SC, Monaco
Linux     : Ubuntu Mono, WenQuanYi Micro Hei, Source Code Pro
Windows   : Microsoft Yahei, SimSun, Courier New, Georgia, Tahoma, Arial

设计思路

  1. 不用很多,如果没有所选的字体,就是用浏览器默认设置
  2. 优先级:Mac OS > Ubuntu > Windows

#174 Windows 系统变量

2016-10-01
@echo off

echo Current Directory: %cd%
echo %date% , %time%

echo.
echo ================================================================================
echo.

echo %systemroot%
echo %windir%

echo.
echo ================================================================================
echo.

echo cmd.exe Path: %cmdcmdline%
: C:\windows\System32\cmd.exe
echo cmd.exe Extension Version: %cmdextversion%
echo %comspec%
: same with cmdcmdline

echo.
echo ================================================================================
echo.

echo %path%
echo %pathext%
: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

echo.
echo ================================================================================
echo.

echo %os%
: Windows_NT

echo %number_of_processors%
echo %processor_architecture%
: AMD64
echo %processor_identifier%
echo %processor_level%
echo %processor_revision%

echo %random%
echo %prompt%

echo.
echo ================================================================================
echo.

echo %logonserver%
echo %userdomain% (hostname)
echo %computername%

echo.
echo ================================================================================
echo.

echo %username%
echo %userprofile%

echo %homedrive%
echo %homepath%

echo %temp%
echo %tmp%
echo %appdata%