无来

不管你来还是不来
我都在这里,夜夜点亮
不是为了守候
只是为了做好我自己

0%

解决方法:

1
2
3
UPDATE tablename SET field = REPLACE(REPLACE(field, CHAR(10), ''), CHAR(13), '');
char(10): 换行符
char(13): 回车符

MySQL的trim函数没办法去掉回车和换行,只能去掉多余的空格,可以用MySQL的replace函数,解决掉这个问题,具体解决办法如下:

假设想要审核数据库中内容为“我爱你
”的短信息(注意内容后有换行)通过(status改变成1)

之前的SQL语句是不起作用的

1
2
3
UPDATE `tran`
SET `status` = '1'
WHERE `msg` = '我爱你';

修改之后的语句

1
2
3
UPDATE `tran`
SET `status` = '1'
WHERE trim( replace( `msg`, '\r\n', ' ' ) ) = '我爱你';

把数据中的回车换行等替换成空格之后再trim掉,就达到目的了,虽然不是特别完美,但是由于没办法在用户录入的时候控制,所以只能出此下策,好在MySQL内置函数的效率还是很有保证的。

1
2
3
4
5
UPDATE `tran`
SET `status` = '1'
WHERE trim( trim(
BOTH '\r\n'
FROM content ) ) = '我爱你'

用了两个trim,这样的好处是不会替换内容中间的换行和回车,只会处理头尾的空格换行回车,相当于php中trim函数的作用了。

原文:12 Extremely Useful Hacks for JavaScript

作者:Caio Ribeiro Pereira

翻译:雁惊寒

在这篇文章中,我将分享12个非常有用的JavaScript技巧。这些技巧可以帮助你减少并优化代码。

1) 使用!!将变量转换成布尔类型

有时,我们需要检查一些变量是否存在,或者它是否具有有效值,从而将它们的值视为true。对于做这样的检查,你可以使用||(双重否定运算符),它能自动将任何类型的数据转换为布尔值,只有这些变量才会返回false:0,null,””,undefined或NaN,其他的都返回true。我们来看看这个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
function Account(cash) {  
this.cash = cash;
this.hasMoney = !!cash;
}
var account = new Account(100.50);
console.log(account.cash); // 100.50
console.log(account.hasMoney); // true

var emptyAccount = new Account(0);
console.log(emptyAccount.cash); // 0
console.log(emptyAccount.hasMoney); // false

在这个例子中,如果account.cash的值大于零,则account.hasMoney的值就是true。

2) 使用+将变量转换成数字

这个转换超级简单,但它只适用于数字字符串,不然就会返回NaN(不是数字)。看看这个例子:

1
2
3
4
5
function toNumber(strNumber) {  
return +strNumber;
}
console.log(toNumber("1234")); // 1234
console.log(toNumber("ACB")); // NaN

这个转换操作也可以作用于Date,在这种情况下,它将返回时间戳:

console.log(+new Date()) // 1461288164385  

3) 短路条件

如果你看到过这种类似的代码:

1
2
3
if (conected) {  
login();
}

那么你可以在这两个变量之间使用&&(AND运算符)来缩短代码。例如,前面的代码可以缩减到一行:

conected && login();  

你也可以用这种方法来检查对象中是否存在某些属性或函数。类似于以下代码:

user && user.login();

4) 使用||设置默认值

在ES6中有默认参数这个功能。为了在旧版浏览器中模拟此功能,你可以使用||(OR运算符),并把默认值作为它的第二个参数。如果第一个参数返回false,那么第二个参数将会被作为默认值返回。看下这个例子:

1
2
3
4
5
6
7
8
9
10
11
function User(name, age) {  
this.name = name || "Oliver Queen";
this.age = age || 27;
}
var user1 = new User();
console.log(user1.name); // Oliver Queen
console.log(user1.age); // 27

var user2 = new User("Barry Allen", 25);
console.log(user2.name); // Barry Allen
console.log(user2.age); // 25

5) 在循环中缓存array.length

这个技巧非常简单,并且在循环处理大数组时能够避免对性能造成巨大的影响。基本上几乎每个人都是这样使用for来循环遍历一个数组的:

1
2
3
for (var i = 0; i < array.length; i++) {  
console.log(array[i]);
}

