错误地认为他人的高情商,理所因当为自己服务

随想录网站管理员 Published the article • 0 comments • 42 views • 2019-08-01 10:08 • 来自相关话题

在我的认知里,高情商就是想他人所想,预先判断,做出响应,是对方获得意外惊喜,是无私奉献的“中央空调”。然而这是错误的认知。

凡个人都有自己的原则,所有的言行举止应该由心出发,不违背自己的意愿,我们不能强迫他人的付出大于自己的私欲,从而凸显他人的高情商,即强迫他人表现出高情商。所谓高情商其实很难判断,通常我们会认为利己的举动才算得上高情商,这种方式忽略的他人是否愿意。

在效果方面,高情商的表现有两种,利己和利他。利己属于有目的性的,有选择性的对象,表现虚伪,谋求回报,被高情商者可能当局者迷,有种被卖了还在数钱的感觉。利他者是无私的,处处为他人考虑,凡在场者皆可被顾及,如若没有,事后也会收到歉意和安慰,不求回报,甚至有时候会损失自己的利益,孤独的外向者。

高情商不能被判定,其表现是他人的主观意愿,我们不能强迫他人理所因当地顾及自己。应当有正确的认识,有些人本来就不具备这个能力,亦或是他意图隐藏对你表现出高情商。 查看全部
在我的认知里,高情商就是想他人所想,预先判断,做出响应,是对方获得意外惊喜,是无私奉献的“中央空调”。然而这是错误的认知。

凡个人都有自己的原则,所有的言行举止应该由心出发,不违背自己的意愿,我们不能强迫他人的付出大于自己的私欲,从而凸显他人的高情商,即强迫他人表现出高情商。所谓高情商其实很难判断,通常我们会认为利己的举动才算得上高情商,这种方式忽略的他人是否愿意。

在效果方面,高情商的表现有两种,利己和利他。利己属于有目的性的,有选择性的对象,表现虚伪,谋求回报,被高情商者可能当局者迷,有种被卖了还在数钱的感觉。利他者是无私的,处处为他人考虑,凡在场者皆可被顾及,如若没有,事后也会收到歉意和安慰,不求回报,甚至有时候会损失自己的利益,孤独的外向者。

高情商不能被判定,其表现是他人的主观意愿,我们不能强迫他人理所因当地顾及自己。应当有正确的认识,有些人本来就不具备这个能力,亦或是他意图隐藏对你表现出高情商。

PostgreSQL入门使用手册,pgsql登陆连接数据库

数据结构与算法网站管理员 Published the article • 0 comments • 122 views • 2019-07-31 18:27 • 来自相关话题

PostgreSQL Getting Started manual, pgsql login to connect to the database.


### pgsl命令解释,查看命令
```bash
psql --help
```
pgsql我们用的命令不多,常用的就那么几个参数,常用的,连接,输入格式和输出格式。
`PostgreSQL`远程或者本地ip,一般可以不用填写,默认就是`localhost`或者`127.0.0.1`。

```
General options:
-c, --command=COMMAND run only single command (SQL or internal) and exit
-d, --dbname=DBNAME database name to connect to (default: "dev")

Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "local socket")
-p, --port=PORT database server port (default: "5432")
-U, --username=USERNAME database user name (default: "dev")
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
```

### 连接数据库

```bash
psql -h 127.0.0.1 -Udev -p 3433 -l

# output
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
------------+------------+----------+-----------+-------+---------------------------
logs | 123 | UTF8 | C | C |
postgres | 123 | UTF8 | C | C |

```


### pgsql命令行的命令

```pgsql
party_logs=> help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
party_logs=> \?
```

`help`可以查看所有的命令,`\?`可以查看`pgsql commands`,`\h`可以查看`SQL commands`。

#### \h

