




转自:https://mp.weixin.qq.com/s/JanLbAtwsa021yWoRib9LQ
分享个人经验,保留阅读记录,做时间的朋友





转自:https://mp.weixin.qq.com/s/JanLbAtwsa021yWoRib9LQ
文 | 某某白米饭
来源:Python 技术「ID: pythonall」

psutil 是一个跨平台库(http://pythonhosted.org/psutil)能够获取到系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。主要用来做系统监控,性能分析,进程管理。支持 Linux、Mac OS、Windows 系统。
本文以 psutil 模块获取系统信息开发一个监控 Mac OS 系统的平台。

pip3 install psutil

通过 psutil 获取 CPU 信息
>>> import psutil# 获取当前 CPU 的利用率>>> psutil.cpu_percent()53.8# 获取当前 CPU 的用户/系统/空闲时间>>> psutil.cpu_times()scputimes(user=197483.49, nice=0.0, system=114213.01, idle=1942295.68)# 1/5/15 分钟之内的 CPU 负载>>> psutil.getloadavg()(7.865234375, 5.1826171875, 4.37353515625)# CPU 逻辑个数>>> psutil.cpu_count()4# CPU 物理个数>>> psutil.cpu_count(logical=False)2
在监控平台上每 2 秒请求 url 获取 CPU 负载,并动态显示图表
cpu_percent_dict = {}def cpu():# 当前时间now = time.strftime('%H:%M:%S', time.localtime(time.time()))# CPU 负载cpu_percent = psutil.cpu_percent()cpu_percent_dict[now] = cpu_percent# 保持在图表中 10 个数据if len(cpu_percent_dict.keys()) == 11:cpu_percent_dict.pop(list(cpu_percent_dict.keys())[0])def cpu_line() -> Line:cpu()# 全量更新 pyecharts 图表c = (Line().add_xaxis(list(cpu_percent_dict.keys())).add_yaxis('', list(cpu_percent_dict.values()), areastyle_opts=opts.AreaStyleOpts(opacity=0.5)).set_global_opts(title_opts=opts.TitleOpts(title = now + "CPU负载",pos_left = "center"),yaxis_opts=opts.AxisOpts(min_=0,max_=100,split_number=10,type_="value", name='%')))return c@app.route("/cpu")def get_cpu_chart():c = cpu_line()return c.dump_options_with_quotes()
示例结果

通过 psutil 获取内存和交换区信息
# 系统内存信息 总内存/立刻可用给进程使用的内存/内存负载/已使用内存/空闲内存/当前正在使用或者最近使用的内存/未使用的内存/永久在内存>>> psutil.virtual_memory()svmem(total=8589934592, available=2610610176, percent=69.6, used=4251074560, free=387874816, active=2219110400, inactive=2069094400, wired=2031964160)# 交换区内存 总内存/使用的内存/空闲的内存/负载/系统从磁盘交换进来的字节数(累计)/系统从磁盘中交换的字节数(累积)>>> psutil.swap_memory()sswap(total=2147483648, used=834404352, free=1313079296, percent=38.9, sin=328911147008, sout=3249750016)
在监控平台上每 2 秒请求 url 获取内存负载,并动态显示图表
def memory():memory = psutil.virtual_memory()swap = psutil.swap_memory()# 在 Mac OS 上 未使用内存 = 总内存 - (空闲内存 + 未使用内存)return memory.total, memory.total - (memory.free + memory.inactive), memory.free + memory.inactive, swap.total, swap.used, swap.free, memory.percentdef memory_liquid() -> Gauge:mtotal, mused, mfree, stotal, sused, sfree, mpercent = memory()c = (Gauge().add("", [("", mpercent)]).set_global_opts(title_opts=opts.TitleOpts(title="内存负载", pos_left = "center")))return mtotal, mused, mfree, stotal, sused, sfree, c@app.route("/memory")def get_memory_chart():mtotal, mused, mfree, stotal, sused, sfree, c = memory_liquid()return jsonify({'mtotal': mtotal, 'mused': mused, 'mfree': mfree, 'stotal': stotal, 'sused': sused, 'sfree': sfree, 'liquid': c.dump_options_with_quotes()})
示例结果

通过 psutil 获取磁盘大小、分区、使用率和磁盘IO
# 磁盘分区情况>>> psutil.disk_partitions()[sdiskpart(device='/dev/disk1s5', mountpoint='/', fstype='apfs', opts='ro,local,rootfs,dovolfs,journaled,multilabel'), sdiskpart(device='/dev/disk1s1', mountpoint='/System/Volumes/Data', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel'), sdiskpart(device='/dev/disk1s4', mountpoint='/private/var/vm', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel'), sdiskpart(device='/dev/disk1s3', mountpoint='/Volumes/Recovery', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel')]# 磁盘的使用情况 磁盘总大小/已使用大小/空闲大小/负载>>> psutil.disk_usage('/')sdiskusage(total=250790436864, used=10872418304, free=39636717568, percent=21.5)# 磁盘IO 读取次数/写入次数/读取数据/写入数据/磁盘读取所花费的时间/写入磁盘所花费的时间>>> psutil.disk_io_counters()sdiskio(read_count=26404943, write_count=11097500, read_bytes=609467826688, write_bytes=464322912256, read_time=7030486, write_time=2681553)
在监控平台上每 2 秒请求 url 获取磁盘信息,并动态显示图表
disk_dict = {'disk_time':[], 'write_bytes': [], 'read_bytes': [], 'pre_write_bytes': 0, 'pre_read_bytes': 0, 'len': -1}def disk():disk_usage = psutil.disk_usage('/')disk_used = 0# 磁盘已使用大小 = 每个分区的总和partitions = psutil.disk_partitions()for partition in partitions:partition_disk_usage = psutil.disk_usage(partition[1])disk_used = partition_disk_usage.used + disk_usednow = time.strftime('%H:%M:%S', time.localtime(time.time()))count = psutil.disk_io_counters()read_bytes = count.read_byteswrite_bytes = count.write_bytes# 第一次请求if disk_dict['len'] == -1:disk_dict['pre_write_bytes'] = write_bytesdisk_dict['pre_read_bytes'] = read_bytesdisk_dict['len'] = 0return disk_usage.total, disk_used, disk_usage.free# 当前速率=现在写入/读取的总字节-前一次请求写入/读取的总字节disk_dict['write_bytes'].append((write_bytes - disk_dict['pre_write_bytes'])/1024)disk_dict['read_bytes'].append((read_bytes - disk_dict['pre_read_bytes'])/ 1024)disk_dict['disk_time'].append(now)disk_dict['len'] = disk_dict['len'] + 1# 把现在写入/读取的总字节放入前一个请求的变量中disk_dict['pre_write_bytes'] = write_bytesdisk_dict['pre_read_bytes'] = read_bytes# 保持在图表中 50 个数据if disk_dict['len'] == 51:disk_dict['write_bytes'].pop(0)disk_dict['read_bytes'].pop(0)disk_dict['disk_time'].pop(0)disk_dict['len'] = disk_dict['len'] - 1return disk_usage.total, disk_used, disk_usage.freedef disk_line() -> Line:total, used, free = disk()c = (Line(init_opts=opts.InitOpts(width="1680px", height="800px")).add_xaxis(xaxis_data=disk_dict['disk_time']).add_yaxis(series_name="写入数据",y_axis=disk_dict['write_bytes'],areastyle_opts=opts.AreaStyleOpts(opacity=0.5),linestyle_opts=opts.LineStyleOpts(),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="读取数据",y_axis=disk_dict['read_bytes'],yaxis_index=1,areastyle_opts=opts.AreaStyleOpts(opacity=0.5),linestyle_opts=opts.LineStyleOpts(),label_opts=opts.LabelOpts(is_show=False),).extend_axis(yaxis=opts.AxisOpts(name_location="start",type_="value",is_inverse=True,axistick_opts=opts.AxisTickOpts(is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True),name='KB/2S')).set_global_opts(title_opts=opts.TitleOpts(title="磁盘IO",pos_left="center",pos_top="top",),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),legend_opts=opts.LegendOpts(pos_left="left"),xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),yaxis_opts=opts.AxisOpts( type_="value", name='KB/2S'),).set_series_opts(axisline_opts=opts.AxisLineOpts(),))return total, used, free, c@app.route("/disk")def get_disk_chart():total, used, free, c = disk_line()return jsonify({'total': total, 'used': used, 'free': free, 'line': c.dump_options_with_quotes()})
示例结果

通过 psutil 获取网络接口和网络连接的信息
# 获取网络字节数和包的个数 发送的字节数/收到的字节数/发送的包数/收到的包数>>> psutil.net_io_counters()snetio(bytes_sent=9257984, bytes_recv=231398400, packets_sent=93319, packets_recv=189501, errin=0, errout=0, dropin=0, dropout=0)# 获取当前的网络连接 注意:net_connections() 需要用管理员权限运行 Python 文件>>> psutil.net_connections()[sconn(fd=6, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='192.168.5.31', port=50541), raddr=addr(ip='17.248.159.145', port=443), status='ESTABLISHED', pid=1897),sconn(fd=12, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='192.168.5.31', port=50543), raddr=addr(ip='17.250.120.9', port=443), status='ESTABLISHED', pid=1897),sconn(fd=6, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='0.0.0.0', port=0), raddr=(), status='NONE', pid=1790),sconn(fd=10, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='0.0.0.0', port=0), raddr=(), status='NONE', pid=1790),sconn(fd=11, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='0.0.0.0', port=0), raddr=(), status='NONE', pid=1790),...sconn(fd=30, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='0.0.0.0', port=137), raddr=(), status='NONE', pid=1),sconn(fd=31, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='0.0.0.0', port=138), raddr=(), status='NONE', pid=1)]# 获取网络接口信息>>> psutil.net_if_addrs(){'lo0': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None),snicaddr(family=<AddressFamily.AF_INET6: 30>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 30>, address='fe80::1%lo0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None)],...,'utun1': [snicaddr(family=<AddressFamily.AF_INET6: 30>, address='fe80::b519:e5df:2bd4:857e%utun1', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None)]}# 获取网络接口的状态>>> psutil.net_if_stats(){'lo0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=16384),...'utun1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=2000)}
在监控平台上每 2 秒请求 url 获取网卡IO,并动态显示图表
net_io_dict = {'net_io_time':[], 'net_io_sent': [], 'net_io_recv': [], 'pre_sent': 0, 'pre_recv': 0, 'len': -1}def net_io():now = time.strftime('%H:%M:%S', time.localtime(time.time()))# 获取网络信息count = psutil.net_io_counters()g_sent = count.bytes_sentg_recv = count.bytes_recv# 第一次请求if net_io_dict['len'] == -1:net_io_dict['pre_sent'] = g_sentnet_io_dict['pre_recv'] = g_recvnet_io_dict['len'] = 0return# 当前网络发送/接收的字节速率 = 现在网络发送/接收的总字节 - 前一次请求网络发送/接收的总字节net_io_dict['net_io_sent'].append(g_sent - net_io_dict['pre_sent'])net_io_dict['net_io_recv'].append(g_recv - net_io_dict['pre_recv'])net_io_dict['net_io_time'].append(now)net_io_dict['len'] = net_io_dict['len'] + 1net_io_dict['pre_sent'] = g_sentnet_io_dict['pre_recv'] = g_recv# 保持在图表中 10 个数据if net_io_dict['len'] == 11:net_io_dict['net_io_sent'].pop(0)net_io_dict['net_io_recv'].pop(0)net_io_dict['net_io_time'].pop(0)net_io_dict['len'] = net_io_dict['len'] - 1def net_io_line() -> Line:net_io()c = (Line().add_xaxis(net_io_dict['net_io_time']).add_yaxis("发送字节数", net_io_dict['net_io_sent'], is_smooth=True).add_yaxis("接收字节数", net_io_dict['net_io_recv'], is_smooth=True).set_series_opts(areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).set_global_opts(title_opts=opts.TitleOpts(title="网卡IO/2秒"),xaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_align_with_label=True),is_scale=False,boundary_gap=False,),))return c@app.route("/netio")def get_net_io_chart():c = net_io_line()return c.dump_options_with_quotes()
示例结果

通过 psutil 可以获取所有进程的信息
# 所有进程的 pid>>> psutil.pids()[0, 1, 134, 135, 138, 139, 140, 141, 144, 145, 147, 152, ..., 30400, 97792]# 单个进程>>> p = psutil.Process(30400)# 名称>>> p.name()'pycharm'# 使用内存负载>>> p.memory_percent()12.838459014892578# 启动时间>>> p.create_time()1587029962.493182# 路径>>> p.exe()'/Applications/PyCharm.app/Contents/MacOS/pycharm'# 状态>>> p.status()'running'# 用户名>>> p.username()'imeng'# 内存信息>>> p.memory_info()pmem(rss=1093005312, vms=9914318848, pfaults=7813313, pageins=8448)
列出所有不需要权限的进程
def process():result = []process_list = []pid = psutil.pids()for k, i in enumerate(pid):try:proc = psutil.Process(i)ctime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(proc.create_time()))process_list.append((str(i), proc.name(), proc.cpu_percent(), proc.memory_percent(), ctime))except psutil.AccessDenied:# 需要管理员权限passexcept psutil.NoSuchProcess:passexcept SystemError:pass# 按负载排序process_list.sort(key=process_sort, reverse=True)for i in process_list:result.append({'PID': i[0], 'name': i[1], 'cpu': i[2], 'mem': "%.2f%%"%i[3], 'ctime': i[4]})return jsonify({'list', result})def process_sort(elem):return elem[3]@app.route("/process")def get_process_tab():c = process()return c@app.route("/delprocess")def del_process():pid = request.args.get("pid")os.kill(int(pid), signal.SIGKILL)return jsonify({'status': 'OK'})
示例结果

