分类 未分类 下的文章

电脑端

先试用几个
window 10的照片带有视频编辑,不过功能太弱,居然不能删除原音。。。。
openshot 最大问题不支持竖屏视频。不推荐了。
快剪辑,居然是360的。。。相对来说最好用。

手机端

乐秀,已经买了,好用。

变声

audacity是免费开源软件了,可以做一段声音的增删改、放大、减弱,还有几段声音的合成。嗯,不过我最需要的是变声的功能。
打开软件和对应的声音,框选要变声的片段或按“Ctrl+A”全选,选择“效果-改变音高”,在对话框最下方调整百分比就可以啦!值得注意的是,百分比超过±50%的时候声音会损伤,勾选“使用高品质拉伸”即可。

回声

空旷区域的感觉:在效果里选择回声,延迟时间选择0.1秒就可以了。
但更直接的是选择“混响”选项。

录制电脑声音,并载入MP4文件

可以使用Win10的游戏录制功能“Win+G”录制。录制时将麦克风静音。录制完毕生成了.mp4文件。
这儿下载FFmpeg插件ffmpeg-win-2.2.2.exe,请进行默认位置安装。安装完毕后,在“编辑-偏好设置-库”中可以看FFmpeg是否装好。如果没有,可以手动指定位置。
这时就可以直接拖入.mp4文件啦!

官方回复

大约是说, 管理员先解绑邮箱, 这个邮箱账号就会进回收站. 然后60天内新建一个账号,再从邮箱回收站中选取旧邮箱账号, 原邮箱内容都保留.
这种方式的问题是, 新建的邮箱必须使用新的手机号码,如果其他邮箱账号有用,这儿就用不了.

您好,目前暂不支持成员自行解绑微信的,需要管理员在管理后台进行解绑成员邮箱手机以及微信,解绑后可以操作绑定信息激活,管理员操作解绑流程:
1、登录管理后台-通讯录,点击成员查看详情,点击更多操作-解绑邮箱。
解绑邮箱后,手机/微信与成员邮箱解除绑定关系,成员无法登陆。如已开通企业微信,成员对应企业微信账号可以正常使用。
2、解绑邮箱后,通讯录-组织架构该成员显示禁用状态,再次编辑该成员时输入名称和账号新建邮箱。也可选择待分配列表邮箱。
3、解绑邮箱后,邮箱进入管理工具-管理邮箱账号-邮箱回收站,点击分配时可以输入手机号或激活码方式激活邮箱使用
详情参考: https://work.weixin.qq.com/help?person_id=1&doc_id=509&helpType=exmail

另一种方式: 公用邮箱转业务邮箱

管理员在管理工具->管理邮箱账号->业务邮箱->从通讯录添加中来转. 免费版有3个业务邮箱.
业务邮箱无需手机号和微信绑定, 却也不能直接登录. 实际上是下挂在1~N个员工邮箱下的. 员工登录自己的邮箱, 再切换即可.

u b r f

u'string'

unicode字符串

r'string \r'

raw字符串,不识别转义,\\就还是\\,

b'string'

字节序字符串, 用于网络发送

f'string{name} {value}'

相当于js的

`string${name} ${value}`

首先,生殖期及其以前发生作用的有害的显性基因很难遗传,都会被死亡淘汰, 而隐性基因则得以幸存. 近亲则使得隐性基因配对的机会大大增加, 从而提高死亡率,然而同时又不能避免隐性基因的持续遗传.而远亲的情况下,隐性基因缺乏表达的机会,也可能随着遗传代数增加被正常基因替换掉.

JSX

官方入门
中文入门
官方文档中文翻译

JSX主要是引入了一种新的变量类型, 官方就叫jsx类型, 或者element. 这是长得和html差不多的html模板(嗯, Vue比jsx高明的地方就是, vue真的就是html模板,而jsx只是长得像而已)
下面说明两者差异,以及模板内嵌变量的用法

类型|JSX|HTML/vue|比较
--|--
尖括号tag|<></>| |一样的
属性名称|首字母小写的驼峰式|全小写羊肉串式|不一样
模板|< {}>{}</>|跟Vue比,Vue是双花括号{{}}|不一样

