#980 什么是“企业 Linux”
Linux 2024-09-17我看了阮一峰推荐的内容中有篇文章讲什么是“企业 Linux”(后面会附原文和中文翻译)。
RHEL 名字叫红帽企业 Linux,SLE 也是 SUSE Linux Enterprise 的缩写,我也一直好奇,这个“企业”到底是什么意思?
coding in a complicated world
我看了阮一峰推荐的内容中有篇文章讲什么是“企业 Linux”(后面会附原文和中文翻译)。
RHEL 名字叫红帽企业 Linux,SLE 也是 SUSE Linux Enterprise 的缩写,我也一直好奇,这个“企业”到底是什么意思?
景点 | 城市 | 区 | 位置 |
---|---|---|---|
电影院 | 武汉 | - | 光谷里 武昌泛悦奥特莱斯 江夏罗马春天 汉口北 |
黄鹤楼公园 | 武汉 | 武昌区 | 司门口 |
黄鹤楼落梅轩 | 武汉 | 武昌区 | 司门口 |
杜莎夫人蜡像馆 | 武汉 | 武昌区 | 楚河汉街 |
东湖落雁景区 | 武汉 | 东湖 | - |
东湖飞鸟世界 | 武汉 | 东湖 | - |
东湖游船 | 武汉 | 东湖 | - |
龙泉山 | 武汉 | 江夏区 | - |
武汉植物园 | 武汉 | 武昌区 | 鲁磨路 |
长春观 | 武汉 | 武昌区 | 大东门 |
九峰山森林公园 | 武汉 | 洪山区 | - |
禧汤生活馆 | 武汉 | 洪山区 | 珞珈山 |
武汉园博园(武汉自然博物馆) | 武汉 | 硚口区 | - |
张公山寨 | 武汉 | 青山区 | - |
木兰天池 | 武汉 | 黄陂区 | - |
木兰草原 | 武汉 | 黄陂区 | - |
木兰云雾山 | 武汉 | 黄陂区 | - |
木兰山 | 武汉 | 黄陂区 | - |
花海乐园 | 武汉 | 黄陂区 | - |
大余湾 | 武汉 | 黄陂区 | - |
锦里沟 | 武汉 | 黄陂区 | - |
清凉寨 | 武汉 | 黄陂区 | - |
姚家山 | 武汉 | 黄陂区 | - |
九真山 | 武汉 | 蔡甸区 | - |
九真桃源 | 武汉 | 蔡甸区 | - |
金龙水寨 | 武汉 | 蔡甸区 | - |
紫微都市田园 | 武汉 | 新洲区 | - |
凤娃古寨 | 武汉 | 新洲区 | - |
花朝河湾 | 武汉 | 新洲区 | - |
香草伊甸园 | 武汉 | 新洲区 | - |
-------------------- | - | - | - |
熙凤水乡 | 孝感 | - | - |
楚珍园 | 孝感 | 应城 | - |
金卉庄园 | 孝感 | 孝南区 | - |
天紫湖 | 孝感 | 孝南区 | - |
盛世闻樱景区 | 孝感 | 安陆 | - |
白兆山风景区 | 孝感 | 安陆 | - |
-------------------- | - | - | - |
三里畈温泉 | 黄冈 | 罗田县 | - |
罗田薄刀峰 | 黄冈 | 罗田县 | - |
黄石河峡谷隧道漂流 | 黄冈 | 罗田县 | - |
帝王湖 | 黄冈 | 红安县 | |
-------------------- | - | - | - |
瑶池温泉 | 咸宁 | 咸安区 | - |
山湖温泉 | 咸宁 | 嘉鱼县 | - |
package main
import (
"fmt"
"os"
"strings"
"text/template"
"time"
)
func main() {
tmpl01, _ := template.New("tmpl01").Parse("你好,{{ . }}")
tmpl01.Execute(os.Stdout, "世界")
fmt.Println()
fmt.Println(strings.Repeat("=", 80))
fmt.Println()
type Message struct {
Subject string
Time time.Time
Source string
Body string
}
// http://www.xinhuanet.com/politics/2020-02/08/c_1125546135.htm
subject := "国家监察委员会调查组已抵达武汉"
timeobj, _ := time.Parse("2006-01-02 15:04:05", "2020-02-08 13:49:38")
source := "新华社“新华视点”微博"
content := "中央纪委国家监委网站8日消息,国家监察委员会调查组已抵达武汉。经中央批准,国家监察委员会派出调查组赴湖北省武汉市,就群众反映的涉及李文亮医生的有关问题作全面调查。"
tmpl02, _ := template.New("tmpl02").Parse(`{{ .Subject }}
Time: {{ .Time.Format "2006-01-02 15:04:05" }}
Source: {{ .Source }}
{{ .Body }}`)
tmpl02.Execute(os.Stdout, Message{subject, timeobj, source, content})
}
{{ . }} // 输出当前变量
{{ .Name }} // 输出当前变量的 Name 字段
{{/* 注释 */}}
{{- /* 注释(去掉前后空格与换行) */ -}}
{{ if ... }} A {{ end }}
{{ if ... }} A {{ else }} B {{ end }}
{{ if ... }} A {{ else if ... }} B {{ else }} C {{ end }}
{{ range ... }} A {{ end }}
{{ range ... }} A {{ else }} B {{ end }}
{{ range . -}} {{ . }} {{ end -}}
{{ range $key, $val := . -}} ... {{ end -}}
https://en.wikipedia.org/wiki/Extended_Log_Format
相比 Common Log Format (通用日志格式),ELF 是名副其实的可拓展:在头部声明了版本,以及字段。
例如:
#Version: 1.0
#Date: 12-Jan-1996 00:00:00
#Fields: time cs-method cs-uri
00:34:23 GET /foo/bar.html
12:21:16 GET /foo/bar.html
12:45:52 GET /foo/bar.html
12:57:34 GET /foo/bar.html
<integer>.<integer>
[<specifier>...]
<date> <time>
<date> <time>
<date> <time>
<text>
然后这个字段的声明又有一套规则,可以参考
隐性知识是危险的
隐性知识又称为"部落知识",指的是有些知识没有文档,只掌握在团队成员的头脑里面。
如果你想掌握这些知识,只有去询问团队成员。
隐形知识的优点是,省去了文档成本,而且询问相关成员比自己阅读文档更快,当然前提是那位成员能够快速响应。
隐形知识的缺点是,一旦团队扩大规模,它就会失败。对于掌握知识的团队成员来说,回答问题所占用的时间是一个拖累,影响了生产力,也拖慢了团队的开发速度。
另一方面,随着团队规模的扩大和知识变得更加分散,你自己阅读文档和观看视频讲座,会比向他人寻求帮助更快速和方便。
所以,团队越是大,就越要避免"隐形知识",所有知识尽量文档化,让团队成员能够方便地查阅。
团队知识分享是一个很重要的事情。
host ident authuser date request status bytes
127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
-
代替。import re
from datetime import datetime
RE_CLF = re.compile(r'(\S+) (\S+) (\S+) \[(.*?)\] "(.*?)" (\d{3}) (\d+|-)')
def parse_clf(log_line):
match = RE_CLF.match(log_line)
if not match:
raise ValueError('Log line does not match CLF format')
ip_address = match.group(1)
identity = match.group(2)
user = match.group(3)
time_str = match.group(4)
request_line = match.group(5)
status_code = int(match.group(6))
size = match.group(7)
time_format = '%d/%b/%Y:%H:%M:%S %z'
timestamp = datetime.strptime(time_str, time_format)
size = int(size) if size != '-' else None
return {
'host': ip_address,
'ident': identity,
'authuser': user,
'date': timestamp,
'request': request_line,
'status': status_code,
'bytes': size,
}
log_example = '127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] 'GET /apache_pb.gif HTTP/1.0' 200 2326'
parsed_log = parse_clf(log_example)
print(parsed_log)
# {'host': '127.0.0.1', 'ident': 'user-identifier', 'authuser': 'frank',
# 'date': datetime.datetime(2000, 10, 10, 13, 55, 36, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200))),
# 'request': 'GET /apache_pb.gif HTTP/1.0', 'status': 200, 'bytes': 2326}
Netlify 公司希望给用户发邮件,让用户回信提供产品反馈。
但是公司知道,群发邮件的回复率很低。他们就请了一个营销顾问,希望他设法提高邮件回复率。
这个顾问认为,用户不回邮有两个原因:
(1)邮件篇幅太长,大多数人懒得读。
(2)群发邮件都是模板格式,用户觉得这是机器发送的,没必要理睬。
他决定,缩短邮件内容,采用口语表达,看看能不能提高回复率。
他设计了一个 A/B 测试。A 格式是传统样式的邮件,150 多个单词。
结果,邮件回复率是 1%,100 个收信人有 1 个回复。
B 格式是一封更短的邮件,只有 37 个单词。
结果,回复率上升到了 4%。邮件长度减少到了四分之一,但是回复率变成了四倍。
他一不做二不休,索性将邮件删到 14 个单词,就是直接了当的一个问题。
这一次,回复率进一步上升到了 8%。
因此,营销邮件提高效果的最简单方法,就是删除任何的多余词汇,尽可能短。
阮一峰是转载的 To Get More Replies, Say Less,原文中还附了这个图表,表示上面提到的这种负相关关系:
我有好多地方都做的不好,做了一些反思。
王贞仪(1768 年—1797 年),字德卿,女,原籍安徽天长,生于江苏南京,清朝天文学家。王贞仪通过艰苦努力自学天文学,数学,地理和医学等科目,突破了当时的封建习俗对女性权利的阻碍。她是一位非常聪明的女性,因其在天文学,数学和诗歌方面的贡献而闻名。她也是一位广受赞誉的学者,是“18 世纪中国的一位非凡女性”。