衡水的中学为高考服务,996.icu为人民企业家服务
最近衡水的中学,线上朝五晚十的寒假安排,又上了知乎热榜,大家一致认为,这是毒瘤,必须改变。这和996一样,虽然大多数人讨厌,但又没有特效药去解决这个毒瘤。
中学所做的一切为高考服务,而高考又是中国社会极少的相对公平的上升通道,相对于深圳价格接近疯狂的学区房(学区房说穿了就是用钱买教育资源),用分数换上升名额的学生,反而更有点英雄主义,完全以自己的力量获得想要的结果,中国高考的英雄主义大多悲壮,因为真的没有其它选择。
我高考在河北衡水,到了海南大学,室友分别来自,山西,湖南,海南,河南,问一下高考分数,我比高考录取率最低的河南还高10几分,不过这也没什么值得骄傲的,考试不过是唯手熟尔,我比其它几位更会做题而已。
衡水的考试非常频繁,频繁到比吃饭次数还多,而考试与吃饭的共同点是,都很急!考试会砍一些标准时长,吃饭跑着来。吃饭跑着来分两个阶段,快跑着去食堂,慢跑着回教室,快跑的过程相当于100米加长版(跑的慢就排长队,买不到好吃的)。由于快跑的过程和大学体测差不多。学生们为了减少快跑次数,要找人组队,如果5个人一组,5天只需跑一次,遇到队友跑的慢,买不到好菜,5个人一天的饭菜都不怎么好吃。
如果大家都不拼命,大家都可以悠闲的过,正如打工人不喜欢996,衡水的学生也不喜欢衡水模式,但学生根本没得选,你拒绝这种模式,找一个轻松的中学来读,除非你天赋异禀,或者父母可以帮你高考移民,不然,考不过衡水模式的学生。人民企业家可以把996视为福报,超级中学当然可以把做题视为素质教育。
解决「福报」和「做题式素质教育」的关键是让资源更均衡分配,如果我国是福利型社会,奋斗者自然会少很多。如果考不上大学也能找到「有还不错收入」的工作,那做题式素质教育自然就没那么香了。但我们都不可能活在新闻联播里,只有提升自己的专业水平,成为专家,抱着面临无尽的牛鬼蛇神的钢铁之心,才能让生活变得简单轻松。
关于自尊心,有人说,衡水的老师不给学生自尊心,说很过分的话,其实能给学生留下深刻印象的,往往只有直击灵魂的问题,我记得有次物理课,一道斜坡滑块分析受力的简单题目,几个学生做错了,物理老师来了句:「我奉劝做错题的几位,如果你以后有了孩子,千万别让它学理科」有人感觉很伤自尊,有人感觉很好笑,但我感觉甚至可以算得上因材施教,不要因为理科很火爆,就跟风学理科,并不是所有人都适合。我有个同学,理科学得很难受,选的文科,现在一所不错的中学当历史老师,生活很幸福。当然,谁不能保证每个老师都是好老师,可能我比较幸运,没有遇到特别极端的例子。
封闭式的教育,让父母很省心,但学生确实惨,据说一个学生,被父母探视一小时,哭了一小时,被传为笑谈。作为一个亲生经历的学生,我完全能体会哭了一个小时学生的心情,因为确实太苦了,每周一节的体育课,是最好的时光,前半节课跑操,后半节课,可以坐在操场,什么也不做,简直是天堂。
不间断的末位淘汰,让学生跑起来;如果规定30分钟吃完饭,回教室学习。到了40分钟,依然有学生回不来。如果给最后3名学生一些惩罚,那20分钟不到,学生就全部回到了教室。这样做的好处在于,牺牲少数人,让多数人变得「勤奋好学」。学生都会趋利避害,为了避开惩罚,让竞争无处不在。
深圳的房价高歌猛进,衡水的中学想在深圳开个分校,被深圳果断拒绝,深圳并不讨厌996的工作者,深圳讨厌提前996的衡水学生,因为他们会抢走自家孩子宝贵的升学名额。衡水的模式是狗熊,通过压榨下一代,获得聚光灯,但能坚持走完衡水教育的学生,身上有英雄的影子,他们用超高分数让身处优势地位的人,也战战兢兢,生怕被分走下一代的蛋糕。
错的不是衡水教育,是失衡的教育。
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2021-01-29-20/
轻薄的代价(纪念不足两岁MacBook轻薄本的陨落)
我有一台12寸的Mac轻薄本,一周没开机,就无法开机了。
查购买时间,Apple Care一年的保修期已过,于是我只好尝试一下华强北的修理技术,第一家店,说是CPU老化,而且轻薄本的主板集成度太高,无法修理; 第二家店,老板说可以把主板的元器件摘下来,替换到另一块主板上,正当我要感慨华强北的奇妙修理技术时,老板折腾了1个小时后,告诉我,修不好... 如果卖掉,也只能卖1000块,说穿了,这1000块是给屏幕的,我的轻薄本就此陨落。
作为一个电脑重度使用者,我对陨落的轻薄本并无太多留恋,因为它真的太慢了,i7处理器主频只有1.2Ghz(Pro版为3.1Ghz),16GB内存,512GB的硬盘,升级了新系统,时不时有些卡顿。由于没有散热风扇,稍微重一点的任务,系统就会弹窗过热,所以我只有周末出门看书时才会用到它,万万没想到,用的少反而陨落的越快。
台式机才是程序员的信仰啊!我自己组装了自己的台式机,即使出了问题,也很容易找到问题所在,而且可以自由地加内存,加灯光,加远程开机配件,在机箱中加体积超大的机械硬盘,学习理线神技,甚至可以往机箱的显卡上挂手办,超级定制化,个性无比!
轻薄是资本主义的谎言(玩笑话)!轻薄会让元器件集成度更高,部分轻微损坏,就要整体重新购买,商人可以赚更多的钱。以Apple 最新的搭载M1芯片的 Mac mini为例,芯片高度集成,为了让用户花2倍以上的价格,购买内存,连内存槽都砍掉了,而外壳内部一多半是空的(为了省模具费,用的旧模具)。
最后,奉劝各位小伙伴,如果不是特别需要,不要选择Mac轻薄本,如果一定要选,请购买Apple Care,否则出了问题,轻薄本除了屏幕能卖几两银子,其余配件都是白给。
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2021-01-28-09/
PP鸭最佳替代品!《图压》批量压缩图片而不损失画质,支持JPG,PNG,GIF,SVG
如果你经常玩摄影,或者喜欢收藏壁纸,或者需要为网站图片缩小体积减少流量消耗,建议你一定不要错过这款图压软件!
从前, 有一个名为PP鸭的付费软件,也能实现图片压缩的功能,但缺点就是贵,2.0版本一个激活码可以供3台设备激活,3.0版本一个激活码只能激活一台设备,PP鸭在3.0版本加入了压缩为WebP格式的功能,诱惑用户用2.0的码去换3.0的码,并给一些升级折扣优惠,但2.0的码一旦被兑换,就被作废了,也就是原来的3台电脑可用,变成了1台电脑可用。
而图压的功能比PP鸭的功能只多不少,且免费!