```
party_logs=> \h
Available help:
```
![eNe00K.png](https://s2.ax1x.com/2019/07/31/eNe00K.png)

```pgsql
party_logs=> \dp
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------------+----------+---------------------------+--------------------------
public | logs | table | |
public | logs_log_id_seq | sequence | |
(2 rows)
``` 查看全部
PostgreSQL Getting Started manual, pgsql login to connect to the database.


### pgsl命令解释,查看命令
```bash
psql --help
```
pgsql我们用的命令不多,常用的就那么几个参数,常用的,连接,输入格式和输出格式。
`PostgreSQL`远程或者本地ip,一般可以不用填写,默认就是`localhost`或者`127.0.0.1`。

```
General options:
-c, --command=COMMAND run only single command (SQL or internal) and exit
-d, --dbname=DBNAME database name to connect to (default: "dev")

Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "local socket")
-p, --port=PORT database server port (default: "5432")
-U, --username=USERNAME database user name (default: "dev")
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
```

### 连接数据库

```bash
psql -h 127.0.0.1 -Udev -p 3433 -l

# output
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
------------+------------+----------+-----------+-------+---------------------------
logs | 123 | UTF8 | C | C |
postgres | 123 | UTF8 | C | C |

```


### pgsql命令行的命令

```pgsql
party_logs=> help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
party_logs=> \?
```

`help`可以查看所有的命令,`\?`可以查看`pgsql commands`,`\h`可以查看`SQL commands`。

#### \h

```
party_logs=> \h
Available help:
```
![eNe00K.png](https://s2.ax1x.com/2019/07/31/eNe00K.png)

```pgsql
party_logs=> \dp
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------------+----------+---------------------------+--------------------------
public | logs | table | |
public | logs_log_id_seq | sequence | |
(2 rows)
```

【2019-07-28】炎炎夏日的夜晚,我燥热的思绪

随想录网站管理员 Published the article • 0 comments • 39 views • 2019-07-28 20:48 • 来自相关话题

真正的夏天来了,随之而来的是自己消失的斗志和懒惰的病发。自己出现了毛病,自己应该是最清楚的,但是能医不能自救,不过是自己的托辞。自己除了编程貌似也没有其它兴趣爱好。自己编程水平自己也知道点,有点广度,深度不够。遇到瓶颈,束手无策,迟迟无法得到提升。前些日子的自律也停滞了。感叹,为什么人会间歇性的懒惰呢?

对于自己来说,年纪也不小了,应该成熟点了,三思而后行,所做之事也意味着责任。成年人的时间一样宝贵,该充电就充电,想玩就好好玩。正如鲁迅先生所说,学要学个踏实,玩要玩个痛快。不然,竹篮打水一场空,白搭了时间,也弄得自己身心疲惫。

这个年纪的我们,心智成熟,想做什么?什么该做,什么不该做,什么东西该舍弃,什么东西应该坚持到底,持之以恒,我们都应该了然于胸。

时常会给自己打鸡血,但是很少有详细而周全的计划,亦或是半途而废。这点真的不像以前的我。我知道我想了解这个世界的全部,但是我也应该明白自己精力有限,该抓重点,该有自己的特长。拿得出手,有点影响力,有自己的粉丝,有自己的仰慕者。

有点才华,但是经不起推敲。不善言谈。不能很好的把自己知道的描述给别人听。这就是自己的弱点,既然知道,为什么不抢救一下呢?

人一辈子最应该追求的是知识和健康。强壮的身体可以让我们走的更远,知识可以让我们更深入的了解这个自然宇宙。我所仰望的更远处,其实我根本无法触及,我不曾积跬步,无以至千里。不曾想过让自己颓废下去,正如此刻自己的座右铭一样,岂甘命运,有如蒿草。

那么我可能又要开始喊自己的口号了,做最好的自己,问心无愧。 查看全部
真正的夏天来了,随之而来的是自己消失的斗志和懒惰的病发。自己出现了毛病,自己应该是最清楚的,但是能医不能自救,不过是自己的托辞。自己除了编程貌似也没有其它兴趣爱好。自己编程水平自己也知道点,有点广度,深度不够。遇到瓶颈,束手无策,迟迟无法得到提升。前些日子的自律也停滞了。感叹,为什么人会间歇性的懒惰呢?

对于自己来说,年纪也不小了,应该成熟点了,三思而后行,所做之事也意味着责任。成年人的时间一样宝贵,该充电就充电,想玩就好好玩。正如鲁迅先生所说,学要学个踏实,玩要玩个痛快。不然,竹篮打水一场空,白搭了时间,也弄得自己身心疲惫。

这个年纪的我们,心智成熟,想做什么?什么该做,什么不该做,什么东西该舍弃,什么东西应该坚持到底,持之以恒,我们都应该了然于胸。

时常会给自己打鸡血,但是很少有详细而周全的计划,亦或是半途而废。这点真的不像以前的我。我知道我想了解这个世界的全部,但是我也应该明白自己精力有限,该抓重点,该有自己的特长。拿得出手,有点影响力,有自己的粉丝,有自己的仰慕者。

有点才华,但是经不起推敲。不善言谈。不能很好的把自己知道的描述给别人听。这就是自己的弱点,既然知道,为什么不抢救一下呢?

人一辈子最应该追求的是知识和健康。强壮的身体可以让我们走的更远,知识可以让我们更深入的了解这个自然宇宙。我所仰望的更远处,其实我根本无法触及,我不曾积跬步,无以至千里。不曾想过让自己颓废下去,正如此刻自己的座右铭一样,岂甘命运,有如蒿草。

那么我可能又要开始喊自己的口号了,做最好的自己,问心无愧。

Rust 引用变量的生命周期,编译器的借用检查器确保你的代码安全可靠

后端开发网站管理员 Published the article • 0 comments • 103 views • 2019-07-28 16:47 • 来自相关话题

## Rust lifetime

### Borrow Checker 借用检查器

#### 代码块

Rust编译器会在编译的时候比较作用域变量的生命周期。
Rust官方文档中有如下示例:
```rust
{
let r; // ---------+-- 'a
// |
{ // |
let x = 5; // -+-- 'b |
r = &x; // | |
} // -+ |
// |
println!("r: {}", r); // |
}
```

从中我们可以看出,里面括号里的代码块,变量x的作用域局限在里面的括号里,所以它的生命周期明显只有在这个括号里,对比变量r,r的生命周期要比x长,这个时候又将x的引用赋值给r,编译器会报错,因为后面的`println!("r: {}", r);`打印的r,其实是x。

### 在函数中分配生命周期

函数传参数,参数为引用,为什么要传引用呢?不想让函数拥有参数的所有权。

```rust
&i32 // 这是一个引用
&'a i32 // 这是一个有着详细生命周期的引用
&'a mut i32 // 这是一个有着详细生命周期的可变引用

fn longest &'a str {
x
}

// 错误案例
fn longest 查看全部

## Rust lifetime

### Borrow Checker 借用检查器

#### 代码块

Rust编译器会在编译的时候比较作用域变量的生命周期。
Rust官方文档中有如下示例:
```rust
{
let r; // ---------+-- 'a
// |
{ // |
let x = 5; // -+-- 'b |
r = &x; // | |
} // -+ |
// |
println!("r: {}", r); // |
}
```

从中我们可以看出,里面括号里的代码块,变量x的作用域局限在里面的括号里,所以它的生命周期明显只有在这个括号里,对比变量r,r的生命周期要比x长,这个时候又将x的引用赋值给r,编译器会报错,因为后面的`println!("r: {}", r);`打印的r,其实是x。

### 在函数中分配生命周期

函数传参数,参数为引用,为什么要传引用呢?不想让函数拥有参数的所有权。

```rust
&i32 // 这是一个引用
&'a i32 // 这是一个有着详细生命周期的引用
&'a mut i32 // 这是一个有着详细生命周期的可变引用

fn longest<'a>(x: &'a str, y: &str) -> &'a str {
x
}

