衡水的中学为高考服务,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鸭的功能只多不少,且免费!

Iceberg

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

tuya-001

图压的工作原理很简单,对GIF, PNG, JPG,SVG图片用各种开源算法进行压缩,在保持人眼可见清晰度的同时,尽可能地减少图片体积。

如果压缩到更小,会自动报失败,建议用Photoshop将图片重新保存为图片后,重新尝试

202101265545279

官网下载地址

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爬取一下漫威官网的电影海报!
marvel

// 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.csswow.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/