可批量压缩,可设置直接覆盖原图,压缩前后几乎无画质损失

图压的工作原理很简单,对GIF, PNG, JPG,SVG图片用各种开源算法进行压缩,在保持人眼可见清晰度的同时,尽可能地减少图片体积。
如果压缩到更小,会自动报失败,建议用Photoshop将图片重新保存为图片后,重新尝试

官网下载地址
https://tuya.xinxiao.tech/
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2021-01-26-13/
解决Chrome开发中http强制跳转https
Chrome的307返回码, 会强制将http转换为https, 解决方法, 清除Chrome保存与当前网页相关的密码~
真是被Chrome教育了一下午!
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2021-01-25-24/
Node.js爬虫获取漫威超级英雄电影海报
昨天去看了《复联3》的首映,当我提前15分钟进入影院的时候, 看到了粉丝们取票的长队, 顿时有一种跨年夜的感觉...
最近看了node爬虫的一些知识, 这里用node爬取一下漫威官网的电影海报!

// https://marvel.com/movies/all
const request = require('superagent')
const cheerio = require('cheerio')
const fs = require('fs-extra')
const path = require('path')
let url = 'https://marvel.com/movies/all'
// 获取图片url和图片名字
async function getUrlAndName(){
// 用于存储返回值
let imgAddrArray = []
// 请求资源
const res = await request.get(url)
// 将获取的html, 转换为资源符$, 相当于python中的xpath语法的etree过程
const $ = cheerio.load(res.text)
// 定位资源位置, 将图片资源,和图片名字, 以数组方式, 返回给调用函数
$('.row-item-image a').each(function(i, elem){
let movieName = $(this).attr('href').split('/').pop()
let imgAddr = $(this).find('img').attr('src')
imgAddrArray.push([imgAddr, movieName])
})
return imgAddrArray
}
// 下载图片
async function download(imgAndName){
// 拼接出, 当前资源的文件名
let filename = imgAndName[1] + '.jpg'
console.log("爬取海报:", filename);
// 获取图片二进制数据
const req = request.get(imgAndName[0]);
// 保存图片
await req.pipe(fs.createWriteStream(path.join(__dirname, 'images', filename)));
}
// 创建文件夹, 控制整体流程
async function init(){
let imgAddrArray = await getUrlAndName()
// 创建文件夹
try{
await fs.mkdir(path.join(__dirname, 'images'));
}
catch(err){
console.log("==>", err);
}
// 获取资源
for (let imgAddr of imgAddrArray){
await download(imgAddr);
}
}
init()

