Hexo结合mermaid增加甘特图功能,在lanscape-plus主题现实现

给hexo增加绘甘特图的功能,采用mermaid插件

一 安装加mermaid插件
1
2
## https://github.com/webappdevelp/hexo-filter-mermaid-diagrams
$ npm install hexo-filter-mermaid-diagrams --save
二 修改博客根目录下的 _config.yml文件,增加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
### 这个己验证
# mermaid chart
mermaid: ## mermaid url https://github.com/knsv/mermaid
enable: true # default true
version: "9.4.3" # default v9.0.0
options: # find more api options from https://github.com/knsv/mermaid/blob/master/src/mermaidAPI.js
#startOnload: true // default true
### 有的教程说增加如下,
# Mermaid tag
mermaid:
enable: true
# Available themes: default | dark | forest | neutral
theme: default

三 修改脚本
  1. 修改 blog/themes/landcape-plus/layout/_partial/footer.ejs文件,最后一行增加
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!-- 增加mermaid 配置 -->
    {% if theme.mermaid.enable %}
    <script type="text/javascript" src='https://unpkg.com/mermaid@9.4.3/dist/mermaid.min.js'></script>
    <script>
    if (window.mermaid) {
    var mermaid_config = {
    startOnLoad: true,
    theme: '{{theme.mermaid.theme}}',
    flowchart:{
    useMaxWidth: false,
    htmlLabels: true
    }
    }
    mermaid.initialize(mermaid_config);
    }
    </script>
    {% endif %}
  2. 修改 blog/themes/next/_partial/footer.swig文件 增加
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {% if theme.mermaid.enable %}
    <script type="text/javascript" src='https://unpkg.com/mermaid@9.4.3/dist/mermaid.min.js'></script>
    <script>
    if (window.mermaid) {
    var mermaid_config = {
    startOnLoad: true,
    theme: '{{theme.mermaid.theme}}',
    flowchart:{
    useMaxWidth: false,
    htmlLabels: true
    }
    }
    mermaid.initialize(mermaid_config);
    }
    </script>
    {% endif %}