如果你使用较小的数组,那还好,但是如果处理大数组,则此代码将在每个循环里重复计算数组的大小,这会产生一定的延迟。为了避免这种情况,你可以在变量中缓存array.length,以便在循环中每次都使用缓存来代替array.length:

1
2
3
4
var length = array.length;  
for (var i = 0; i < length; i++) {
console.log(array[i]);
}

为了更简洁,可以这么写:

1
2
3
for (var i = 0, length = array.length; i < length; i++) {  
console.log(array[i]);
}

6) 检测对象中的属性

当你需要检查某些属性是否存在,避免运行未定义的函数或属性时,这个技巧非常有用。如果你打算编写跨浏览器代码,你也可能会用到这个技术。例如,我们假设你需要编写与旧版Internet Explorer 6兼容的代码,并且想要使用document.querySelector()来通过ID获取某些元素。 但是,在现代浏览器中,这个函数不存在。所以,要检查这个函数是否存在,你可以使用in运算符。看下这个例子:

1
2
3
4
5
if ('querySelector' in document) {  
document.querySelector("#id");
} else {
document.getElementById("id");
}

在这种情况下,如果在document中没有querySelector函数,它就会使用document.getElementById()作为代替。

7) 获取数组的最后一个元素

Array.prototype.slice(begin,end)可以用来裁剪数组。但是如果没有设置结束参数end的值的话,该函数会自动将end设置为数组长度值。我认为很少有人知道这个函数可以接受负值,如果你将begin设置一个负数的话,你就能从数组中获取到倒数的元素:

1
2
3
4
var array = [1, 2, 3, 4, 5, 6];  
console.log(array.slice(-1)); // [6]
console.log(array.slice(-2)); // [5,6]
console.log(array.slice(-3)); // [4,5,6]

8) 数组截断

这个技术可以锁定数组的大小,这对于要删除数组中固定数量的元素是非常有用的。例如,如果你有一个包含10个元素的数组,但是你只想获得前五个元素,则可以通过设置array.length = 5来阶段数组。看下这个例子:

1
2
3
4
5
var array = [1, 2, 3, 4, 5, 6];  
console.log(array.length); // 6
array.length = 3;
console.log(array.length); // 3
console.log(array); // [1,2,3]

9) 全部替换

String.replace()函数允许使用String和Regex来替换字符串,这个函数本身只能替换第一个匹配的串。但是你可以在正则表达式末尾添加/g来模拟replaceAll()函数:

1
2
3
var string = "john john";  
console.log(string.replace(/hn/, "ana")); // "joana john"
console.log(string.replace(/hn/g, "ana")); // "joana joana"

10) 合并数组

如果你需要合并两个数组,你可以使用Array.concat()函数:

1
2
3
var array1 = [1, 2, 3];  
var array2 = [4, 5, 6];
console.log(array1.concat(array2)); // [1,2,3,4,5,6];

但是,这个函数对于大数组来说不并合适,因为它将会创建一个新的数组并消耗大量的内存。在这种情况下,你可以使用Array.push.apply(arr1,arr2),它不会创建一个新数组,而是将第二个数组合并到第一个数组中,以减少内存使用:

1
2
3
var array1 = [1, 2, 3];  
var array2 = [4, 5, 6];
console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];

11) 把NodeList转换成数组

如果运行document.querySelectorAll(“p”)函数,它会返回一个DOM元素数组,即NodeList对象。但是这个对象并没有一些属于数组的函数,例如:sort(),reduce(),map(),filter()。为了启用这些函数,以及数组的其他的原生函数,你需要将NodeList转换为数组。要进行转换,只需使用这个函数:[] .slice.call(elements):

1
2
3
var elements = document.querySelectorAll("p"); // NodeList  
var arrayElements = [].slice.call(elements); // 现在已经转换成数组了
var arrayElements = Array.from(elements); // 把NodeList转换成数组的另外一个方法

12) 对数组元素进行洗牌

如果要像外部库Lodash那样对数据元素重新洗牌,只需使用这个技巧:

1
2
3
4
var list = [1, 2, 3];  
console.log(list.sort(function() {
return Math.random() - 0.5
})); // [2,1,3]

结论

现在,你已经学到了一些有用的JS技巧,它们主要用于缩减JavaScript代码量,其中一些技巧在许多流行的JS框架都使用到,如Lodash,Underscore.js,Strings.js等。如果你知道其他JS技巧,欢迎分享!

