0%

如果要在网页上显示一些随机的语句,获得一些人生的经验,你会选择什么?
也许,一言是一个很好的选择,它可以提供一些动漫中的台词,或是网络上的各种小段子。
在前面的文章有趣的Linux命令行工具中提到的fortune命令或许也可以满足需求,pure-ftpd就可以设置在连接成功时显示随机的来自fortune的语句。
那除此之外呢?历史上的今天是一个不错的方案。当你访问一些门户网站的首页,有时会看到这样的栏目。它也是一些百科全书网站,比如维基百科的传统。事实上,在Mac上就自带了一个小型的「历史上的今天」数据库,执行:

1
cat /usr/share/calendar/calendar.history

就可以看到。
这篇文章将介绍如何搭建一个提供「历史上的今天」信息的API。

建立数据库

首先,建立MySQL数据库,用于存储爬取的信息。

1
2
3
4
5
6
7
8
9
10
11
CREATE DATABASE dbname;
#建立数据库,dbname保持一致即可
USE dbname;
CREATE TABLE event (
id int(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
type int(1) DEFAULT NULL,
year varchar(6) DEFAULT NULL,
date varchar(6) DEFAULT NULL,
info varchar(300) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
QUIT;

获取数据

数据来源是维基百科,使用Python爬取数据,并存入数据库中。代码中的usernamepassworddbname分别是你的登录用户名、密码和数据库名。数据表名默认是event,也可以自行修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python3

username = "username"
password = "password"
dbname = "dbname"

import requests
from bs4 import BeautifulSoup
import re
import datetime
import pymysql

conn = pymysql.connect(host = "127.0.0.1", user = username, password = password, db = dbname, charset = "utf8")
print(conn)
cur = conn.cursor()
cur.execute("SET NAMES utf8mb4")

def savedb(data):
print(data)
try:
cur.execute("insert into event values(null,%s,%s,%s,%s)", data)
except pymysql.err.InternalError:
print("\033[31mERROR: Incorrect string value.\033[0m", data)
with open("failed.txt", "a") as myfile:
myfile.write(str(data) + "\n")
except pymysql.err.DataError:
print("\033[31mERROR: Data too long.\033[0m", data)
with open("failed.txt", "a") as myfile:
myfile.write(str(data) + "\n")

def getDateList():
list = []
date = datetime.date(2016, 1, 1)
for i in range(366):
date_str = str(date.month) + "月" + str(date.day) + "日"
list.append(date_str)
date += datetime.timedelta(days = 1)
return list

def getInfo(html, type, date):
typeList = ["大事记", "出生", "逝世"]
flag = re.compile("(<h2><span id=.*<span class=\"mw-headline\" id=.*?" + typeList[type] + "[\s\S]*?</ul>\s*?)<h2>").search(html)
if flag:
bsObj = BeautifulSoup(flag.group(1), "html.parser").findAll("li")
for li in bsObj:
match = re.compile("((^前|^)\d{1,4}年):([\s\S]*$)").match(li.get_text())
if match:
year = match.group(1)
info = re.sub("\[\d{1,}\]", "", match.group(3).strip())
data = (type, year, date, info)
savedb(data)

list = getDateList()
for date in list:
print(date)
url = "https://zh.wikipedia.org/zh-cn/%s" % date
r = requests.get(url)
getInfo(r.text, 0, date) # 大事记
getInfo(r.text, 1, date) # 出生
getInfo(r.text, 2, date) # 逝世

cur.connection.commit()
cur.close()
conn.close()

这里的两个except分别处理的是特殊字符(非UTF-8范围)和内容长度超出的问题。

查询数据

比较简单的方式是按照json格式进行输出,这里给出一种使用Python的方案。

阅读全文 »

本文将介绍一种在macOS上读写NTFS磁盘的方法,通过它可以方便的在不同系统中传输文件。默认情况下,macOS是无法向NTFS磁盘写入的——这个功能由于种种原因被禁用了。我们使用一种Hack的方法将其启用即可。
macOS在挂载NTFS磁盘时加载的脚本为/sbin/mount_ntfs,参数为:

1
mount_ntfs -o nodev -o noowners -o nosuid /dev/disk2s1 /Volumes/DATA

这时,只要加上额外的参数,就可以启用对NTFS磁盘的写入。具体方法是:

1
2
3
4
sudo -s #输入密码,获取root权限
cd /sbin
mv mount_ntfs mount_ntfs_orig
vim mount_ntfs

mount_ntfs重命名为mount_ntfs_orig,然后再新建一个mount_ntfs,输入以下内容:

1
2
#!/bin/sh
/sbin/mount_ntfs_orig -o rw,nobrowse "$@"

这样就可以欺骗系统,运行带有额外参数的指令。这里的nobrowse是为了避免挂载上来的还是只读模式,但是它同时会导致磁盘不可见,也就是挂在后不会在桌面和Finder中显示,需要手动到/Volumes下打开。如果这样不爽的话,你可以尝试

1
2
#!/bin/sh
/sbin/mount_ntfs_orig -o rw "$@"

将磁盘推出再挂载,如果一切正常的话,就可以愉快的使用了。


参考文章:OS X 原生可读写挂载NTFS分区

准备工作

下面列出了博主测试成功的环境,使用其它的版本可能出现不可预料的情况。

硬件

  • 图形卡
    根据Tensorflow官网上对于GPU 支持的描述,需要CUDA® 计算能力为 3.5 或更高的 NVIDIA® GPU卡。大部分主流N卡都能满足这一点,如果不确定的话,可以在官网上查看:CUDA GPUs。博主使用了一块NVIDIA GeForce RTX 2070进行测试。

  • 其它
    其它硬件达到主流配置即可。

软件

  • Windows系统
    由于macOS Mojave的N卡驱动迟迟没有更新(据说是苹果已经抛弃了N卡,未来很有可能不会再更新驱动);并且Tensorflow官方已经不再推出适配macOS的tensorflow-gpu了,需要自己编译;因而使用Windows或者Linux系统会是更好的选择。博主使用的是Windows 10。

  • 显卡驱动程序
    在连接到网络时,Windows 10会自动下载安装显卡驱动,但可能不是最新版本。建议通过GeForce Experience管理驱动程序。

  • CUDA
    tensorflow-gpu依赖于CUDA,需要到NVIDIA官网上的CUDA Zone下载。下载时选择10.0版本即可,因为最新的版本可能不被tensorflow所支持。历史版本可以在这里查看:CUDA Toolkit Archive

  • cuDNN
    cuDNN的全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络(Deep Neural Networks)中的基础操作而设计基于GPU的加速库。这也是一个重要依赖,需要准备好。其主页是NVIDIA cuDNN,下载需要注册账号,不过也可以选择微信快捷登陆。同样需要注意的是,要正确选择与CUDA对应的cuDNN版本。本文发布时,与CUDA 10.0兼容的最新版本cuDNN为v7.6.0。

  • Python
    博主使用的是Python 3.7.0。安装好之后确保能够通过PowerShell执行pythonpip即可。

  • tensorflow-gpu
    安装tensorflow-gpu的方法也有很多,例如Anaconda或者pip。如果不想折腾环境,直接从这里找一个wheel就行了:tensorflow-gpu · PyPI。需要根据自己的系统和Python版本选择,例如tensorflow_gpu-1.13.1-cp37-cp37m-win_amd64.whl

安装

安装CUDA

安装过程并不复杂。运行从NVIDIA官网上下载的CUDA安装程序,将其安装在默认目录下即可。如果一切正常,相关组件会出现在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0目录下。

安装cuDNN

解压cuDNN的安装包,会得到一个文件夹,将其打开后,可以看到名为binincludelib的子目录。而在前面所说的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0目录下也有这样几个子目录。因此,直接将cuDNN的相关文件复制合并进对应的目录即可。

安装tensorflow-gpu

以PowerShell为例,将CUDA相关组件添加至环境变量:

1
$Env:path=$Env:Path+";C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64;"

完成后,cd进入下载的whl文件所在目录,使用pip安装即可

1
pip install tensorflow_gpu-1.13.1-cp37-cp37m-win_amd64.whl

pip会自动下载所需的依赖。

运行

如果一切顺利,打开Python,执行

1
2
3
4
import tensorflow as tf
hello = tf.constant("Hello, TensorFlow!")
sess = tf.Session()
print(sess.run(hello))

不报错的话,就安装成功了。

在WordPress中,文章、用户的ID都是通过AUTO_INCREMENT分配的,如果要改变其值,可以在wp_usermetawp_users数据表中执行:

1
2
3
ALTER TABLE `wp_usermeta`
MODIFY `umeta_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=177;
COMMIT;

以及

1
2
3
ALTER TABLE `wp_users`
MODIFY `ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
COMMIT;

AUTO_INCREMENT根据你自己的情况,修改为当前的行数即可。

对于存储评论信息的wp_comments也是类似的。

准备工作

下面列出了博主测试成功的环境,使用其它的版本可能出现不可预料的情况。

硬件

  • 图形卡
    由于Seus光影对计算机的图形性能有较高的要求,博主使用了一块NVIDIA GeForce RTX 2070显卡进行测试。根据作者的描述,20系和10系显卡对Seus光影的渲染没有本质区别——RTX加持暂时还没有体现出作用。因此,你也可以放心地选择其它型号的N卡,即使是上古核弹,运行起来也不会有影响。不过,根据一些Minecraft论坛的反馈,A卡和I卡可能无法支持此光影效果。

  • 其它
    其它硬件达到主流配置即可,Minecraft对性能没有什么苛求。如果上卡吧标配的话,流畅玩耍一定没有什么问题。

软件

  • Windows系统
    由于macOS Mojave的N卡驱动迟迟没有更新(据说是苹果已经抛弃了N卡,未来很有可能不会再更新驱动),因而需要在其它系统上运行。博主使用的是Windows 10。Linux原理上也是可以的,不过博主并没有进行尝试。

  • Java环境
    Minecraft Java版自然需要Java的环境。由于Minecraft对Java9及以上版本的支持不佳,博主推荐安装Java SE 8。可以到Oracle官网下载。测试使用的是JDK1.8.0_211。

  • HMCL启动器
    你可以从GitHub上获取HMCL启动器,下载exe版本即可。博主使用的是目前的最新版本3.2.129,后面的安装步骤也以该版本为例。

  • 光影
    Seus官方网站可以下载免费的光影包。推荐使用SEUS Renewed v1.0.0SEUS V11。除此之外,可以向作者本人付费购买制作中的SEUS PTGI(目前的版本需要赞助10美元,未来发布的正式版将免费);截至发稿前,最新版本为SEUS PTGI E6。一番搜索后,博主发现了一个名为yiff.party的网站,这里收录了大量Patreon上的付费下载内容。你可以在上面找到全部的SEUS PTGI光影。

  • 材质
    一个好的材质包同样是不可或缺的。具体可以看这篇文章:Minecraft材质包推荐

安装

安装Minecraft

安装过程并不复杂。运行HMCL-3.2.129.exe,在「游戏列表」中选择「安装新游戏版本」。

然后选择1.12.2版本,其它版本可能无法正确适配光影。

随后安装OptiFine,点击这里的箭头:

选择最新版本,例如HD_U_E3。如果在游戏过程中发现存在渲染问题(例如黑屏等),可以换其它版本试试。

最后点击「安装」,HMCL启动器会自动下载并配置相关组件。

阅读全文 »