LAMP-SERVER 与 flask结合

结合php与python二者的优点,哈哈。咱菜鸟就是有奇葩的想法

一 安装 lamp-server 与 phpmyamdin
1
2
3
$ sudo apt install lamp-server^ -y
$ sudo apt install phpmyadmin -y
$ sudo ln -s /usr/share/phpmyadmin /home/me/mywww
二 安装 flask, 并验证其
1
2
3
4
5
6
$ sudo apt install python3
$ python3 -m venv myflask3 #建立虚环境
$ cd myflask3
$ source bin/activate #进入虚环境
$ pip install flask
# 编写 app.py,并验证。此处不多说
三 安装 wsgi
1
2
3
$ sudo apt install libapache2-mod-wsgi 
# 安装后会自动在/etc/apache2/mods-available/目录下生成 wsgi.conf wsgi.loadg两个文件
# /usr/lib/apache2/moudules/在wsgi两个文件
四 试验 wsgi 是否可用
  1. 在/var/www/目录下编写test.wsgi文件,内容为
    1
    2
    3
    4
    5
    6
    def application(environ,start-response)
    status="200 OK"
    output="Hellow,apache2+wsgi"
    response_headers=[('content-type','text/plain'),('contnet-type',str(len(output)))]
    start_response(status,response_headers)
    return[output]
  2. 修改/etc/apache2/apache2.conf 在末尾加上
    WSGIScriptAlias /test /var/www/test.wsgi
  3. 重启动apache2
    1
    $ sudo service apache2 restart 
    浏览器输入 localhost/test,如果网页上能看到 Hello,apache2+wsgi,则说明成功
五 把第二步的app.py改名为app.wsgi,并编辑
1
2
3
4
5
6
7
8
9
10
11
#coding:utf8  必须加,否则网页无法显示中文

activate_this = "/home/me/myflask/bin/activate_this.py" #让wsgi知道启动脚本的环境
exfile(activate_this,dict(__file__=activate_this))

from flask import Flask

application=Flask(__name__) # wsgi的应用对象必须命名为application,所以不是app
@application.rout('/')
def index():
return( " <H2>你好,apache2+flask! </H2>" )
六,再次编辑/etc/apache2/apache2.conf,在末尾

WSGIScriptAlias app /home/me/myflask/app.wsgi
重启apache服务,浏览器输入 localhost/app ,发现失败了。
查看apache2的错误信息

1
2
$ tail -f /var/log/apache2/error.log # 发现是存取目录失败。于是再次 
$ sudo vim /etc/apache2/apache2.conf

在末尾添加
| <Directory /home/me/myflask>
| require all granted
| require host ip
| Allow from all
|
保存退出,重启apache, 然后浏览器,成功得到flash的信息。

手工安装 LAMP-SERVER

安装
1
2
3
4
5
6
7
8
$ sudo apt install apache2
$ sudo apt install mysql-server mysql-client
$ sudo apt install php
$ sudo apt install libapache2-mcd-php7.x
$ sudo apt install php7.x-mysql

$ sudo service apache2 restart
$ sudo service mysql restart
卸载
1
2
3
$ sudo apt --purge remove apache2*
$ sudo apt --purge remove php*
.......

LAMP安装后,phpmyadmin无法空密码登录

LAMP刚安装完后,mysql的用户root密码是空的,导致phpmyadmin无法登录,该如何解决呢?

一 安装 lamp-server 与 phpmyamdin
1
2
3
$ sudo apt install lamp-server^ -y
$ sudo apt install phpmyadmin -y
$ sudo ln -s /usr/share/phpmyadmin /home/me/mywww
二 修改 phpmyadmin配置
1
2
3
4
5
6
$ cd /usr/share/phpmyadmin/libraries
$ vim config.default.php
# 305行 $cfg['Servers'][$i]['nopassword']=false;
# 538行 $cfg['Servers'][$i]['AllowNopassword']=false;
# 把以上的false 改为 true
# 大约270行 $cfg['Servers][$i]['password']='';

保存后,则phpmyadmin允许空密码登录了。然而用root用户名依然不能登录!!!

四 查原因

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo mysql
mysql> use mysql
mysql> select user,plugin from user;
+--------------------+-------------------------+
| user | plugin |
+--------------------+-------------------------+
| debian-sys-maint | mysql_native_password |
| mysql.infoschema | mysql_native_password |
| mysql.session | mysql_native_password |
| mysql.sys | mysql_native_password |
| phpmyadmin | mysql_native_password |
| root | auth_socket |
+--------------------+-------------------------+
# plugin=auth_socket则表示不允许ph登录, 所认必须把 root的plugin属性改为mysql_native_password

