解决Chrome开发中http强制跳转https
Chrome的307返回码, 会强制将http转换为https, 解决方法, 清除Chrome保存与当前网页相关的密码~
真是被Chrome教育了一下午!
Chrome的307返回码, 会强制将http转换为https, 解决方法, 清除Chrome保存与当前网页相关的密码~
真是被Chrome教育了一下午!
昨天去看了《复联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吧!
在数字出版领域, InDesign是一个独特的存在, 它的所有功能几乎都能从Photoshop中找到对应, 但又比Photoshop好用多了.

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

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


100 -> 线状图和文本分辨率1600-> 渐变和网格分辨率 400-> 勾选将所有文本转换为轮廓-> 勾选将所有描边转换为轮廓
确定预设属性信息



Acrobat 4(PDF 1.3)-> 透明度拼合预设zhaoolee -> 导出

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

最近接手了一个项目, 图片素材全部是中文命名, 为了避开起名的困扰, 我写了一个脚本,问题迎刃而解, 这里分享给大家
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
如果想让网页变黑白,可以学习B站的做法!
style="filter: grayscale(100%);"

前段时间我写了一篇mega同步盘的文章, 有小伙伴表示如果mega某天被封掉就尴尬了, 既然这样, 我们就用手头的vps资源自己搭一个私有网盘吧, 反正也不难, 只需简单三步(顺便减少对度盘的依赖)...
# 通过yum源安装docker
sudo yum -y install docker
# 启动docker
sudo systemctl start docker
# 开机自启
sudo systemctl enable docker
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









- 输入管理员账户和密码

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

- 手机上传图片

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





- 这个网盘能记笔记

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

- 日历打六分

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

animate.css 包含了一组炫酷、有趣、跨浏览器的动画,可以在你的项目中直接使用。
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>
wow, 第二个为动画名如从左侧滑入slideInLeft<!--动画持续时间为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>
<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效果也是完全可以做到的~
Office也是越来越臃肿,动则几个G的安装包让老旧电脑不堪重负,如果你不是专门做Office教程的,完全可以用Office 2016完成所有工作,今天我在某论坛看到一个超精简的分享包,下载下来,安装了一波,安装过程很顺利,但激活程序出了问题,于是我又补了一个KMS激活小程序,重新封了一下,zip包只有193MB, 这里分享出来。

分享一个不足200MB的Office2016安装包, 支持 win7 win8 win8.1 win10 x86/x64 系统

安装后的软件,需要管理员身份才能运行,我们可以直接设置默认用管理身份运行,这样只需双击就可以运行了

https://frp.v2fy.com/Office2016%E7%B2%BE%E7%AE%80%E7%89%88/
我在Github的用户名为zhaoolee,如果我在Github中建立一个名为zhaoolee的仓库,那zhaoolee仓库中READNE.md的内容,便会展现到github主页顶部。更有趣的是,如果给仓库编写一个脚本,就可以利用Github Actions自动更新主页的内容。
我有两个网站V2方圆和方圆小站,我通过Github Actions设置了一个每隔15分钟自动运行的任务,任务内的程序会自动爬取V2方圆和方圆小站的前三篇内容,并将链接更新到我的Github主页。当用免费的Github Actions为自己的博客引流时,我体会到了白嫖的快乐,获得了Github长期的优质流量。