除了属性名称写法不同,还有些字母组成也不同
JSX|HTML
--|--
className|class

jsx类型换行的话,需要用小括号()括起来.
下面是个完整演示

const h1Class = 'greeting'
const element = (
  <h1 className={h1Class}>
    Hello, world!
  </h1>
);

const element2 = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

ReactDOM.render(
  element,
  document.getElementById('root')
);

还可以用构造器生成element

const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);

有三种构造器, React.createClass 、React.createElement、Component的区别

Android

  • adb无法启动: 5037端口占用
    可以增加一个系统变量 ANDROID_ADB_SERVER_PORT, 值是1~65535重新选个端口, 比如60000
  • 使用夜神模拟器?
    先要建立好项目并且编译好apk, 建议看官方文档中文翻译
    启动后,还是要在夜神中打开开发者模式和USB调试选项.
    然后使用adb connect 127.0.0.1:62001连接到夜神模拟器
    将项目下android\app\build\outputs\apk\debugapp-debug.apk手动安装到夜神模拟器,然后打开
    使用adb shell input keyevent 82打开app中的debug菜单
    进入Settings -> Debug server host for device, 设置为电脑的ip端口,如192.168.0.38:8081, 8081是默认端口

RN

RN中文网

下面这个例子演示了:

  • 所有class都是从Component中extends, 扩展以后就是一个新组件
  • 必须有个返回element的render()函数
  • 组件默认有个this.props对象, 所有在模板里的属性都是这个对象的key
  • 要让界面有变化,必须调用setState来修改this.state对象, 注意这个对象名称也是固定不能修改的,即使你可以一开始给他重新赋值.
    
    import React, { Component } from 'react';
    import { Text, View } from 'react-native';

class Blink extends Component {
// 声明state对象
state = { isShowingText: true };

componentDidMount() {
// 每1000毫秒对showText状态做一次取反操作
setInterval(() => {
this.setState({
isShowingText: !this.state.isShowingText
});
}, 1000);
}

render() {
// 根据当前showText的值决定是否显示text内容
if (!this.state.isShowingText) {
return null;
}

return (
  <Text>{this.props.text}</Text>
);

}
}

export default class BlinkApp extends Component {
render() {
return (

); } }

用了conda之后,似乎用户目录下指定pip源的pip.ini就失效了...这样pip安装就是个麻烦事儿.
增加了一个bat文件解决这个问题,名字叫pipd.cmd,内容如下:

pip %* -i https://pypi.doubanio.com/simple/

后面使用跟正常pip差不多:

pipd install pytest

翻我自己的blog,发现在三年前就搞了Jekyll,后面也有几次断续提到. 既然总是涉及到还是好好学学了.
Jekyll基于ruby/markdown/Liquid. 官网在这儿

安装

  • Ruby官网下载安装ruby
  • 安装后, 包管理工具gem应该可以运行. 先替换gem源:
    $ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
    $ gem sources -l
    https://gems.ruby-china.com
    # 确保只有 gems.ruby-china.com
  • 敲入下面命令做jekyll入门安装:
    gem install bundler jekyll
    jekyll new my-awesome-site
    cd my-awesome-site
    bundle exec jekyll serve
  • jekyll serve命令将打开127.0.0.1:4000端口.不过这个端口很多程序都喜欢占用. 除了将占用程序杀掉, 还可以更换端口,如换到8080:
    jekyll serve -P 8080

    上面使用Jekyll的new命令建立了整套blog, 使用了一个默认的theme. 然而jekyll最本质应用是转换Markdown+Liquid到Html, 所以是几乎可以应用到任何静态html的编写的. 当然其强项还是写blog. 后面教程就说这个.

    标准项目结构

    .
    ├── _config.yml
    ├── _data #放yml数据文件, 可以在其他html/md中通过liquid语法引用其中的数据{% site.data.ymlfilename  %}
    │   └── members.yml
    ├── _drafts #未发布的posts,不会显示。
    │   ├── begin-with-the-crazy-ideas.md
    │   └── on-simplicity-in-technology.md
    ├── _includes # 放html、md文件, 其中的文件可以在layouts、posts的html和md文件中通过liquid include语法引用并插入{% include 文件名.后缀 %}
    │   ├── footer.html
    │   └── header.html
    ├── _layouts # 放html文件, 可以在posts和其他md/html文件中通过liquid语法设置 layout: xxfilename
    │   ├── default.html
    │   └── post.html
    ├── _posts # 放md文件. 文件名格式需要是下面这种. 内容可使用liquid语法.
    │   ├── 2007-10-29-why-every-programmer-should-play-nethack.md
    │   └── 2009-04-26-barcamp-boston-4-roundup.md
    ├── _sass # 放scss文件. 其中的样式在html中通过link引用, 注意文件目录编译后是/assets/css/, 后缀是编译后的.css <link rel="stylesheet" href="/assets/css/filename.css">
    │   ├── _base.scss
    │   └── _layout.scss
    ├── _site
    ├── .jekyll-metadata
    └── index.html # can also be an 'index.md' with valid front matter

    关于theme

    theme解压缩后,要运行一次bundle install, 然后运行服务bundle exec jekyll serve就可以了。