本文以 Psutil + Flask + Pyecharts + Bootstrap 开发一个简单的系统监控平台,可以算做是本公众号内容的一个学以致用。在 Psutil 还有许多方法文章没有列举感兴趣的小伙伴可以去尝试并使用。
转自:https://mp.weixin.qq.com/s/RLTZrS6YMhV2Y5KyZRhcqQ
♪ 作者|芥末堆 梅初九
♪ 来源|芥末堆看教育

一、每一天,都有很多人在快手讲课
2020开年,教育行业的最大黑马,应属快手无疑了。
每天晚上7点到10点,打开快手,会看到各个学科、各个学段的老师,开着直播,讲课,每天一个知识点,一个直播间几十上百个老铁学生。
芥末堆自己也在3月底开了自己的快手账号,每天日更三条教育相关的资讯和新闻。非常有意思的是,在快手,芥末堆的用户占比中,12-26岁的用户比例占到了76.3%,其中,绝大部分观众都在如河北保定、山东淄博类的二三四线城市。
而我自己也参加过一次快手官方举行的教育掌门人活动,直播2个小时,直播数据是:收到黄钻320万,得到8100次点赞,直播观看人数46500人。目前,我的个人号粉丝才3000人出头。
这种情况并不是孤例,在快手上,目前已经是普遍现象。原来做线下体能的小飞教练,在快手说健康,他2020年开的号,现在26000粉丝,快手课堂里上架了5个付费视频课。他说:“我每天除了在快手收入平均800多人民币之外。还有一部分转化到线下高价课的客户。”小飞教练线下收费为2000元一小时。
垂直于教育行业的早期投资机构北塔资本,创始合伙人沈文博从2月1日开始,每天晚上十点在快手开聊天室,主题只有一个:来快手,做教育。不光是北塔资本,北塔所投的上百个初创公司,也纷纷在快手上开了自己的号。据内部消息,北塔资本已经陆陆续续投资了几个在快手运营的早期创业项目,其中一个早期项目已经成功实现在快手月收入千万。
二、进化后的快手,正成为教育的流入地
快手大数据研究院发布的“2019快手内容生态报告”,更新了快手的内容生态发展状况,涵盖平台增长、12个垂类发展、生态升级等最新变化。通过分析快手2019年在内容、用户、生态方面的进化,报告归纳了三个最重要的变化:往高处行,向深处游,自当下始。日活用户持续增长,一二线城市成“新用户池”。
在教育领域的表现则为:教育类短视频累计高达2亿,教育短视频作者已超过99万,覆盖用户1个亿。快手官方显然注意到教育领域在快手上的指数增长,2019年9月启动“教育生态合伙人计划”,11月宣布对“快手光合·教育生态合伙人计划”进行全面升级,在春节前拿出66.6亿流量进行精准扶持,助力快手教育账号冷启动。
这是快手第一次正式向“人人皆用户”的万亿级市场教育行业,伸出的第一根橄榄枝。
2020的疫情“黑天鹅”,更是加速了快手布局教育的决心,上线快手教育生态“停课不停学”专栏,联合32家教育机构为K12学生、职场人士等用户提供免费课程。好未来、跟谁学、爱学习、网易有道、学霸君、猿辅导等40余家教育机构与快手达成合作。课程品类涵盖K12、学前教育以及职业教育,课程数量达2万门以上。业内普遍认为,这是“快手教育”进入教育行业的标志性节点。随后,快手趁热打铁,又给予教育行业50亿流量扶持,并与开封市教体局达成合作,针对开封市初三、高三年级学生推出覆盖全科、全免费的假期在线辅导课程。根据官方披露数据,人均听课时长超过30分钟,观看总人次29.8万。
至此,继腾讯、阿里、华为、字节、网易、百度之后,快手成为互联网又一大户进入教育,这个传承千年但仍旧生机勃勃的长青领域。
同时,数万家教育机构,数百万名线下教育从业者,也纷纷蜂拥至快手。
三、疫情期间没开门,但我快手用户百万了
疫情影响对无数线下店产生了巨大影响,一部分危机感极强的教育公司和创始人,敏锐地抓住快手这个机会。
悠贝早教的创始人林丹告诉芥末堆,疫情期间线下业务全部暂停,“我们发现了快手的下沉渠道,尤其是同城这一块非常强,这种属性比较适合人带人,以地域为单位去覆盖用户,和我们的教育业务天然匹配。”从3月开始,悠贝全力奔赴快手,目前在快手上已拥有500多个账号。
对于线下少儿美术品牌宝贝计画创始人杨帅来说,也是如此。“我们的线下店,特殊时期响应政府号召暂不开业,加上短视频红利期,所以选择了快手。”目前宝贝计画的主账号“杨帅教画画-宝贝计画”粉丝数量已达86.7万。在变现上,宝贝计画转化到小班直播课学员,已实现月均30万左右,并且还在增长中。在投入上,宝贝计画也就2个人在做,一个画画老师,一个视频剪辑,纯粹靠内容吸引,没有涨分成本,目前日新增一万以上。“我自己现在每天晚上八点还在快手直播讲艺术大师课。我一直有一个心愿,讲艺术普世普惠更给多人。”杨帅笑着说:“马上没几天我也是百万大号了,没想到在快手这么快就现实照进理想了!”
他们的经历和思考,对于快手的原生教育号“老黄说英语”的老黄来说,在快手做教育更是天经地义的一件事。“我从2016年就开始做快手了。到现在300多万粉丝,我没有团队就我一个人,平均月收入在60万左右吧。”
在“新东方洪哥”还未在快手开直播之前,另外一个教烹饪的新东方教育,已在快手耕耘多年成大户:做视频,开直播,招生获客,品牌宣传。
粉丝数量仅仅是第一步,新入驻的教育公司或是老师们还要同步解决变现问题。林丹告诉芥末堆,目前测试下来,快手上有三个比较合适的变现方式,卖书、卖付费课程,以及接入供应链之后的带货分销。“五月时我们预期是百万量级的收入。”
林丹等并非是在快手第一波吃螃蟹的人,但的确是享受到第一波快手教育红利的人。在最近一次悠贝在快手上的比赛活动中,累计14天,悠贝快手矩阵带动老铁们共同参与,#牛娃养成记#标签中上传作品5573个,累计播放量8312万次。悠贝矩阵整体涨粉4万多,平均每个账号精准涨粉在120上下。涨粉成本略等于无。
四、用户有需求,供给端还是蓝海
林丹告诉芥末堆,“我们很清晰,上快手并不是为了品牌宣传,而是直接作为一个新的生态业务布局来投入。教育在快手这个板块上肯定会越来越好,因为用户上来之后,他的各种需求肯定都有,走过第一轮野蛮生长之后,后面的用户需求也会分门别类和找到更好的产品满足。比起担心快手教育的市场,我们现在更为专注于内部中台能力的构建,以期届时能承接住快手用户的需求满足。”
这就好像沈文博在“场长教育主播圈”聊天室时,总会接到很多从业者咨询时的隐忧:“快手适合做教育吗?”
沈文博的经典回答是:“3亿dau,要啥没有?干就完了。”沈文博认为,“快手+教育为代表的短视频+直播教育是2020年教育领域创业一个最大的机会。”北塔资本已经在重仓快手上的教育创业项目,同时,北塔资本还联合快手官方一起帮助教育创业者发掘在快手上的机会。
本质上,快手目前存在两类用户:一是有进阶优秀产品需求的老铁,二是新涌入的一二线用户。两类用户的共性都是需求有,而目前快手上教育的优质供给不足。
坊间有一种戏谑总结:刷抖音,玩快手。
“玩”和“一起玩”构建出快手的社区社交属性,本质上也天然契合于教育里人和人构建信任的属性。2011年创办的快手,已经形成了自己独特的社区文化——老铁文化。主播和用户之间,长期通过直播互动建立起深厚信任关系,所以,快手用户,当他们喜欢一个主播的时候,他们会在自己的名字后面加上一个后缀:某家军,这就是铁忠粉。对于教育领域而言,这便是极大的优势,教育的核心之一是信任,客户选我,认真交付,继续选我,用户生命周期就可以很长。
教育培训行业两家大公司,新东方、好未来,无一不是这样耕耘出来的。
五、认真做课,普通人也有机会和可能
正因为此,在快手上做教育,就并不是简单粗暴的投放逻辑。
2014年的时候,百度来自教育的投放收入就是新东方好未来净利之和还多一些。他俩加起来30个亿不到,百度教育的广告费,30多个亿。
算起来,这都是血淋林的吃骨者,教育领域高居不下的获客之痛,基本上盘剥走了整个行业收入的40%,甚至更多。
但是目前,在快手,这笔费用投入是不存在的。所需要做的事情非常简单:认真做号,认真拍视频,认真开直播。给到用户物超所值的在线付费课程和服务。
一位不愿透露名字的独角兽创业公司创始人告诉芥末堆,“我们内部算过一笔账,把过往的市场投放费用预算,转到快手m
1.观念转变挑战,即为开篇提到的,教育领域目前大部分感知都是快手土味、娱乐化、不适合教育等等。在撰写本文之前,我在自己的朋友圈做了个小调查:票圈调查,留言你对快手教育的观点。得到的回复是:没印象类+2;不清楚类+5;快手不是只有老铁吗类+7;杂而不精类+4;少数头部玩家和手艺人的机会类+1;势不可挡类+1。
我个人微信超过5000好友,99%是来自教育各个领域的从业者。这虽然不是严谨意义上的批量市场调查,但我认为它有一定的典型代表:如何看待快手。
2.组织迭代挑战。对于中心化运作的教育机构而言,快手做号的组织形态在根本上发生了变化,更像是类mcn机构且去中心化。老师与机构的关系很大可能不再是纯粹的雇员拿课时费的关系,老师在视频和直播的同时,也完成了原本销售和市场的招生获客工作,包括售后服务和长期客群维护,也都发生了本质变化。如何以新的更适合快手生态逻辑的组织方式来调整和发展业务,也是一大挑战。
当然还有一个原因,对于近几年惯于烧钱迅速获取市场的在线教育而言,在快手上做教育,未必显得太慢了。对于已经初步被工业化作业的部分教育公司而言:批量大额投放广告,巨量callcenter团队转化,老师在线服务,班主任和辅导老师跟单客户续费。这样的流水线作业和迅速起量,更为性感也更受资本青睐。快手不然,快手需要耕耘。教育的慢与教育市场的快。我想这应该是教育行业留给官方待思考和解决的核心问题,尤其对于想成为教育新基建的快手而言。
这是快手自己的挑战。并且,快手同样也需要思考自己的边界:是选择成为教育的新基建之一,生态维护者,还是像隔壁家一样,相信大力出神迹,有用户、数据、团队、充足资金,教育的什么品类看着不错有前(钱)景,自己也下海做做?
但无论怎样,正如一位在快手上做了很多年的素人老师所说,“快手挺适合做教育的。一个认认真真的教育主播,哪怕成不了百万千万大号,但是有个10万20万粉丝,每个月就算只通过打赏和卖课,也能月入1-2万。快手,是每个普通人的机会和可能。”
本文作者:梅初九
芥末堆 跑堂小二兼首席外卖官
产品讨论狂人,商业模式爱好者。
转自:https://mp.weixin.qq.com/s/5CUsNOT44LCMU7AC-GT4cw

