ubuntu的Shotwell 图片处理,居然连图片大小调整的功能都没有
有点无语,平时用得最多的功能,居然没有。

只好用用中的photogimg(号称ubuntu下的photoshop)

只好用用中的photogimg(号称ubuntu下的photoshop)
禁止google浏览器http链接强制跳转为https ->网上的根本都是无效的方法
在Chrome浏览器地址栏中输入chrome://net-internals/,打开HSTS标签,在Add domain里的Domain输入要添加的域名地址(不带http的地址),点Add即可。 其中Include subdomains选项还可以添加子域名,保证所有子域名都使用HTTPS访问。
一般在网上的都是按照上面的方法操作,不过实际弄下来,发现根本无法组织chrome自动调转的https。
主要这个网站的主域名是https的,而他的二级域名是http的,用http的二级域名访问是,总是调转到https的页面(首页)。
最后无奈,只好用firefox来浏览这个http的页面。
郁闷ing。。 收起阅读 »
docker访问外部主机的ip
假如在linux里面安装了一个docker,然后linux做了一个http接口,端口为80.
那么假如我部署了一个nginx容器在docker里面,那么我的nginx要如何反向代理到我的linux主机的80端口呢?
那么我们测试一下,加入nginx容器的名字为ng110,那么我们通过命令docker exec -it ng110 /bin/bash
进入容器内部。
然后我们尝试curl获取主机的80端口。
首先,curl http://127.0.0.1/
这样子是不通的,因为127.0.0.1是docker内部的回环地址。并不是外部linux的ip。
那么我们先在linux外部,运行命令:ifconfig

这里有一个docker的的字样的ip地址。 那么这个地址就是在docker看来的外部ip地址。
然后我们继续回到docker容器里面,curl http://172.17.0.1/
结果我们发现有返回数据了。
所以在外面的ifconfig的docker容器地址,就是主机相对容器的ip地址。
所以我的nginx配置文件应该这么写:

proxy_pass http://172.17.0.1:80 收起阅读 »
那么假如我部署了一个nginx容器在docker里面,那么我的nginx要如何反向代理到我的linux主机的80端口呢?
那么我们测试一下,加入nginx容器的名字为ng110,那么我们通过命令docker exec -it ng110 /bin/bash
进入容器内部。
然后我们尝试curl获取主机的80端口。
首先,curl http://127.0.0.1/
这样子是不通的,因为127.0.0.1是docker内部的回环地址。并不是外部linux的ip。
那么我们先在linux外部,运行命令:ifconfig

这里有一个docker的的字样的ip地址。 那么这个地址就是在docker看来的外部ip地址。
然后我们继续回到docker容器里面,curl http://172.17.0.1/
结果我们发现有返回数据了。
所以在外面的ifconfig的docker容器地址,就是主机相对容器的ip地址。
所以我的nginx配置文件应该这么写:

proxy_pass http://172.17.0.1:80 收起阅读 »
集思录这个站点的技术人员挺菜的,连cdn都不用

用稍微大点的ddos攻击下,就容易瘫痪大了的。。。。。。。
心真大。
csdn自定义域名居然都要收费,而且......
而且还不便宜呀
正规买个域名都没这么贵的。
只是个csdn自定义的二级域名,人家其他新浪微博啥的都任你改名字。。。

正规买个域名都没这么贵的。
只是个csdn自定义的二级域名,人家其他新浪微博啥的都任你改名字。。。

有道云笔记7.0版本太卡了

