#980 什么是“企业 Linux”

2024-09-17

我看了阮一峰推荐的内容中有篇文章讲什么是“企业 Linux”(后面会附原文和中文翻译)。
RHEL 名字叫红帽企业 Linux,SLE 也是 SUSE Linux Enterprise 的缩写,我也一直好奇,这个“企业”到底是什么意思?

#979 大武汉旅游年卡 - 景区列表

2024-09-15
景点 城市 位置
电影院 武汉 - 光谷里
武昌泛悦奥特莱斯
江夏罗马春天
汉口北
黄鹤楼公园 武汉 武昌区 司门口
黄鹤楼落梅轩 武汉 武昌区 司门口
杜莎夫人蜡像馆 武汉 武昌区 楚河汉街
东湖落雁景区 武汉 东湖 -
东湖飞鸟世界 武汉 东湖 -
东湖游船 武汉 东湖 -
龙泉山 武汉 江夏区 -
武汉植物园 武汉 武昌区 鲁磨路
长春观 武汉 武昌区 大东门
九峰山森林公园 武汉 洪山区 -
禧汤生活馆 武汉 洪山区 珞珈山
武汉园博园(武汉自然博物馆) 武汉 硚口区 -
张公山寨 武汉 青山区 -
木兰天池 武汉 黄陂区 -
木兰草原 武汉 黄陂区 -
木兰云雾山 武汉 黄陂区 -
木兰山 武汉 黄陂区 -
花海乐园 武汉 黄陂区 -
大余湾 武汉 黄陂区 -
锦里沟 武汉 黄陂区 -
清凉寨 武汉 黄陂区 -
姚家山 武汉 黄陂区 -
九真山 武汉 蔡甸区 -
九真桃源 武汉 蔡甸区 -
金龙水寨 武汉 蔡甸区 -
紫微都市田园 武汉 新洲区 -
凤娃古寨 武汉 新洲区 -
花朝河湾 武汉 新洲区 -
香草伊甸园 武汉 新洲区 -
-------------------- - - -
熙凤水乡 孝感 - -
楚珍园 孝感 应城 -
金卉庄园 孝感 孝南区 -
天紫湖 孝感 孝南区 -
盛世闻樱景区 孝感 安陆 -
白兆山风景区 孝感 安陆 -
-------------------- - - -
三里畈温泉 黄冈 罗田县 -
罗田薄刀峰 黄冈 罗田县 -
黄石河峡谷隧道漂流 黄冈 罗田县 -
帝王湖 黄冈 红安县
-------------------- - - -
瑶池温泉 咸宁 咸安区 -
山湖温泉 咸宁 嘉鱼县 -

#978 Golang text/template 的用法

2024-09-09

基础示例

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})
}

语法说明

  1. 双花括号
{{ . }}  // 输出当前变量
{{ .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 -}}

#976 Extensible Log Format

2024-08-25

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
  • Version: <integer>.<integer>
    The version of the extended log file format used. This draft defines version 1.0.
  • Fields: [<specifier>...]
    Specifies the fields recorded in the log.
  • Software: string
    Identifies the software which generated the log.
  • Start-Date: <date> <time>
    The date and time at which the log was started.
  • End-Date: <date> <time>
    The date and time at which the log was finished.
  • Date: <date> <time>
    The date and time at which the entry was added.
  • Remark: <text>
    Comment information. Data recorded in this field should be ignored by analysis tools.

然后这个字段的声明又有一套规则,可以参考

#975 知识分享

2024-08-23

隐性知识是危险的

隐性知识又称为"部落知识",指的是有些知识没有文档,只掌握在团队成员的头脑里面。

如果你想掌握这些知识,只有去询问团队成员。

隐形知识的优点是,省去了文档成本,而且询问相关成员比自己阅读文档更快,当然前提是那位成员能够快速响应。

隐形知识的缺点是,一旦团队扩大规模,它就会失败。对于掌握知识的团队成员来说,回答问题所占用的时间是一个拖累,影响了生产力,也拖慢了团队的开发速度。

另一方面,随着团队规模的扩大和知识变得更加分散,你自己阅读文档和观看视频讲座,会比向他人寻求帮助更快速和方便。

所以,团队越是大,就越要避免"隐形知识",所有知识尽量文档化,让团队成员能够方便地查阅。

团队知识分享是一个很重要的事情。

  1. 周会分享
  2. 专题分享/讨论会
  3. 文档维护制度

#974 Common Log Format (通用日志格式)

2024-08-12
  1. NCSA HTTPd (Apache HTTP Server 前身) 定义的一个标准 Web 服务器日志格式。
  2. 格式: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
  3. 如果哪一个字段没有值,就用 - 代替。
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}

#973 转载:得到邮件回复的最简单方法

2024-08-11

Netlify 公司希望给用户发邮件,让用户回信提供产品反馈。

但是公司知道,群发邮件的回复率很低。他们就请了一个营销顾问,希望他设法提高邮件回复率。