作者:正解局
来源:正解局(ID:zhengjieclub)
有种说法,在日本,除了色情业外,最能展现人欲望的就是“弹子房”。
实际上,安倍发迹和弹子房也有着密切关系,而且,日本弹子房流行背后还有一股来自朝鲜的势力。
据说,日本人每年花在弹子房上的钱高达2000亿美元,几乎是拉斯维加斯赌博收入的30倍。
那么,弹子房(パチンコ)到底是个什么东西?
01
把政府防疫要求,当作耳边风
可能出乎很多人的意料,日本现在成了整个东亚疫情最严重的地区,现存确诊病人超过1.1万(相比之下韩国是1300多,中国更只剩700多)。
安倍也不得不宣布,把紧急事态宣言期限延长到5月31日。
不过,有意思的是,在“紧急事态”下,弹子房店却照常营业,政府干着急,也没办法。
像大阪府知事吉村洋文就在政府网站和新冠疫情通报会上,直接点名几家弹子房,呼吁大家不要去。
不过,讽刺的是,在第二天一大早,弹子房门口就有一两百人排起了长龙,连停车场都快停满了。
等一开门,店里人数就增长到了300多人。

店家在接受媒体采访时,更是强硬表示:即使被点名批评,但也会照常营业,而且还能替我们宣传,扩大知名度。
像神奈川、茨城、群马县都先后公布了不听政府劝告而坚持营业的弹子房,结果一样,不但没有起到制裁震慑的作用,反而刺激了这些违规店铺的销售。
02
其实,就是赌博机
弹子房到底有什么魔力,让矜持的日本人,不顾疫情,非要排长龙去玩两把?
弹子房,是日本最流行的娱乐场所。
多流行呢?曾有统计,日本有10000多家弹子房,在一些小城市的核心地带,可能没有便利店,但你总能很快找到弹子房。
弹子房里常见的机器有两种,一种叫“柏青哥”,另一种叫“柏青嫂”。
其中,柏青哥在日语里就是弹子。
具体玩法是,玩家用现金买了弹珠,然后在机器前,拨动扳手,努力把弹珠送到机器的小孔里。如果成功进入指定区域,就会出现精美的游戏画面并开始抽奖,中奖后就会滚出更多的弹子。