小结:
直观感受, node爬虫并没有python好用, 而且由于浏览器的同源限制, 在浏览器端跑node爬虫也会有些麻烦;node爬虫的优势:理论上讲,node默认的异步玩法, 能达到python的多线程爬虫的效果.
写爬虫, 还是老老实实用Python吧!
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2021-01-25-23/
InDesign转曲字体 导出PDF的技巧
在数字出版领域, InDesign是一个独特的存在, 它的所有功能几乎都能从Photoshop中找到对应, 但又比Photoshop好用多了.

在编辑部担任美术编辑的时候, 我遇到了很意思的问题, 一些拥有漂亮曲线的字体, 是无法被InDesign直接输出的, 只有将字体通过ctrl+shift+o"转曲"后,才能完美输出, 然而更有意思的是, 字体转曲后, 就变得无法修改...

按照"不重复造轮子"的原则, 我请教了上一届的前辈, 前辈的操作是, 选中特殊字体,通过ctrl+shift+o, 挨个进行转曲操作! 前辈确实比我勤快...
从一个程序员的角度, InDesign这种蛋疼的设定, 自然是无法接受的, 懒人的直觉告诉我, 一定有批量转曲的方法, 类似编程中的"中间件", 完成作品时, 将作品一键"转曲"输出为PDF
经过我的一顿查找, 还真把问题解决了, 过程如下:
1. 在文档主页,绘制透明矩形框

2. 设置透明度拼合
编辑-> 透明度拼合预设

新建预设-> 为预设命名-> 矢量100
-> 线状图和文本分辨率1600
-> 渐变和网格分辨率 400
-> 勾选将所有文本转换为轮廓
-> 勾选将所有描边转换为轮廓

确定
预设属性信息


3. 使用预设 导出
文件->导出

选择文件导出位置

高级-> 兼容性Acrobat 4(PDF 1.3)
-> 透明度拼合预设zhaoolee
-> 导出

导出完成