但是可以用phpmyadmin的用户名来登录

修改 root的plugin属性

1
2
3
mysql> update user SET plugin='mysql_native_password' WHERE user='root';
mysql> flush privileges;
mysql> quit;

修改 root的密码

1
mysql> set password for 'root'@'localhost' = password('你设置的密码'

开关电源的QR模式

最近在冲电头展上,常听厂家上去说QR模式,什么是QR模式呢? 上网找了资料一查….

原来就是准谐振模式,那么究竟什么是准谐振开关电源呢?众所周知,开关电源的损耗主要来自于开关管的开关过程,由于开关管不是理想的开关器件,开关过程不是瞬间完成的,存在一定的过渡时间,传统的方波开关电源在这个过渡转换的时间里电压和电流均为零,存在重叠的区域,因而会产生开关的损耗,随着频率的升高,这种损耗会逐渐加大而限制开关电源频率的提高,同时由于在转换过程中电压和电流短时间内的急剧变化,也会产生很大的开关噪声,形成电磁干扰EMT。为克服方波开关电源的这一缺点,二十多年来人们一直致力于低功耗的软开关电源技术的探索,在电路中加入小电感或电容元件,利用谐振的原理,使开关两端的电压或电流的变化呈正弦波的变化规律,基本的设想是想办法使开关管能在电压过零ZVS (ZeroVoltage Switching)或电流过零ZCS (Zero Current Switching)的时候完成开关转换,以消除电压和电流的重叠,实现消除或减小功耗的目的。
谐振电源(Resonant SwitchingPower)的开关损耗能够降低,但电路相对复杂。在反激式开关电源中广泛应用的是准谐振的模式。所谓反激式是指原边主功率开关管与副边整流管的开关状态相反,开关管导通时,副边的整流二极管截止,反激式变换器只是在原边开关管导通时储存能量,当它截止时才向负载释放能量,故高频变压器在开关过程中,既起变压隔离作用,又是电感储能元件。反激式开关电源因电路简洁,容易实现多路输出而在彩电中得到广泛应用。不同于谐振开关电源谐振过程主动参与整个能量变化的过程(振荡>l}形为正弦波),准谐振模式是谐振只在整个电源能量变换的一个阶段—开关转换的时候完成(波形仍接近为方波),通过谐振使开关管在零电压(或最小电压)或者是零电流的时刻完成开关转换,同时又保持方波开关电源的高能量传输模式,因此称为准谐振(quasi-resanent )QR。

PFM对比PWM,区别和优势在哪里?

开关电源的控制技术主要有三种:

1.脉冲宽度调制(PWM);
2.脉冲频率调制(PFM);
3.脉冲宽度频率调制(PWM-PFM).

PWM:(pulse width modulation)脉冲宽度调制

脉宽调制 PWM 是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了 PWM 型,还有 PFM 型和 PWM、PFM 混合型。脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。

PFM:(Pulse frequency modulation) 脉冲频率调制

一种脉冲调制技术,调制信号的频率随输入信号幅值而变化,其占空比不变。由于调制信号通常为频率变化的方波信号,因此,PFM 也叫做方波 FM

PWM 是频率的宽和窄的变化,PFM 是频率的有和无的变化, PWM 是利用波脉冲宽度控制输出,PFM 是利用脉冲的有无控制输出 .

其中 PWM 是目前应用在开关电源中最为广泛的一种控制方式,它的特点是噪音低、满负载时效率高且能工作在连续导电模式,现在市场上有多款性能好、价格低的 PWM 集成芯片,如 UCl842/2842/3842、TDAl6846、TL494、SGl525/2525/3525 等;

PFM 具有静态功耗小的优点,但它没有限流的功能也不能工作于连续导电方式,具有 PFM 功能的集成芯片有 MAX641、TL497 等;

PWM-PFM 兼有 PWM 和 PFM 的优点。

DC/DC 变换器

DC/DC 变换器是通过与内部频率同步开关进行升压或降压,通过变化开关次数进行控制,从而得到与设定电压相同的输出电压。PFM 控制时,当输出电压达到在设定电压以上时即会停止开关,在下降到设定电压前,DC/DC 变换器不会进行任何操作。但如果输出电压下降到设定电压以下,DC/DC 变换器会再次开始开关,使输出电压达到设定电压。PWM 控制也是与频率同步进行开关,但是它会在达到升压设定值时,尽量减少流入线圈的电流,调整升压使其与设定电压保持一致。