弹子房装修普遍都很华丽,各种灯光、气球、音效,加上昏天黑地的氛围,人进去后,很容易就没了时间的概念,沉迷于游戏当中。
店内门外还经常会有穿着性感的美女揽客。
在疫情发生之前,弹子房基本上都是24小时营业,路人很容易被吸引,进去玩两把。

而且,日本室内基本禁烟,但弹子房却可以自由吸烟,所以,很多老烟民也愿意去玩。
一颗弹珠的单价并不高,1—4日元不等(1日元不到人民币7分钱),很多人会误以为玩这个并不会花很多钱。
但,事实完全不一样。
新手玩基本上就是白忙活。
有长期生活在日本的网友就介绍,短短十来分钟,就输掉了2万日元(相当于人民币1300多块)。
而这只是开始,连续输钱会激发人本性中不愿意服输的精神,只认为自己一时运气不好。
所以,经常是一开始只是输小钱,当反应过来想回头时,往往已经输了成百上千万。
想必大家也明白了,这就跟赌博一样。

而柏青嫂,就直接差不多等同于老虎机。
所以,简单地说,弹子房就是一种赌博场所。
03
“三店模式”规避了日本刑法
日本人对弹子房的痴迷,有时都让人感到吃惊。
赌博容易成瘾,弹子房也一样。
2017年,日本静冈县湖西市就发生过一起悲剧,一个孩子的父亲带着1岁的儿子去玩柏青哥。
因为怕孩子打扰到自己玩游戏,就把孩子留在了车里。
这个父亲在弹子房玩了2个小时,回到车里时,发现孩子已经中暑身亡。
同样的事情,在日本几乎每年都会发生。
我们知道,日本禁止赌博。
但弹子房,为什么还能堂而皇之地开店呢?
其实,这就牵扯到弹子房的兑换机制,也就是“三店模式”。