这个顾问认为,用户不回邮有两个原因:
(1)邮件篇幅太长,大多数人懒得读。
(2)群发邮件都是模板格式,用户觉得这是机器发送的,没必要理睬。

他决定,缩短邮件内容,采用口语表达,看看能不能提高回复率。

他设计了一个 A/B 测试。A 格式是传统样式的邮件,150 多个单词。

结果,邮件回复率是 1%,100 个收信人有 1 个回复。

B 格式是一封更短的邮件,只有 37 个单词。

结果,回复率上升到了 4%。邮件长度减少到了四分之一,但是回复率变成了四倍。

他一不做二不休,索性将邮件删到 14 个单词,就是直接了当的一个问题。

这一次,回复率进一步上升到了 8%。

因此,营销邮件提高效果的最简单方法,就是删除任何的多余词汇,尽可能短。


阮一峰是转载的 To Get More Replies, Say Less,原文中还附了这个图表,表示上面提到的这种负相关关系:

#972 团队管理相关思考

2024-08-07

我有好多地方都做的不好,做了一些反思。

目标管理

  1. 所有人的工作一定要有长期目标。
    即便是一些事务性强的岗位,比如技术支持(处理客户问题),也需要制定目标。
    甚至可以说,越是杂事多的岗位,越要长期目标。没有目标,人就会陷入大量杂事包围,失去方向,真就变成打杂的了。
    这对于个人成长、考核评估都是糟糕的影响,升职加薪就更难实现。
    从管理者的角度看,目标不明确,就等于对员工没有要求,完全寄希望于所有人的主观能动性,并且他们正好能够和你同频,和团队目标正好对齐。
    :有很强主观能动性,积极主动地投身于工作,这样的人应该不多吧!要想无需沟通,就能自动对齐,那真是黄金搭档了。
  2. 个人目标需要和他承担的角色,以及团队的整体目标有关联性。
  3. 每周都需要制定工作计划(团队目标,重点事项)。
    1. 设计到的人必须协同达成这个团队目标(优先级高于其他个人目标)。
      每个人自己的工作可以自己按照自己的计划来推进,但是团队目标需要把控好。
    2. 尽可能涉及多一些人。
    3. 周末(或周一早上)总结、评价。
      • 过程评价:是否按时完成,是否有沟通,是否回头看。
      • 结果评价:完成度,完成效果(对团队目标的促进作用),和预期对比。
    4. 只关注几个重点事项就行了,其他的事情完成就行(如果后面出现问题,就需要简单沟通,并酌情考虑在考核中有所体现)。
  4. 目标的制定、目标进度跟踪,都需要保持良好的沟通,及时反馈。
    至少,周三要关注一下大家的进度是否符合预期,有没有遇到难题。
    :需要有意培养大家主动沟通,及时反馈的习惯。
  5. 好的目标:符合 SMART 原则,明确的事项,有时限,可衡量,可实现(努力能做到),并且和团队目标有关联。

报告

  1. 报告的前提就是要对自己的工作进行有效的总结。
    1. 保持对工作的思考,有助于维持清晰的思路,对个人工作的开展事有益的。
    2. 报告就是和上级沟通,将自己的工作和上级做信息同步
      1. 一项工作做的再好,如果没有能够在团队内做到足够好的信息同步,效果会大打折扣。
      2. 对管理者来讲,主要的精力都投身于一些重要事项,真不会很清楚你的工作究竟如何。
  2. 上级的工作目标是什么,他关心我的哪一个工作进展,换位思考一下。
  3. 成绩是什么,存在的问题是什么,需要的资源是什么?
    1. 成绩部分要有数据支撑(可视化,整洁,要点清晰)、有事例加以辅助说明。
      1. 强调成绩和团队目标的关联,强调团队需要的点。
      2. 个人的付出,做了什么努力,带着提一提。如果时间充足,可以多投入时间(不要啰嗦)。
    2. 问题部分要有解决思路。
      1. 工作计划是否需要调整?
      2. 需要哪些支持?
  4. 要丰富自己的知识框架,基于这些再整理出报告框架,这样思考问题会更加全面一些。
    1. 尽量多追问自己一些问题,报告完成之后总结一下,对于新提出来的问题我为什么没有事先想到。

沟通

  1. 多听多看。
    应该鼓励员工的反馈,少打断他。要有耐心。
  2. 感染力:表情,眼神交流,肢体动作。
  3. 这一次沟通的目的是什么?重复,重复,重复。
    如果是重要事项,需要抓住一切机会,多重复几遍。
  4. 培养感情。

#971 清代女科学家王贞仪

2024-07-26

王贞仪(1768 年—1797 年),字德卿,女,原籍安徽天长,生于江苏南京,清朝天文学家。王贞仪通过艰苦努力自学天文学,数学,地理和医学等科目,突破了当时的封建习俗对女性权利的阻碍。她是一位非常聪明的女性,因其在天文学,数学和诗歌方面的贡献而闻名。她也是一位广受赞誉的学者,是“18 世纪中国的一位非凡女性”。