Docker默认存储路径修改
随着我们长期使用docker,可能会遇到默认存储路径所在的分区装不下的情况,所以不如提前把默认存储路径改了,放到比较充裕的分区下。
这里以Ubuntu为例,先停止docker服务,然后进行以下操作:
修改文件:/etc/systemd/system/docker.service.d/docker-overlay.conf (如果没有docker.service.d文件夹或docker-overlay.conf文件则手动创建)
在文件中写入以下内容:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph="new_docker_storage_path" --storage-driver=overlay
将graph参数引号内部分修改为你所希望的docker存储路径,保存退出文件。
启动docker服务,通过命令docker info 可查看存储路径是否修改成功。
Polkit服务无法开启的一种解决方法
今天在CentOS服务器上想使用docker时,发现运行不起来,仔细一看报错内容,大概说是让我检查一下polkit.service有没有正常运作,因此使用命令systemctl status polkit进行查看,发现
好像确实没有运行起来…,直接运行systemctl start polkit妄图开启服务,果不其然失败了。然后我试了好多种方法,也重装了两次polkit,均失败。
了解到Polkit是Linux系统中的一个身份认证管理工具,它无法正常工作便会导致一些服务无法启动。经过一番搜索,最后的解决方法如下:
修改/etc/selinux/config文件,将SELINUX的值改为disabled,然后运行命令setenforce 0使修改生效。这之后就可以正常运行polkit和docker服务了。
WSL2+图形界面配置+CUDA调用
由于种种原因,我需要一台能调用NVIDIA CUDA的Linux系统机,众所周知,大部分虚拟机由于使用的是虚拟显卡,是没办法调用CUDA的。
然而我既不想装双系统,也不想在白嫖别人的服务器上瞎折腾,一筹莫展之时,偶然了解到Windows 10预览版本为其内置的Linux子系统WSL2增加了CUDA支持,二话不说直接安排一波。
更新Windows系统首先,需要将Win 10升级到预览版本,打开设置界面选择“更新与安全”,拖至底部可见选项“Windows预览体验计划”,在其中使用自己的Microsoft账户进行申请即可,然后将渠道设置为Dev,该渠道能获取到latest更新版本。
稍等片刻,进入Windows更新,若一切正常应该会在这里收到提醒更新的信息,在我操作时的最新版本号为“21343.1000”,然后则需要耐心等待系统更新完全。
安装WSL2的Ubuntu 18.04 LTS安装WSL2的操作官方文档写的比较详细。(其实文档里的操作我都没什么印象,好像很早以前用docker for desktop的时候就已经通过某种其他途径装好了WSL2)
然后去Windows应用商店搜索Ubun ...
如何为WSL虚拟磁盘瘦身
我们知道虚拟磁盘占用的硬盘空间一般是只增不减的,在长期使用WSL后,虚拟磁盘会变得比较大,而其文件占用其实可能并没有那么多,这个时候可以使用diskpart工具进行压缩。
先关闭wsl:
wsl --shutdown
在经历了一些麻烦之后,我现在对不太了解的操作比较小心谨慎,因此在后面的操作之前为磁盘留了备份:
wsl --export name target_file
命令中的name可以通过wsl -l 命令进行查看。
然后运行diskpart命令,进入一个新的窗口,在窗口中运行:
select vdisk file="vhdx文件名"
compact vdisk
稍作等待,即可完成压缩。
C++程序报0xc000007b错误的一种解决思路
近期在64位平台编译C++代码,能够成功编译,但运行时遇到错误码为0xc000007b的应用程序无法正常启动错误,用dependency walker分析生成的exe文件发现以下问题:
可以发现很明显出问题的原因在于SysWOW64/ucrtbased.dll这个文件,它是32位的,导致64位编译出来的程序无法运行。但按理说64位平台下编译会优先去System32文件夹下搜索所需的文件,这里大概是System32文件夹下ucrtbased.dll文件缺失所致。
因此只需下载到64位的ucrtbased.dll文件,放入System32文件夹下,即可。
可从下面网页下载到所需的文件:
引用站外地址,不保证站点的可用性和安全性
UCRTBASED.DLL
www.dll-files.com
Python、C++混合编程环境搭建及简单示例
Python以其极高的开发效率著称,而C++作为一种编译型语言,在运行效率上鹤立鸡群。开发效率,我所欲也,运行效率,亦我所欲也,二者可得兼乎?可!
近期在复现DeepMind的Alpla Zero算法时,我面临如下一种需求:既需要快速地把算法实现出来,又要努力保证其运行效率(算法的核心部分:蒙特卡洛树搜索用python实现需要消耗巨量时间),因此开始零基础尝试python、C++混合编程,试图用C++实现蒙特卡洛树搜索部分,并在python中调用(在此之前本人几乎无任何C++编程经验)
简单了解了下,这里推荐一下自我感觉API用户友好程度比较高的一个C++库——Boost。但u1s1,这个库的环境搭建过程中坑实在是多,网上资料也并不是特别多,因此在此记录一下。
引用站外地址,不保证站点的可用性和安全性
Boost官网
www.boost.org
由于一般代码都是搬去Linux服务器上运 ...
浅谈Softmax与Cross Entropy Loss
在机器学习的多分类任务中,经常听到这么两个名词:Softmax与交叉熵损失函数(Cross Entropy Loss),另外还有一个Sigmoid函数也经常出现,那么这几个东西究竟有什么联系呢?
Softmax这里先顺便提一句Sigmoid,它与Softmax也有一点关系。我最先听说Sigmoid函数是在逻辑斯蒂回归模型中,这是个二分类任务中常用的经典模型。Sigmoid函数长这样:
\sigma(z)=\frac{1}{1+e^{-z}}它将实数域$\mathbb{R}$映射为(0,1)区间,特殊地将0映射为0.5,那么我们在逻辑斯蒂回归中使用的决策方法就是计算一下$\sigma(\mathbf{\omega}^T\mathbf{x}+b)$的值,从而得到$\mathbf{x}$属于正类的概率值,进而进行预测判断。
而Softmax则是下面这样一个多元向量值函数:
a_i=\frac{e^{z_i}}{\sum_{j=1}^Ne^{z_j}},\quad i=1,2,\dots,N显然,一定有$\sum_{i=1}^Na_i=1$。在N分类任务中,常使用这个函数作为神经网络最末层的激 ...
Webpack配置Vue项目文件的读取解析规则
Vue项目中使用webpack对文件进行打包时,由于.vue文件的特殊性,webpack一般无法正常对这类文件进行解析,我们可以通过以下方法对webpack进行配置:
打开webpack.config.js文件,在module.exports中加上以下内容:
module: {
rules: [
{
test: /.css$/,
use: [ 'css-loader', 'style-loader' ]
},
{
test: /.vue$/,
use: [ 'vue-loader' ]
}
]
},
当然仅仅这样添加是没有用的,我们还需要安装css-loader、style-loader、vue-loader与vue-template-compiler:
npm install css-loader style-loader vue-loader vue-template-compiler --save-dev
安装完以后运行webpack ...
如何应用Webpack来运行Vue项目
Vue有多种导入方式,最常见的非模块化导入就是直接往网页里插入一个诸如这样的script标签:<script src="https://fastly.jsdelivr.net/npm/vue/dist/vue.js"></script>
但现在项目中一般看不见这种使用方法了,而大多使用模块化的导入方式。
但这些模块化导入命令的语法非浏览器所认可,直接在JS代码中使用会报错,而Webpack的作用简单而言就是将浏览器看不懂的代码转化为浏览器看得懂的代码。
简单创建一个web项目首先创建一个web项目的文件夹(不妨命名为web),在其下创建一个index.html作为web项目的入口文件,再创建两个文件夹:src与dist,其中src用于存放开发过程中的源码,而dist用于存放项目发布时的代码。进入src文件夹,随意创建一个index.js作为JS入口文件。
以下所有操作都在web文件夹下进行。
初始化npm依赖于Node.js环境
npm init
该命令会在当前路径生成一个package.json
安装Webpack全局安装:
npm ins ...
npm源修改
在使用npm安装项目时,默认源在国外,导致速度贼慢甚至安装失败,这时可以通过以下命令修改源:
临时修改永久修改npm --registry https://registry.npm.taobao.org install xxxnpm config set registry https://registry.npm.taobao.org
通过以下命令查看是否修改成功:
npm config get registry
LaTeX章节编号样式自定义
在使用Latex写文章时,经常不满足于默认的章节编号样式,故有自定义编号样式的需求,例如需要改成中文的编号等等。本文总结了一些常见编号样式的修改方法。
%section
%修改编号为数字
\renewcommand\thesection{\arabic{section}}
%修改编号为小写字母
\renewcommand\thesection{\alph{section}}
%修改编号为大写字母
\renewcommand\thesection{\Alph{section}}
%修改编号为中文数字(需要导入ctex宏包)
\renewcommand\thesection{\chinese{section}}
其他诸如subsection之类的同理操作即可。
WordPress接入支付宝登录
搞了半天才发现微信开放平台不让个人号申请接入,因此我转战阿里系平台,花了一天时间接入了支付宝用户oauth接口。
支付宝开放平台的文档写的很详细,但仍有一些细节不到位,若开发者没什么基础,接入会比较困难。
其实支付宝开放平台提供了许多已经写好的SDK,但这SDK文档不详细,我懒得学,因此我自己写了一个脚本用以接入支付宝oauth。
代码见此gist,其中包含两个文件:RSA2.php与alipay.php。
接入方法如下:
首先在支付宝开放平台申请一个网页应用,(选择自研服务->网页&移动应用),申请成功后会获取一个APPID,将这个APPID填入alipay.php文件开头的define('Ali_APPID','');当中。
支付宝接口的安全性体现在其每次发起请求必须附带一个签名(sign),验签通过即确保参数未被篡改,接下来我将粗略讲一下这个签名是怎么生成的。
首先在支付宝开放平台进入你的应用,选择应用信息,在开发信息栏目中可以看到一行“接口加签方式”,点击进入。
作为普通开发者,这里选择加签模式为“公钥”,加签模式为“SHA256w ...
PHP的openssl模块怎么开启
昨天在本地跑PHP代码时,遇到一句报错,相信不少朋友们也遇到过:
PHP Fatal error: Uncaught Error: Call to undefined function openssl_sign()
要使用这个函数必须在PHP中开启openssl模块,很多网上的博客大多会提到这样一种方法:在php.ini文件中增加一句extension=php_openssl.dll。
加了这句代码后,运行时仍报了一个warning:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_openssl.dll'
后来研究发现在php.ini中有一行代码描述了PHP扩展所在路径:extension_dir = "${phphome}\ext",而变量${phphome}在我这儿并没有定义,这一点很多其他博客并没有提到,这应该是一个环境变量,不过我之前没有设置过,因此我在前面加了一句:phphome='e:\php-7.3.22',为我的PHP安装目录,问题解决。 ...
WordPress接入微博登录
现在不少WordPress站点都接入了第三方登录,第三方登录不仅安全性高,还降低了注册成本、提高了注册效率,有助于吸引更多用户。
微博作为中国最大的网络平台之一,有着庞大的用户人群,本文将提供WP网站接入微博登录的方法。
首先源代码来源于此仓库:
引用站外地址,不保证站点的可用性和安全性
wp-oauth
GitHub
这位大佬还提供了很多其他平台的第三方接入教程。由于这位大佬写的不是很详细,因此我在这给出一个菜鸟教程,同时在代码中补充了CSRF验证,其他方面也有少量修改。
经过我修改后的微博登录代码可以从这个gist拿。
第一步,请确保你拥有一个微博开放平台审核通过的网站应用,将其App Key与App Secret复制到文件开头的代码中:
define('WB_APPID','your_appkey');//appkey
define('WB_APPSECRET','your_ap ...
WordPress记录、显示文章阅读次数
在使用WP建站时,我们可能会需要知道文章的受欢迎程度,其可以体现于其他人阅读文章的次数。今天我就提供一种简单的用以给文章浏览量进行计数的功能。
思路是在head部分加载的过程中执行一个计数+1的动作,将计数存入数据库的wp_postmeta表。在需要时将表中对应数据读出来即可。
将以下代码加入functions.php:
function post_views(){
global $post;
$post_ID = $post->ID;
$views = (int)get_post_meta($post_ID, 'visitors', true);
return '阅读(' .$views .')';
}
function record_visitors()
{
$currentUser = wp_get_current_user();
if(empty($currentUser->roles) || !in_array('administrator', $currentUser->roles))
if (is_single() ...
WordPress小工具标签云参数自定义
WP小工具有一个自带的标签云功能,可以为访客提供站点常用的关键词列表,便于访客在站内进行搜索。
标签云的生成函数wp_tag_cloud位于/wp-includes/category-template.php文件中,提供的参数数组如下:
$defaults = array(
'smallest' => 8,
'largest' => 22,
'unit' => 'pt',
'number' => 45,
'format' => 'flat',
'separator' => "\n",
'orderby' => 'count',
'order' => 'DESC',
'exclude' => '',
'include' => '',
'link' => 'view',
'taxonomy' => 'post_tag',
'post_type' => '',
'echo' => true,
'show_count' => 0,
); ...
在网页底部添加动态运行时间
很多人都在各种博客网站底部看到过动态变化的运行时间,比如“本站点已运行100天21小时56分17秒”,那么要想添加这样一行内容其实非常简单,只要用到基础的JS。
在网站底部添加以下代码即可:
<span id="runtime"></span>
<script>function show_runtime(){window.setTimeout("show_runtime()",1000);X=new Date("6/29/2020 18:14:10");Y=new Date();T=(Y.getTime()-X.getTime());M=24*60*60*1000;a=T/M;A=Math.floor(a);b=(a-A)*24;B=Math.floor(b);c=(b-B)*60;C=Math.floor((b-B)*60);D=Math.floor((c-C)*60);runtime.innerHTML="运行时间:"+A+"天"+B+"小时"+C+"分"+D+"秒"}show_runtime();</script>
WordPress不支持中文用户名注册的解决方法
WP默认是不支持中文用户名的,但身为中国人这岂能忍,本文带给大家一种方法,让WP支持中文用户名注册。
WP对注册用户名的限制写在/wp-includes/formatting.php文件中,对应函数是sanitize_user,其中限制中文的原因来自下面代码:
if ( $strict ) {
$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );
}
在$strict=true时该语句将所有的非ASCII字符全过滤掉了。解决方法如下:
在functions.php文件中加入以下回调函数进行过滤:
// 支持中文用户名注册
function zh_sanitize_user ($username, $raw_username, $strict) {
$username = wp_strip_all_tags( $raw_username );
$username = remove_accents( $username );
$username = preg_repl ...
Windows系统修复图标显示问题
相信不少人都遇到过软件图标突然显示不了的问题,对于这种奇葩情况,我们可以用下面方法进行修复:
新建一个文本文档,内容是以下代码:
taskkill /f /im explorer.exe
attrib -h -i %userprofile%\AppData\Local\IconCache.db
del %userprofile%\AppData\Local\IconCache.db /a
start explorer
保存为.bat文件,双击运行即可解决问题。
服务器SSH配置出错导致无法连接问题的解决
有时候在操作服务器的过程中,一不小心(或有意)动了SSH的配置文件,导致其崩溃,关闭连接后无法再一次连接。就这个问题,本文从我个人的经验来写一些解决方法。
傻瓜式方法,一般提供服务器的厂商都会提供一键重装系统的功能,如果没什么重要数据,重装系统可以解决100%的问题。
如果有备份,也可以直接恢复备份。
提供服务器的厂商一般会提供紧急救援连接,比如阿里云,我们可以通过救援连接登录服务器,然后修改配置文件,若不会修改配置文件或是因为其他配置问题导致的崩溃,直接重装SSH也是可以的,以下是操作过程:
sudo apt-get remove openssh-server openssh-client --purge -y
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get install openssh-server openssh-client
安装完成以后,简单修改一下配置文件:
sudo vi /etc/ssh/sshd_config
添加root密码登录的配置:
PermitRootLogin yes
Passw ...