简单地说,在每一家弹子房的周围都会有两家这样的店铺,一家叫做“景品交换所”,另一家叫做“景品问屋”。
玩家到弹子房赌博,如果赢了,赢的也只是钢珠。
钢珠能在弹子房里兑换等值的特殊礼品,现在为了简便,弹子房直接可以用弹子兑换代币牌。
这些牌子大部分都是塑料的,也有用18K黄金填充的。

特殊代币,内含18K黄金
用户拿着这些特殊礼品或者代币牌,就可以去附近的景品交换所,换取相应的现金。
而景品交换所可以拿着这些特殊的礼品或者代币牌,交给景品问屋。弹子房再从问屋回购这些礼品,从而形成三家循环。
在这个过程中,三家店铺分属不同的公司运营,以钱换物,以物娱乐,再以物换钱。
日本刑法规定,赌博参与者处以50万日元以下罚款,但重点是不包括以一时娱乐为目的,以物作为赌注的情况。
也就是说,大家不赌钱,赌点劳力士手表、苹果手机什么的,都不算直接以金钱为赌注,不触犯赌博罪。
弹子房正是利用了法律的灰色地带,明目张胆地干着赌博的生意。
有媒体说,日本人每年在弹子房挥霍掉的钱高达2000亿美元,差不多是拉斯维加斯赌博收入的30倍。
在日本,每年因为弹子房,也会引发无数悲剧。
04
先吃白道
有人会问,那为什么不修改法律,堵住漏洞?
或者,为什么在疫情肆虐之时,日本无论官方还是民间对于弹子房依旧这么忍耐,还能让它们违规开业?
其实,主要有三方面原因。
首先,最直接的原因,就是弹子房对于日本经济真的很重要。

