突突唧之家

我的疑问 & 我的解决方案

该文章内容已过期不再适用

下载并解压内核源码

首先获取 root 权限方便操作

sudo su

官方网站下载 4.19.1 版本的 Linux 内核源码。此时我们把它放在 ~/linux-4.19.1.tar.xz

移动到 /usr/src

cd /usr/src

将文件解压到此处

tar -xvJf ~/linux-4.19.1.tar.xz

安装相关依赖

运行以下命令安装依赖

apt install g++ make libncurses5-dev libssl-dev build-essential
apt install openssl zlibc minizip libidn11-dev libidn11
apt install bison flex pkg-config libelf-dev

编译内核

复制老的配置文件到目录

cp -vi /boot/config-`uname -r` .config

配置新版本内核新增特性

make oldconfig

然后利用

make menuconfig

编辑配置文件。直接保存退出可以使用默认配置。

然后运行

make -j 4

其中 4 建议设置为 CPU 逻辑核心数 * 2

完成之后运行

make modules_install
make install

安装新内核。之后重启系统即可自动使用新内核启动。

注意事项

内核编译需求的硬盘空间至少为 40GB 。

利用如下路由配置便可以将所有不存在的 URL 请求都引导到同一个页面(例如 404 页面)。

{
path: '*',
redirect: '/404'
}

配置路由属性

可以简单地在路由中设置 meta 属性。

例如在 src/router/index.js

1
2
3
4
5
6
7
8
routes: [
{
path: '...',
name: '...',
meta: { title: '...' },
component: () => import('...')
}
]

使用路由钩子

利用路由的 beforeEach 方法修改网站标题。

router.beforeEach((to, from, next) => {
document.title = to.meta.title
next()
})

问题

源代码

采用居中对齐,如左图

print('{:^9}\t'.format(string_var), end = '')

采用左对齐,如右图

print('{:<9}\t'.format(string_var), end = '')

运行结果

未能正确对齐。

阅读全文 »

Vue.js 路由 history mode 中页面无法渲染的原因

用 Vue.js + vue-router 创建单页应用,是非常简单的。使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们。

一般开发的单页应用的 URL 都是带有 # 号的 hash 模式,因为整个应用本身而言就只有一个 HTML ,其他的都是通过 router 来渲染。如果因为业务需要,或者单纯是觉得带 # 号不美观,那么可以使用 history 模式,简单而言就是在 router 的配置文件 index.js 中添加如下一行代码

mode: 'history'

没错,这样 URL 不再会有 # 号,你会发现整个地址栏回到了你熟悉的那个样子,不过接下来介绍的就非常的重要了。

404 错误

在 history mode 下,如果直接通过地址栏访问路径,那么会出现 404 错误,这是因为调用了 history.pushState API 所以所有的跳转之类的操作都是通过 router 来实现的。要解决这个问题很简单,只需要在后台配置如果 URL 匹配不到任何静态资源,就跳转到默认的 index.html 。以 Apache2 为例,具体配置如下

1
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>

每次点击链接都要刷新页面的问题

众所周知,开发单页应用就是因为那丝般顺滑的体验效果。出现这个的原因是因为使用了 window.location 来跳转,只需要使用使用 router 提供的方法,就能够解决这个问题:

main.js 中配置中将 router 绑定到全局

Vue.prototype.router = router

之后都使用如下的方式来控制跳转

this.router.push('xxx')

PyPI 镜像在每次同步成功后间隔 5 分钟同步一次。

临时使用

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

注意,simple 不能少, 是 https 而不是 http

设为默认

升级 pip 到最新的版本 (>=10.0.0) 后进行配置:

python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

如果您到 pip 默认源的网络连接较差,临时使用镜像站来升级 pip:

python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

该文章内容已过期不再适用

npm 现在的下载速度已经足够快,无需再使用镜像源。

淘宝 npm 地址

有很多方法来配置 npm 的 registry 地址,下面根据不同情境列出几种比较常用的方法。以淘宝 npm 镜像举例。

临时使用

npm --registry https://registry.npm.taobao.org install xxx

持久使用

npm config set registry https://registry.npm.taobao.org

配置后可通过下面方式来验证是否成功

npm config get registry

通过 cnpm 使用

npm install -g cnpm --registry=https://registry.npm.taobao.org

该文章内容已过期不再适用

尽量不要使用数据库 root 用户。建议为每个数据库应用建立单独的用户。

在使用 MySQL/MariaDB 时,如果使用的是系统 root 用户,可以直接在控制台中输入

mysql

免密码使用数据库 root 用户登录数据库。

原因

user 表中有一列叫做 plugin

select user, authentication_string, plugin from user;
1
2
3
4
5
6
+------+-----------------------+-------------+
| user | authentication_string | plugin |
+------+-----------------------+-------------+
| root | * | auth_socket |
+------+-----------------------+-------------+
1 rows in set (0.00 sec)

其中的 auth_socket 让你能方便地作为 root 用户从控制台免密码登录。但这同时也禁用了密码登录,而且你不能使用其它客户端进行登录。

阅读全文 »

该文章内容已过期不再适用

建议使用 Conda 安装任意版本的 Python。

系统准备

安装一些必要的依赖包

apt install libffi-dev libbz2-dev libssl-dev
apt install libreadline7 libreadline-dev libsqlite3-dev
apt install libncurses5 libncurses5-dev libncursesw5
apt install libgdbm-dev liblzma-dev uuid-dev zlib1g-dev

如果 lib 名称不确认的话,可以使用

apt-cache search

查找。

另外可能还需要安装 git, g++, make

apt install git g++ make
阅读全文 »