只要打开有道云笔记,立马超越chrome成为内存大户。
笔记本cpu风扇瞬间转起来。
python对视频添加水印 调整帧率
Python调用ffmpeg开源视频处理库,来实现视频批量的处理:水印、背景音乐、剪辑、合并、帧率、速率、分辨率等操作
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。 它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。 这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。 许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。 项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
PS:需要电脑把ffmpeg的可执行文件放到环境变量中 收起阅读 »
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。 它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。 这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。 许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。 项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
# coding=utf-8
import os
import subprocess
import datetime
import json, pprint
import re, time
import threading
import random
import shutil
class FFmpeg:
def __init__(self, editvdo, addlogo=None, addmusic=None,
addvdohead=None, addvdotail=None):
self.editvdo = editvdo
self.addlogo = addlogo
self.addmusic = addmusic
self.addvdohead = addvdohead
self.addvdotail = addvdotail
self.vdo_time, self.vdo_width, self.vdo_height, self.attr_dict = self.get_attr()
self.editvdo_path = os.path.dirname(editvdo)
self.editvdo_name = os.path.basename(editvdo)
def get_attr(self):
"""
获取视频属性参数
:return:
"""
strcmd = r'ffprobe -print_format json -show_streams -i "{}"'.format(self.editvdo)
status, output = subprocess.getstatusoutput(strcmd)
agrs = eval(re.search('{.*}', output, re.S).group().replace("\n", "").replace(" ", ''))
streams = agrs.get('streams', )
agrs_dict = dict()
[agrs_dict.update(x) for x in streams]
vdo_time = agrs_dict.get('duration')
vdo_width = agrs_dict.get('width')
vdo_height = agrs_dict.get('height')
attr = (vdo_time, vdo_width, vdo_height, agrs_dict)
return attr
def edit_head(self, start_time, end_time, deposit=None):
"""
截取指定长度视频
:param second: 去除开始的多少秒
:param deposit: 另存为文件
:return: True/Flase
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_head'+self.editvdo_name
start = time.strftime('%H:%M:%S', time.gmtime(start_time))
end = time.strftime('%H:%M:%S', time.gmtime(end_time))
strcmd = 'ffmpeg -i "{}" -vcodec copy -acodec copy -ss {} -to {} "{}" -y'.format(
self.editvdo, start, end, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False
def edit_logo(self, deposit=None):
"""
添加水印
:param deposit:添加水印后另存为路径,为空则覆盖
:return: True/False
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_logo'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -vf "movie=\'{}\' [watermark];[in] ' \
r'[watermark] overlay=main_w-overlay_w-10:10 [out]" "{}"'.format(
self.editvdo, self.addlogo, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False
def edit_music(self, deposit=None):
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_music'+self.editvdo_name
strcmd = r'ffmpeg -y -i "{}" -i "{}" -filter_complex "[0:a] ' \
r'pan=stereo|c0=1*c0|c1=1*c1 [a1], [1:a] ' \
r'pan=stereo|c0=1*c0|c1=1*c1 [a2],[a1][a2]amix=duration=first,' \
r'pan=stereo|c0<c0+c1|c1<c2+c3,pan=mono|c0=c0+c1[a]" ' \
r'-map "[a]" -map 0:v -c:v libx264 -c:a aac ' \
r'-strict -2 -ac 2 "{}"'.format(self.editvdo, self.addmusic, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False
def edit_rate(self, rete=30, deposit=None):
"""
改变帧率
:param rete: 修改大小帧率
:param deposit: 修改后保存路径
:return:
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_music'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -r {} "{}"' % (self.editvdo, rete, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False
def edit_power(self, power='1280x720', deposit=None):
"""
修改分辨率
:param power: 分辨率
:param deposit: 修改后保存路径,为空则覆盖
:return:
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_power'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -s {} "{}"'.format(self.editvdo, power, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False
def rdit_marge(self, vdo_head, vdo_tail, deposit=None):
if None == deposit:
deposit = self.editvdo_path+'/'+'rdit_marge'+self.editvdo_name
with open(self.editvdo_path+'/'+'rdit_marge.txt', 'w', encoding='utf-8') as f:
f.write("file '{}' \nfile '{}' \nfile '{}'" .format(
vdo_head, self.editvdo, vdo_tail))
strcmd = r'ffmpeg -f concat -safe 0 -i "{}" -c copy "{}"'.format(
self.editvdo_path + '/' + 'rdit_marge.txt', deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False
# ffmpeg - i input.mkv - filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" - map"[v]" - map"[a]" output.mkv
test = FFmpeg(r"D:\vdio\4.mp4")
PS:需要电脑把ffmpeg的可执行文件放到环境变量中 收起阅读 »
wp super cache缓存文件在哪里?
wordpress_cn/wp-content/cache/supercache/xxxx.com (最后一个为你的域名)
里面的静态文件是html后缀结尾的。

如果同时开启了cdn加速,和wp super cache, 那么会有个问题。 你写的文章,发布出去后,无论怎么刷新都出不了的。
为什么?
因为你的首页也是做了wp super cache 变成了静态页面,以html结尾的。
而html文件默认是被cdn缓存起来的。
也就是用户访问你的网站的时候, 看到的是cdn里面的index.html, 而这个文件是有wp super cache生成的,而你的缓存规则如果是所有文件缓存7天的话,意味着你7天后才可以看到你新发的文章。
当然解决办法也很简单,在缓存规则里面,把html后缀设置为不缓存就可以了。 收起阅读 »
里面的静态文件是html后缀结尾的。

如果同时开启了cdn加速,和wp super cache, 那么会有个问题。 你写的文章,发布出去后,无论怎么刷新都出不了的。
为什么?
因为你的首页也是做了wp super cache 变成了静态页面,以html结尾的。
而html文件默认是被cdn缓存起来的。
也就是用户访问你的网站的时候, 看到的是cdn里面的index.html, 而这个文件是有wp super cache生成的,而你的缓存规则如果是所有文件缓存7天的话,意味着你7天后才可以看到你新发的文章。
当然解决办法也很简单,在缓存规则里面,把html后缀设置为不缓存就可以了。 收起阅读 »
typora 复制公众号文章时图片无法正确上传到图床
正常使用typora的时候,复制网页的内容,可以直接把远程的图片也顺带抓下来,同时上传到诸如七牛,腾讯cos的服务器。
可是对于微信公众号的文章,typora复制出来的图片都是一样的。主要原因是公众号的图片命名都叫640.png。
以至于上传的图片都是同一张。
那么如何解决这个问题呢?
我们可以绕道。
先用有道云笔记保存公众号的文章。
有道云保存文章时,可以正常把公众号的图片正常拉下来的。
然后右键,导出word。 对,有道云笔记这个功能。
然后打开保存的word文件,全选,复制里面的内容,包含图片。
然后ctrl+v 粘贴到typora。
然后图片就可以正常上传的腾讯云,七牛云的文件服务器啦。
收起阅读 »
可是对于微信公众号的文章,typora复制出来的图片都是一样的。主要原因是公众号的图片命名都叫640.png。
以至于上传的图片都是同一张。
那么如何解决这个问题呢?
我们可以绕道。
先用有道云笔记保存公众号的文章。
有道云保存文章时,可以正常把公众号的图片正常拉下来的。
然后右键,导出word。 对,有道云笔记这个功能。
然后打开保存的word文件,全选,复制里面的内容,包含图片。
然后ctrl+v 粘贴到typora。
然后图片就可以正常上传的腾讯云,七牛云的文件服务器啦。
收起阅读 »
腾讯云添加cdn加速后 域名加上www无法访问
比如 原来网址 为 30daydo.com, 没有使用cdn加速之前,在浏览器输入 30daydo.com 或者 www.30daydo.com 都可以正常访问。
而加入了cdn加速之后,30daydo.com 可以正常访问, 而www.30daydo.com 却访问异常。
解决方法:
www的域名访问 也要加入一个cdn加速记录。
如下图所示:

添加完记录后,需要在你的DNSPod 的域名解析里面,把这个www的解析CNAME也加进去。 这一步也不能少。

类型要填写CNAME,不能填A哦。
然后过大概十来分钟才能生效。并不是马上就生效的哦。
收起阅读 »
而加入了cdn加速之后,30daydo.com 可以正常访问, 而www.30daydo.com 却访问异常。
解决方法:
www的域名访问 也要加入一个cdn加速记录。
如下图所示:

添加完记录后,需要在你的DNSPod 的域名解析里面,把这个www的解析CNAME也加进去。 这一步也不能少。

类型要填写CNAME,不能填A哦。
然后过大概十来分钟才能生效。并不是马上就生效的哦。
收起阅读 »
网易的云笔记新版出linux版本了
果然是良心企业。

七牛云的图片图床配置到腾讯云域名解析
官网的链接:
https://developer.qiniu.com/fusion/kb/1322/how-to-configure-cname-domain-name
一般按照上面链接创建就可以了。
这里有个值要注意的,主机记录
描述如下:
主机记录 填写加速域名对应的主机前缀 该参数唯一,请勿自定义

这里你的主机记录是你的二级域名的部分,
比如你的二级域名是 img.30daydo.com
那么这里你的主机记录就是 img
收起阅读 »
https://developer.qiniu.com/fusion/kb/1322/how-to-configure-cname-domain-name
一般按照上面链接创建就可以了。
这里有个值要注意的,主机记录
描述如下:
主机记录 填写加速域名对应的主机前缀 该参数唯一,请勿自定义

这里你的主机记录是你的二级域名的部分,
比如你的二级域名是 img.30daydo.com
那么这里你的主机记录就是 img
收起阅读 »
docker nginx+php部署的wordpress,安装插件不需要ftp账号
使用docker搭建的每一个组件,php,nginx,mysql,弄得wordpress站点。
配置好之后,如果需要安装第三方的应用,每次需要FTP账号,用于远程下载这个插件文件到wordpress的plugin目录下。
不过为了这个插件功能再开个ftp服务,还暴露了端口,有点鸡肋。
于是按照网上的教程倒腾,不过网上的教程都没有使用docker操作,按照他们的操作是没能把问题解决的。
主要是用户名不一样。
1. 进入nginx的容器中,注意是nginx,而不是php
docker exec -it xxxx /bin/bash
2. 修改nginx的 wordpress的根目录所有者权限
注意这里的用户名是 www-data , 而不是www

不要乱信网上的人说,要改为777, 除非你想把你的服务器送给别人做肉鸡。
然后刷新一下页面,就可以直接安装,而跳过那个ftp密码, 收起阅读 »
配置好之后,如果需要安装第三方的应用,每次需要FTP账号,用于远程下载这个插件文件到wordpress的plugin目录下。
不过为了这个插件功能再开个ftp服务,还暴露了端口,有点鸡肋。
于是按照网上的教程倒腾,不过网上的教程都没有使用docker操作,按照他们的操作是没能把问题解决的。
主要是用户名不一样。
1. 进入nginx的容器中,注意是nginx,而不是php
docker exec -it xxxx /bin/bash
2. 修改nginx的 wordpress的根目录所有者权限
注意这里的用户名是 www-data , 而不是www

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
不要乱信网上的人说,要改为777, 除非你想把你的服务器送给别人做肉鸡。
然后刷新一下页面,就可以直接安装,而跳过那个ftp密码, 收起阅读 »
1核2G的服务器 docker跑wordpress真够吃力
性能太烂,预览个主题要等几分钟,甚至无响应。。。。
现在的wordpress加的内容可真多
现在的wordpress加的内容可真多
python3 安装demjson 报错 use_2to3 is invalid
ooking in indexes: https://pypi.douban.com/simple
Collecting demjson==2.2.4
Downloading https://pypi.doubanio.com/pack ... ar.gz (131 kB)
|████████████████████████████████| 131 kB 985 kB/s
ERROR: Command errored out with exit status 1:
command: /root/miniconda3/envs/py37/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-7ve4tu87
cwd: /tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/
Complete output (3 lines):
/root/miniconda3/envs/py37/lib/python3.7/site-packages/setuptools/dist.py:760: UserWarning: Usage of dash-separated 'index-url' will not be supported in future versions. Please use the underscore name 'index_url' instead
% (opt, underscore_opt)
error in demjson setup command: use_2to3 is invalid.
记录一下解决办法:
setuptools 降级:
pip install --upgrade setuptools==57.5.0
然后再pip install demjson 即可
如果担心setuptools 修改到系统的其他库,可以创建一个虚拟环境。
然后在虚拟环境里面对setuptools 降级,再安装demjson
来个养眼图:

一些个人博客wordpress的内容需要用户扫码关注才可以阅读

这种体验差的一批。
是什么迷之自信让这些作者对自己写的内容如此敝帚自珍?
看到这样的站点,1s都不想停留,直接关闭了。
centos/ubuntu linux 下 python matplotlib 绘图中文标题乱码 解决
出现下图的错误:
测试代码:
每次换机器都遇到这个问题,所以记录下来,以免日后又在折腾
首先找到一个ttf格式的中文字体,windows系统的可以在C盘的system里面找找。
我用的是微软雅黑。msyh.ttf , 需要的可以到公众号里面取。 后台回复: msyh.ttf 即可
或者simhei.ttf
更新缓存
注意,如果你的系统没有上述命令,需要使用yum install mkfontscale mkfontdir c-cache安装
然后接下来这一步,很重要。
清理缓存,不然不会生效!!!!
matplotlib:
同时把这个msyh.ttf的文件复制到matplotlib库下的文件夹:
~python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/
下面
然后运行程序,搞定~
公众号:可转债量化分析

后台回复 : msyh.ttf 或者 simhei.ttf 即可获取字体文件。 收起阅读 »
测试代码:
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import rcParams
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = ['simhei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False
plt.title(r'宋体 Times New Roman')
plt.axis('off')
plt.savefig('usestix.png')
每次换机器都遇到这个问题,所以记录下来,以免日后又在折腾
首先找到一个ttf格式的中文字体,windows系统的可以在C盘的system里面找找。
我用的是微软雅黑。msyh.ttf , 需要的可以到公众号里面取。 后台回复: msyh.ttf 即可
或者simhei.ttf
cd /usr/share/fonts/
sudo mkdir chinese
sudo cp simhei.ttf /usr/share/fonts/chinese/
sudo chmod -R 755 /usr/share/fonts/chinese
更新缓存
mkfontscale
mkfontdir
fc-cache
注意,如果你的系统没有上述命令,需要使用yum install mkfontscale mkfontdir c-cache安装
然后接下来这一步,很重要。
清理缓存,不然不会生效!!!!
rm -rf ~/.cache/matplotlib
matplotlib:
同时把这个msyh.ttf的文件复制到matplotlib库下的文件夹:
~python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/
下面
然后运行程序,搞定~
公众号:可转债量化分析

后台回复 : msyh.ttf 或者 simhei.ttf 即可获取字体文件。 收起阅读 »
银河证券如何开通科创板及开通条件是什么
中国银河证券股份有限公司(以下简称“公司”)是经国务院批准,在收购原中国银河证券有限责任公司的证券经纪业务、投行业务及相关资产的基础上,由中国银河金融控股有限责任公司作为主发起人,联合北京清源德丰创业投资有限公司、重庆水务集团股份有限公司、中国通用技术(集团)控股有限责任公司、中国建材股份有限公司4家国内投资者,于2007年1月26日共同发起设立的全国性综合类证券公司
首先,科创板开通条件是什么?
重点来了: 开通条件主要检查是否满足以下两个硬性要求
1,资金要求
开通之前的20个交易日以上,证券账户及资金账户内的资产日平均不少于50万人民币
2,交易时间要求
该账户证券交易24个月(两年)以上
其次,若满足以上两个要求,即可开通银河证券科创板,步骤如下:
- 登录银河证券账户
- 点击“我的”
- 点击“业务办理“
- 选择点击科创板权限设置"
- 点击”开通科创板“
恰逢目前银河有万一免五的活动,需要开户的朋友,请扫码联系,备注:银河开户

收起阅读 »