在2018年,日本有10060家弹子房。
这桩被看作庸俗、肮脏的行业,员工数量超过了日本所有的汽车制造厂商。
在最鼎盛的1995年,全国弹子房的营业额达到了30兆9000亿日元,直到现在弹子房产业每年都产生近25万亿日元的经济效益。
占日本总GDP的4%以上。
可想而知,疫情期间歇业就是等死,损失的不光是GDP,还有成千上万的人会失业。
更重要的是,弹子房和日本政界有着坚实的利益链接机制。
在日本,各个行业都有自己的协会,像弹子房这么庞大的产业当然也有自己的全国性质协会,叫做パチンコ·チェーンストア協会(弹子房连锁协会),简称PCSA,基本上所有的弹子房都是这个协会的会员。
打开这个协会的官方网站,能看到40个日本参众两院的议员,位列“特约顾问”。
比如,有曾任自民党农林水产大臣的山本有二,国内曾广为宣传喝马桶水的野田圣子等等。
其中,不但有执政的自民党议员,也有来自在野的民主党、维新会的议员。
可见,弹子房在日本政界的渗透有多厉害。

来自执政党自民党的部分“特约顾问”
而弹子房的直接审批机构,叫保安通信协会。
这个机构的人大都是来自原日本警视厅响当当的人物。
这又牵扯到日本警界一个不成文的规矩派遣制度(天下り):原警视厅即将退休或者已退休的,都会内定安排在这样的协会,待遇还是非常丰厚。
所以,弹子房又得到了警察的庇护。
甚至,安倍晋三家族和弹子房也有密切联系。
安倍政坛发迹的山口县下关市,安倍竞选总部的房屋所有权就属于一家名为東洋エンタープライズ的公司,这家公司自己就经营弹子房连锁店。
换句话说,安倍竞选总部的房子,都是从一家弹子房公司租用的。
而且在安倍父亲参政时,这家公司就是安倍家族的有力支持者。
在2018年,横滨市的一家弹子房开业,有人发现了安倍晋三送来的贺喜花篮。

真的很难想象,一个国家的最高政府首脑会给一家赌博店送花篮,但在日本的确发生了。
05
也吃黑道
弹子房不但在白道玩得开,背地里的黑道势力同样不可小觑。
在日本,大部分的弹子房经营者都有黑道背景,而且主要为在日本的朝鲜族人。

日本绝大多数的弹子房都掌握在日的韩国和朝鲜人手中
先前,日本殖民朝鲜半岛,不但掠夺资源,对朝鲜人也实行同化教育,大量掠夺朝鲜劳动力。所以,在二战后,有相当多的朝鲜族人没有返回祖国,而是留在了日本。
在那个时代,语言不通,民族不同,他们饱受歧视,所以,很多人无奈干起了烤肉店、拉面店,还有这种弹子房。
经过打打杀杀和原始积累后,他们有了现在的成就。
日本有一个机构名叫日本朝鲜人总联合会,至今已有六七十年历史。因为日本和半岛北面没有建交,据说,这个联合总会其实就差不多扮演了外交机构的角色。
而它的一大半成员,来自遍布全国的弹子房。
据说,朝鲜很大一部分外汇收入也来自这里。
06
结语
对于弹子房的风靡,日本社会学教授加藤英敏曾说:日本是一个人满为患、群体意识浓厚的社会,而弹珠机恰恰是日本人罕见独自一人的活动,你玩的那台机器就是属于你的独立空间。
实际上,弹子房是日本最喧闹、最拥挤的地方,人与人紧密地坐在一起,背景音乐动感而嘈杂,巨大的音乐伴随着弹子跌落的声音。
在这里,不需要与旁边的人交流,更多的是借这台机器逃离现实的烦恼,将自己全身心地投入到一场又一场的赌博当中。
在工作、家庭的双重压力下,弹子房反而成为了一种释放自我得到解脱的好地方。
只是,在每个喧闹的街头,在数百万个金属球的碰撞声中,多少人正在其中醉生梦死,又有多少家庭会因此家破人亡。
而相关利益者,却各得其所。
本文授权转载自:正解局(ID:zhengjieclub)。正解局,一个有见识、有深度、有诚意的时势财经大号,华尔街见闻、雪球、蚂蚁金服、世界经理人等10多家主流财经社区特邀入驻。每天全网阅读超过100万人次,在这里,穿透信息迷雾,正解中国成长的力量。
– END –
转自:https://mp.weixin.qq.com/s/fHisw4Co5dKIc2flR2uMrQ
过去10多年,高速成长的中国市场,以及中国人民对拥有一辆汽车的强烈渴望,让外资品牌享受到饕餮盛宴,让一众缺乏核心能力的本土品牌都在风口上飞,让中国成为全球车企紧抱的大腿。
但现在,中国人民再也不需要,更救不了那么多的车了。
01
水土不服
新年伊始,从一只大提琴箱偷渡回祖国后,身在黎巴嫩这座囹圄的卡洛斯·戈恩,依然有些“意难平”。
作为全球汽车业最成功的企业家之一,卸任掌门人之前,他率领日产-雷诺-三菱联盟于2018年达成销量1036万辆,名列汽车集团全球第三。
这个成绩,不但将通用、现代等一众巨头甩在身后,还迎来了与大众、丰田贴身搏杀的关键机会。
遭日方“清退”后,戈恩一手缔造的联盟,业绩正在土崩瓦解:2019年,他见证了自己从破产边缘挽救的日产汽车,销量由565万辆滑落到517万辆;2020年,又见证了雷诺品牌乘用车,将彻底退出中国这一关键市场。