与 PWM 相比,PFM 的输出电流小,但是因 PFM 控制的 DC/DC 变换器在达到设定电压以上时就会停止动作,所以消耗的电流就会变得很小。因此,消耗电流的减少可改进低负荷时的效率。PWM 在低负荷时虽然效率较逊色,但是因其纹波电压小,且开关频率固定,所以噪声滤波器设计比较容易,消除噪声也较简单。

若需同时具备 PFM 与 PWM 的优点的话,可选择 PWM/PFM 切换控制式 DC/DC 变换器。此功能是在重负荷时由 PWM 控制,低负荷时自动切换到 PFM 控制,即在一款产品中同时具备 PWM 的优点与 PFM 的优点。在备有待机模式的系统中,采用 PFM/PWM 切换控制的产品能得到较高效率。

就 DC-DC 变换器而言目前业界 PFM 只有 Single Phase,且以 Ripple Mode 的模式来实现,故需求输出端的 Ripple 较大。没有负向电感电流,故可提高轻载效率。由于是看输出 Ripple,所以 Transient 很好,在做 Dynamic 的时候没有 under-shoot。PWM 有 Single Phase &Multi-phase,多以 Voltage Mode or Current Mode 来实现,对输出 Ripple 没有要求,轻载时存在电感负向电流,故轻载效率较差,Compensation 较 Ripple 相比较慢。将 PWM 于 PFM 结合使用,当侦测到电感负电流的时候,变出现 Pulse Skipping,而不再受内部 Clock 控制。此时,controller will turnoff both h-mos & l-mos,Coss & L 会出现阻尼振荡。

每位工程师接触的领域不一样,可能有的领域是用 PFM 比较多,有的是用 PWM 比较多,但从整个电源行业来说,相信目前还是 PWM 用的多 . 上世纪 80 年代至今,PWM 开始了在电源变换领域的“王朝统治”地位,因为每种方式都有缺点和优点 . 关键还是看是否适合客户需要吧在论坛看到一位网友是这样写的,我觉得写的比较形象,他说如果把 PFM 与 PWM 的电源用车来比较的话,用 PFM 的=奔驰,用 PWM 的=大众。

PFM 相比较 PWM 主要优点在于效率
  1. 对于外围电路一样的 PFM 和 PWM 而言,其峰值效率 PFM 与 PWM 相当,但在峰值效率以前,PFM 的效率远远高于 PWM 的效率,这是 PFM 的主要优势 .
  2. PWM 由于误差放大器的影响,回路增益及响应速度受到限制,PFM 具有较快的响应速度
PFM 相比较 PWM 主要缺点在于滤波困难
  1. 滤波困难(谐波频谱太宽)。
  2. 峰值效率以前,PFM 的频率低于 PWM 的频率,会造成输出纹波比 PWM 偏大。
  3. PFM 控制相比 PWM 控制 IC 价格要贵。

PFM 之所以应用没有 PWM 多最主要的一个原因就是另外一个原因就是 PWM 的巨大优点了:控制方法实现起来容易,PFM 控制方法实现起来不太容易

有趣的话二

  1. 很多时候网上的正义不值一提,因为你以为的正义有可能不是正义

  2. 既然己经跌到谷底了,怎么走都是向上。

  3. 他那么普通,却那么自信

  4. 如果你仅仅只是专程夸我那么就大可不必了,我也觉得我自己很不错。

  5. 甜言与我三冬暖,恶语伤人六月寒

  6. 有趣的灵魂精神出轨,好看的皮囊现实劈腿。

  7. 反正我不尴尬,尴尬的就是别人。

  8. 我15岁以前的新事物都是史前文明,我15-30岁之间的新事物都是改变人类历史的最重要发明,我30岁以后的新事物都是异端邪说。

  9. 人们需要的也不是真相,人们南要的是自己相看的真相。

  10. 喂,120吗?这里有人社死了,快来一辆救护车啊。

    喂,114吗?请问社死了肿么办?啥,直接送火葬场,电话号,好……,我记一下。

    喂,119吗?社死是拿板子还是拿钳子救?可以动用云梯吗?

    喂,110吗?请问社死的人抓不抓,算不算刑事罪?

  11. 所谓营销,就是让顾客以为自己不是来买东西的,而是来占便宜的。

  12. 一个十八九岁没有女朋友的男孩子,往往心里藏的女人抵得上皇帝古十六宫的数目,心里的污秽有时过于公共厕所—–钱钟书

  13. 忍一时海阔天空,退一步越想越气。