// 错误案例
fn longest<'a>(x: &str, y: &str) -> &'a str {
let result = String::from("really long string");
result.as_str()
}
```
为什么的个函数`longest`会报错呢?原因是result的生命周期要比`'a`短。

### 在结构体定义里标记生命周期

### 哪些规则不需要为引用声明生命周期(lifetime elision rules)生命周期省略

每一个引用都有一个生命周期

在函数或者方法参数中,生命周期被称作输入生命周期,相反,返回值的被称作输出生命周期。

#### 生命周期省略规则

第一条适用于输入生命周期,后面两条则适用于输出生命周期。适用于`fn`和`impl`块。
只有满足如下三点,就可以不用声明生命周期。

1. 每一个引用参数都有自己的一个生命周期。
2. 如果只有一个输入生命周期参数,那么它被赋予所有输出生命周期参数。
3. 多个输入生命周期参数,`&self`或`&mult self`,self的生命周期被赋给所有输出生命周期参数。




【Rust Lang进击之路】如何入门Rust,从配置环境和阅读官方文档开始

后端开发网站管理员 Published the article • 0 comments • 148 views • 2019-07-27 00:28 • 来自相关话题

### 如何入门rust-lang,从官方文档阅读开始

为什么要学习Rust?Rust学习曲线高,入门也不简单,看看Rust的自荐。

> 一门赋予每个人
> 构建可靠且高效软件能力的语言。

1. 高性能
- Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

2. 可靠性
- Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。

3. 生产力
- Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。


#### 官方文档