总结
懒是第一生产力.
无论学编程, 还是学Adobe的软件, 不同的领域, 类似的问题,解决问题的思路,大多是相通的,有了正确的方向, 就能更好的解决问题(更好的偷懒...).
InDesign与Photoshop相比, 最大的优势就是高效, 我是一个很业余的设计爱好者, 如果完成一份画册的初稿, 用Photoshop需要4个小时, InDesign只需要1个小时, InDesign还是专业呢~
放一张, 我花费1个多小时,使用InDesign完成的, 毕业季画册初稿截图

这年头, 不懂点设计, 都不敢说自己是程序猿...
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2021-01-25-22/
Python写给前端的脚本!网站图片素材中文转英文
- 写网页的时候, 我们经常需要使用图片素材, 图片素材如果是中文名, 挂到服务器会会引发乱码, 我们需要将图片名称改为英文字符才可以使用
- 而起名是一个世界级难题, 为图片素材起英文名更是一件极其蛋疼的事
- 有些人英语不好, 直接用拼音命名, 而拼音闹出的笑话更是无法计量...
最近接手了一个项目, 图片素材全部是中文命名, 为了避开起名的困扰, 我写了一个脚本,问题迎刃而解, 这里分享给大家
脚本解决的问题
- 可以为中文命名的图片起一个英文名
- 可以批量为当前目录及其子目录下图片自动生成新的英文名
- 新的英文名图片会被输出到新的目录, 不会对原素材有丝毫影响

源码
import os
import re
import copy
import shutil
from googletrans import Translator
# 获取当前目录下所有的css文件路径
def getAllMd (file_dir):
all_whole_path_files = []
for root, dirs, files in os.walk(file_dir):
for file in files:
try:
if (file[-4:] == ".png") or (file[-4:] == ".jpg"):
file_info = [root+'/', file]
all_whole_path_files.append(file_info)
except Exception as e:
print(e)
return all_whole_path_files
# 将中文转换为英文
def getRepName(path_file):
# 暂时保留后缀
extension_name = ''
extension_name = path_file[1].split(".")[-1]
# 无后缀的文件名
path_file[1] = path_file[1][0:-len(extension_name)-1]
# 实例化翻译
translator = Translator()
tmp_en_name = translator.translate(path_file[1], dest='en').text
# 将数字和字母保存到最终的字符串中, 遇到空格则替换为中划线保存
en_name = ''
for en_name_str in tmp_en_name:
# 将大写字母转换为小写字母
en_name_str = en_name_str.lower()
# 保留小写字母
if re.match('[a-z]', en_name_str):
en_name += en_name_str
# 将空格转换为"-"
elif en_name_str == " ":
en_name += "-"
else:
pass
# 补充后缀名
path_file[1] = en_name + '.' + extension_name
return path_file
# 根据相对路径及新旧英文名 创建新文件
def createNewFile(whole_path_file, new_whole_path_file):
# 在图片的同级目录, 创建一个enName的文件夹
if os.path.exists(whole_path_file[0] + "./enName/"):
pass
else:
os.makedirs(whole_path_file[0]+ "./enName/")
# 拷贝创建新的文件
shutil.copyfile(whole_path_file[0]+whole_path_file[1], new_whole_path_file[0]+"./enName/"+new_whole_path_file[1])
def main():
all_whole_path_files = getAllMd('./')
for whole_path_file in all_whole_path_files:
# 获取英文名
new_whole_path_file = getRepName(copy.deepcopy(whole_path_file))
print("旧的路径和英文名:", whole_path_file, "新的路径和英文名:", new_whole_path_file)
# 根据相对路径及新旧英文名创建新文件
createNewFile(whole_path_file, new_whole_path_file)
if __name__ == '__main__':
main()
这个脚本只是解决了我的问题, 如果有新的需求, 欢迎到这个脚本对应的Github提交需求, 也欢迎点个星, https://github.com/zhaoolee/zhToEnName
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2020-01-25-21/
B站黑白滤镜
如果想让网页变黑白,可以学习B站的做法!
style="filter: grayscale(100%);"