import feedparser
import time
import os
import re
import pytz
from datetime import datetime
def get_link_info(feed_url, num):
result = ""
feed = feedparser.parse(feed_url)
feed_entries = feed["entries"]
feed_entries_length = len(feed_entries)
all_number = 0;
if(num > feed_entries_length):
all_number = feed_entries_length
else:
all_number = num
for entrie in feed_entries[0: all_number]:
title = entrie["title"]
link = entrie["link"]
result = result + "\n" + "[" + title + "](" + link + ")" + "\n"
return result
def main():
v2fy_info = get_link_info("https://v2fy.com/feed/", 3)
fangyuanxiaozhan_info = get_link_info("https://fangyuanxiaozhan.com/feed/", 3)
insert_info = v2fy_info + fangyuanxiaozhan_info
# 替换 ---start--- 到 ---end--- 之间的内容
# pytz.timezone('Asia/Shanghai')).strftime('%Y年%m月%d日%H时M分')
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
insert_info = "---start---\n\n## 最近更新文章(" + "更新时间:"+ datetime.fromtimestamp(int(time.time()),pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + " | 通过Github Actions自动更新)" +"\n" + insert_info + "\n---end---"
# 获取README.md内容
with open (os.path.join(os.getcwd(), "README.md"), 'r', encoding='utf-8') as f:
readme_md_content = f.read()
new_readme_md_content = re.sub(r'---start---(.|\n)*---end---', insert_info, readme_md_content)
with open (os.path.join(os.getcwd(), "README.md"), 'w', encoding='utf-8') as f:
f.write(new_readme_md_content)
main()
https://github.com/zhaoolee/zhaoolee
Github Actions脚本位置:
https://github.com/zhaoolee/zhaoolee/edit/main/.github/workflows/main.yml
长期来看,Github在搜索引擎中的权重很高,以上方法直接为搜索引擎提供最新的内容资源,如果推广开来,会让互联网更开放,而不是内容平台各自跑马圈地,割裂互联网。虽然真正开放的互联网很难达成,但我还是想,留给后来者一个尽可能开放的,资源知识一触及达的互联网。
Github Actions玩法是丰富多彩的,道路也是曲折渐进的,关于定时任务,阮一峰大佬,搞了一个定时往自己邮箱发天气预报的功能; 以前有一个表特日报的服务,订阅后,每日都能收到ptt网站最新的好看妹子图片, 我们也可以把发天气预报搞成公共服务,需要的人只需在仓库issues下留下自己的邮箱,程序会定时获取issues内的邮箱,然后群发,这样大家都能享受天气预报的邮件服务。
Github Actions 也还有一些小bug,如果你设置每隔15分钟运行一次,可能会偶尔漏掉几次任务,目前比较好的解决方案是,把频次改成每2小时发一次,基本可以避免漏发(Github Actions应该是资源不足造成的,微软有的是银子,多氪金就能修复)
https://fangyuanxiaozhan.com/p/2020-01-23-15-github-actions-blog/
百度网盘出了闲时下载卡,8.9员/月,效果是,北京时间1:00-9:00尊享极速下载,其余时段继续坑爹。
办卡后,如果你想要享受极速下载,需要熬到凌晨1:00,打开百度网盘,开始冲,然后获得满足!什么叫延迟满足?这就是延迟满足!不过满足的是熬夜的快感还是极速下载的快感,就不得而知了。
如果你下载的东西不多,你可以早点睡觉,早点起床下载,养成早睡早起的好习惯,百度网盘的产品经理,为用户的睡眠操碎了心,如果你起不来,那你的下载卡,相当于被百度白嫖了,如果你连续一个月起不来,百度可能会嫖上瘾。
如果你电费充裕,可以一直开着电脑,只要百度网盘不出Bug,不整闲时会员卡尊享限速的活儿,等到夜深人静时,你的电脑会代你熬夜,体验百兆光纤的下载。
如果站在百度网盘产品经理的角度, 这样或许能利用晚上闲置的带宽,吸引价格敏感的不付费用户, 但不付费用户是坚决不会付费的,而且不会买这种二等公民式的服务,倒是25元/月的用户可以主动降级为8.9元/月的服务,只需多花一点电费就好了。
其实百度网盘完全可以把8.9元/月的版本做的更蓝奏云一些,单文件100MB的全时间段满速下载,超过100MB的文件,1:00到9:00满速下载。如果持续续费,等级提升,单文件100MB的限制可以逐渐提升到200MB,这样就很有吸引力,而且不会占用很大的带宽。
万物基于抽卡, 百度网盘甚至可以开一个奖池游戏,中奖率控制在10%以上,每次抽中有1GB~5GB流量的加速包(别TM送优惠券), 过场动画甚至可以混一点软广告进去(模仿并夕夕),这样提升了用户的活跃度,还能赢回一点名声(虽然百度已经是过街老鼠),有软广告的植入,没准儿还能赚一些广告费。
好的产品自然能赢来用户的欢迎, 正如我所用的锤子便签, 虽然锤子倒闭了, 但我依然认为没有哪个工具能替代它,能做出好的产品公司倒闭, 垃圾公司横行无忌;说穿了, 这是一个比烂的时代, 没有人能活在新闻联播里,如果百度也能变成一个受人尊敬的公司, 那这个世界才是真的进步了, 前路多磨难, 吾辈当自强。