For installing device HUAWEI E3131 in CentOS 6.4 Linux you have to follow instructions below. Can be used to send SMS by AT command and also to establish HiSpeed Mobile Internet connection.

##Install requirements

You have to download usb_modeswitch and data with configurations.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@localhost ~]$ wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.2.7.tar.bz2
[root@localhost ~]$ wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20130807.tar.bz2
[root@localhost ~]$ yum install libusb libusb-devel minicom wvdial
[root@localhost ~]$ bzip2 -d usb-modeswitch-1.2.7.tar.bz2
[root@localhost ~]$ bzip2 -d usb-modeswitch-data-20130807.tar.bz2
[root@localhost ~]$ tar -xf usb-modeswitch-1.2.7.tar
[root@localhost ~]$ tar -xf usb-modeswitch-data-20130807.tar
[root@localhost ~]$ cd usb-modeswitch-1.2.7
[root@localhost usb-modeswitch-1.2.7]$ make all
cc -o usb_modeswitch usb_modeswitch.c -Wall -l usb
sed 's_!/usr/bin/tclsh_!'"/usr/bin/jimsh"'_' < usb_modeswitch.tcl > usb_modeswitch_dispatcher
[root@localhost usb-modeswitch-1.2.7]$ make install
sed 's_!/usr/bin/tclsh_!'"/usr/bin/jimsh"'_' < usb_modeswitch.tcl > usb_modeswitch_dispatcher
install -D --mode=755 usb_modeswitch /usr/sbin/usb_modeswitch
install -D --mode=755 usb_modeswitch.sh /lib/udev/usb_modeswitch
install -D --mode=644 usb_modeswitch.conf /etc/usb_modeswitch.conf
install -D --mode=644 usb_modeswitch.1 /usr/share/man/man1/usb_modeswitch.1
install -D --mode=755 usb_modeswitch_dispatcher /usr/sbin/usb_modeswitch_dispatcher
install -d /var/lib/usb_modeswitch
[root@localhost usb-modeswitch-1.2.7]$ cd ..
[root@localhost ~]$ cd usb-modeswitch-data-20130807
[root@localhost usb-modeswitch-data-20130807]$ make install
install -d /usr/share/usb_modeswitch
install -d /etc/usb_modeswitch.d
install -D --mode=644 40-usb_modeswitch.rules /lib/udev/rules.d/40-usb_modeswitch.rules
install --mode=644 -t /usr/share/usb_modeswitch ./usb_modeswitch.d/*
custom logging function 0x7fd5344c7010 registered
selinux=0
calling: control

Manual configuration

Now we have to install modules and configure device to modem mode.

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]$ lsusb
Bus 001 Device 029: ID 12d1:14fe Huawei Technologies Co., Ltd.
[root@localhost ~]$ modprobe option usbserial usb_wwan
[root@localhost ~]$ /usr/sbin/usb_modeswitch -H -v 12d1 -p 14fe -c /etc/usb_modeswitch.d/12d1\:14fe
[root@localhost ~]$ lsusb
Bus 001 Device 030: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
[root@localhost ~]$ ls -la /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 23. srp 08.49 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 23. srp 08.49 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 23. srp 08.49 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 23. srp 08.49 /dev/ttyUSB3

Testing

Now we have 4 USB serial ports then we can use minicom -s -c on command to test send SMS by
AT commands. For dialup internet you have to use wvdial.

1
2
Now we have 4 USB serial ports then we can use minicom -s -c on command to test send SMS by
AT commands. For dialup internet you have to use wvdial.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Dialer Defaults]
Init1 = AT+CGDCONT=1,"IP","internet.t-mobile.cz"
Init2 =
Init3 =
Stupid Mode = 1
Ask Password = 0
Phone = *99***1#
Modem = /dev/ttyUSB0
Username = neco
Password = neco
Baud = 9600
Auto DNS = yes
Dial Command = ATDT

ystem: CentOS 6.4 x86_64
GIMP: 2.6 x86_64
Inkscape: 0.47 x86_64
GNOME: 2.28.2 x86_64

Shell 前后台进程切换

当你用 shell 启动一个程序时,往往他是在前台工作的。比如执行命令

redis-server

启动 redis 后,shell 就不能再输入了。因为此时 redis 在前台。

Shell 支持作用控制,有以下命令:

  • command & 让进程在后台运行
  • jobs –l 查看后台运行的进程
  • fg %n 让后台运行的进程 n 到前台来
  • bg %n 让进程 n 到后台去;

PS:n 为 jobs 查看到的进程编号。

1、执行命令 & 切换至后台

在 Mac 终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行

2、切换正在运行的程序到后台

如果程序正在前台运行,可以使用 Ctrl+z 选项把程序暂停,然后用 bg %[number] 命令把这个程序放到后台运行,这个步骤分为3步,如下:

2.1 暂停程序运行Ctrl+z

Ctrl+z 跟系统任务有关的,Ctrl+z 可以将一个正在前台执行的命令放到后台,并且暂停。

1
2
3
4
➜ /Users/apple git:(master) ✗> redis-server

^Z
[1] + 18669 suspended redis-server

2.2 查看暂停的程序

察看 jobs 使用 jobs 或 ps 命令可以察看正在执行的 jobs

1
2
➜ /Users/apple git:(master) ✗> jobs -l
[1] + running redis-server
  • jobs 命令执行的结果,+ 表示是一个当前的作业,减号表示是当前作业之后的一个作业。

  • jobs -l 选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated

2.3 切换程序至后台

bg 将一个在后台暂停的命令,变成继续执行如果后台中有多个命令,可以用 bg %jobnumber 将选中的命令调出.

1
2
3
4
➜ /Users/apple git:(source) ✗> bg
[1] + 18823 continued redis-server
➜ /Users/apple git:(source) ✗> jobs -l
[1] + 18823 running redis-server

2.4 切换程序至前台

也可以用 fg %[number] 指令把一个程序掉到前台运行

1
2
➜ /Users/apple git:(source) ✗> fg %1
[1] + 18823 running redis-server

2.5 终止后台程序

也可以直接终止后台运行的程序,使用 kill 命令

1
➜ /Users/apple git:(source) ✗> kill %1

但是如果任务被终止了 kill,shell 从当前的 shell 环境已知的列表中删除任务的进程标识;也就是说,jobs 命令显示的是当前 shell 环境中所起的后台正在运行或者被挂起的任务信息。

he session is still attached on another terminal. The server hasn’t detected the network outage on that connection: it only detects the outage when it tries to send a packet and gets an error back or no response after a timeout, but this hasn’t happened yet. You’re in a common situation where the client detected the outage because it tried to send some input and failed, but the server is just sitting there waiting for input. Eventually the server will send a keepalive packet and detect that the connection is dead.

In the meantime, use the -d option to detach the screen session from the terminal where it’s in.

1
2
screen -r -d 30608
screen -rd is pretty much the standard way to attach to an

existing screen session.

MySQL provides an easy mechanism for writing the results of a select statement into a text file on the server. Using extended options of the INTO OUTFILE nomenclature, it is possible to create a comma separated value (CSV) which can be imported into a spreadsheet application such as OpenOffice or Excel or any other applciation which accepts data in CSV format.

Given a query such as

1
SELECT order_id,product_name,qty FROM orders

which returns three columns of data, the results can be placed into the file /tmo/orders.txt using the query:

1
2
SELECT order_id,product_name,qty FROM orders
INTO OUTFILE '/tmp/orders.txt'

This will create a tab-separated file, each row on its own line. To alter this behavior, it is possible to add modifiers to the query:

1
2
3
4
5
SELECT order_id,product_name,qty FROM orders
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

In this example, each field will be enclosed in “double quotes,” the fields will be separated by commas, and each row will be output on a new line separated by a newline (\n). Sample output of this command would look like:

1
2
"1","Tech-Recipes sock puppet","14.95" "2","Tech-Recipes chef's hat","18.95"
...

Keep in mind that the output file must not already exist and that the user MySQL is running as has write permissions to the directory MySQL is attempting to write the file to.

The following Magento 2’s CLI command will update the Magento base-url and the base-url-secure values.

Go to the Magento’s root directory, then type within the console:

php bin/magento setup:store-config:set --base-url="http://localhost:8080/"

Replacing http://localhost:8080/ with your new base-url.

You may want to change the base-url-secure also:

php bin/magento setup:store-config:set --base-url-secure="https://localhost:8080/"

Note: both base-url and base-url-secure values must contain the URL’s scheme, http:// or https://, and a trailing slash /.

Then clear the cache:

php bin/magento cache:flush

Troubleshooting
Clear current values from the database
Can happen that the above command doesn’t works as expected and you still have some url pointing to the old base-url. In these cases you have to clear some values in your db.

Open the Magento 2 database with your favorite MySQL tool then go to the core_config_data table.

Search for rows having these values in the column path (note that there could be more than one row for each value):

  • “web/unsecure/base_url”
  • “web/secure/base_url”
    Delete these rows (Magento will recreate them).

Now you can set the base-url value using the above CLI command.

Single-Store Mode option enabled
If you have the Single-Store Mode option enabled this could bring to some problem with setting the base-url with the command line.

In this case you should modify the base-url using only the command line and not the Magento’s Admin Panel. If you already saved the Base url field value using the Admin Panel you should clear values within the Magento’s core_config_data table as described above.

1、remove exit containers

Until that command is available, you can string docker commands together with other unix commands to get what you need. Here is an example on how to clean up old containers that are weeks old.

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

2、remove images

$ docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi

3 rm all stopped containers

If you want to use awk for this consider this command if you want do rm all stopped containers (without a error because of the first line):

$ docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm

今天介绍个文件名转码的工具–convmv,convmv能帮助我们很容易地对一个文件,一个目录下所有文件进行编码转换,比如gbk转为utf8等。

语法:

convmv [options] FILE(S) … DIRECTORY(S)

主要选项:

  • 1、-f ENCODING
    指定目前文件名的编码,如-f gbk

  • 2、-t ENCODING
    指定将要转换成的编码,如-t utf-8

  • 3、-r
    递归转换目录下所有文件名

  • 4、–list
    列出所有支持的编码

  • 5、–notest
    默认是只打印转换后的效果,加这个选项才真正执行转换操作。

  • 更多选项请man convmv。

例子:
递归转换centos目录下的目前文件名编码gbk为utf-8:

convmv -f gbk -t utf-8 --notest -r  centos

脚本 latest-ffmpeg-centos6.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# source: https://trac.ffmpeg.org/wiki/CentosCompilationGuide

yum install autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig zlib-devel

mkdir ~/ffmpeg_sources

cd ~/ffmpeg_sources
curl -O http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar xzvf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
make distclean
. ~/.bash_profile

cd ~/ffmpeg_sources
git clone --depth 1 git://git.videolan.org/x264
cd x264
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install
make distclean

cd ~/ffmpeg_sources
git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

cd ~/ffmpeg_sources
curl -L -O http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
make
make install
make distclean

cd ~/ffmpeg_sources
curl -O http://downloads.xiph.org/releases/opus/opus-1.0.3.tar.gz
tar xzvf opus-1.0.3.tar.gz
cd opus-1.0.3
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

cd ~/ffmpeg_sources
curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
tar xzvf libogg-1.3.1.tar.gz
cd libogg-1.3.1
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

cd ~/ffmpeg_sources
curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar xzvf libvorbis-1.3.3.tar.gz
cd libvorbis-1.3.3
./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

cd ~/ffmpeg_sources
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx
cd libvpx
git checkout tags/v1.3.0
./configure --prefix="$HOME/ffmpeg_build" --disable-examples
make
make install
make clean

cd ~/ffmpeg_sources
curl -O http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz
tar xzvf libtheora-1.1.1.tar.gz
cd libtheora-1.1.1
./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-examples --disable-shared --disable-sdltest --disable-vorbistest
make
make install
make distclean

yum -y install freetype-devel speex-devel

cd ~/ffmpeg_sources
git clone --depth 1 git://source.ffmpeg.org/ffmpeg
cd ffmpeg
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
export PKG_CONFIG_PATH
./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs="-ldl" --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libfreetype --enable-libspeex --enable-libtheora
make
make install
make distclean
hash -r
. ~/.bash_profile

cd ~/ffmpeg_sources/ffmpeg/tools
make qt-faststart
cp qt-faststart /usr/bin
ldconfig
cd

FAQ:

  • ERROR: libvpx decoder version must be >=0.9.1

    sudo yum install libvpx.x86_64 libvpx-devel.x86_64