安装 composer 时出现 fileinfo 相关错误

今天尝试着配置了一下 php 的运行环境,在安装 composer 后执行 composer install 时出现了如下错误:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for intervention/image 2.4.2 -> satisfiable by intervention/image[2.4.2].
    - intervention/image 2.4.2 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
  Problem 2
    - Installation request for league/flysystem 1.0.49 -> satisfiable by league/flysystem[1.0.49].
    - league/flysystem 1.0.49 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
  Problem 3
    - league/flysystem 1.0.49 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
    - laravel/framework v5.5.44 requires league/flysystem ^1.0.8 -> satisfiable by league/flysystem[1.0.49].
    - Installation request for laravel/framework v5.5.44 -> satisfiable by laravel/framework[v5.5.44].

  To enable extensions, verify that they are enabled in your .ini files:
    - C:\Program Files\PHP\v7.3\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

经尝试,在 php.ini 中的 [ExtensionList] 加上 extension=php_fileinfo.dll 就可以正常运行了。

Ruby 更改 gem 和 bundle 为国内源

由于国内网络环境的限制,我们需要将许多软件的国外源修改为国内源,而因为淘宝源的 RubyGems 镜像已经停止更新,我们需要将国内源设置为 RubyChinahttps://gems.ruby-china.com

Gem 修改源:

gem sources --add https://gems.ruby-china.com --remove https://rubygems.org/

Bundle 修改源:

bundle config 'mirror.https://rubygems.org' 'https://gems.ruby-china.com'

Ubuntu/Deepin 下 pip 出现导入 main 错误的可能解决方法

今天使用 pip install 命令,意外出现了如下错误:

Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

第一种可能的解决办法:

sudo vi /usr/bin/pip

原来的文件内容为:

from pip import main
if __name__ == '__main__':
    sys.exit(main())

修改成:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

我依然出现错误...

第二种可能的解决办法:

将第九行修改为

from pip._internal import main

我依然出现错误...

第三种可能的解决办法:

sudo rm -rf ~/.local/lib/python2.7/site-packages/

如果以上依然无效,尝试输入:

rm -rf ~/.local/lib/python*

不管怎样,反正我是解决了...

解决部分联想机型安装 Deepin 后 WiFi 无法使用的问题

Deepin 中联想部分型号无法使用 WiFi,可能不一定是网卡驱动问题,也可能是联想的 ideapad_laptop 影响了 Deepin 无线 WiFi 硬件的开关

解决方法:把影响无线WiFi开关的 ideapad_laptop 加入黑名单

临时方法:

sudo rfkill unblock wifi
sudo rfkill list
sudo modprobe -r ideapad_laptop

永久方法:

sudo vim /etc/modprobe.d/ideapad.conf
写入如下内容:
blacklist ideapad_laptop
保存后执行如下命令:
sudo modprobe -r ideapad_laptop
重启后WiFi就可以永久使用了

提示:显示已加载的模块命令是:lsmod ,通过这个命令可以查看是否有 ideapad_laptop,因为联想部分机型可能不是叫 ideapad_laptop,而是叫别的名称。

更多资料:

兼容性良好的笔记本型号 - deepin Wiki

联想笔记本装完deepin后打开无线网卡,搜不到WiFi的解决办法

解决 Deepin I/N双显卡问题

最近心血来潮开始转向 Linux 平台,Deepin 由于其美观的操作界面和良好的应用商店生态,自然是桌面级 Linux 平台入门的首选,但是我在 Deepin 的安装过程中,开机总会无法加载桌面,发现原来是 N卡独显的问题。

首先,按 F2 进入 BIOS,在 Configuration - Graphic Device 里切换选项为 UMA Only 禁用独显;

然后重新开机就可以正常进入系统,但是为了充分利用独显,所以我们要先使用 bumblebee 来实现 NVIDIA OptimusCtrl + Alt + T 打开终端

sudo apt-get install bumblebee-nvidia primus #安装Bumblebee-nvidia(适用于闭源驱动),其中primus可选,用于提升性能
sudo apt-get install bumblebee primus #安装Bumblebee(适用于开源驱动)

安装完后,重启即可解决问题。

更多资料:显卡 - deepin Wiki

Ubuntu/Deepin 中安装 pip 并修改为国内源

sudo apt install python-pip python3-pip

Deepin 下要设置 root 和普通用户都为国内源的话,在 etc 目录下新建 pip.conf

sudo vi /etc/pip.conf
//写入以下内容
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

Cloudflare 为你的站点开启 IPv6 网络

什么是 IPv6 呢?

IPv6 的全称是 Internet Protocol version 6 ,即互联网协议的第六版,用作互联网的网络层协议 。用 IPv6 来取代 IPv4 可以解决 IPv4 地址枯竭的问题,也在很多方面对 IPv4有所改进。