本文永久更新地址:
https://fangyuanxiaozhan.com/p/2020-01-25-20/
简单三步, 搭建全平台私有同步网盘
前言:
前段时间我写了一篇mega同步盘的文章, 有小伙伴表示如果mega某天被封掉就尴尬了, 既然这样, 我们就用手头的vps资源自己搭一个私有网盘吧, 反正也不难, 只需简单三步(顺便减少对度盘的依赖)...
搭建环境:
- cenntos 7 (相信很多用vultr的小伙伴都选择了centos7~)
- 2G内存, 2M带宽(带宽越大, 同步越流畅)
第一步:安装docker
# 通过yum源安装docker
sudo yum -y install docker
# 启动docker
sudo systemctl start docker
# 开机自启
sudo systemctl enable docker
第二步: 获取nextcloud镜像, 完成网盘搭建
docker run -d -p 8080:80 nextcloud

第三步:访问主机ip的8080端口,为网盘设置管理员名称和密码
比如我的vps主机ip为149.28.54.241
, 那么我访问的就是149.28.54.241:8080

- 进入网盘后, 可以获取全平台的客户端

- 至此网盘已经搭建完成!
自由存取文件
可以通过客户端上传图片, 也可以直接拖拽上传


把文件分享给好友

http://149.28.54.241:8080/s/tgMGHQ7Ri5pMsmd
实现同步盘的功能(用webdrive连接)
- 点击右下角设置

获取webdav地址

- mac直接挂载

- 连接

- 认证

- 挂载成功

其实挂载同步盘后, 你可能发现自己的服务器流量还是太小, 传输大文件,如果断掉就会需要重传, 我这里推荐一个工具
transmit支持webdav协议, 可以让我们在网络状况很差的情况下,也能进行稳定同步
把手机也连上


- 输入管理员账户和密码

- 可以看到刚刚在浏览器上传的图片

- 手机上传图片

- pc可以查看手机上传的图片

探索插件(可以跳过)
- 点击页面右上角齿轮图标, 可以安装插件




- 这个网盘能记笔记

- 其余的大多数应用我都试了一遍, 除了记事本, 其余的基本上是从入门到放弃

- 日历打六分

小结
暴漫拍过一个视频, 大致内容是, 一个人的隐私信息可以被作为一般等价物, 去换取商品, 或许随着科技的发展, 人们的隐私信息会被互联网巨头们进行交易, 这时候建立自己的私有云盘就变得比较重要了
开始接触到nextcloud的时候, 感觉挺惊艳的, 不仅开源免费, 而且是平台覆盖,支持文件分享,支持webdav数据同步, 而且还支持各种扩展(虽然有些不太好用), 后来又找到了docker镜像的部署方式, 发现原来搭建自己的私有云盘可以如此简单, 爱折腾的小伙伴可以按照我的步骤尝试一下~
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2020-01-25-19/
让Css3动画变得有趣WOWjs
wowjs可以在网页滚动时, 展示css动画,是animater的好朋友, wowjs官方实例演示链接: https://mynameismatthieu.com/WOW/

animate.css 包含了一组炫酷、有趣、跨浏览器的动画,可以在你的项目中直接使用。
使用方法
1. 在页面头部引入, animate.css
和wow.js
, cdn地址如下:
<link href="https://cdn.bootcss.com/animate.css/3.5.2/animate.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/wow/1.1.2/wow.min.js"></script>
2. 在需要添加动画的html元素上, 新增两个类属性, 第一个为wow
, 第二个为动画名如从左侧滑入slideInLeft
从左边滑入的动画
3. 添加动画控制, 主要控制四个属性:
- data-wow-duration: 动画持续时间
- data-wow-delay: 动画开始之前的延迟播放的时间
- data-wow-offset: 元素距离底部大于此数值时,开始播放动画
- data-wow-iteration: 动画重复的次数
<!--动画持续时间为2秒, 动画开始之前的延迟播放的时间为5s 元素底部距离浏览器底部400像素时开始播放动画, 动画重复次数为2次-->
<p class="wow slideInLeft" data-wow-duration="2s" data-wow-delay="5s" data-wow-offset="400" data-wow-iteration="2">从左边滑入的动画</p>
4. 在html底部添加初始化语句
<script>
wow = new WOW(
{
boxClass: 'wow', // 默认属性名
animateClass: 'animated', // 默认触发的动画类(包含在animate css中)
offset: 0, // 为所有添加wow的元素设置 data-wow-delay属性 的默认值
mobile: true, // 是否在移动设备中开启动画
live: true // 持续监测页面中是否插入新的wow元素
}
);
wow.init();
</script>