有趣的话一

  1. 只有孤独的灵魂,才会越晚越清醒;
  2. 我们都曾不堪一击,我们终将刀枪不入;
  3. 爱已时过境迁,恨已沧海桑田;
  4. 小舟从此逝,江海寄余生;
  5. 酒杯太浅敬不了来日方长,巷子太短到不了白发苍苍;
  6. 想念有个别名叫做自捅千刀;
  7. 有一种悲伤,是你的名字刻在我的过往;
  8. 原来念念不忘的那些年,只是因为得不到;
  9. 离开你并不可怕,可怕的是我要收起对你的依赖;
  10. 愿你的故事细水长流,也祝我的孤独择日而止;
  11. 长不过执念,短不过善变;
  12. 我遇见过很多人,唯独没有再遇见你;
  13. 无论你有多坚强,总有人是你的致命伤;
  14. 任何关系,你想要陌生,我都不会多看你一眼;
  15. 白天笑给别人看,晚上哭给自己听;
  16. 我喜欢你,从天南到地北,从地老到天荒;
  17. 没有什么是不可替代的,包括你;
  18. 故事的开始我们无话不说,故事的结尾我们不发一言;
  19. 你不懂我的沉默,又怎知我的难过;
  20. 每当与锣鼓花轿错身而过,那往日的誓言就绞痛心扉。

Hexo添加菜单与分类

为 hexo添加菜单,并在其显示分类文章

在这个菜单增加多个文章

一 菜单项下的文章按分类(categories)来归档,比如增加termux菜单
  1. 编辑 themes/当前主题/_config.yml文件,在menu下添加
    1
    2
    menu:
    termux: categories/termux
  2. 修改themes/当前主题/languges/目录下zh-CN.yml,增加对应的中文名

二 菜单项下的文章按标签(tags)来归档

  1. 编辑 themes/当前主题/_config.yml文件,在menu下添加
    1
    2
    menu:
    termux: tags/termux
  2. 修改themes/当前主题/languges/目录下zh-CN.yml,增加对应的中文名

三 在菜单下增加 categories 或 tags菜单

1.

1
2
3
4
$ hexo new page categories
# 会在 myblog/source目录下生成categories目录,并在里生成index.html文件
$ hexo new page tags
# 会在 myblog/source目录下生成tags目录,并在里生成index.html文件
  1. 编辑 myblog/source/categories/index.html文档

title: 文章分类
date: 1999-01-01 09:01:01
type: “categories”
layout: “categories”

  1. 编辑 myblog/source/tags/index.html文档

title: 文章分类
date: 1999-01-01 09:01:01
type: “tags”
layout: “tags”

在这个菜单下只有一个文章

  1. $ hexo new page termux,会在 myblog/source目录下生成termux目录,并在里面生产一个index.md文件
  2. 编辑 themes/当前主题/_config.yml文件,在menu下添加
    1
    2
    menu:
    termux: termux
  3. 修改themes/当前主题/languges/目录下zh-CN.yml,增加对应的
  4. 修改 myblog/source/termux/index.md文件,这个文件就是此菜单要显示的内容。往往ablout就是这么来的。

jinja2学习

例子

1
2
3
4
5
6
7
<!doctype html>
<title>Hello Sample</title>
{% if name %}
<h1>Hello {{ name }}!</h1> # {{ 表达式,变量,运算,或python语句 }}
{% else %} # {% 控制语句如 if else endif %}
<h1>Hello World!</h1>
{% endif %}

例如 条件判断,与for循环

1
2
3
4
5
6
7
8
9
10
11
    {% if name and name == 'admin'  %}
<h1>This is admin console</h1>
{% elif name %}
<h1>Welcome {{ name }}!</h1>
{% else %}
<h1>Please login</h1>
{% endif %}
# fro 循环
{% for digit in digits %}
{{ digit }}
{% endfor %}

flask安装,初始化

  1. 安装python,并建立虚环境, 然后安装flask基本
    1
    2
    3
    4
    5
    6
    $ sudo apt install python3 vitrualenv
    $ virtualenv myflask3 #建立虚环境
    $ python -m venv myflask3 #另一个建立虚环境的命令
    $ cd myflask3
    $ source bin/activate
    $ pip install flask
  2. 在myflask下建立app.py文档
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #coding:utf8
    from flask import Flask
    from flask import request,render_template

    # app = Flask(__name__, template_folder='templates',static_folder='static')
    app = Flask( __name__ )

    @app.route('/')
    @app.route('/index')
    def index():
    return render_template('index.html')

    if __name__ == '__main__':
    app.debug = True
    app.run( host = '0.0.0.0',port = 8080 )
    # app.run(host='0.0.0.0', debug=True)