▲前日产-雷诺-三菱联盟掌门人戈恩
2020年4月14日,东风股份一纸公告,宣布与雷诺的7年“婚姻”走到终点。
如果情感意志可以左右企业进退,东风雷诺是不会作别中国的。
毕竟戈恩在任时,对中国市场几乎事必亲躬。
2016农历小年,他千里迢迢跑到武汉跟东风董事长竺延风聚首,见证了雷诺在中国首家合资工厂竣工、首款合资车落地;担任清华大学经管学院顾问后,又六度走进北京高校,为联盟招徕顶尖人才。
进军中国,一直是戈恩的远大抱负:“未来几年,雷诺会将重心转移至中国,无论建厂还是产品投放。”
但在2017年达到7.22万辆的销量顶峰后,东风雷诺转身跌落。今年1-3月,销量分别为586辆、24辆、53辆。
不知道的,还以为这是一家4S店。
感情上,雷诺在中国本该受到欢迎。2月初,它还向武汉协和医院交付了一批防静电服、防化眼罩等防护用品。
这笔捐赠数额不大,但考虑到企业自身的惨状,这是一次珍贵的捐赠:因坐落武汉,复工延期,其现金流几乎停滞。
但情感对消费的带动很有限,尤其对动辄几十万的汽车来说。

▲2015年广州车展,东风雷诺请到红极一时的范冰冰来站台
问题出在哪?
中国战略的水土不服,或是关键。
2004年,雷诺就宣布,要在2006年实现国产车型落地,但因为工厂选址、合资条件等细节分歧,这个项目竟然全面停滞。直至2016年实现国产化销售,雷诺彻底错过了中国汽车产业的“黄金十年”。
利益博弈,让定价饱受争议。中方认为,第一辆车定价不能太高,要用销量打开市场;法方坚决反对,认为雷诺有实力高举高打。
于是,雷诺“科雷嘉”以16-22万的定价落了地。
但精明的中国消费者很快发现,与同出“CMF平台”的日产逍客比,两者发动机、变速箱、车身尺寸相差无几,价格却要贵整整1万块。
凭什么?
因为,法国人把雷诺定位为普通消费人买得起的豪华品牌,将其定义成“轻奢”概念。但在中国人看来,这简直是“冤大头”的代名词。
东风雷诺French design & easy for life(法系设计和轻松生活)的宣传语,不如“技术日产”简单实际,卖点突出;一直借以傍身的F1赛事,在中国也知者寥寥。

▲“法兰西玫瑰”苏菲玛索为长安PSA旗下DS品牌代言
东风雷诺之前,标致、雪铁龙等法系品牌已步入下滑区间,PSA(标致雪铁龙)集团全球CEO唐唯实就曾坦言:“传播方式和对中国消费者的需求理解确实有误。”
此外,还有与中大型车潮流背道而驰的长安铃木、除了法系浪漫别无他物的DS品牌、至今尚未摆脱暴发户标签的捷豹路虎……
这些不能真正在中国市场本土化、难以克服文化鸿沟的合资品牌,要么走向边缘,要么已经出局。
02
技术空壳
当创立于1899年的雷诺、1920年的铃木撤出中国市场时,小众车主还在扼腕叹息,因为赛车、越野的百年技术,一直是他们心中的“白月光”。
但部分中国品牌摇摇欲坠时,看客们反倒风轻云淡。毕竟,外资品牌还可以归结于本土化战略不当,但天时、地利、人和占尽的中国品牌,只能归结于不够努力。
“良心企业”众泰,就行走在暴雷的路上。
众泰的存在,有其合理性。用10万块人民币,国外群众可买不到“途观”、“途锐”和“奥迪Q3”。
2017上海车展,众泰展台引来保时捷CEO Oliver Blume参观。当他站在SR9前,一张带着“谜之微笑”的照片,登上了当天的微博热搜。
10.88万元起的众泰SR9,竟然与最低售价54.5万元的保时捷Macan颇为相似。

▲保时捷CEO参观众泰汽车展台时“面露不解”
众泰靠“借鉴”一战成名,让保时捷出离愤怒,并公开扬言,要把众泰告上法庭。虽然最终不了了之,但保时捷依然撂下一句狠话:众泰能抄袭外在,抄袭不了内涵。
结果,一语成谶。
2019年,众泰预亏60至90亿元,与前年盈利7.99亿的表现大相径庭;乘联会销量显示,2019年众泰仅售11.66万辆,几仅腰斩。
去年10月,网传的“平安银行展开内部风险排查”通知中,众泰也赫然在列。
盈利时不升级技术,当排放标准由国五向国六切换时,直接导致产品断供、新车难产。接着就是欠薪维权、销量暴跌、负债高企,一连串的连环雷,让众泰的运营体系几近崩溃。

▲网传有关众泰汽车“风险排查的通知”
华晨汽车,也不复当年之勇。
2019年,旗下华晨中华品牌销量仅4.82万辆,尚不足一款热销车型的单月销量。如何用技术追赶宝马,而非业绩依靠宝马,这位车圈的“富二代”,一直没有找到明确答案。
如今,它连找答案的资格都快要失去。
随着合资股比开放政策落实,华晨宝马的外资持股已由50%提升至75%。这意味着,华晨集团可能没有机会摆脱“代工厂”的命运了。
同样,江淮、银翔、宝沃等稍有耳闻的本土品牌,或因不注重核心技术,或因一味的模仿抄袭,存在时间也所剩无几。


