0%

Anaconda的常用命令

  1. 创建虚拟环境

    conda create -n your_env_name python=X.X

    (2.7、3.6等)

  2. 激活虚拟环境

    source activate your_env_name(虚拟环境名称)

  3. 退出虚拟环境

    source deactivate your_env_name(虚拟环境名称)

    conda deactivate (退出当前虚拟环境)

  4. 删除虚拟环境

    conda remove -n your_env_name(虚拟环境名称) --all
  5. 查看安装了哪些包

    conda list

  6. 安装包

    conda install package_name(包名)
    conda install scrapy==1.3 # 安装指定版本的包
    conda install -n 环境名 包名 # 在conda指定的某个环境中安装包

  7. 查看当前存在哪些虚拟环境

    conda env list
    或 conda info -e
    或 conda info –envs

  8. 检查更新当前conda

    conda update conda

  9. 更新anaconda

    conda update anaconda

9.1 更新所有库

conda update --all
  1. 更新python

    conda update python

    Anaconda的使用技巧

  2. 启动Anaconda Navigator 图形化界面

    anaconda-navigator

  3. conda环境移植(克隆)的方法

    conda create -n BBB –clone Tensorflow # 克隆一个BBB,环境和Tensorflow一样

  4. 把原来电脑上目标conda环境的目录(路径)复制到新电脑上

    conda create -n BBB –clone ~/path # 跨计算机克隆

  5. 搜索conda安装包

    anaconda search -t conda tensorflow-gpu #搜包[tensorflow-gpu]

  6. 显示包详细信息

    anaconda show aaronszs/tensorflow-gpu #查询第二条[aaronszs/tensorflow-gpu]

  7. 导入anaconda所有库

    conda install anaconda

添加国内源(速度感觉还行的可以不用)

windows

1 添加清华源

命令行中直接使用以下命令

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/

# 设置搜索时显示通道地址
conda config --set show_channel_urls yes

2 添加中科大源

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/

conda config --set show_channel_urls yes
  • Linux下

将以上配置文件写在~/.condarc

vim ~/.condarc
channels:
  - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
  - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true

docker images : 列出本地镜像。

获取镜像

例,载入 ubuntu 镜像

docker pull ubuntu

启动容器

ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

docker run -it ubuntu /bin/bash

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

要退出终端,直接输入 exit:

查看所有的容器:docker ps -a

docker start 启动一个已停止的容器:docker start b750bbbcfd88 (此参数为ID)

后台运行

-d 指定容器的运行模式

docker run -itd --name ubuntu-test ubuntu /bin/bash

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec

停止一个容器

docker stop <容器 ID>

进入容器

docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

docker exec -it 243c32535da7 /bin/bash

导出和导入容器

使用 docker export 命令。

docker export 1e560fca3906 > ubuntu.tar

删除容器

docker rm 命令:

docker rm -f 1e560fca3906

下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune

运行一个 web 应用

runoob@runoob:~# docker pull training/webapp  # 载入镜像
runoob@runoob:~# docker run -d -P training/webapp python app.py

参数说明:

  • **-d:**让容器在后台运行。
  • **-P:**将容器内部使用的网络端口映射到我们使用的主机上。

查看 WEB 应用容器

docker ps

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。

这时我们可以通过浏览器访问WEB应用

可以通过 -p 参数来设置不一样的端口:

runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py

查看 WEB 应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

-f:docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

检查 WEB 应用程序

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

推送镜像

用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。

以下命令中的 username 请替换为你的 Docker 账号用户名

$ docker tag ubuntu:18.04 username/ubuntu:18.04
$ docker image ls

REPOSITORY      TAG        IMAGE ID            CREATED           ...  
ubuntu          18.04      275d79972a86        6 days ago        ...  
username/ubuntu 18.04      275d79972a86        6 days ago        ...  
$ docker push username/ubuntu:18.04
$ docker search username/ubuntu

NAME             DESCRIPTION       STARS         OFFICIAL    AUTOMATED
username/ubuntu

概述

相信有很多小伙伴在选择了自己的主题,并且在官方文档的指导下配置了自己的主题后,仍然对其中的有些方面不太满意,但是又不想换主题的时候,那么config的配置已经不能满足你了,让我们从源文件下手,对其进行大刀阔斧的改革吧!

想要修改源文件,那么需要先了解你所选的主体架构,以下均已hexo-theme-matery为例,请根据你的主题进行对应,并且尽量选择使用人数多且文档完善的主题,否则修改会十分困难,如果你是高手的话就当我这句话没说。

(注:这里只是大致提了一下,想更详细的了解可以看看《hexo-theme-matery美化》和《hexo博客搭建全过程》)

├── languages  语言文件,用于国际化(不是很重要,除非你想向全球推广)
├── layout     页面模板文件,决定了网站内容的呈现方式
├── scripts    Hexo 脚本(这是matery没有的,但是部分主题有)
└── source     主题资源文件,包括页面样式,脚本,字体等

博客的目录结构如下:

- node_modules
- public
- scaffolds
- source
    - _data
    - _posts
    - about
    - archives
    - categories
    - friends
    - tags
- themes

node_modulesnode.js各种库的目录,public是生成的网页文件目录,scaffolds里面就三个文件,存储着新文章和新页面的初始设置,source是我们最常用到的一个目录,里面存放着文章、各类页面、图像等文件,themes存放着主题文件,一般也用不到。

我们平时写文章只需要关注source/_posts这个文件夹就行了。

1.layout

  • Snipaste_2020-01-29_13-11-30

每一个ejs对应的同名page的布局,例:contact是文章的布局,也有主题使用的article在_partial里的,一般如下:

模板 用途 回调
index 首页
post 文章 index
page 分页 index
archive 归档 index
category 分类归档 archive
tag 标签归档 archive

注:文件或文件夹开头名称为 _(下划线线)或隐藏的文件会被忽略

2.scripts

注:部分主题在source\js

3.source

1.推荐插件

这里只讲了安装和简单的配置,想知道完整的使用教程可以跳转这篇《hexo插件推荐及简明使用教程》文章

代码高亮

从 Hexo5.0 版本开始自带了 prismjs 代码语法高亮的支持,本主题对此进行了改造支持。

如果你的博客中曾经安装过 hexo-prism-plugin 的插件,那么你须要执行 npm uninstall hexo-prism-plugin 来卸载掉它,否则生成的代码中会有 {} 的转义字符。

然后,修改 Hexo 根目录下 _config.yml 文件中 highlight.enable 的值为 false,并将 prismjs.enable 的值设置为 true,主要配置如下:

highlight:
  enable: false
  line_number: true
  auto_detect: false
  tab_replace: ''
  wrap: true
  hljs: false
prismjs:
  enable: true
  preprocess: true
  line_number: true
  tab_replace: ''

搜索

本主题中还使用到了 hexo-generator-search 的 Hexo 插件来做内容搜索,安装命令如下:

npm install hexo-generator-search --save

在 Hexo 根目录下的 _config.yml 文件中,新增以下的配置项:

search:
  path: search.xml
  field: post

中文链接转拼音

如果你的文章名称是中文的,那么 Hexo 默认生成的永久链接也会有中文,这样不利于 SEO,且 gitment 评论对中文链接也不支持。我们可以用 hexo-permalink-pinyin Hexo 插件使在生成文章时生成中文拼音的永久链接。

安装命令如下:

npm i hexo-permalink-pinyin --save

在 Hexo 根目录下的 _config.yml 文件中,新增以下的配置项:

permalink_pinyin:
  enable: true
  separator: '-' # default: '-'

:除了此插件外,hexo-abbrlink 插件也可以生成非中文的链接。

博主选择的是hexo-abbrlink 插件,因为感觉拼音有点傻,而且这个配置可选项比较多
安装命令如下:

npm install hexo-abbrlink --save

在 Hexo 根目录下的 _config.yml 文件中,新增以下的配置项:

# abbrlink config
abbrlink:
  alg: crc32      #support crc16(default) and crc32
  rep: hex        #support dec(default) and hex
  drafts: false   #(true)Process draft,(false)Do not process draft. false(default) 
  # Generate categories from directory-tree
  # depth: the max_depth of directory-tree you want to generate, should > 0
  auto_category:
     enable: true  #true(default)
     depth:        #3(default)
     over_write: false 
  auto_title: false #enable auto title, it can auto fill the title by path
  auto_date: false #enable auto date, it can auto fill the date by time today
  force: false #enable force mode,in this mode, the plugin will ignore the cache, and calc the abbrlink for every post even it already had abbrlink.

文章字数统计插件

如果你想要在文章中显示文章字数、阅读时长信息,可以安装 hexo-wordcount插件。

安装命令如下:

npm i --save hexo-wordcount