四 验证,增加.md文件,语句写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 ```mermaid
gantt
dateFormat YYYY-MM-DD
title 利用mermaid功能,增加一个甘特图
section 第一节
己完成任务 :done, des1, 2014-01-06,2014-01-08
正在进行的任务 :active, des2, 2014-01-09, 3d
未来任务1 : des3, after des2, 5d
未来任务2 : des4, after des3, 5d
section Critical tasks
Completed task in the critical line :crit, done, 2014-01-06,24h
Implement parser and jison :crit, done, after des1, 2d
Create tests for parser :crit, active, 3d
Future task in critical line :crit, 5d
Create tests for renderer :2d
Add to mermaid :1d

mermaid写甘特图的语法汇总

一 例子
1
2
3
4
5
6
7
8
9
10
11
12
13
gantt
title 项目进度
dateFormat YYYY-MM-DD
axisFormat %m-%d
excludes sunday,monday,tuesday,friday,2014-03-01
section 第一阶段
需求分析 :crit, a1, 2014-01-01, 30d
设计评审 :after a1, 20d

section 第二阶段
第一批测试 :done, 2014-01-12 , 12d
第二批测试 :24d
客户验收 :milestone,2h
二 语法解释
  1. gantt 表示这是一个甘特图
  2. title 定义甘特图的标题
  3. dateFormat 定义甘特图中日期显示的格式,更多格式可以参考 https://mermaid-js.github.io/mermaid/#/gantt?id=input-date-format
  4. section 定义一个一个的区域,可以包含一个或多个任务,以section关键字开始一行,并给予命名
  5. 任务定义语法: 任务名称:别名,开始日期,天数
  6. 状态的修饰语法 active(表示还没有完成,会显示为蓝色), done(表示已完成, 会显示为灰色),crit(表示关键任务,会显示为红色)
  7. 任务时长:d(天),w(周),h(小时),m(分钟)
  8. 任务可以有一个别名,例如上面的 a1 ,然后在其他任务中可以引用依赖,例如 after a1
  9. 如果某个任务没有写开始日期,默认就是在上一个任务之后
  10. excludes 是指要排除哪些日期,可以写具体的日期,也可以写 weekends(周末),或具体的工作日,如 sunday,monday 这样的语法,可以写多种的组合
  11. milestone 表示里程碑,程碑的确切位置是由里程碑的初始日期和任务的“持续时间”确定的:初始日期+持续时间/2
  12. 输入注释,解析器将忽略注释。注释必须在单独的行上,并且必须以%%(双百分号)开头。注释开始后到下一个换行符的任何文本都将被视为注释,包括任何图表语法。

Hugo学习笔记四,干特图初体验

在markdown下可以写出流程图,甘特图之类的,可采用mermaid这个插件,今天在hugo下试用

采用LoviIt皮肤,按网上配置肿是不行。后来发现themes/LoveIt/layouts/shortcodes/下有mermaid.html文件,说明这个主题己经配置好了mermaid,只是格式不同。正好在Doit主题说明书里看到了,是写的语法不对改为以下

甘特图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 甘特图
{{< mermaid >}}gantt
dateFormat YYYY-MM-DD
title 利用mermaid功能,增加一个甘特图
section 第一节
己完成任务 :done, des1, 2014-01-06,2014-01-08
正在进行的任务 :active, des2, 2014-01-09, 3d
未来任务1 : des3, after des2, 5d
未来任务2 : des4, after des3, 5d
section Critical tasks
Completed task in the critical line :crit, done, 2014-01-06,24h
Implement parser and jison :crit, done, after des1, 2d
Create tests for parser :crit, active, 3d
Future task in critical line :crit, 5d
Create tests for renderer :2d
Add to mermaid :1d
{{< /mermaid >}}

类图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

{{< mermaid >}}classDiagram
Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 <--> C2: Cool label
{{< /mermaid >}}

旅行图,但看起来比甘特图更好
1
2
3
4
5
6
7
8
9
10
{{< mermaid >}} journey
title My working day
section Go to work
Make tea: 5: Me
Go upstairs: 3: Me
Do work: 1: Me, Cat
section Go home
Go downstairs: 5: Me
Sit down: 5: Me
{{< /mermaid >}}
流程图
1
2
3
4
5
6
{{< mermaid >}}graph LR;
A[Hard edge] -->|Link text| B(Round edge)
B --> C{Decision}
C -->|One| D[Result one]
C -->|Two| E[Result two]
{{< /mermaid >}}
时序图
1
2
3
4
5
6
7
8
9
10
11
12
{{< mermaid >}}sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Healthcheck
John->John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail...
John-->Alice: Great!
John->Bob: How about you?
Bob-->John: Jolly good!
{{< /mermaid >}}

linux ssh 协议下复制文件

采用 scp 命令

一 本地文件复制到远端的root目录,远程主机IP为192.168.3.25
1
2
3
$ scp  要复制的文件名  root@192.168.3.25:/root 
# 如果要复制目录,要加 -r 选项
$ scp -r 要复制的目录名 root@192.168.3.25:/root
二 远程复制到本地
1
2
$ scp root@192.168.3.25:/root/文件名  ~/temp/
$ scp -r root@192.168.3.25:/root/目录名 ~/temp

由公司员工想到家里的鸡娃

难以挖走的员工

  我以前上班的公司“深圳博士微电子”的产品经理与销售经理团队们都很厉害,但是公司的薪水比同行来说,没有优势。曾经有许多同行来挖人,许诺的工资待遇,或职位都要高于博士微电子,但是几乎没有成功的。于时有人说很佩服博士微的马老板,以较少的钱招到了优秀的人才。

  后来我与朋友聊起这件事情。我说到,在博士微电子,公司有很多决策,比如候入进的产品线,新的产品线如何进行策划,推广等。都会与产品经理,销售经理反复讨论模拟,甚至普通业务员也参与进来。这样的话,每个项目,员工就好象参与了公司的经营一样。归属感很强。

想到家里的娃

  这里,我又想到许多家长,觉得自家的娃不听话,不爱家,家里搞的乱七八糟的。其实成天只让家里的娃只管学习,家务事全部不用干,不参与家里的建设,他如何爱这个家呢?归属感不强烈啊。

由大年初一的“陋习”想到的

  小时候过年前大扫除,大年三十吃完饭,垃圾都要收拾的干干净净的。然后大年初一这天大人就告诉不要垃圾了。“大年初一是新年第一天,中国人凡事都喜欢好彩头。如果一定要扫地,可以从外头扫到里边,象征财宝进门,而且大年初一这天一般不倒垃圾。这是认为把家中的东西拿出去,就是把家中的福带出去。”
  长大后到了外地工作,年青人聚在一起,觉得这个是陋习,迷信,过年回不了家,在集本宿舍过年的,才不会这样做。
  现在想来,一个人能三十这天把家里要预备清理的都处理好,大年初一又能能安排好卫生工作,把垃圾集成起来第二天扔,这种能提前规划,自律的人能会不成功吗?

IIC 协议原理和模拟IIC的实现步骤

IIC协议的由来

IIC协议最早是在1982年由飞利浦公司设计开发的,它是一种两线制(SDL + SCL)的串行通行方式,它也是主从机之间通信的方式,在今天也是被广泛的应用在很多的产品设备上。
使用IIC协议进行数据通信的设备,它既可以作为主机又可以作为从机(支持多主多从),并且它是一种半双工的通信方式。
另外,IIC协议还是带有总线仲裁功能的一种通信协议!

IIC 协议的一些参数

IIC 作为一种通信的协议,它是包含了几个相关的特征参数的,如下所示:

述语 说明
发送器 发送数据到总经的设备
接收器 从总线接收数据的设备
主机 初始化数据传输,产生时钟信号与结速数据传输的设备
从机 由主机寻址的设备
多主 不破坏数据与信息的情况下,多主机同时控制总线
同步 同步两个以上设备的时钟信号
仲裁 如果两个以上的主机同时想要控制总线,只能有一个主机被 允许。并且这个主机的信息不能被破坏

# IIC 协议的通信速率

IIC可以支持的通信速率范围较大,可以很好的满足多种设备对于不同的通信速度的要求,常见的IIC支持的速率有以下几个:

1)普通模式(100kHz即100kbps)

2)快速模式(Fm)(400kHz)

3)快速模式+(Fs+)(1MHz)

4)高速模式(Hs)(3.4MHz)

5)超高速模式(UFm)(5MHz)

当然,以上标明的速率一般指的是硬件IIC的速率,对于通过软件模拟实现的IIC,它的速率是受到所使用的CPU的处理速度和性能影响的,不可以一概而论!

Termux设置——服务自启动

当我们使用termux搭建一个网站或者云盘的时候,需要依赖mysql、nginx、php等其他服务时,每次启动软件后还要敲命令一个一个启动,效率极其低下!是否有办法能够让我们需要的服务随软件的启动而自动运行呢? termux多站给了两个办法,一个是Termux:Boot,一个是termux-servives,这里讲一下termux-services

安装termux提供的工具:termux-services

1
2
3
$ pkg install termux-services -y
# 注意:安装完成后,一定要退出termux,然后重新启动。

使用的命令格式, 以 sshd为例

  • sv-enable sshd # sshd服务设为自启动
  • sv-disable sshd # 取消sshd自启动
  • sv down sshd # 停止sshd服务,并使本次Termux运行期间sshd自启动服务失效
  • sv up sshd # 启动sshd服务
  • sv status sshd # 查看sshd服务运行状态
  • sv start sshd # 临时启动sshd,但不设置为自启动状态,相当于ssh命令
  • pkill ssh # 杀死sshd服务,但如果自启动为生效状态,sshd服务会立即重启

自己编写一个启动脚本,并用termux-services自启动

  1. 比如我的博客在 ~/myblog/myhexo下,每次进termux,要执行

    1
    2
    3
    $ cd myblog
    $ cd myhexo
    $ hexo s
  2. 如果把以上写一个脚本,命名为myhexo.sh

    1
    2
    3
    #!/data/data/com.termux/files/usr/bin/bash
    cd myblog/myhexo
    hexo s

    然后 chmod +x myhexo.sh
    再 sv-enable myhexo.sh是不能执行的。

  3. 正的方法是

  • $cd /data/data/com.termux/files/usr/var/service 目录
  • mkdir myblog
  • cd myblog
  • vim run 建立脚本,内容如下: 注意脚本名字为run
    1
    2
    3
    #!/data/data/com.termux/files/usr/bin/bash
    cd ~/myblog/myhexo
    hexo s
  • 保存并执行 chmod +x run
  • sv-enable myblog # 注意是myblog

常见开关电源11种拓扑简述(转自微信朋友圈)

本文主要讲述常见的开关电源拓扑结构简述与特点。

常见的拓扑结构,包括Buck降压、Boost升压、Buck-Boost降压-升压、Flyback反激、Forward正激、Two-Transistor Forward双晶体管正激等。见下图:

开关电源的11个拓普

这些拓扑结构都与开关式电路有关。基本的脉冲宽度调制波形定义如下:

基本的脉宽调制波形

一. buck 降压

buck降压

  • 把输入降至一个较低的电压。
  • 可能是最简单的电路。
  • 电感/电容滤波器滤平开关后的方波。
  • 输出总是小于或等于输入。
  • 输入电流不连续(斩波)。
  • 输出电流平滑。

二. Boost 升压

Boost升压

  • 把输入升至一个较高的电压。
  • 与降压一样,但重新安排了电感、开关和二极管。
  • 输出总是比大于或等于输入(忽略二极管的正向压降)。
  • 输入电流平滑。
  • 输出电流不连续(斩波)。

三. Buck-Boost 降压-升压

Buck-Boost 降压-升压

  • 电感、开关和二极管的另一种安排方法。
  • 结合了降压和升压电路的缺点。
  • 输入电流不连续(斩波)。
  • 输出电流也不连续(斩波)。
  • 输出总是与输入反向(注意电容的极性),但是幅度可以小于或大于输入。
  • “反激”变换器实际是降压-升压电路隔离(变压器耦合)形式。

四. Flyback反激

Flyback反激
如降压-升压电路一样工作,但是电感有两个绕组,而且同时作为变压器和电感。
输出可以为正或为负,由线圈和二极管的极性决定。
输出电压可以大于或小于输入电压,由变压器的匝数比决定。
这是隔离拓扑结构中最简单的。
增加次级绕组和电路可以得到多个输出。

五. Forward 正激

Forward正激

  • 降压电路的变压器耦合形式。
  • 不连续的输入电流,平滑的输出电流。
  • 因为采用变压器,输出可以大于或小于输入,可以是任何极性。
  • 增加次级绕组和电路可以获得多个输出。
  • 在每个开关周期中必须对变压器磁芯去磁。常用的做法是增加一个与初级绕组匝数相同的绕组。
  • 在开关接通阶段存储在初级电感中的能量,在开关断开阶段通过另外的绕组和二极管释放。

六. Two-Transistor Forward双晶体管正激

Two-Transistor Forward双晶体管正激

  • 两个开关同时工作。
  • 开关断开时,存储在变压器中的能量使初级的极性反向,使二极管导通。
  • 主要优点:每个开关上的电压永远不会超过输入电压;无需对绕组磁道复位

七. Push-Pull 推挽

Push-Pull推挽

  • 开关(FET)的驱动不同相,进行脉冲宽度调制(PWM)以调节输出电压。
  • 良好的变压器磁芯利用率——在两个半周期中都传输功率。
  • 全波拓扑结构,所以输出纹波频率是变压器频率的两倍。
  • 施加在FET上的电压是输入电压的两倍。

八. Half-Bridge 半桥

Half-Bridge半桥

  • 较高功率变换器极为常用的拓扑结构。
  • 开关的驱动不同相,进行脉冲宽度调制以调节输出电压。
  • 良好的变压器磁芯利用率——在两个半周期中都传输功率。而且初级绕组的利用率优于推挽电路。
  • 全波拓扑结构,所以输出纹波频率是变压器频率的两倍。
  • 施加在FET上的电压与输入电压相等。

九. Full-Bridge 全桥

Full-Bridge全桥

  • 较高功率变换器最为常用的拓扑结构。
  • 开关以对角对的形式驱动,进行脉冲宽度调制以调节输出电压。
  • 良好的变压器磁芯利用率——在两个半周期中都传输功率。
  • 全波拓扑结构,所以输出纹波频率是变压器频率的两倍。
  • 施加在 FETs上的电压与输入电压相等。
  • 在给定的功率下,初级电流是半桥的一半。

十. SEPIC 单端初级电感变换器 (Single-Ended Primary Inductance Converter)

SEPIC单端初级电感变换器

  • 输出电压可以大于或小于输入电压。
  • 与升压电路一样,输入电流平滑,但是输出电流不连续。
  • 能量通过电容从输入传输至输出。
  • 需要两个电感。

十一. C’uk(Slobodan C’uk的专利)

Slobodan C’uk的专利

  • 输出反相。
  • 输出电压的幅度可以大于或小于输入。
  • 输入电流和输出电流都是平滑的。
  • 能量通过电容从输入传输至输出。
  • 需要两个电感。
  • 电感可以耦合获得零纹波电感电流。

Buck电路的工作细节

1. Buck-降压调整器-连续导电

Buck 连续导通

  • 电感电流连续。
  • Vout是其输入电压(V1)的均值。
  • 输出电压为输入电压乘以开关的负荷比(D)。
  • 接通时,电感电流从电池流出。
  • 开关断开时电流流过二极管。
  • 忽略开关和电感中的损耗,D与负载电流无关。
  • 降压调整器和其派生电路的特征是:输入电流不连续(斩波),输出电流连续(平滑)。

2. Buck-降压调整器-临界导电

Buck 临界导通
电感电流仍然是连续的,只是当开关再次接通时“达到”零。这被称为“临界导电”。输出电压仍等于输入电压乘以D。

3. Buck-降压调整器-非连续导电

Buck 断续导通

  • 在这种情况下,电感中的电流在每个周期的一段时间中为零。
  • 输出电压仍然(始终)是v1的平均值。
  • 输出电压不是输入电压乘以开关的负荷比(D)。
  • 当负载电流低于临界值时,D随着负载电流而变化(而Vout保持不变)。

Boost升压调整器

Boost升压调整器

  • 输出电压始终大于(或等于)输入电压。输入电流连续,输出电流不连续(与降压调整器相反)。
  • 输出电压与负荷比(D)之间的关系不如在降压调整器中那么简单。在连续导电的情况下:
    Boost升压调整器输出电压与输入电压公式
    在本例中,Vin = 5 , Vout = 15D = 2/3;Vout = 15 , D = 2/3。

变压器工作

1. 变压器工作(包括初级电感的作用)

变压器的初级电感作用
变压器看作理想变压器,它的初级(磁化)电感与初级并联。

2. 反激变压器

反激变压器初级电感
此处初级电感很低,用于确定峰值电流和存储的能量。当初级开关断开时,能量传送到次级。

3. Forward 正激变换变压器

正激变压器初级电感

  • 初级电感很高,因为无需存储能量。
  • 磁化电流(i1)流入 “磁化电感”,使磁芯在初级开关断开后去磁(电压反向)