小技巧: 在animater中大多数动画名都是"见名知意"的, 在这里可以在线查看: https://cdn.bootcss.com/animate.css/3.5.2/animate.css, 具体用法可以查看下面简单的小demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>wow动画</title>
<link href="https://cdn.bootcss.com/animate.css/3.5.2/animate.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/wow/1.1.2/wow.min.js"></script>
</head>
<style>
p {
font-size: 50px;
text-align: center;
color:#64B587;
line-height: 100px;
}
section {
width: 800px;
font-size: 30px;
color: #A84631;
text-align: center;
line-height:60px;
margin: 0 auto;
}
section div {
height: 100px;
line-height: 100px;
}
</style>
<body>
<p class="wow slideInLeft">
将进酒
</p>
<section >
<div class="wow slideInLeft" data-wow-duration="2s" data-wow-delay="1s">
君不见黄河之水天上来,奔流到海不复回。<br>
</div>
<div class="wow slideInLeft" data-wow-duration="3s" data-wow-delay="1s">
君不见高堂明镜悲白发,朝如青丝暮成雪。<br>
</div>
<div class="wow bounceOutUp" data-wow-duration="2s" data-wow-delay="1s">
人生得意须尽欢,莫使金樽空对月。<br>
</div>
<div class="wow fadeIn">
天生我材必有用,千金散尽还复来。<br>
</div>
<div class="wow fadeInDown">
烹羊宰牛且为乐,会须一饮三百杯。<br>
</div>
<div class="wow fadeInLeft">
岑夫子,丹丘生,将进酒,杯莫停。<br>
</div>
<div class="wow fadeInLeftBig">
与君歌一曲,请君为我倾耳听:<br>
</div>
<div class="wow fadeOutRightBig">
钟鼓馔玉不足贵,但愿长醉不复醒。<br>
</div>
<div class="wow flipInX">
古来圣贤皆寂寞,惟有饮者留其名。<br>
</div>
<div class="wow flipOutY">
陈王昔时宴平乐,斗酒十千恣欢谑。<br>
</div>
<div class="wow lightSpeedIn">
主人何为言少钱,径须沽取对君酌。<br>
</div>
<div class="wow rotateIn">
五花马,千金裘,<br>
</div>
<div class="wow rotateInUpLeft">
呼儿将出换美酒,与尔同销万古愁。<br>
</div>
</section>
<!--动画持续时间为2秒, 动画开始之前的延迟播放的时间为5s 元素底部距离浏览器底部400像素时开始播放动画, 动画重复次数为2次-->
<p class="wow slideInLeft" data-wow-duration="2s" data-wow-delay="5s" data-wow-offset="400" data-wow-iteration="2">End</p>
</body>
<script>
wow = new WOW(
{
boxClass: 'wow', // 默认属性名
animateClass: 'animated', // 默认触发的动画类(包含在animate css中)
offset: 0, // 为所有添加wow的元素设置 data-wow-delay属性 的默认值
mobile: true, // 是否在移动设备中开启动画
live: true // 持续监测页面中是否插入新的wow元素
}
);
wow.init();
</script>
</html>
小结
animater可以增加网页的动感效果,动画的效果和ppt类似, 如果你肯花时间, 用animater做出好看的在线ppt效果也是完全可以做到的~
本文永久更新地址:
https://fangyuanxiaozhan.com/p/2020-01-25-18/