为服务 IPv6 用户,也为普及 IPv6 ,我部署的免费公共 CDN 加速服务开启了全站 IPv6,可供 IPv6 用户访问。

前段时间,免费公共 CDN 中的 Cloudflare 节点突然没有了 IPv6,碍于我是 CNAME 指向的 Cloudflare 节点,所以对部分访问到 Cloudflare 节点的 IPv6 用户可能因此而受到影响,故暂停了 Cloudflare 节点的解析。

而在这几天里,我翻看了一下 Cloudflare 关于 启用 IPv6 的介绍,发现原来是在 Cloudflare 管理面板中,我的启用 IPv6 网关设置不知为何被关闭了。

一键配置 IPV6

Cloudflare 管理面板中,这个设置是默认开启的,不知为何,我的被关闭了。

更多资料:IPv6 | Cloudflare

用 Nuxtjs 生成 AMP 页面——使用 UIkit 前端框架

2019.01.15 更新:AMP 规范中有几个被允许用 link 标记以引用 CSS 和字体的域名

2019.01.15 更新:成功使用 PostCSS 插件实现按需引入 CSS

在本站启用了 AMP 插件之后,我深感 AMP 的响应速度之快,从而萌生了探寻用 Nuxt.js 开发生成 AMP 页面的想法。

正巧,nuxt.js 官方已经给出了一个样例—— with-amp

而我稍加修改(为适应现在的 AMP 页面规则)后:DemoMacro/nuxtjs-with-amp

仅仅是普通的 AMP 页面我自然是不满意的,由于我一直以来都很青睐 UIkit 的前端框架,所以我打算在 nuxtjs-with-amp 当中集成 UIkit。

AMP 规定不能直接引入CSS,所有的CSS样式都必须内联在页面当中,这对一直使用 Jsdelivr 的我造成了一定的困扰,也迫使我开始研究如何按需引入 CSS。

我一开始选择了 PurgeCSS 来作为一个 Webpack 插件来优化我的 CSS 大小。

不得不说,PurgeCSS 很强大,让 UIkit 的大小从上百 kb 压缩到几 kb。

然而,PurgeCSS 必须要提取出CSS后引入页面,也就是说做不到内联,故作罢。

(等我放弃了 AMP ,PurgeCSS 必定是我 Webpack 常备插件啊)

直接优化 CSS 的想法失败了,我便把主意打到了 模块化的 UIkit 源码上来,分别有 Less 和 Sass 两种形式。不巧,我都不懂。依样画葫芦地分别安装了 Less 和 Sass 的依赖,只有 Less 版本成功在 nuxt.js 里跑起来了,所以我就直接使用了 UIkit 的 Less 版本进行精简。

由于 UIkit 精简困难,以及 amp-sidebar 强制要求父节点为 body,但 nuxt.js 生成的页面默认被两个 div 包含,所以暂时搁置.

成功使用 PostCSS 插件:@fullhuman/postcss-purgecss,用以按需引入 CSS,同时我在项目中删除了 UIkit 中所有的 !important 限定符,使其符合 AMP 页面规则。

项目地址:DemoMacro/nuxtjs-with-amp-uikit

有能力的朋友可以帮忙完善这个项目。

AMP 中有几个被允许用 link 标记以引用 CSS 和字体的域名:

  • Fonts.com: https://fast.fonts.net
  • Google Fonts: https://fonts.googleapis.com
  • Bootstap CDN: https://maxcdn.bootstrapcdn.com
  • Typekithttps://use.typekit.net/kitId.css (replace kitId accordingly)

所以只要用 Bootstap CDN 就能使用 Bootstrap 的 CSS 啦,或许这才是AMP的正确食用姿势吧。

关于 DNS 域名解析服务的选择和分区 CDN 配置

在19年的元旦假期,CloudXNS 的官网发生了故障,但他们的域名 DNS 解析服务依然有效,我在那段期间曾将域名解析转到阿里云解析,然而解析生效速度并不理想。在官网恢复后,我又用回了 CloudXNS ,他们的实时生效解析和 AX、CNAMEX、LINK 等独有解析记录类型依然强大。

CloudXNS 提供免费的智能 DNS 解析服务,依靠私有增量DNS更新协议实现了全球解析实时生效。

CloudXNS 也支持相当丰富的解析线路,国内细化各省份及运营商,同时支持私有线路。

更强大的是 CloudXNS 独有的扩展解析类型:AX、CNAMEX、LINK