关于自定义数据

最好放在_data/somefile.yml中,而不是放在_config.yml中。因为前者不需要重启服务,而后者需要重启服务才生效。
如在_data\info.yml中:

root_path: \pd\

在md文件中可以用{{site.data.info.root_path}}引用。
在当前页面的前导部分定义的变量如var1,可以用{{page.var1}}访问。最妙的是,{{page.var1}}可以写在_includes里面如public.md,这样, {{page.var1}}就像本地定义的局部变量, 插入的{% include public.md %}中可以使用这些局部变量,就像是传递了实参一样. 而_data/中的数据就像是全局变量/常量一样.
jekyll可以尽可能的共用内容, 而不是像普通写文档一样大段的复制粘贴, 并且实时刷新,写起来非常有愉悦感.

Liquid

Liquid官方文档
表达式 {{ }}
语句 {% %}

逻辑运算

大多数和js一样,比较符号:

== != < > <= >= true false

逻辑运算不太一样,分别是andor

字符串运算

不是通过函数,而是通过语句:
包含:

{% if product.tags contains "Hello" %}
  This product has been tagged with "Hello".
{% endif %}

赋值

注意字符串用双引号

{% assign my_variable = false %}

{% assign my_variable = "foo" %}

{% capture my_variable %}I am being captured.{% endcapture %}

条件转向

{% if customer.name == "kevin" %}
  Hey Kevin!
{% elsif customer.name == "anonymous" %}
  Hey Anonymous!
{% else %}
  Hi Stranger!
{% endif %}


{% unless product.title == "Awesome Shoes" %}
  These shoes are not awesome.
{% endunless %}

{% assign handle = "cake" %}
{% case handle %}
  {% when "cake" %}
     This is a cake
  {% when "cookie" %}
     This is a cookie
  {% else %}
     This is not a cake nor a cookie
{% endcase %}

循环

{% for i in (1..5) %}
  {% if i == 4 %}
    {% break %}
  {% else %}
    {{ i }}
  {% endif %}
{% endfor %}

更复杂一些的,包括可以使用continue、limit、看官网对iteration的说明

import的天坑,先读读
我在stackoverflow上问了个问题,最终发现必须要在test目录和项目根目录放__init__.py,src里面可以不放。

包和模块(Package/module)

简单理解,模块就是.py文件,包就是模块所在的目录。
再python3.3之前,目录中还需要有__init__.py才能称之为包。在这其中定义模块。在3.3之后提出了隐式命名空间包的概念,可以不定义__init__.py

用法

连引号和目录斜杠都省了

导入下级目录之一的包

me.py中:
from sonFolderName import sonPackageFileName
在me.py的目录中运行python me.py

导入上级

from .. import parentPackge
需要在上上级的grandpaFolder按模块-m运行:
python -m parentFolder.myFolder.me
如果不按这种方式运行,会报错ImportError: attempted relative import with no known parent package