- [中文文档](https://www.rust-lang.org/zh-CN/)
- [英文文档](https://www.rust-lang.org/learn)

#### 安装rust-lang IDE

Jetbrains是一家开发IDE的公司,旗下有很多优秀的IDE,phpstorm、goland、webstore、pyCharm等,今天我们要用到的是Intellij,然后我们可以在他的插件管理器中下载rust的插件,安装完毕之后,我们可以重启IDE,创建rust应用程序。

如果需要研究阅读插件的源代码,跟进插件的特性,可以[在github上](https://intellij-rust.github.io/)讨论。

#### 关于rust-lang的环境配置

官方提供了很优秀的解决方案,[Install Rust](https://www.rust-lang.org/tools/install),不知道从什么时候开始,学习东西喜欢从它的官方文档先开始研究。
> It looks like you’re running macOS, Linux, or another Unix-like OS. To download Rustup and install Rust, run the following in your terminal, then follow the on-screen instructions.
官方提供的方法其实很简单,是一个自动化安装的shell脚本,curl下载shell脚本,一键部署安装环境,十分的简单方便。

```bash
curl https://sh.rustup.rs -sSf | sh
```

#### 阅读文档,从`Hello world`程序开始我们的rust

开始我们的rust`hello world`程序之旅,不得不提一下cargo,rust的包管理工具(Rust's package manager)。

##### 首先我们需要通过`cargo`创建一个rust的项目

在命令行执行`cargo new hello-world`,然后cargo管理器就为我们创建了一个hello-world的目录,这个目录如下:
```
.
├── Cargo.lock
├── Cargo.toml
└── src
└── main.rs
```

其实`cargo new`,会直接给我们自动生成一个hello world的程序,代码如下
```rust
fn main() {
println!("Hello, world!");
}
```
然后我们只需要执行如下脚本,cargo会帮我们自动生成可执行文件,并且执行输出结果。
```bash

cargo run
# Compiling hello-demo v0.1.0 (/Users/demo/project/hello-demo)
# Finished dev [unoptimized + debuginfo] target(s) in 0.78s
# Running `target/debug/hello-demo`
# Hello world
```

##### 使用Rustc编译.rs文件

```bash
Rustc src/main.rs
./main

# Hello world
```

### Rust HelloWorld程序分析

Rust可执行程序一定需要一个入口文件,和C/C++一样,需要一个`manin`函数,关键词`fn`表示函数,宏`println!`可以帮助我们打印输出。
为什么说长得像函数的`println!`是宏,如果你观察仔细的话,你会发现宏是在函数后面增加了一个感叹号`!`,这个标识标识它就是宏。
关于宏的介绍,后面我会弄个专栏来介绍它。宏不管是在C还是Rust中,都十分的强大。相信你也会喜欢这门语言的。 查看全部
### 如何入门rust-lang,从官方文档阅读开始

为什么要学习Rust?Rust学习曲线高,入门也不简单,看看Rust的自荐。

> 一门赋予每个人
> 构建可靠且高效软件能力的语言。

1. 高性能
- Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

2. 可靠性
- Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。

3. 生产力
- Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。


#### 官方文档

- [中文文档](https://www.rust-lang.org/zh-CN/)
- [英文文档](https://www.rust-lang.org/learn)

#### 安装rust-lang IDE

Jetbrains是一家开发IDE的公司,旗下有很多优秀的IDE,phpstorm、goland、webstore、pyCharm等,今天我们要用到的是Intellij,然后我们可以在他的插件管理器中下载rust的插件,安装完毕之后,我们可以重启IDE,创建rust应用程序。

如果需要研究阅读插件的源代码,跟进插件的特性,可以[在github上](https://intellij-rust.github.io/)讨论。

#### 关于rust-lang的环境配置

官方提供了很优秀的解决方案,[Install Rust](https://www.rust-lang.org/tools/install),不知道从什么时候开始,学习东西喜欢从它的官方文档先开始研究。
> It looks like you’re running macOS, Linux, or another Unix-like OS. To download Rustup and install Rust, run the following in your terminal, then follow the on-screen instructions.
官方提供的方法其实很简单,是一个自动化安装的shell脚本,curl下载shell脚本,一键部署安装环境,十分的简单方便。

```bash
curl https://sh.rustup.rs -sSf | sh
```

#### 阅读文档,从`Hello world`程序开始我们的rust

开始我们的rust`hello world`程序之旅,不得不提一下cargo,rust的包管理工具(Rust's package manager)。

##### 首先我们需要通过`cargo`创建一个rust的项目

在命令行执行`cargo new hello-world`,然后cargo管理器就为我们创建了一个hello-world的目录,这个目录如下:
```
.
├── Cargo.lock
├── Cargo.toml
└── src
└── main.rs
```

其实`cargo new`,会直接给我们自动生成一个hello world的程序,代码如下
```rust
fn main() {
println!("Hello, world!");
}
```
然后我们只需要执行如下脚本,cargo会帮我们自动生成可执行文件,并且执行输出结果。
```bash

cargo run
# Compiling hello-demo v0.1.0 (/Users/demo/project/hello-demo)
# Finished dev [unoptimized + debuginfo] target(s) in 0.78s
# Running `target/debug/hello-demo`
# Hello world
```

##### 使用Rustc编译.rs文件

```bash
Rustc src/main.rs
./main

# Hello world
```

### Rust HelloWorld程序分析

Rust可执行程序一定需要一个入口文件,和C/C++一样,需要一个`manin`函数,关键词`fn`表示函数,宏`println!`可以帮助我们打印输出。
为什么说长得像函数的`println!`是宏,如果你观察仔细的话,你会发现宏是在函数后面增加了一个感叹号`!`,这个标识标识它就是宏。
关于宏的介绍,后面我会弄个专栏来介绍它。宏不管是在C还是Rust中,都十分的强大。相信你也会喜欢这门语言的。

Daily Tips: the function array_reduce, which can calculate the sum of the multidimensional array.

PHP网站管理员 Published the article • 0 comments • 41 views • 2019-07-26 00:35 • 来自相关话题

Sometimes, if you need to calculate the sum of an array, you may use the function `array_sum` in PHP.

> But this is the multidimensional array, like following:

### For example
```php 查看全部
Sometimes, if you need to calculate the sum of an array, you may use the function `array_sum` in PHP.

> But this is the multidimensional array, like following:

### For example
```php
$array = [
[
'quantity' => 2,
],
[
'quantity' => 4,
],
[
'quantity' => 5,
],
];

var_dump(array_sum($array)); // the result is 0, incorrect
```

This is incorrect, when you use the function `array_sum` to calculate the array, you will get the result `0`.

For this moment, the function `array_reduce` will help us to calculate the multidimensional array.

### The correct usage
```php
$sum = array_reduce($array, function($init, $datum) {
return $init + $datum['quantity'];
});
var_dump($sum); // int(11)
```

the function `array_reduce` has a callback function, which function has two parameters.

>The first parameter to the callback is an accumulator where the result-in-progress is effectively assembled. If you supply an $initial value the accumulator starts out with that value, otherwise, it starts out null.
The second parameter is where each value of the array is passed during each step of the reduction.
The return value of the callback becomes the new value of the accumulator. When the array is exhausted, array_reduce() returns accumulated value.

### Reference

1. [array_reduce](https://www.php.net/manual/zh/ ... ce.php)

How to merge multiple git commits into a new branch?

Linux网站管理员 Published the article • 0 comments • 165 views • 2019-07-24 15:40 • 来自相关话题

### We will use the following git command:

#### git log

#### git cherry-pick

> git-log - Show commit logs

```bash
git log [] [] [[--] …​]
```

1. `--author` match the author
2. `--after` after this time's commits
3. `--before` before this time's commits
4. `--no-merges` filter the merge commits

The official's introductions

> git-cherry-pick - Apply the changes introduced by some existing commits

```bash
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
[-S[]] …​
git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort
```

### Step 1

Get all git commits, which you want to merge to a new branch. Then, we will use the git command `git cherry-pick` to do combine.

```bash
git log --author="phantom\|ydl" \
--after="2019-07-23" \
--before="2019-07-25" --no-merges \
| grep -oP "commit\s.+" | sed 's/commit /./g' | tr "\n" "." | sed 's/^.//g' | sed 's/.$//g'
```

Using this shell command, We will the commits, split by `..`, Like following:
`f560394908449057afa7e200a85052c26a58b181..aab71d9ac104cd1513fe5ac55de28211ec807c8e..be22dbb41a7ea4bc8aac147023645638f0777f3d`.

### Step2

Using git command `git cherry-pick`, pick the commits string.

```bash
git cherry-pick $(git log --author="phantom\|ydl" \
--after="2019-07-23" \
--before="2019-07-25" --no-merges \
| grep -oP "commit\s.+" | sed 's/commit /./g' | tr "\n" "." | sed 's/^.//g' | sed 's/.$//g')
```

Maybe we need to deal with the conflict between commits, and add a new commit, push to the new branch.

### Reference

1. [Git Offical Document git cherry-pick](https://git-scm.com/docs/git-cherry-pick)
2. [Git Offical Document git log](https://git-scm.com/docs/git-log) 查看全部

### We will use the following git command:

#### git log

#### git cherry-pick

> git-log - Show commit logs

```bash
git log [] [] [[--] …​]
```

1. `--author` match the author
2. `--after` after this time's commits
3. `--before` before this time's commits
4. `--no-merges` filter the merge commits

The official's introductions

> git-cherry-pick - Apply the changes introduced by some existing commits

```bash
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
[-S[]] …​
git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort
```

### Step 1

Get all git commits, which you want to merge to a new branch. Then, we will use the git command `git cherry-pick` to do combine.

```bash
git log --author="phantom\|ydl" \
--after="2019-07-23" \
--before="2019-07-25" --no-merges \
| grep -oP "commit\s.+" | sed 's/commit /./g' | tr "\n" "." | sed 's/^.//g' | sed 's/.$//g'
```

Using this shell command, We will the commits, split by `..`, Like following:
`f560394908449057afa7e200a85052c26a58b181..aab71d9ac104cd1513fe5ac55de28211ec807c8e..be22dbb41a7ea4bc8aac147023645638f0777f3d`.

### Step2

Using git command `git cherry-pick`, pick the commits string.

```bash
git cherry-pick $(git log --author="phantom\|ydl" \
--after="2019-07-23" \
--before="2019-07-25" --no-merges \
| grep -oP "commit\s.+" | sed 's/commit /./g' | tr "\n" "." | sed 's/^.//g' | sed 's/.$//g')
```

Maybe we need to deal with the conflict between commits, and add a new commit, push to the new branch.

### Reference

1. [Git Offical Document git cherry-pick](https://git-scm.com/docs/git-cherry-pick)
2. [Git Offical Document git log](https://git-scm.com/docs/git-log)

MySQL5.7 supports a native JSON data type, and how to use it?

数据结构与算法网站管理员 Published the article • 0 comments • 135 views • 2019-07-11 15:52 • 来自相关话题

mysql5.7已经支持JSON的数据结构,意味着我们可以更加方便的对JSON结构的数据进行增删改成

### 什么是JSON?

> JSON: JavaScript Object Notation(JavaScript 对象表示法)
> JSON 是存储和交换文本信息的语法。类似 XML。
> JSON 比 XML 更小、更快,更易解析。
> JSON 具有自我描述性,更易理解

### 建立表,添加JSON的数据结构字段col

建表qtest,然后添加col的字段,其数据类型为JSON,插入一条JSON字符串,然后发现添加不是json结构的数据
mysql会给我们报如下错误```ERROR 3140 (22032) at line 2: Invalid JSON text:```,表明我们插入的是非法JSON。

```json
{"mascot": "Our mascot is a dolphin named \"Sakila\"."}
```

```mysql
mysql> CREATE TABLE qtest (col JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"mascot": "Our mascot is a dolphin named \"Sakila\"."}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
```

### 如何查询JSON的某个字段

1. 字段指向一个字符串,由```$.name```组成,美元符号+字段名称

```mysql
mysql> SELECT col->"$.mascot" FROM qtest;
+---------------------------------------------+
| col->"$.mascot" |
+---------------------------------------------+
| "Our mascot is a dolphin named \"Sakila\"." |
+---------------------------------------------+
1 row in set (0.00 sec)
```

2. 查询数组```$[0]```,美元符号+中括号及数组索引

```mysql
mysql> select *from sourcedev;
+----+------------------------------+-----------+
| id | category | tags |
+----+------------------------------+-----------+
| 1 | {"id": 1, "name": "sourcedev.cc"} | [1, 2, 3] |
+----+------------------------------+-----------+
1 row in set (0.00 sec)

mysql> select id, category->'$.id', tags->'$[0]' from sourcedev;
+----+------------------+--------------+
| id | category->'$.id' | tags->'$[0]' |
+----+------------------+--------------+
| 1 | 1 | 1 |
+----+------------------+--------------+
1 row in set (0.00 sec)
```

### mysql5.7 JSON相关函数

1. JSON_TYPE JSON类型,ARRAY、STRING
所有的Json type类型如下
```
BLOB
BIT
OPAQUE
DATETIME
TIME
DATE
BOOLEAN
ARRAY
OBJECT
STRING
INTEGER, DOUBLE
NULL
```

2. JSON_ARRAY ```SELECT JSON_ARRAY('a', 1, NOW());```

```mysql
mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW()) |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
```

3. JSON_OBJECT
```mysql
mysql> SELECT JSON_OBJECT('key1', 1, 'key2', 'abc');
+---------------------------------------+
| JSON_OBJECT('key1', 1, 'key2', 'abc') |
+---------------------------------------+
| {"key1": 1, "key2": "abc"} |
+---------------------------------------+
```
4. 等等


### 引用

1. [百度百科 #https://baike.baidu.com/item/JSON/2462549](https://baike.baidu.com/item/JSON/2462549)
2. [mysql5.7官方文档 #https://dev.mysql.com/doc/refman/8.0/en/json.html](https://dev.mysql.com/doc/refman/8.0/en/json.html) 查看全部

mysql5.7已经支持JSON的数据结构,意味着我们可以更加方便的对JSON结构的数据进行增删改成

### 什么是JSON?

> JSON: JavaScript Object Notation(JavaScript 对象表示法)
> JSON 是存储和交换文本信息的语法。类似 XML。
> JSON 比 XML 更小、更快,更易解析。
> JSON 具有自我描述性,更易理解

### 建立表,添加JSON的数据结构字段col

建表qtest,然后添加col的字段,其数据类型为JSON,插入一条JSON字符串,然后发现添加不是json结构的数据
mysql会给我们报如下错误```ERROR 3140 (22032) at line 2: Invalid JSON text:```,表明我们插入的是非法JSON。

```json
{"mascot": "Our mascot is a dolphin named \"Sakila\"."}
```

```mysql
mysql> CREATE TABLE qtest (col JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"mascot": "Our mascot is a dolphin named \"Sakila\"."}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
```

### 如何查询JSON的某个字段

1. 字段指向一个字符串,由```$.name```组成,美元符号+字段名称

```mysql
mysql> SELECT col->"$.mascot" FROM qtest;
+---------------------------------------------+
| col->"$.mascot" |
+---------------------------------------------+
| "Our mascot is a dolphin named \"Sakila\"." |
+---------------------------------------------+
1 row in set (0.00 sec)
```

2. 查询数组```$[0]```,美元符号+中括号及数组索引

```mysql
mysql> select *from sourcedev;
+----+------------------------------+-----------+
| id | category | tags |
+----+------------------------------+-----------+
| 1 | {"id": 1, "name": "sourcedev.cc"} | [1, 2, 3] |
+----+------------------------------+-----------+
1 row in set (0.00 sec)

mysql> select id, category->'$.id', tags->'$[0]' from sourcedev;
+----+------------------+--------------+
| id | category->'$.id' | tags->'$[0]' |
+----+------------------+--------------+
| 1 | 1 | 1 |
+----+------------------+--------------+
1 row in set (0.00 sec)
```

### mysql5.7 JSON相关函数

1. JSON_TYPE JSON类型,ARRAY、STRING
所有的Json type类型如下
```
BLOB
BIT
OPAQUE
DATETIME
TIME
DATE
BOOLEAN
ARRAY
OBJECT
STRING
INTEGER, DOUBLE
NULL
```

2. JSON_ARRAY ```SELECT JSON_ARRAY('a', 1, NOW());```

```mysql
mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW()) |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
```

3. JSON_OBJECT
```mysql
mysql> SELECT JSON_OBJECT('key1', 1, 'key2', 'abc');
+---------------------------------------+
| JSON_OBJECT('key1', 1, 'key2', 'abc') |
+---------------------------------------+
| {"key1": 1, "key2": "abc"} |
+---------------------------------------+
```
4. 等等


### 引用

1. [百度百科 #https://baike.baidu.com/item/JSON/2462549](https://baike.baidu.com/item/JSON/2462549)
2. [mysql5.7官方文档 #https://dev.mysql.com/doc/refman/8.0/en/json.html](https://dev.mysql.com/doc/refman/8.0/en/json.html)


wepy1.x升级wepy2.x,wepy如何实现大的版本升级升级

小程序网站管理员 Published the article • 0 comments • 806 views • 2019-07-06 14:20 • 来自相关话题

要从wepy1.x升级到2.x这是一件比较困难的事情,因为框架的整个语法都发生了变化。正如官方所言:

> WePY 2 并不是基于 WePY 1 作的版本升级,而是完全重新开发的全新版本。因为实现原理完全不一样,因些比较难实现完全的向下兼容。

与其苦苦纠结如何升级,不如拥抱全新的版本,2.x实现了对typescript的支持,所以我们可以更加愉快的写代码

### 关于wepy1.x和wepy2.x的差异

> 1. 入口申请调整,WePY 1 使用类的继承方式 export default class MyPage extends wepy.page {} 在 WePY 2 中调整为 wepy.page({})。将实例化的过程放在生命周期事件中。

> 2. 数据绑定机制调整,WePY 1 使用脏检查进行数据绑定,却让开发者不知道使用时候去调用 $apply() 方法。在 WePY 2 中使用了 Vue Observer 实现数据绑定,告别$apply()。

> 3. 基于原生组件,WePY 1 是通过文件编译创建的静态组件在动态循环遍历时会出现一些问题,WePY 2 直接基于的小程序原生的组件去实现,避免了这一类问题。

> 4. Vue 模板语法,WePY 2 中推荐使用 HTML 代替 wxml 来写 template,支持除 filter 之外的所有 Vue 模板语法。

> 5. 编译方式改变,WePY 2 从基于文件编译调整为基于入口编译,因此对于图片等静态资源需要指定 static 选项 。


### 引用

[wepy官方2.x文档](https://wepyjs.github.io/wepy-docs/2.x/#/) 查看全部

要从wepy1.x升级到2.x这是一件比较困难的事情,因为框架的整个语法都发生了变化。正如官方所言:

> WePY 2 并不是基于 WePY 1 作的版本升级,而是完全重新开发的全新版本。因为实现原理完全不一样,因些比较难实现完全的向下兼容。

与其苦苦纠结如何升级,不如拥抱全新的版本,2.x实现了对typescript的支持,所以我们可以更加愉快的写代码

### 关于wepy1.x和wepy2.x的差异

> 1. 入口申请调整,WePY 1 使用类的继承方式 export default class MyPage extends wepy.page {} 在 WePY 2 中调整为 wepy.page({})。将实例化的过程放在生命周期事件中。

> 2. 数据绑定机制调整,WePY 1 使用脏检查进行数据绑定,却让开发者不知道使用时候去调用 $apply() 方法。在 WePY 2 中使用了 Vue Observer 实现数据绑定,告别$apply()。

> 3. 基于原生组件,WePY 1 是通过文件编译创建的静态组件在动态循环遍历时会出现一些问题,WePY 2 直接基于的小程序原生的组件去实现,避免了这一类问题。

> 4. Vue 模板语法,WePY 2 中推荐使用 HTML 代替 wxml 来写 template,支持除 filter 之外的所有 Vue 模板语法。

> 5. 编译方式改变,WePY 2 从基于文件编译调整为基于入口编译,因此对于图片等静态资源需要指定 static 选项 。


### 引用

[wepy官方2.x文档](https://wepyjs.github.io/wepy-docs/2.x/#/)

为什么我建议使用Medium来学习技术,练习英语?

随想录网站管理员 Published the article • 0 comments • 119 views • 2019-07-04 15:52 • 来自相关话题

Medium是国外的一个写作平台,每个月有一定的免费阅读文章的机会,但是如果超过限制,需要升级账号,每个月5每刀,一年是50美刀,折扣10美刀,大概需要支付人民币333每年。

Medium的运营模式被国内的一些平台模仿, 但是很难做到它的精髓,怎么说呢?

国内抄袭比较严重,如果涉及到利益的话,很容易滋生灰色产业,洗稿文章满天飞。

为什么建议在Medium上学习文章呢?Medium有很多的大牛,而且文章内容涉及的领域十分的广泛。这是一个不错的的平台,可以帮助我们学习技术和练习英语,如果我们有翻译的兴趣的话,可以将这些文章翻译之后分享到国内的平台,增加自己的影响力,同时也提升了自身的阅读和翻译能力,也学习了前沿的技术。 查看全部
Medium是国外的一个写作平台,每个月有一定的免费阅读文章的机会,但是如果超过限制,需要升级账号,每个月5每刀,一年是50美刀,折扣10美刀,大概需要支付人民币333每年。

Medium的运营模式被国内的一些平台模仿, 但是很难做到它的精髓,怎么说呢?

国内抄袭比较严重,如果涉及到利益的话,很容易滋生灰色产业,洗稿文章满天飞。

为什么建议在Medium上学习文章呢?Medium有很多的大牛,而且文章内容涉及的领域十分的广泛。这是一个不错的的平台,可以帮助我们学习技术和练习英语,如果我们有翻译的兴趣的话,可以将这些文章翻译之后分享到国内的平台,增加自己的影响力,同时也提升了自身的阅读和翻译能力,也学习了前沿的技术。