以下是 CloudXNS 支持的解析记录类型:

  • A:地址记录,用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP地址,就需要添加A记录。
  • CNAME:如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。
  • NS:域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
  • MX:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。
  • TXT:在这里可以填写任何东西,长度限制255。绝大多数的TXT记录是用来做SPF记录(反垃圾邮件)。
  • AAAA:用来指定主机名(或域名)对应的IPv6地址(例如:ff06:0:0:0:0:0:0:c3)记录。
  • LINK:CloudXNS的私有类型,可将用户配置的CNAME隐藏。
  • AX:CloudXNS的私有类型,可以填写优先级(即承担访问的百分比),单条AX记录与A记录效果一样。
  • CNAMEX:CloudXNS的私有类型,可以填写优先级(即承担访问的百分比),单条CNAMEX记录效果同CNAME。
  • SRV:记录了哪台计算机提供了哪个服务。格式为:服务的名字、点、协议的类型,例如:_xmpp-server._tcp。
  • 301跳转:从一个地址301重定向到另一个地址。注:仅已备案域名可使用。
  • 302跳转:从一个地址302重定向到另一个地址。注:仅已备案域名可使用。
  • 隐式跳转:用FRAME的形式,调用跳转地址,达到隐藏跳转地址目的。注:仅已备案域名可使用。
  • CAA:证书颁发机构授权 格式flag tag value

利用 AX 记录类型,我们可以为不同的 IP 地址填写优先级,从1-100分别对应着不同的承担访问的百分比,可以实现智能负载均衡功能。还可以设置 X 优化(仅限 A 记录),当前线路上的所有A记录解析将按智能策略解析 ,自动选择更优质的路线。

而利用 CNAME X类型,我们就可以实现分区 CDN 配置。

目前,最强大的免费 CDN 非 Cloudflare 莫属,但 Cloudflare 免费版仅支持 NS 解析接入的方式。可喜的是,Cloudflare Partner 可以免费为其创建的域名提供 CNAME 解析的方式来接入 Cloudflare。

在这里,我使用了 ZE3kr/Cloudflare-CNAME-Setup 来搭建我的 Cloudflare Partner 接入面板 https://cloud.imst.xyz/

可以参考:Cloudflare 免费 CNAME/IP 接入,添加 IPv6 支持并为你的海外访客加速!

只要在 CloudXNS 为 Cloudflare 设置国外默认线路解析,就可以享受到 Cloudflare 带来的全球 CDN 加速了!不过,国内访客不推荐使用 Cloudflare 的 CDN 哦!尽管在国内有了百度云加速(不支持 https 的 Cloudflare 国内版,需备案)的合作,但 Cloudflare 却依然还是有经常丢包的情况出现,故并不推荐。

关于本站对 WordPress 的一些设置及优化

2019.01.13 更新: 新增插件:WP-Optimize,开启定时优化数据库

2019.01.14 更新:因重新启用需填写 API Key 过于繁杂,故删除 Cloudflare 插件

本站使用 WordPress 来搭建博客程序,由于 WordPress 有非常好的扩展性,所以我们可以对其进行一些设置和优化使我们的网站拥有更好的响应速度。

在建设此站点的过程中,我一度打算利用开源产品 CyberPanel 主机控制面板来管理我的服务器资源,可是因为不明原因(可能是阿里云轻量应用服务器提供的 CentOS7.3 镜像不纯净),CyberPanel 一直无法成功安装,也因此无法更方便的使用 LiteSpeed Web Server(兼容Apache的Web服务器软件)和 LiteSpeed Cache(WordPress加速缓存插件)。

所以我转而选择了由阿里出品的 Tengine Web Server(应用于淘宝网和天猫商城等高并发场景)和 AliSQL(阿里云数据库团队维护的一个MySQL分支)。

我在将WordPress部署到我的服务器后,立即开始着手优化。

我现在只使用了四个插件,分别是:WPJAM Basic、AMP、Cloudflare、WP No External Links、WP-Optimize。

WPJAM Basic 是我爱水煮鱼博客多年来使用 WordPress 来整理的优化插件,集成了大部分 WordPress 的常用设置,可以去掉一些 WordPress 里不常用的功能,也可以方便得开启 Memcached 缓存功能,提高缓存命中次数。

一开始我考虑了使用 LiteSpeed Cache 来压缩CSS、JS、图片等静态内容并缓存页面。但是在我开启了 AMP 插件,执行全站 AMP 化后,LiteSpeed Cache 就会因为某些不明设置而导致 AMP 页面验证失败,于是我只好弃用,并开启 Memcached 缓存功能。

其实,全站 AMP 化后,伪静态页面缓存对网站响应速度的影响倒是小了许多,大部分的资源都由 AMP Project 提供的 CDN 来加载,只有 CSS 样式文件才由 WordPress 提供。这也使服务器的压力小了许多。

至于Cloudflare,则是为了配合我开启的 Cloudflare CDN,国外流量会自动访问到本站点在 Cloudflare 的加速节点,国内访客回源境内服务器。

还有 WP No External Links,我利用这个插件来使文章内外链在新窗口打开,也可以一定程度上防止本站点的权重流失。