然后只需在本主题下的 _config.yml 文件中,将各个文章字数相关的配置激活即可:

postInfo:
  date: true
  update: false
  wordCount: false # 设置文章字数统计为 true.
  totalCount: false # 设置站点文章总字数统计为 true.
  min2read: false # 阅读时长.
  readCount: false # 阅读次数.

添加emoji表情支持

本主题新增了对emoji表情的支持,使用到了 hexo-filter-github-emojis 的 Hexo 插件来支持 emoji表情的生成,把对应的markdown emoji语法(::,例如::smile:)转变成会跳跃的emoji表情,安装命令如下:

添加 RSS 订阅支持

本主题中还使用到了 hexo-generator-feed 的 Hexo 插件来做 RSS,安装命令如下:

npm install hexo-generator-feed --save

在 Hexo 根目录下的 _config.yml 文件中,新增以下的配置项:

feed:
  type: atom
  path: atom.xml
  limit: 20
  hub:
  content:
  content_limit: 140
  content_limit_delim: ' '
  order_by: -date

添加视频

hexo-tag-mmedia 是 MonoLogueChi 自用的一个媒体插入插件,在添加部分功能后发布给大家使用。

已支持的平台

未来可能支持

-   [YouTube](https://www.u2sb.top/docs/hexo-tag-mmedia/)
-    [ArtPlayer](https://github.com/zhw2590582/ArtPlayer)

安装

npm install hexo-tag-mmedia --save

此插件与以下插件冲突

  • hexo-tag-aplayer
  • hexo-tag-dplayer
  • hexo-tag-bilibili

如有安装,使用前请卸载。

npm uninstall hexo-tag-aplayer
npm uninstall hexo-tag-dplayer
npm uninstall hexo-tag-bilibili

config.yml

如果不需要自定义设置,不需要修改 _config.yml ,直接使用即可

mmedia:
  aplayer:
    cdn: https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js
    style_cdn: https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css
    default:
  meting:
    cdn: https://cdn.jsdelivr.net/npm/meting/dist/Meting.min.js
    api:
    default:
  dplayer:
    cdn: https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js
    style_cdn: https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.css
    hls_cdn: https://cdn.jsdelivr.net/npm/hls.j/dist/hls.min.js
    dash_cdn: https://cdn.jsdelivr.net/npm/dashjs/dist/dash.all.min.js
    shaka_dash_cdn: https://cdn.jsdelivr.net/npm/shaka-player/dist/shaka-player.compiled.js
    flv_cdn: https://cdn.jsdelivr.net/npm/flv.js/dist/flv.min.js
    webtorrent_cdn: https://cdn.jsdelivr.net/npm/webtorrent/webtorrent.min.js
    default:

使用

代码:

演示效果:

YOUTUBE

也可以等hexo-tag-mmedia插件支持

npm install hexo-tag-youtube-responsive --save

添加音乐

npm install hexo-tag-cplayer --save

添加像这样的代码到你的文章中。cplayer 将会生成在那里。

{% cplayer [autoplay] [yaml|cson|json] %}
# type your config here
{% endcplayer %}

SEO优化

npm install hexo-generator-seo-friendly-sitemap --save
sitemap:
    path: sitemap.xml

文章加密

npm install --save hexo-blog-encrypt

_config.yml

# Security
encrypt: # hexo-blog-encrypt
  abstract: 有东西被加密了, 请输入密码查看.
  message: 您好, 这里需要密码.
  tags:
  - {name: tagName, password: 密码A}
  - {name: tagName, password: 密码B}
  template: <div id="hexo-blog-encrypt" data-wpm="{{hbeWrongPassMessage}}" data-whm="{{hbeWrongHashMessage}}"><div class="hbe-input-container"><input type="password" id="hbePass" placeholder="{{hbeMessage}}" /><label>{{hbeMessage}}</label><div class="bottom-line"></div></div><script id="hbeData" type="hbeData" data-hmacdigest="{{hbeHmacDigest}}">{{hbeEncryptedData}}</script></div>
  wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试.
  wrong_hash_message: 抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.

添加看板娘

安装模块:

npm install --save hexo-helper-live2d

试试 yarn add hexo-helper-live2d, 据说高能的yarn会比垃圾npm少很多麻烦呢。 Yarn

_config.yml

live2d:
	enable: true
	scriptFrom: local
	model:
		use: live2d-widget-model-z16 #模型选择
	display:
		position: left  #模型位置
		width: 150       #模型宽度
		height: 300      #模型高度
	mobile:
		show: false      #是否在手机端显示

用法

有三种方法添加模块名

a. live2d_models子目录名称

  1. 在您博客根目录下创建一个 live2d_models 文件夹.
  2. 在此文件夹内新建一个子文件夹.
  3. 将你的 Live2D 模型复制到这个子文件夹中.
  4. 将子文件夹的名称输入 _config.ymlmodel.use 中.

b. 相对于博客根目录的自定义路径

您可直接输入相对于博客根目录的自定义路径到 model.use 中.

示例: ./wives/wanko

c. npm 模块名

npm install live2d-widget-model-z16

d. 你的CDN

如果你是没有CDN会死星人,直接将 .model.json 的url地址输入 model.use.

添加追番页面

npm install hexo-bilibili-bangumi --save

将下面的配置写入站点的配置文件 _config.yml 里(不是主题的配置文件).

bangumi:
  enable: true
  path:
  vmid:
  title: '追番列表'
  quote: '生命不息,追番不止!'
  show: 1
  loading:
  metaColor:
  color:
  webp:
  progress:
  • enable: 是否启用
  • path: 番剧页面路径,默认bangumis/index.html
  • vmid: 哔哩哔哩番剧页面的 vmid(uid),如何获取?
  • title: 该页面的标题
  • quote: 写在页面开头的一段话,支持 html 语法,可留空。
  • show: 初始显示页面:0: 想看, 1: 在看, 2: 看过,默认为1
  • loading: 图片加载完成前的 loading 图片
  • metaColor: meta 部分(简介上方)字体颜色
  • color: 简介字体颜色
  • webp: 番剧封面使用webp格式(此格式在safari浏览器下不显示,但是图片大小可以缩小 100 倍左右), 默认true
  • progress: 获取番剧数据时是否显示进度条,默认true

2.魔改

官方功能增强

在官方的基础上进行修改。

修改 banner 图和文章特色图

你可以直接在 /source/medias/banner 文件夹中更换你喜欢的 banner 图片,主题代码中是每天动态切换一张,只需 7 张即可。如果你会 JavaScript 代码,可以修改成你自己喜欢切换逻辑,如:随机切换等,banner 切换的代码位置在 /layout/_partial/bg-cover-content.ejs 文件的 <script></script> 代码中:

修改为如下代码,则有60种随机图

<% if (theme.banner.enable) { %>
<script>
    // 每天切换 banner 图.  Switch banner image every day.
    var bannerUrl = "<%- theme.jsDelivr.url %><%- url_for('/medias/banner/') %>" + new Date().getMinutes() + '.jpg';
    $('.bg-cover').css('background-image', 'url(' + bannerUrl + ')');
</script>

添加樱花特效

CDN版

然后在 /themes/matery/layout/layout.ejs 中添加如下代码:

 <% if (theme.sakura.enable) { %>
     <script type="text/javascript">
     //只在桌面版网页启用特效,更换了链接,樱花数量变少
var windowWidth = $(window).width();
if (windowWidth > 768) {
	document.write('<script src="https://cdn.jsdelivr.net/gh/fz6m/Private-web@1.2/js/sakura/sakura-reduce.js"><\/script>');
}
     </script>
 <% } %>

可以修改src的js文件名来改变樱花的数量

文件名 说明
sakura-small.js 少量樱花
sakura-reduce.js 樱花相对原效果减少 1/4
sakura-original.js 樱花数量不变(原效果)
sakura-half.js 樱花相对原效果数量减半

对于想安静阅读并且保持樱花效果的,这里推荐的是第一种少量 sakura-small.js 或第二种减半 sakura-half.js

本地版

在 /themes/matery/source/js 新建文件 sakura.js,并添加如下代码

Download Now,然后在 /themes/matery/layout/_partial/head.ejs 中添加如下代码:

<% if (theme.sakura.enable) { %>
    <script type="text/javascript">
    //只在桌面版网页启用特效
    var windowWidth = $(window).width();
    if (windowWidth > 768) {
        document.write('<script type="text/javascript" src="/js/sakura.js"></script>');
    }
    </script>
<% } %>

在主题配置文件_config.yml中配置:

# 页面樱花飘落动效
sakura:
  enable: true

添加雪花特效

CDN版

然后在 /themes/matery/layout/_partial/head.ejs 中添加如下代码:

<% if (theme.xuehuapiaoluo.enable) { %>
    <script type="text/javascript">
        var windowWidth = $(window).width();
        if (windowWidth > 768) {
            document.write('<script src="https://cdn.jsdelivr.net/gh/guhailong18/guhailong18.github.io/js/xuehuapiaoluo.js"><\/script>');
        }
    </script>
<% } %>

cdn链接可以替换为如下的或自己的:

github:

jsdelivr:https://cdn.jsdelivr.net/gh/guhailong18/guhailong18.github.io/js/xuehuapiaoluo.js

gitee:https://gitee.com/xuexizhe6/guke/raw/master/js/xuehuapiaoluo.js

coding:

本地版

在 /themes/matery/source/js 新建文件 xuehuapiaoluo.js,并添加如下代码

Download Now

然后在 /themes/matery/layout/_partial/head.ejs 中添加如下代码:

<% if (theme.xuehuapiaoluo.enable) { %>
    <script type="text/javascript">
    //只在桌面版网页启用特效
    var windowWidth = $(window).width();
    if (windowWidth > 768) {
        document.write('<script type="text/javascript" src="/js/xuehuapiaoluo.js"></script>');
    }
    </script>
<% } %>

在主题配置文件_config.yml中配置:

# 页面雪花飘落动效
xuehuapiaoluo:
  enable: true

相信看了以上的示例,聪明的读者已经学会如何做一个

代码雨: https://www.cnblogs.com/zhengbin/p/5023640.html

添加鼠标点击出现文字特效

CND版

然后在 /themes/matery/layout/layout.ejs 中添加如下代码:

<% if (theme.wenzi.enable) { %>
    <script src="https://cdn.jsdelivr.net/gh/guhailong18/guhailong18.github.io/js/wenzi.js"></script>
<% } %>

cdn链接可以替换为如下的或自己的:

github:

jsdelivr: https://cdn.jsdelivr.net/gh/guhailong18/guhailong18.github.io/js/wenzi.js

gitee:https://gitee.com/xuexizhe6/guke/raw/master/js/wenzi.js

coding:

在主题配置文件_config.yml中配置:

本地版

<% if (theme.wenzi.enable) { %>
    <script src="/js/wenzi.js" type="text/javascript"></script>
<% } %>

添加鼠标点击烟花爆炸效果

CND版

然后在 /themes/matery/layout/layout.ejs 中添加如下代码:

<% if (theme.fireworks.enable) { %>
    <canvas class="fireworks" style="position: fixed; left: 0; top: 0; z-index: 1; pointer-events: none;"></canvas>
    <script type="text/javascript" src="//cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script>
    <script type="text/javascript" src="/js/fireworks.js"></script>
<% } %>

cdn链接可以替换为如下的或自己的:

在主题配置文件_config.yml中配置:

本地版

CND版

然后在 /themes/matery/layout/_partial/head.ejs 中添加如下代码:

cdn链接可以替换为如下的或自己的:

github:

jsdelivr:

gitee:

coding:

在主题配置文件_config.yml中配置:

本地版

添加标签页题目效果

<script type="text/javascript">
    var OriginTitile = document.title,
    st;
    document.addEventListener("visibilitychange", function () {
        document.hidden ? (document.title = "主人,你竟然抛弃了我(;′⌒`)", clearTimeout(st)) : (document.title =
            "主人回来啦٩(๑>◡<๑)۶ ", st = setTimeout(function () {
                document.title = OriginTitile
            }, 3e3))
    })
</script>

更换鼠标样式

CDN版

<% if (theme.cursor.on){ %>
    <style>
        body{
            background: #3f3f3f;
            cursor: url(<%- config.root %><%- theme.cursor.cursor_0 %>), url("<%- config.root %><%- theme.cursor.cursor_1 %>"), auto;
        }
    </style>
<% } %>

cdn链接可以替换为如下的或自己的:

github:

jsdelivr:

gitee:

coding:

本地版

3.优化

SEO优化

网站推广是一个比较烦人的事情,特别是对于专心搞技术的来说,可能就不是很擅长,那么怎么才能让别人知道我们网站呢?也就是说我们需要想办法让别人通过搜索就可以搜索到博客的内容,给我们带来自然流量,这就需要seo优化,让我们的站点变得对搜索引擎友好

SEO是由英文Search Engine Optimization缩写而来, 中文意译为“搜索引擎优化”。SEO是指通过站内优化比如网站结构调整、网站内容建设、网站代码优化等以及站外优化。

1.1 让百度收录你的站点


首先要做的就是让各大搜索引擎收录你的站点,我们在刚建站的时候各个搜索引擎是没有收录我们网站的,在搜索引擎中输入site:<域名>,如果如下图所示就是说明我们的网站并没有被百度收录。我们可以直接点击下面的“网址提交”来提交我们的网站

在填完网址选择完网站的类型之后需要验证网站的所有权,验证网站所有权的方式有三种:

  • 文件验证。
  • html标签验证
  • CNAME解析验证(推荐使用

其实使用哪一种方式都可以,都是比较简单的。

但是一定要注意,使用文件验证文件存放的位置需要放在sourc文件夹下,如果是html文件那么hexo就会将其编译,所以必须要在html头部加上的layout:false,这样就不会被hexo编译。(如果验证文件是txt格式的就不需要)

1.1.2 向百度提交链接


然后我们就可以将我们生成的sitemap文件提交给百度,还是在百度站长平台,找到链接提交,这里我们可以看到有两种提交方式,自动提交和手动提交,自动提交又分为主动推送、自动推送和sitemap

如何选择链接提交方式

  1. 主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
  2. 自动推送:最为便捷的提交方式,请将自动推送的JS代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。
  3. sitemap:您可以定期将网站链接放到sitemap中,然后将sitemap提交给百度。百度会周期性的抓取检查您提交的sitemap,对其中的链接进行处理,但收录速度慢于主动推送。
  4. 手动提交:一次性提交链接给百度,可以使用此种方式。

一般主动提交比手动提交效果好,这里介绍主动提交的三种方法

从效率上来说:

主动推送>自动推送>sitemap

1.1.1 验证网站所有权


登录百度站长搜索资源平台:http://zhanzhang.baidu.com, 只要有百度旗下的账号就可以登录,登录成功之后在站点管理中点击添加网站然后输入你的站点地址。

注意,这里需要输入我们自己购买的域名,不能使用xxx.github.io之类域名.因为github是不允许百度的spider(蜘蛛)爬取github上的内容的,所以如果想让你的站点被百度收录,只能使用自己购买的域名

1.2 让google收录你的站点


1.2.1 操作步骤

相比于百度,google的效率实在不能更快,貌似十分钟左右站点就被收录了,其实方法是和百度是一样的。

google站点平台:https://www.google.com/webmasters/

  • 注册账号
  • 验证站点
  • 提交sitemap

1.2.2 提交 robots.txt:

robots.txt 是一种存放于网站根目录下的 ASCII 编码的文本文件,它的作用是告诉搜索引擎此网站中哪些内容是可以被爬取的,哪些是禁止爬取的。robots.txt 放在博客目录下的 source 文件夹中,博客生成后在站点目录 /public/ 下。

我的 robots.txt 文件内容如下:

1.4 优化你的url


seo`搜索引擎优化认为,网站的最佳结构是**用户从首页点击三次就可以到达任何一个页面**,但是我们使用`hexo`编译的站点打开文章的`url`是:`sitename/year/mounth/day/title`四层的结构,这样的`url`结构很不利于`seo`,爬虫就会经常爬不到我们的文章,于是,我们需要优化一下网站文章`url

方案一:

我们可以将url直接改成sitename/title的形式,并且title最好是用英文,在根目录的配置文件下修改permalink如下:

url: https://sunhwee.com
root: /
permalink: :title.html
permalink_defaults:

方案二:

使用插件优化url

插件hexo-abbrlink实现了这个功能,它将原来的URL地址重新进行了进制转换和再编码。

安装hexo-abbrlink

npm install hexo-abbrlink --save

Bash

配置博客根目录下的_config.yml文件。

# permalink: :title/
permalink: archives/:abbrlink.html
abbrlink:
  alg: crc32  # 算法:crc16(default) and crc32
  rep: hex    # 进制:dec(default) and hex

Yml

运行hexo cleanhexo g命令来重新生成文件看看,可以清楚的看到,URL结构成功变为了3层。

来源: 洪卫の博客
作者: 洪卫
文章链接: https://sunhwee.com/posts/6e8839eb.html#toc-heading-59
本文章著作权归作者所有,任何形式的转载都请注明出处。

1.5 其他seo优化


seo优化应该说是一个收益延迟的行为,可能你做的优化短期内看不到什么效果,但是一定要坚持,seo优化也是有很深的可以研究的东西,从我们最初的网站设计,和最基础的标签的选择都有很大的关系,网站设计就如我们刚刚说的,要让用户点击三次可以到达网站的任何一个页面,要增加高质量的外链,增加相关推荐(比如说我们经常见到右侧本站的最高阅读的排名列表),然后就是给每一个页面加上keyword和描述

在代码中,我们应该写出能让浏览器识别的语义化HTML,这样有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;并且对外链设置nofollow标签,避免spider爬着爬着就爬出去了(减少网站的跳出率),并且我们要尽量在一些比较大的网站增加我们站点的曝光率,因为spider会经常访问大站,比如我们在掘金等技术社区发表文章中带有我们的站点,这样spider是很有可能爬到我们中的站点的,so….

  • 网站外链的推广度、数量和质量
  • 网站的内链足够强大
  • 网站的原创质量
  • 网站的年龄时间
  • 网站的更新频率(更新次数越多越好)
  • 网站的服务器
  • 网站的流量:流量越高网站的权重越高
  • 网站的关键词排名:关键词排名越靠前,网站的权重越高
  • 网站的收录数量:网站百度收录数量越多,网站百度权重越高
  • 网站的浏览量及深度:用户体验越好,网站的百度权重越高

添加 nofollow 标签

给非友情链接的出站链接添加「nofollow」标签,nofollow 标签是由谷歌领头创新的一个「反垃圾链接」的标签,并被百度、yahoo 等各大搜索引擎广泛支持,引用 nofollow 标签的目的是:用于指示搜索引擎不要追踪(即抓取)网页上的带有 nofollow 属性的任何出站链接,以减少垃圾链接的分散网站权重。

优化网站加载速度


3.1 优化图片加载


issue问题:
优化网站加载逻辑问题:图片最后加载,加入图片懒加载方法

hexo-lazyload-image的作用原理是讲你博客里面img标签的src属性替换为一个loading image,把真实的图片地址放在data-origin属性下面。然后当你的网页翻到那张图片时(也就是图片在窗口中完全可见时),他会有一段js用data-origin的内容替换src,打到懒加载的目的。

一般情况下懒加载和gallery插件会发生冲突,比如按照我上面所说,最终结果就会变成,可能只有第一张图片在gallery中打开是原图,右翻左翻都会是那张loading image,需要你掌握js,可以修改matery.js里面的内容,甚至可能换一个gallery,比如photosiwpe之类的

解决方法:修改/themes/matery/source/js中的matery.js文件

第103行:

$('#articleContent, #myGallery').lightGallery({
    selector: '.img-item',
    // 启用字幕
    subHtmlSelectorRelative: true,
    showThumbByDefault: false   //这句加上
});

后面加上:

$(document).find('img[data-original]').each(function(){
    $(this).parent().attr("href", $(this).attr("data-original"));
});

再装个插件,https://github.com/Troy-Yang/hexo-lazyload-image
在博客根目录配置.yml文件加入对应字段,如下:

# lazyload configuration  2019.08.23
lazyload:
  enable: true 
  onlypost: false
  loadingImg:     # eg ./images/loading.gif

Yml

好了,这样实现了博客网站的图片懒加载。

3.2 Gulp实现代码压缩


Gulp实现代码压缩,以提升网页加载速度。

1 首先我们需要安装Gulp插件和5个功能模块,依次运行下面的两条命令。

npm install gulp --save  #安装gulp
# 安装功能模块
npm install gulp-htmlclean gulp-htmlmin gulp-minify-css gulp-uglify gulp-imagemin --save
# 额外的功能模块
npm install gulp-debug gulp-clean-css gulp-changed gulp-if gulp-plumber gulp-babel babel-preset-es2015 del --save

2 接下来在博客的根目录下新建gulpfile.js文件,并复制下面的内容到文件中。

var gulp = require("gulp");
var debug = require("gulp-debug");
var cleancss = require("gulp-clean-css"); //css压缩组件
var uglify = require("gulp-uglify"); //js压缩组件
var htmlmin = require("gulp-htmlmin"); //html压缩组件
var htmlclean = require("gulp-htmlclean"); //html清理组件
var imagemin = require("gulp-imagemin"); //图片压缩组件
var changed = require("gulp-changed"); //文件更改校验组件
var gulpif = require("gulp-if"); //任务 帮助调用组件
var plumber = require("gulp-plumber"); //容错组件(发生错误不跳出任务,并报出错误内容)
var isScriptAll = true; //是否处理所有文件,(true|处理所有文件)(false|只处理有更改的文件)
var isDebug = true; //是否调试显示 编译通过的文件
var gulpBabel = require("gulp-babel");
var es2015Preset = require("babel-preset-es2015");
var del = require("del");
var Hexo = require("hexo");
var hexo = new Hexo(process.cwd(), {}); // 初始化一个hexo对象

// 清除public文件夹
gulp.task("clean", function() {
  return del(["public/**/*"]);
});

// 下面几个跟hexo有关的操作,主要通过hexo.call()去执行,注意return
// 创建静态页面 (等同 hexo generate)
gulp.task("generate", function() {
  return hexo.init().then(function() {
    return hexo
      .call("generate", {
        watch: false
      })
      .then(function() {
        return hexo.exit();
      })
      .catch(function(err) {
        return hexo.exit(err);
      });
  });
});

// 启动Hexo服务器
gulp.task("server", function() {
  return hexo
    .init()
    .then(function() {
      return hexo.call("server", {});
    })
    .catch(function(err) {
      console.log(err);
    });
});

// 部署到服务器
gulp.task("deploy", function() {
  return hexo.init().then(function() {
    return hexo
      .call("deploy", {
        watch: false
      })
      .then(function() {
        return hexo.exit();
      })
      .catch(function(err) {
        return hexo.exit(err);
      });
  });
});

// 压缩public目录下的js文件
gulp.task("compressJs", function() {
  return gulp
    .src(["./public/**/*.js", "!./public/libs/**"]) //排除的js
    .pipe(gulpif(!isScriptAll, changed("./public")))
    .pipe(gulpif(isDebug, debug({ title: "Compress JS:" })))
    .pipe(plumber())
    .pipe(
      gulpBabel({
        presets: [es2015Preset] // es5检查机制
      })
    )
    .pipe(uglify()) //调用压缩组件方法uglify(),对合并的文件进行压缩
    .pipe(gulp.dest("./public")); //输出到目标目录
});

// 压缩public目录下的css文件
gulp.task("compressCss", function() {
  var option = {
    rebase: false,
    //advanced: true,               //类型:Boolean 默认:true [是否开启高级优化(合并选择器等)]
    compatibility: "ie7" //保留ie7及以下兼容写法 类型:String 默认:''or'*' [启用兼容模式; 'ie7':IE7兼容模式,'ie8':IE8兼容模式,'*':IE9+兼容模式]
    //keepBreaks: true,             //类型:Boolean 默认:false [是否保留换行]
    //keepSpecialComments: '*'      //保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
  };
  return gulp
    .src(["./public/**/*.css", "!./public/**/*.min.css"]) //排除的css
    .pipe(gulpif(!isScriptAll, changed("./public")))
    .pipe(gulpif(isDebug, debug({ title: "Compress CSS:" })))
    .pipe(plumber())
    .pipe(cleancss(option))
    .pipe(gulp.dest("./public"));
});

// 压缩public目录下的html文件
gulp.task("compressHtml", function() {
  var cleanOptions = {
    protect: /<\!--%fooTemplate\b.*?%-->/g, //忽略处理
    unprotect: /<script [^>]*\btype="text\/x-handlebars-template"[\s\S]+?<\/script>/gi //特殊处理
  };
  var minOption = {
    collapseWhitespace: true, //压缩HTML
    collapseBooleanAttributes: true, //省略布尔属性的值  <input checked="true"/> ==> <input />
    removeEmptyAttributes: true, //删除所有空格作属性值    <input id="" /> ==> <input />
    removeScriptTypeAttributes: true, //删除<script>的type="text/javascript"
    removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
    removeComments: true, //清除HTML注释
    minifyJS: true, //压缩页面JS
    minifyCSS: true, //压缩页面CSS
    minifyURLs: true //替换页面URL
  };
  return gulp
    .src("./public/**/*.html")
    .pipe(gulpif(isDebug, debug({ title: "Compress HTML:" })))
    .pipe(plumber())
    .pipe(htmlclean(cleanOptions))
    .pipe(htmlmin(minOption))
    .pipe(gulp.dest("./public"));
});

// 压缩 public/uploads 目录内图片
gulp.task("compressImage", function() {
  var option = {
    optimizationLevel: 5, //类型:Number  默认:3  取值范围:0-7(优化等级)
    progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
    interlaced: false, //类型:Boolean 默认:false 隔行扫描gif进行渲染
    multipass: false //类型:Boolean 默认:false 多次优化svg直到完全优化
  };
  return gulp
    .src("./public/medias/**/*.*")
    .pipe(gulpif(!isScriptAll, changed("./public/medias")))
    .pipe(gulpif(isDebug, debug({ title: "Compress Images:" })))
    .pipe(plumber())
    .pipe(imagemin(option))
    .pipe(gulp.dest("./public"));
});
// 执行顺序: 清除public目录 -> 产生原始博客内容 -> 执行压缩混淆 -> 部署到服务器
gulp.task(
  "build",
  gulp.series(
    "clean",
    "generate",
    "compressHtml",
    "compressCss",
    "compressJs",
    "compressImage",
    gulp.parallel("deploy")
  )
);

// 默认任务
gulp.task(
  "default",
  gulp.series(
    "clean",
    "generate",
    gulp.parallel("compressHtml", "compressCss", "compressImage", "compressJs")
  )
);
//Gulp4最大的一个改变就是gulp.task函数现在只支持两个参数,分别是任务名和运行任务的函数

3 最后 hexo clean && hexo g && gulp && hexo d 就可以了。

注意,很可能你会运行到第三步,也就是运行gulp压缩命令时会报错,如图所示:

gulp运行错误

那是因为gulp安装的本地版本和hexo自带的版本不对应导致,第三步gulp压缩可以用下面命令强制使用本地版本:

node ./node_modules/gulp/bin/gulp.js

其他

如果你想更深入的进行代码的修改,建议先去学习一下ejs的基本语法,这对魔改非常有帮助!!

也可以看看这篇《ejs语法入门》

参考链接

官方文档

Hexo+Github博客搭建完全教程(洪卫)

Hexo 博客主题个性化

原链接

1. Key Promoter X

如果让我给新手推荐一个 PyCharm 必装插件,那一定是 Key Promoter X

它就相当于一个快捷键管理大师,它时刻地在:

  • 教导你,当下你的这个操作,应该使用哪个快捷操作来提高效率?
  • 提醒你,当下你的这个操作,还没有设置快捷键,赶紧设置一个?

有了 Key Promoter X,你很快就能熟练地掌握快捷键,替代鼠标指日可待。

比如我使用鼠标点开 Find in Path,它就会在右下角弹窗提示你该用哪个快捷键。

图片

2. Vim in PyCharm

在大多数场景之下,使用鼠标的效率和精准度,是远不如键盘快捷键的(前提是你已经相当熟练的掌握了快捷键),这个你得承认吧。

Vi 可以满足你对文本操作的所有需求,比可视化界面更加效率,更加 geek。如果你和我一样,是忠实的 vim 粉。在安装完 Pycharm 完后,肯定会第一时间将 ideaVim 这个插件也装上,它可以让我们在 Pycharm 中 使用 vim 来编辑代码。

安装方法如下,安装完后需要重启 Pycharm 生效。

图片

3. Markdown in PyCharm

富文本排版文档是一件非常痛苦的事情 ,对于程序员写文档,最佳的推荐是使用 Markdown ,我所有的博客日记都是使用 Markdown 写出来的。

从 Github下载的代码一般也都会带有README.md文件,该文件是一个Markdown格式的文件。

PyCharm是默认没有安装Markdown插件的,所以不能按照Markdown格式显示文本,显示的是原始文本。

因此,如果要在 PyCharm 中阅读 Markdown 文档,可以装一下 Markdown support 这个插件。

安装的方法有两种:

1、第一种,最方便的,就是你打开一个 MD 的文档,PyCharm 就会提示你安装它。

2、从插件商店中搜索安装。

图片

效果如下

图片

4. Jupyter Notebook in PyCharm

使用 Jupyter 之前 ,先要安装它

$ pip install jupyter

然后按照下图指示新建一个 Notebook ,就可以开始运作了。

图片

这个界面感觉和 Jupyter 的风格不太符

图片

但是使用上是没有什么区别的,记住三个快捷键就好(下面指的是 Mac 上的,Windows 上的有所不同)

  • Ctrl+Enter:运行该 cell
  • Option + shift + Enter:调试该 cell
  • Shift + Enter:插入一个新的 cell

图片

只要你安装了 Jupyter 后,你使用 Python Console 也会自动变成 Jupyter 的模式

图片

5. Regex Tester in PyCharm

Regex Tester是PyCharm的第三方插件,可以测试正则表达式。

按照下图入口,安装 Regex Tester 插件:

图片

安装完成后,无需重启 PyCharm ,点击 PyCharm 界面左下方的小矩形按钮,就能找到 Regex Tester 选项。

图片

点击进入后,就出现了如下界面。我随手写了个匹配手机号码的正则(不一定准确),匹配到的字符串背景会被高亮。右上方还有一些选项如大小写敏感,多行模式等,可根据需要进行选择。Regex Tester 还提供了Split,Replace功能等。

使用效果如下:

图片

6. Use Bash in Windows

在 Windows 上的 cmd 命令和 Linux 命令有不少的差异,比如要列出当前目录下的所有文件,Windows 上是用 dir ,而 Linux 上则是用 ls -l

对于像我这样熟悉 Linux 的开发者来说,Windows 的 那些 CMD 命令带来的糟糕体验是无法忍受的。

图片

在弹出的 Bash 窗口,你可以敲入你想使用的 Linux 命令,是不是舒服多了。

图片

7. Auto PEP8 in PyCharm

pep8` 是Python 语言的一个代码编写规范。如若你是新手,目前只想快速掌握基础,而不想过多去注重代码的的编写风格(虽然这很重要),那你可以尝试一下这个工具 - `autopep8

首先在全局环境中(不要在虚拟环境中安装),安装一下这个工具。

$ sudo pip install autopep8

然后在 PyCharm 导入这个工具,具体设置如下图

Name: AutoPep8
Description: autopep8 your code
Program: autopep8
Arguments: --in-place --aggressive --aggressive $FilePath$
Working directory: $ProjectFileDir$
Output filters: $FILE_PATH$\:$LINE$\:$COLUMN$\:.*

图片

我随意写了一段不符合 pep8 规范的代码。

图片

点击右键,选择 External Tools -> AutoPep8

图片

看一下效果,还是挺明显的。

图片

你可能会说,Pycharm 本身就自带这个功能了呀,快捷键 Command+Option+L ,就可以实现一键pep8了。你可以对比一下,Pycharm 自带的代码 pep8 化功能 并没有像这个autopep8 来得彻底。我相信你最终的选择肯定是后者。

8. Test RESTful Web Service

PyCharm 的 Test RESTful Web Service工具提供了RESTful接口测试界面,如下图所示,提供了get、post,put等http方法,其中的Request子界面headers,Parameters,Body等功能,Response子界面用于显示返回值,Response Headers用于显示返回的消息头。

为了演示,我先使用 Flask 写一个 HTTP 接口

from flask import Flask, request

app = Flask(__name__)


@app.route('/hello')
def index():
    name = request.args.get('name')
    return '你好,' + name

if __name__ == '__main__':
    app.run()

并运行它开启服务,访问地址是:http://127.0.0.1:5000/

图片

通过下图方式打开 Test RESTful Web Service

图片

会出现如下界面,在红框处填写如下信息

图片

然后点击最左边的运行按钮,即可向服务器发送 http 请求。

图片

9. Execute Selection in Console

当你想写一段简单的测试代码时,或许你会这样子

  1. 使用 Python Shell 直接写。缺点是没有自动补全。
  2. 在 PyCharm 中新开一个文件。缺点是要新创建一个文件,完了后还要删除。

今天再给大家介绍一种新的方法,可以完全避开上面两种方式的缺点。

那就是 Execute Selection in Console,可以说是 Run in Anywhere.

只要在当前文件中,写好代码,然后光标选择后,右键点击 Execute Selection in Python Console 或者 使用快捷键 option + shift + E (windows 上是 alt + shift + E)。

图片

接着 PyCharm 就会弹出一个 Python Console 窗口,然后运行你所选择的代码。

图片

可以发现其中的一个亮点,就是使用这种方法,PyCharm 会自动帮我们处理好缩进(我们选择时,前面有缩进,可是在执行时,会自动去掉前面多余的缩进)

10. CodeGlance

如果你曾使用过 Sublime Text,切换到其他代码编辑器,或多或少会有些不习惯,因为很少有编辑器会像 Sublime 那样自带一个预览功能的滚动条。

在 PyCharm 中,就没有解决不了的问题,如果有,那么就装个插件。

要想在 PyCharm 中使用这个预览滚动条,只要装上 CodeGlance 这个插件。使用效果如下

图片

11. Chinese Plugin

经常听到很多初学者抱怨说,PyCharm 怎么是全英文的?学起来好难啊。

在以前,我会跟他们说,学习编程语言,英文是一项非常重要的能力,千万不能惧怕它,逃避它,而要是去学习它,适应它,如果连个 IDE 都适应不了,那就别学编程了。

而现在,JetBrains 官方自己出了汉化插件,名字就叫:chinese,在插件市场里一搜,排名第一便是它,下载量已经 40 万,对比排名第二的民间汉化插件,简直不是量级的。

图片

点击 INSTALL 安装后,会提示你进行重启,才能生效。

图片

重启完成后,展现在我们面前的是一个既熟悉又陌生的界面,所有的菜单栏全部变成了中文。

图片

点进设置一看,可以说基本实现了汉化,只剩下一小撮的英文(难道是因为这些词保留英文会比翻译后更容易理解吗?就像 socket 和套接字一样。),不过个人感觉完全不影响使用了。

图片

12. Profile in PyCharm

在 Python 中有许多模块可以帮助你分析并找出你的项目中哪里出现了性能问题。

比如,常用的模块有 cProfile,在某些框架中,也内置了中间件帮助你进行性能分析,比如 Django ,WSGI。

做为Python 的第一 IDE, PyCharm 本身就支持了这项功能。而且使用非常方便,小白。

假设现在要分析如下这段代码的性能损耗情况,找出到底哪个函数耗时最多

import time

def fun1():
    time.sleep(1)

def fun2():
    time.sleep(1)

def fun3():
    time.sleep(2)

def fun4():
    time.sleep(1)

def fun5():
    time.sleep(1)
    fun4()

fun1()
fun2()
fun3()
fun5()

点击 Run -> Profile ‘程序’ ,即可进行性能分析。

图片

运行完毕后,会自动跳出一个性能统计界面。

图片

性能统计界面由Name、Call Count、Time(ms)、Own Time(ms) ,4列组成一个表格,见下图。

  1. 表头Name显示被调用的模块或者函数;Call Count显示被调用的次数;Time(ms)显示运行时间和时间百分比,时间单位为毫秒(ms)。
  2. 点击表头上的小三角可以升序或降序排列表格。
  3. 在Name这一个列中双击某一行可以跳转到对应的代码。
  4. 以fun4这一行举例:fun4被调用了一次,运行时间为1000ms,占整个运行时间的16.7%

点击 Call Graph(调用关系图)界面直观展示了各函数直接的调用关系、运行时间和时间百分比,见下图。

图片

右上角的4个按钮表示放大、缩小、真实大小、合适大小;

  1. 箭头表示调用关系,由调用者指向被调用者;
  2. 矩形的左上角显示模块或者函数的名称,右上角显示被调用的次数;
  3. 矩形中间显示运行时间和时间百分比;
  4. 矩形的颜色表示运行时间或者时间百分比大小的趋势:红色 > 黄绿色 > 绿色,由图可以看出fun3的矩形为黄绿色,fun1为绿色,所有fun3运行时间比fun1长。
  5. 从图中可以看出Test.py直接调用了fun3、fun1、fun2和fun5函数;fun5函数直接调用了fun4函数;fun1、fun2、fun3、fun4和fun5都直接调用了print以及sleep函数;整个测试代码运行的总时间为6006ms,其中fun3的运行时间为1999ms,所占的时间百分比为33.3%,也就是 1999ms / 6006ms = 33.3%。

13. Json Parse in PyCharm

在开发过程中,经常会把校验一串 JSON 字符串是否合法,在以前我的做法都是打开 https://tool.lu/json/ 这个在线网站,直接美化来校验,只有 JSON 格式都正确无误合法的,才能够美化。

图片img

直到后来发现在 PyCharm 有一个插件专门来做这个事,那就是 JSON Parser,在插件市场安装后,重启 PyCharm ,就能在右侧边栏中看到它。

图片img

14. Inspect Code in PyCharm

对于编译型的语言,如 Java,需要将代码编译成机器可识别的语言才可运行,在编译过程中,就可以通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷。这个过程叫做静态代码分析检查。

那对于 Python 这种解释型的语言来说,代码是边运行边翻译的,不需要经过编译这个过程。很多肉眼无法一下子看出的错误,通常都是跑一下(反正跑一下这么方便)才能发现。

由于Python 运行是如此的方便,以至于我们都不太需要关注静态分析工具。

但也不是说,静态分析工具完全没有用武之地,我认为还是有。

如果你的编码能力还没有很成熟,代码中可以有许许多多的隐藏bug,由于 Python 是运行到的时候才解释,导致一次运行只能发现一个错误,要发现100个bug,要运行100次,数字有点夸大,其实就是想说,如果这么多的错误都能通过一次静态检查发现就立马修改,开发调试的效率就可以有所提升。当然啦,并不是说所有的错误静态分析都能提前发现,这点希望你不要误解。

做为 Python 最强 IDE,PyCharm本身内置了这个功能,不需要你安装任何插件。

你只需要像下面这样点击项目文件夹,然后右键,选择 Inspect Code,就可以开启静态检查。

图片

我对开源组件 nova 的静态检查发现,其有不规范的地方有数千处。

图片

以上就是我自己日常使用后,觉得最好用的几个工具和插件,今天一次性全部分享给你,希望对你有用。

因为Markdown支持HTML元素(
)等,所以我们可以使用标签来是我们的文章变得更加的漂亮和特别!

例:

使用 <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Del</kbd> 重启电脑

效果:Ctrl+Alt+Del

公式

使用两个美元符 $$ 包裹 TeX 或 LaTeX 格式的数学公式来实现,并且在文章头开启渲染功能(不同主题可能会有不同)

画图

使用 typora 的源码模式粘贴到编辑器中查看效果:

1、横向流程图源码格式:

​```mermaid
graph LR
A[方形] -->B(圆角)
    B --> C{条件a}
    C -->|a=1| D[结果1]
    C -->|a=2| E[结果2]
    F[横向流程图]
​```

2、竖向流程图源码格式:

​```mermaid
graph TD
A[方形] --> B(圆角)
    B --> C{条件a}
    C --> |a=1| D[结果1]
    C --> |a=2| E[结果2]
    F[竖向流程图]
​```

3、标准流程图源码格式:

​```flow
st=>start: 开始框
op=>operation: 处理框
cond=>condition: 判断框(是或否?)
sub1=>subroutine: 子流程
io=>inputoutput: 输入输出框
e=>end: 结束框
st->op->cond
cond(yes)->io->e
cond(no)->sub1(right)->op
​```

4、标准流程图源码格式(横向):

​```flow
st=>start: 开始框
op=>operation: 处理框
cond=>condition: 判断框(是或否?)
sub1=>subroutine: 子流程
io=>inputoutput: 输入输出框
e=>end: 结束框
st(right)->op(right)->cond
cond(yes)->io(bottom)->e
cond(no)->sub1(right)->op
​```

5、UML时序图源码样例:

​```sequence
对象A->对象B: 对象B你好吗?(请求)
Note right of 对象B: 对象B的描述
Note left of 对象A: 对象A的描述(提示)
对象B-->对象A: 我很好(响应)
对象A->对象B: 你真的好吗?
​```

6、UML时序图源码复杂样例:

​```sequence
Title: 标题:复杂使用
对象A->对象B: 对象B你好吗?(请求)
Note right of 对象B: 对象B的描述
Note left of 对象A: 对象A的描述(提示)
对象B-->对象A: 我很好(响应)
对象B->小三: 你好吗
小三-->>对象A: 对象B找我了
对象A->对象B: 你真的好吗?
Note over 小三,对象B: 我们是朋友
participant C
Note right of C: 没人陪我玩
​```

7、UML标准时序图样例:

​```mermaid
%% 时序图例子,-> 直线,-->虚线,->>实线箭头
  sequenceDiagram
    participant 张三
    participant 李四
    张三->王五: 王五你好吗?
    loop 健康检查
        王五->王五: 与疾病战斗
    end
    Note right of 王五: 合理 食物 <br/>看医生...
    李四-->>张三: 很好!
    王五->李四: 你怎么样?
    李四-->王五: 很好!
​```

8、甘特图样例:

​```mermaid
%% 语法示例
        gantt
        dateFormat  YYYY-MM-DD
        title 软件开发甘特图
        section 设计
        需求                      :done,    des1, 2014-01-06,2014-01-08
        原型                      :active,  des2, 2014-01-09, 3d
        UI设计                     :         des3, after des2, 5d
    未来任务                     :         des4, after des3, 5d
        section 开发
        学习准备理解需求                      :crit, done, 2014-01-06,24h
        设计框架                             :crit, done, after des2, 2d
        开发                                 :crit, active, 3d
        未来任务                              :crit, 5d
        耍                                   :2d
        section 测试
        功能测试                              :active, a1, after des3, 3d
        压力测试                               :after a1  , 20h
        测试报告                               : 48h
​```
graph LR
A[方形] -->B(圆角)
    B --> C{条件a}
    C -->|a=1| D[结果1]
    C -->|a=2| E[结果2]
    F[横向流程图]

示例图

教程链接:https://www.runoob.com/markdown/md-advance.html

1.查看linux服务器的系统信息(内核)

在linux命令行下输入shell指令:uname -a

2.查看操作系统的版本(以redhat为例,其他的同理)

cat /etc/redhat-release 或 cat /etc/issue

netstat、lsof查看端口

netstat

netstat用来查看系统当前系统网络状态信息,包括端口,连接情况等,常用方式如下:

  • -t : 指明显示TCP端口
  • -u : 指明显示UDP端口
  • -l : 仅显示监听套接字(LISTEN状态的套接字)
  • -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序
  • -n : 不进行DNS解析
  • -a 显示所有连接的端口

直接查看端口命令。netstat -an | grep 22
note:22就是改为要查询的端口

lsof

参考链接
lsof的作用是列出当前系统打开文件(list open files),不过通过-i参数也能查看端口的连接情况,-i后跟冒号端口可以查看指定端口信息,直接-i是系统当前所有打开的端口

  • -a 列出打开文件存在的进程
  • -c<进程名> 列出指定进程所打开的文件
  • -g 列出GID号进程详情
  • -d<文件号> 列出占用该文件号的进程
  • +d<目录> 列出目录下被打开的文件
  • +D<目录> 递归列出目录下被打开的文件
  • -n<目录> 列出使用NFS的文件
  • -i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
  • -p<进程号> 列出指定进程号所打开的文件
  • -u 列出UID号进程详情
  • -h 显示帮助信息
  • -v 显示版本信息

lsof -i:22 #查看22端口连接情况,默认为sshd端口

  1. 使用lsof命令查看那条线程占用了25555端口
  2. 执行kill命令杀掉那条线程 如: kill 15889

(注:如果是centos系统的话,数字填的是PID下面的,其他系统类似)

添加环境变量

直接修改$PATH值:
export PATH=$PATH:/要添加的路径

或者

export PATH=/要添加的路径$PATH

注意PATH后没有空格

例:

export PATH="/home/ubuntu/anaconda3/bin:$PATH"

生效方法:立即生效

有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置

用户局限:仅对当前用户

通过修改.bashrc文件:(.bashrc文件在根目录下)

vi .bashrc //编辑.bashrc文件

//在最后一行添上:

export PATH=$PATH:/xxx/xxx ///xxx/xxx位需要加入的环境变量地址 等号两边没空格

生效方法:(有以下两种)

..关闭当前终端窗口,重新打开一个新终端窗口就能生效

..输入“source .bashrc”命令,立即生效

有效期限:永久有效

用户局限:仅对当前用户

通过修改profile文件:(profile文件在/etc目录下)

vi /etc/profile //编辑profile文件

//在最后一行添上:

export PATH=$PATH:/xxx/xxx

生效方法:系统重启

有效期限:永久有效

用户局限:对所有用户

通过修改environment文件:(environment文件在/etc目录下)(推荐)

vi /etc/environment //编辑profile文件

在PATH=/·········中加入“:/xxx/xxx”

生效方法:系统重启

有效期限:永久有效

用户局限:对所有用户

查找文件

1.按照文件名查找

    (1)find / -name httpd.conf  #在根目录下查找文件httpd.conf,表示在整个硬盘查找
    (2)find /etc -name httpd.conf  #在/etc目录下文件httpd.conf
    (3)find /etc -name ‘srm‘  #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
    (4)find . -name ‘srm*’   #表示当前目录下查找文件名开头是字符串‘srm’的文件

 2.按照文件特征查找    

    (1)find / -amin -10   # 查找在系统中最后10分钟访问的文件(access time)
    (2)find / -atime -2   # 查找在系统中最后48小时访问的文件
    (3)find / -empty   # 查找在系统中为空的文件或者文件夹
    (4)find / -group cat   # 查找在系统中属于 group为cat的文件

3.使用混合查找方式查找文件

    参数有: !,-and(-a),-or(-o)。

    (1)find /tmp -size +10000c -and -mtime +2   #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件

原文链接

SSH终端输入:

1.查看面板入口:

/etc/init.d/bt default

2.关闭安全入口:

rm -f /www/server/panel/data/admin_path.pl

停止

/etc/init.d/bt stop

启动

/etc/init.d/bt start

重启

/etc/init.d/bt restart

卸载

/etc/init.d/bt stop && chkconfig --del bt && rm -f /etc/init.d/bt && rm -rf /www/server/panel

查看当前面板端口

cat /www/server/panel/data/port.pl

修改面板端口,如要改成8881(centos 6 系统)

echo '8881' > /www/server/panel/data/port.pl && /etc/init.d/bt restart
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8881 -j ACCEPT
service iptables save
service iptables restart

修改面板端口,如要改成8881(centos 7 系统)

echo '8881' > /www/server/panel/data/port.pl && /etc/init.d/bt restart
firewall-cmd --permanent --zone=public --add-port=8881/tcp
firewall-cmd --reload

强制修改MySQL管理(root)密码,如要改成123456

cd /www/server/panel && python tools.py root 123456

修改面板密码,如要改成123456

cd /www/server/panel && python tools.py panel 123456

查看宝塔日志

cat /tmp/panelBoot.pl

查看软件安装日志

cat /tmp/panelExec.log

站点配置文件位置

/www/server/panel/vhost

删除域名绑定面板

rm -f /www/server/panel/data/domain.conf

清理登陆限制

rm -f /www/server/panel/data/*.login

查看面板授权IP

cat /www/server/panel/data/limitip.conf

关闭访问限制

rm -f /www/server/panel/data/limitip.conf

查看许可域名

cat /www/server/panel/data/domain.conf

关闭面板SSL

rm -f /www/server/panel/data/ssl.pl && /etc/init.d/bt restart

查看面板错误日志

cat /tmp/panelBoot

查看数据库错误日志

cat /www/server/data/*.err

站点配置文件目录(nginx)

/www/server/panel/vhost/nginx

站点配置文件目录(apache)

/www/server/panel/vhost/apache

站点默认目录

/www/wwwroot

数据库备份目录

/www/backup/database

站点备份目录

/www/backup/site

站点日志

/www/wwwlogs

破解版

地址

安装专业宝塔

Centos安装脚本 面板端口:8888

Source Code

yum install -y wget && wget -O install.sh https://download.youko.me/install/install_6.0.sh && sh install.sh

试验性Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7) 可能存在少量兼容性问题 不断优化中

Source Code

curl -sSO https://download.youko.me/install/install_panel.sh && bash install_panel.sh

Ubuntu/Deepin安装脚本

Source Code

wget -O install.sh https://download.youko.me/install/install-ubuntu_6.0.sh && sudo bash install.sh

Debian安装脚本

Source Code

wget -O install.sh https://download.youko.me/install/install-ubuntu_6.0.sh && bash install.sh

Fedora安装脚本

Source Code

wget -O install.sh https://download.youko.me/install/install_6.0.sh && bash install.sh

Linux面板7.4.5升级命令(已安装面板或旧版本或免费版升级专业版)

Source Code

curl https://download.youko.me/install/update6.sh|bash

Nginx/Apache官方防火墙安装命令

Source Code

Nginx直接面板安装防火墙使用 / Apache先面板安装防火墙在使用bt命令20修复!

安装企业宝塔

Centos安装脚本 面板端口:8888

Source Code

yum install -y wget && wget -O install.sh https://download.youko.me/ltd/install/install_6.0.sh && sh install.sh

试验性Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7) 可能存在少量兼容性问题 不断优化中

Source Code

curl -sSO https://download.youko.me/ltd/install/install_panel.sh && bash install_panel.sh

Ubuntu/Deepin安装脚本

Source Code

wget -O install.sh https://download.youko.me/ltd/install/install-ubuntu_6.0.sh && sudo bash install.sh

Debian安装脚本

Source Code

wget -O install.sh https://download.youko.me/ltd/install/install-ubuntu_6.0.sh && bash install.sh

Fedora安装脚本

Source Code

wget -O install.sh https://download.youko.me/ltd/install/install_6.0.sh && bash install.sh

Linux面板7.4.5升级命令(已安装面板或旧版本或免费版升级企业版)

Source Code

curl https://download.youko.me/ltd/install/update6.sh|bash

Nginx/Apache官方防火墙安装命令

Source Code

Nginx直接面板安装防火墙使用 / Apache先面板安装防火墙在使用bt命令20修复!

(如果有小伙伴不想看我啰嗦,想直接看我做出来的成果可直接去文末,有不少挺棒的网站和资源分享,欢迎评论哦(✪ω✪))

目录:

[TOC]

搭建以下网站的前提条件:

1, 一个服务器

2,一个域名(便宜的有1元一年,像我买的就是)

3, 大量的时间

(如果你是一个学生,并且可以FAN墙的话,可以免费的弄到上面的所有东西,不过非常麻烦,建议时间少并且宝贵的可以直接去腾讯云,或是阿里云购买,除非是像我那么闲的人才会到处白嫖)


第一个搭建的网站是:

https://guhailong18.github.io/ (已废,国内网址:https://cf.dream18.xyz 国际网址:https://guke.cf)

一个静态博客

利用Github的储存库,基于hexo搭建静态博客。

优点:方便使用,响应速度快,支持GIF等

缺点:部分功能缺失,无用户功能,评论系统单调乏味,深度美化难度大,需要学习CSS和html

(如果有会的希望能在评论区留下联系方式,教教我美化和视频插入参数的设置)

第二个搭建的网站是:

http://a.dream18.xyz

这个网站真的弄了很久,一个onedrive的目录索引,(当初自己真的太新手了,踩了太多没用的坑)

第三个搭建的网站是:

http://b.dream18.xyz

一个私有云盘,方便与他人共享资源等,可以为网页提供视频服务,并且不限速,还可以用来作为团队文档协作,虽然我没有团队。。。。。

基于宝塔,AWS服务器,KobExporer

第四个搭建的网站是:

http://c.dream18.xyz

一个重量级的博客

优点:功能齐全,调节方便,可在线编辑

缺点:过于臃肿,时常崩溃,哭了(应该是我的服务器的问题,一核1G的承受不住啊),服务器好的大佬建议使用这个,部分插件及主题要钱

10A4F57B

基于宝塔,AWS服务器,WordPress框架

第五个搭建的网站是:

http://d.dream18.xyz

未建好的发卡平台

第六个搭建的网站是:

http://e.dream18.xyz

多账户的onedrive目录索引,这个算是感觉比较满意的了,就是视频无法正常播放,只能用来当图床了,可惜了,还以为能作为博客的视频服务

第七个搭建的网站是:

http://m.dream18.xyz

一个微信开发及管理平台,可以方便的管理公众号以及小程序,并且可以创建一些自动回复或者聊天机器人等有趣的功能。

优点:使用方便,粉丝多的可以试一下,也有些有免费的功能

缺点:有些服务要钱,并且我公众号又没粉丝

基于宝塔,AWS服务器,微擎构建

第八个搭建的网站是:

http://dream18.xyz

其实这个不算一个网站,是我设置的一个企业邮箱,可以有这个域名指向网易免费的企业邮箱

2020.01.24

第九个搭建的网站是:

懒得写了,不是很重要的简单网站,所有网站都汇总在文末!

….

….

(PS:以上的网站并不是按时间搭建的,而是按字母和我的个人兴趣排的)

总结:现在搭建一个博客网站真的是一个十分轻松的事情(如果愿意花些钱的话),但是想做的比较好却没有那么容易,特别是美化博客的时候,有些简单的功能想实现真的有些麻烦,特别是我这种没怎么学过代码的人,只能看着别人的教程一步一步学,如果你和我一样,且运气不是很好的话,那么就会遇到一大堆报错,以后有时间我会把做的比较好的教程整理出来分享给大家,顺便做一些补充和说明,希望大家不要踩到我曾经踩过得坑。


如果有小伙伴对以上那个网站搭建感兴趣的请在下方留言,如果我有时间的话,可以出一个搭建过程或是指导建议!

最后祝大家鼠年大吉!!!

10B7F0DB

再来一张!!!

10B7B122

2020.02.23更新:

在白嫖了两个阿里云服务器后,用了一上午的时间把AWS服务器的网站全都搬过来了,(吐槽下:AWS的服务器是真的贵,但是比国内的好用一些,网站不用备案,且能科学上网,不错吧!(o゚▽゚)o ),以下这些网站预计能存活一年吧,如果官方还有羊毛的话估计会久一些,毕竟域名是真的贵!!!学生党承受不起啊!

已完成的网站:

如果无法打开,请直接输入网址

微擎 微信公众号,小程序开发管理

云端桌面kodexplor 多人协作文档,及图片存放

UPUPOO分享站 (备用网址: ,这个目前对我比较有用,管理员登录网址:教程地址 (网址已删,安全第一,舍不得,可以先使用单个账号的,等我做好安全防护后再说)

使用说明:这个网盘是我借助开源项目自己搭建的(原本还想弄好了能在线播放视频的,结果不知道为什么只闻其声,不见画面╮(╯﹏╰)╭,真伤心,以后有时间再看下能不能恢复吧),里面有数模的一些学习资料,PR,PS,AE人工智能之类的学习视频,大家可以慢慢的看一下,目前没有对下载速度做出过任何限制,如果你觉得速度不是很快,那么可能是因为下载的人太多了,比较我只有一个服务器,而且微软对第三方应用也有一些限制,想要10几M/S的下载速度几乎是没可能的,但是5,6M/s还是没什么问题的,不过得使用IDM之类的多线程下载器。

注意事项:

  1. 请勿一次性下载大量的文件
  2. 请勿在大众平台肆意传播,甚至贩卖资源,所造成的法律问题与本人无关 (应许私下传播)
  3. 请勿使用爬虫获取数据
希望大家能准守规则,好让网站可以存活下去,不然我只能让我一个人独享了,另外,非常热烈地欢迎各位**打钱**赞助我,打赏方式在文章最下方,一点小小的心意也行的哦!

(如有侵权,请联系我删除,邮箱:10997629344@qq.com)

WordPress樱花庄 好看的博客主题,有时间再研究或DIY一下

古客 (备用网址:https://guke.cf)

古客的壁纸站 (备用网址:https://guke.ml)

imgurl图床 (有大佬会去广告的能教教我吗?)

oneindex 微软硬盘目录索引 (备用地址:ee.dream18.xyz)

GOINDEX 谷歌硬盘索引

sciense go to wed 给大家去谷歌,维基之类的网站学习,youtube之类的就算了估计会卡死(反正也打不开,不过直接用视频网址似乎可行)

加密音乐格式破解 这个网站就厉害了,相信应该有人曾天真的以为充一个月VIP,然后把想听的付费音乐统统下载下来就可以永久的听了,那你就too young too simple了,那些音乐软件开发商早就想到了你们会这样做,把音频全都加密为稀奇古怪的格式,没有会员就听不了地,不过有了这个网站你就不用怕了,它可以破解网易云音乐(ncm)、QQ音乐(qmc, mflac, mgg, tkm)等主流音乐软件的加密,就是把这些乱七八糟的格式统统转化为MP3

提醒:请勿宣传,安全第一

古客的图床 以后会开放注册,而且这个比上面那个好用且功能强大的多,也不想上面的吃相难看 ̄へ ̄

初始状态的网站:

WordPress

ICMS

发卡平台

古客的分享站初始版

备用图床:

https://pic.xn--74q16d.ml/file/picture18/05.jpg 这个是中文网址,你们信不信,在浏览器打开你们看下网址就知道了,刚开始真是震惊到我了!

https://pic.xn--74q16d.ml/file/upupoo18/00.jpg

https://古客.ml/file/upupoo18/00.jpg

分享一些别的大佬搭建的网站:

Web网站在线制作 web.clocti.com

微尘云盘 pan.clocti.com

微尘SEO友链优化百度收录工具 seo.clocti.com

樱花引流机器人官网 www.msakura.cn

壁纸网站:

1.天下无敌类
特点:稳定、无版权、图片优质,逼格高(那是真的高),可用于设计用途
https://pixabay.com/zh/
https://www.pexels.com/zh-cn/
https://web.500px.com/
https://unsplash.com/
https://www.piqsels.com/zh
就五个,够用。名字分别是pixabay pexels 500px unsplash piqsels
免费无版权基本跑不出这几个。

2.主打壁纸类
特点:脸上写着“我就是壁纸网站”,图片质量比较大众口味。
https://wallhaven.cc/ 经久不衰
https://wallpaperscraft.com/
https://www.10wallpaper.com/
https://wallpapercave.com/
https://desktoppapers.co/ 这个不能搜索
https://www.wallpapermaiden.com/
https://wallroom.io/ 主打4K
七个,比较多,可能看到这有很多福娃已经点收藏了
楼主的初衷是介绍后真正能把网站用起来,而不是收藏了就忘记

3.傻瓜类
https://www.91sotu.com/ 搜图导航拿去。想用啥搜啥,一导航在手,天下你有
http://www.duososo.com/ 这个排版有点乱

http://tu.fbisb.com/

感觉自己排版有些丑,再用表格排版一下吧!

古客网站一览表