▲前途汽车的国产超跑K50
不过,造车新势力的大浪淘沙,不能简单归咎于对技术的毫无渴求。
2018年8月8日,一款名为前途K50的国产超跑上市,该车在外观设计、电气技术、轻量材料等应用上实现了自主研发。
但凭借前途汽车的技术、品牌,完全撑不住68.68万元的高价(补贴后)。消费者们直呼“好贵”,意味着企业没有足够的现金流,让价格亲民的第二款车型K20实现落地。
造车新势力们,也面临着被技术团队架空的风险。
4月初,蔚来汽车高级副总裁黄晨东被曝离职,电动力工程研发部门面临重组;此前,小鹏汽车自动驾驶研发副总裁谷俊丽也挂冠而去,而特斯拉Autopilot 2.0正出自她的团队之手。
技术无法立足,品牌难以落地,销售渠道困难,融资几近干涸……“性命攸关”,几乎可以形容所有的新创车企。
2020年4月,前途汽车董事长陆群,和贾跃亭一样登上“老赖”名单。而贾跃亭Faraday Future汽车要量产,更是遥遥无期。
技术,原本是汽车业赖以生存的最大资本。如今,却成了中国品牌死生一线的“鬼门关”。
03
产业冰河
2020年开年刚过,上汽董事长陈虹,也面临着前所未有的难题。
上汽集团的两则公告,犹如声声惊雷。
产销快报显示:2019年上汽销量623.8万辆,跌破700万辆的关口,同比下滑11.54%。企业14年连增后,迎来首次下滑。
业绩预告也成色不足:归母净利256亿元,较去年骤减104亿元。受此牵连,上汽股价应声降至近年来的冰点。
究其原因,还是“华晨”和“东风雷诺”衰落风险的叠加。
上汽“三驾马车”中,上汽通用、上汽通用五菱止步在200万辆红线面前,分别下颓18.78%、19.42%;上汽大众降幅为3.07%,将保持5年的中国乘用车“销冠王”的位置,拱手让人。
更惨的是长安汽车,因“利润奶牛”长安福特暴跌19万台,集团净利急转直下,由前一年的6.54亿迅速跌至-26.47亿。
自主业务缺乏支撑,合资企业基盘失稳,上汽、长安这样的集团巨头都压力山大,汽车产业的前途之难可见一斑。

▲2019年底上汽与广汽开始“抱团取暖”
中国车市怎么了?消费者不禁要问。
除去品牌、技术等内部因素,市场迎来拐点、技术加速变革、产业政策重构等外部因素,也是导致车市趋寒的关键原因。
2018年,中国汽车市场的高歌猛进戛然而止,连续28年的增长红线首度拐头。乐观的人们认为,之后或是一条缓慢滑落的曲线。但2019年,产销量较峰值骤减300万,意味着中国车市“一夜入冬”。
总之,存量竞争加剧,汽车产业淘汰赛拉开大幕。
其实,全球市场也都笼罩在一片萧杀之下:2017至2019年,全球车市销量从9566万辆,缩窄至9506万辆、9030万辆。
美国汽车咨询机构LMC数据显示:2019年,全球前10的汽车集团,销量增长的只有2家,全球行业都进入下行周期。
▲福特全球CEO韩恺特(Jim Hackett)此前在采访中表示:
我们没落后,自动驾驶也没啥,我们的技术也是最好的。
销售持续下滑,转型却投入巨大,全球汽车企业都加速瘦身,这正是东风雷诺们退华的诱因。
2019年夏天,福特CEO韩恺特再度签署精简员工告知函:全球裁员7000人,包括20%高层管理人员。这一年,它撤出俄罗斯,关停法国、威尔士工厂。未来,它要将欧洲生产基地从24家减至18家。
通用也开始全球大甩卖。2020年2月16日,它将泰国工厂出售给长城汽车;此前1个月,其位于印度的塔里冈工厂,也被长城收入囊中。
04
重拾趋势
通用、福特的求生动作,正是源于中国市场的经营危机。
2016至2019年,福特在华销量,由127.3万辆缩水至56.79万辆。与之对应的是,长安福特此时又遭遇了长达3年的产品空窗期。当其他品牌靠新品龙争虎斗时,企业止步不前,等于把客户拱手送人。
福特也觉得,这么干肯定是不成了。
2019年8月,福特在上海举行“FUN DAY”品牌日。但在企业内部,这次活动的代号是“D-DAY”。
“二战”时,D-DAY特指盟军发起诺曼底登陆那一天。
这一天,三款福特新车在中国落地,如此动作前所未见。这也意味着,福特正式吹响了反攻的号角。
重视中国,这是全球车企维持基本盘的关键;押注中国,则是企业延展希望的所在。
东风雷诺依依作别,远隔重洋的马斯克,则因中国市场的大利好笑得合不拢嘴。
最新公布的销量清单中,特斯拉以10160辆的成绩,刷新了在华月销纪录;4月10日,续航最长的Model 3在华上市,补贴后最低售价仅33.9万,成为业绩增长的又一引擎。特斯拉Model3标准续航升级版基础售价在2020年5月1日调整为29.18万元,补贴后售价27.155万元。
良好的销量背后,特斯拉的经营策略并不讨好。
1月末,众多车企加班生产负压车、改造产线造口罩、为疫区捐款之时,特斯拉只是宣布“免费开放超充站充电权限至疫情结束”。一片“鸡贼”、“口惠而实不至”的讨伐后,500万元捐助才姗姗来迟。
3月,它又未提前告知,把Model 3控制器硬件HW3.0芯片临时替换为低配版的HW2.5。车主发现后,才被迫道出“零部件断供”的缘由。
尽管饱受争议,特斯拉咬定中国不动摇。马斯克曾放话出来,要在中国新建设计中心,让产品进一步满足中国人的口味。

▲1月7日,马斯克在上海Model 3交付仪式上大展舞技
马斯克的坚持,反映了车企对“新趋势”的重重期待:新能源技术转型,将从中国发展起步;出行方式迭代,也将在中国生根结果。
前途、江淮在新能源领域败下阵仗,正因特斯拉、比亚迪、威马、蔚来、北汽等品牌的厮杀围猎;众泰、华泰等“代步车”轰然倒下,也为具备智能出行、无人驾驶等创新能力企业的突围培育土壤。
正如“能量守恒定律”告诉我们:当有人享受着光热,就有人要承受酷寒。
只见新人笑,不闻旧人哭,如今坟头草,春风吹又生。
一句插科打诨,道尽了现实的残酷。
转自:https://mp.weixin.qq.com/s/FraR6SAiw5lNq5VByp5bgQ