windows常用操作-配置环境变量

在安装软件时,有时候 我们需要配置一下 环境变量。

Windows系统中,只要  在 桌面 计算机图标 上 鼠标 右键  -》计算机属性

安装好后,重新退出 ,在配置一下,就能使环境变量生效了。或者重启计算机也能生效环境变量。(上图以配置maven环境变量为例)

windows命令行-概述-cmd文件和bat文件的区别

本质上没有区别,都是简单的文本编码方式,都可以用记事本创建、编辑和查看。两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多。cmd文件只有在windows2000以上的系统中才能运行,而bat文件则没有这个限制。从它们的文件描述中也可以看出以上的区别:cmd文件的描述是“windows nt命令脚本”bat文件的描述是“ms dos批处理文件”

一个使用cmd运行的
一个用dos解释器解释运行

cmd.exe是XP下的命令行模式32位的(所以一些DOS命令无法使用)
cmd拿到DOS环境下运行不了,而bat在这些环境下都可以运行,因为cmd仅仅基于windows环境下的假DOS

maven安装与配置

一、需要准备的东西

1. JDK

2. Eclipse

3. Maven程序包

二、官网下载:
http://maven.apache.org/download.cgi

System Requirements

Java Development Kit (JDK) Maven 3.3+ require JDK 1.7 or above to execute – they still allows you to build against 1.3 and other JDK versions by Using Toolchains
Memory No minimum requirement
Disk Approximately 10MB is required for the Maven installation itself. In addition to that, additional disk space will be used for your local Maven repository. The size of your local repository will vary depending on usage but expect at least 500MB.
Operating System No minimum requirement. Start up scripts are included as shell scripts and Windows batch files.

因为 安装包是 java 写的,里面的启动文件 即有 Windows的mvn.cmd 也有linux的mvn  所以没有 按不同的系统发布不同的安装包。

 

Maven概述

由于学习大数据需要Maven,所以先简单学习一下Maven。Hadoop的MapReduce环境是一个复杂的编程环境,所以我们要尽可能地简化构建MapReduce项目的过程。

Maven是一个很不错的自动化项目构建工具,通过Maven来帮助我们从复杂的环境配置中解脱出来,从而标准化开发过程。所以,写MapReduce之前,让我们先花点时间把刀磨快!!当然,除了Maven还有其他的选择Gradle(推荐), Ivy….

摘自百科:

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。

科学上网-零基础搭建个人专线shadowsocks

一、首先购买一个海外vps ,安装centos7系统

VPS有:BandwagonHost,dataocean,vultr,linode。选择服务器地址时,可以先测试一下速度,选速度快的机房。

二、登录vps 并加固

1、利用SSH远程 登入 centos7,方便后续操作。(有些vps的ip可能被屏蔽了,所以需要换一个vps试试看)
SSH远程连接入门

2、加固 centos7 安全性:

(1)、更新centos7系统
(2)、解决系统编码问题
(3)、开启 防火墙。

systemctl start firewalld

(4)、修改SSH默认端口SSH只用密钥登录

3、安装VNC软件,进行远程访问。(可选操作,如果不适应用命令行操作,可以借助vnc 进行远程桌面操作)
(为了提高安全性,使用SSH端口转发,登入服务器)
vnc远程连接配置与入门

三、安装shadowsocks服务端

我们安装的是python版本的。因为centos7 默认自带了 python,所以不需要安装了。如果没有安装的话,可以运行

yum install python

这样子 也可以检查出,是否安装了python。

安装 pip :
1、可以用 VNC 远程登录 vps 主机,然后用浏览器 下载 pip 安装包。
下载页面:https://pypi.org/project/pip/9.0.1/
文件链接地址:https://files.pythonhosted.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz

为什么不选最新版,因为最新版pip 和 python 有一点 兼容性问题。
也可以在SSH中用命令行的方式 下载文件:

curl https://files.pythonhosted.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz -o pip.tar.gz --progress

文件下载完,可以用 VNC 桌面方式进行 解压。或者 在 SSH 中 用命令行 进行解压。

tar zxvf pip-9.0.1.tar.gz -C /root/mydir

将文件 解压到了mydir目录下面。
解压完成后,进入 mydir 文件夹。可以用vnc 直接进入。也可以用命令行

cd /root/mydir

只有进入到 mydir文件夹以后,下面的安装才能成功。
在SSH下或者vnc的终端运行命令行:

python setup.py install

(其实 用命令行 可以直接装 pip,但是安装的是最新版的pip,好像与python存在兼容性问题)

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py

2.安装 shadowsocks
在SSH或者VNC的终端下运行如下代码:

安装 加密软件 库 用于支持 aes-256-gcm 加密方式 (带#的,都是注释,不需要打 )
 yum install epel-release
 
yum install libsodium
 安装 或升级 最新 软件 版本
 pip install --upgrade git+https://github.com/shadowsocks/shadowsocks.git@master

3.配置shadowsocks
SSH下:

[bash] # 创建 /etc/shadowsocks.json vim /etc/shadowsocks.json [/bash]

上面就创建了配置文件,然后用 vim 编辑 下面内容就行了。

{
"server": "0.0.0.0",
"server_port": 3678,
"password": "sdfsndsfoni",
"method": "aes-256-cfb"
}

多余多个端口可以如下:(顺便说了一下,可以添加PID_FILE和LOG_FILE)

pidfile

{
  "server": "0.0.0.0",
  "port_password": {
        "8850":"hehe2016"
 },
  "method": "aes-256-gcm",
  "PID_FILE": "/var/run/shadowsocks_ssserver.pid",
  "LOG_FILE": "/var/run/shadowsocks_ssserver.log"
}

添加PID_FILE,是因为 执行下面这句话时,需要PID 文件,否则会报错。

ssserver -c /etc/shadowsocks.json -d  stop

这个时候,服务器就可以使用了:

##### 开启 shadowsocks  服务
ssserver -c /etc/shadowsocks.json -d  stop

##### 关闭 shadowsocks  服务
ssserver -c /etc/shadowsocks.json -d  start

后面提到的shadowsocks.service是另一种启动方式。

##### 查看 shadowsocks 状态 
#####(如果 我用ssserver -c /etc/shadowsocks.json -d start 启动,那么这里查看的启动状态是 dead 的,两种启动方法 应该隶属于 不同的管理方式中)
systemctl status shadowsocks

##### 启动 shadowsocks 服务
systemctl start shadowsocks

##### 关闭 shadowsocks 服务
systemctl stop shadowsocks

注意: 加密方式(method),密码(password),服务器端口(server-port)都可以自己设置,只要客户端相同就行。服务器端口 1024以下是系统保留的,从1024-65535是用户使用的。密码 建议选择 aes 系列。method为加密方法,可选aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb, cast5-cfb, des-cfb, rc4-md5, chacha20, salsa20, rc4, table

vim编辑器用法可以查看:vim入门基础
VNC桌面环境就直接创建json文件就行了。

4.配置开机自启动。SSH和VNC操作都行。

新建启动脚本文件/etc/systemd/system/shadowsocks.service,内容如下:

[Unit]
Description=Shadowsocks
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json
[Install]
WantedBy=multi-user.target

然后 , 在SSH或者VNC终端下:输入命令

systemctl enable shadowsocks
systemctl start shadowsocks

为了检查 shadowsocks 服务是否已成功启动,可以继续执行以下命令查看服务的状态:

systemctl status shadowsocks -l 

如果服务启动成功,则控制台显示的信息可能类似这样:

● shadowsocks.service - Shadowsocks
 Loaded: loaded (/etc/systemd/system/shadowsocks.service; enabled; vendor preset: disabled)
 Active: active (running) since Mon 2015-12-21 23:51:48 CST; 11min ago
 Main PID: 19334 (ssserver)
 CGroup: /system.slice/shadowsocks.service
 └─19334 /usr/bin/python /usr/bin/ssserver -c /etc/shadowsocks.json
 Dec 21 23:51:48 morning.work systemd[1]: Started Shadowsocks.
 Dec 21 23:51:48 morning.work systemd[1]: Starting Shadowsocks…
 Dec 21 23:51:48 morning.work ssserver[19334]: INFO: loading config from /etc/shadowsocks.json
 Dec 21 23:51:48 morning.work ssserver[19334]: 2015-12-21 23:51:48 INFO loading libcrypto from libcrypto.so.10
 Dec 21 23:51:48 morning.work ssserver[19334]: 2015-12-21 23:51:48 INFO starting server at 0.0.0.0:8388

不过此时还连接不上服务器,因为CentOS 7默认防火墙是阻止SS端口的,这里需要放行SS端口,由于CentOS 7的防火墙升级为Firewall了,操作方式与之前的iptables有所不同(3678为文中shadowsocks服务器配置端口号,这里要改为你安装SS时设置的端口):
firewall-cmd –permanent –add-port=3678/tcp
firewall-cmd –reload

四、安装kcp加速插件

由于原生shadowsocks速度慢,所以用kcp 插件加速。
访问链接,选择linux-amd64 下载,centos7系统 是 64位的linux系统。
https://github.com/shadowsocks/shadowsocks-windows/releases

解压后有两个文件,其中类似server_linux_amd64这样的文件就是服务端程序了,另一个类似client_linux_amd64的就是客户端程序了。如果客户端在Windows上使用要下载Windows版本的哦。

SSH 里面可以用 tar命令进行解压(前面解压pip文件已经提到过了), ls 命令可以查看 当前目录所有文件 cd 命令表示进入某目录。可以搜索一下bash常用命令操作。
VNC里面直接可视化操作就行了。

先来创建服务端配置文件,创建开机启动项如下供参考:

[bash] vim /etc/systemd/system/kcptun.service [/bash]

然后 配置启动文件如下:

[Unit]
 Description=kcptun
 [Service]
 TimeoutStartSec=20
 ExecStart=/usr/bin/server_linux_amd64 -t "0.0.0.0:3678" -l ":5678" -mode fast2
 [Install]
 WantedBy=multi-user.target

其中TimeoutStartSec为延时启动的时间,这里由于需要等待ShadowSocks启动完成后再启动,所以配置20秒的延迟。ExecStart后的server_linux_amd64为你刚刚下载的文件的位置,建议放到相应的文件夹以便管理。-t后的是服务器的IP和ShadowSocks服务的端口,这里IP配置为本机IP即可。-l表示KCP服务使用的端口,-mode表示速度的模式,从快到慢依次是fast3 > fast2 > fast > normal > default,fast3一般用于游戏,不想要任何的延迟(no lag),但这也意味浪费的流量会增多,这里我选择fast2就够用了。

[bash] systemctl daemon-reload # 创建开机启动 systemctl enable kcptun # 启动kcp服务。 systemctl start kcptun # 防火墙 开放 kcp 端口 (kcp 是 udp 协议,shadowsocks 是tcp协议) firewall-cmd –permanent –add-port=5678/udp # 防火墙 重新 加载 配置 firewall-cmd –reload [/bash]

五、安装客户端

安卓版本:(个人用 3.3.1 版本,因为 好像 不需要 google play 插件吧。并且内置kcp 插件)
https://github.com/shadowsocks/shadowsocks-android/releases
windows版本:
https://github.com/shadowsocks/shadowsocks-windows/releases
需要下载kcp客户端单独进行集成。(Windows-386 32位系统,Windows-amd64 64位系统)
https://github.com/xtaci/kcptun/releases
集成方法可以参考链接:
(总体思路是本地shadowsocks先连接本地的kcptun,然后kcptun 连接 代理服务器的 kcptun,
接着 代理服务器的kcptun 连接 代理服务器的 shadowsocks)
https://blog.csdn.net/farawayzheng_necas/article/details/63255799

mac版本:(内置kcp插件)
https://github.com/shadowsocks/ShadowsocksX-NG
ios版本:
因为大陆已经下架,需要在其他地区搜索:Shadowrocket 等 支持shadowsocks的 应用软件。

之前3.几的安卓客户端,kcp与客户端是集成的,配置文件中,shadowsocks服务器端口就填shadowsocks端口。kcp配置:需要配置kcp端口,kcp参数:

--crypt aes-192 --key "hello"

到了安卓4.x版本,kcp是插件化了。无法启动kcp,可能是1、shadowsocks卸载重装2、手机管家的自启动的链式启动,允许kcptun。

如果要添加kcp插件,那么shadowsocks的端口就要填 kcp的端口,kcp的插件需要配置:[注意与3.x的配置不同,这里的密码,不再需要添加引号了]

key=hello;crypt=aes-192

六、安装obfs 混淆,这个只能与 kcp 二选一

服务器:centos

sudo yum install gcc autoconf libtool automake make zlib-devel openssl-devel asciidoc xmlto

git clone https://github.com/shadowsocks/simple-obfs.git
cd simple-obfs
git submodule update --init --recursive
./autogen.sh
./configure && make
sudo make install

### 会报错 缺少 libev,于是 猜测 shadowsocks libev版本有,
### 于是安装 shadowsocks libev 的依赖库
yum install gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y

服务器配置:

因为是独立模式:vim /etc/systemd/system/obfs-server.service

[Unit]
Description=Simple-obfs
After=network.target

[Service]
Type=simple-obfs
User=nobody
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=/usr/local/bin/obfs-server -s 0.0.0.0 -p 443 --obfs tls -r 127.0.0.1:8866

[Install]
WantedBy=multi-user.target

监听 1024以下端口 需要 root 用户权限,所以采用下面的方法:(应该是绑定服务吧)

setcap cap_net_bind_service=+ep /usr/local/bin/obfs-server
### 最后更新服务并启动:
sudo systemctl enable obfs-server
sudo systemctl daemon-reload
sudo systemctl restart obfs-server

特别注意:复制粘贴时的 问题:【正常情况应该不会出现这个问题,然后我把vim后面的空格给删了,然后用打了一个空格,结果就好了,可以新建文件了】

[root@superguy ~]# vim /etc/systemd/system/obfs-server.service
-bash: vim /etc/systemd/system/obfs-server.service: No such file or directory

这里有编译好的软件可直接放到目标位置  obfs-localobfs-server

有可能 443端口被占用了,导致绑定出错,可以换其他端口再重试。

# 查看端口被占用方法

lsof -i:443

客户端:因为是集成插件模式:

1、客户端连接 服务器 端口 就是 443

2、指定 插件为:  obfs-local【有些地方填:simple-obfs】  ;  并配置插件参数 ,如下面的示例。

--plugin-opts "obfs=tls;obfs-host=www.bing.com"

备注:obfs 类型有 tls和http  主要是 服务器 和客户端 类型要统一。

参考教材:

###Plugin mode with shadowsocks
###Add respective item to --plugin and --plugin-opts arg or as value of plugin and plugin_opts in JSON.

### On the client:

ss-local -c config.json --plugin obfs-local --plugin-opts "obfs=http;obfs-host=www.bing.com"
### On the server:

ss-server -c config.json --plugin obfs-server --plugin-opts "obfs=http"
### Standalone mode
### On the client:

obfs-local -s server_ip -p 8139 -l 1984 --obfs http --obfs-host www.bing.com
ss-local -c config.json -s 127.0.0.1 -p 1984 -l 1080
### On the server:

obfs-server -s server_ip -p 8139 --obfs http -r 127.0.0.1:8388
ss-server -c config.json -s 127.0.0.1 -p 8388

七、nginx与shadowsocks共用443端口伪装

1、shadowsocks 转发给 nginx

最近突发奇想把网站改为https,不可避免的遇到了与shadowsocks的443端口冲突问题(443端口不容易被检出)。废了好大劲才发现原来ss的simple-obfs已经带有非ss流量转发功能。

shadowsocks

# HTTP only with plugin mode
ss-server -c config.json --plugin obfs-server --plugin-opts "obfs=http;failover=example.com:80"

# Both HTTP and HTTPS with standalone mode
obfs-server -s server_ip -p 80 --obfs http -r 127.0.0.1:8388 --failover example.com:80
obfs-server -s server_ip -p 443 --obfs tls -r 127.0.0.1:8388 --failover example.com:443

# suppose you have an HTTP webserver (apache/nginx/whatever) listening on localhost:8080 and HTTPS on 8443
# (you probably shouldn't expose these ports)
obfs-server -s server_ip -p 80 --obfs http -r 127.0.0.1:8388 --failover 127.0.0.1:8080
obfs-server -s server_ip -p 443 --obfs tls -r 127.0.0.1:8388 --failover 127.0.0.1:8443

这样便将web流量转发到了8443端口

nginx

user xx xx;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    types_hash_max_size 1024;

    server {
        listen       80;
        server_name  localhost;
        return       301    https://$host$request_uri;  #redir to https
   #     #charset koi8-r;

   #     #access_log  logs/host.access.log  main;

        # redirect server error pages to the static page /50x.html
        #
        #error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
        #    root   /usr/share/nginx/html;
        #}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    server {
        listen       8443 ssl http2;
        server_name  localhost;

        ssl_certificate      /etc/letsencrypt/live/cclin.net/fullchain.pem; #managed by Certbot
        ssl_certificate_key  /etc/letsencrypt/live/cclin.net/privkey.pem; #managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
            uwsgi_pass 127.0.0.1:3031;
            include uwsgi_params;
        }

        }
    #   ssl_session_cache    shared:SSL:1m;
    #   ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    }
}

2、利用nginx转发到shadowsocks

下面的方法 可以 ,即访问网站,同时又 ss。 也就是说 simple-obfs 支持 http代理 转发
server {
    listen       80;
     server_name  localhost;
  # server_name  www.huaijiujia.com;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;

        if ($http_upgrade = "websocket") {
             proxy_pass http://127.0.0.1:8443;
        }
        proxy_http_version 1.1;
        proxy_set_header Upgrade "websocket";
        proxy_set_header Connection "upgrade";
    }

…..

}

下面的 方法 不行,只能访问 网路,但是无法 使用  ss。也就是说 simple-obfs 不支持 tls 代理 转发

server {
    listen   443  default_server;
    server_name  _;
    ssl_certificate     https_cert/huaijiujia_ca_chained.crt;
    ssl_certificate_key https_cert/huaijiujia_private.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
  #  return 404;
   #   return 301 https://www.amazon.com;
      location = / {
        if ($http_upgrade = "websocket") {
             proxy_pass https://127.0.0.1:8443;
        }
        proxy_http_version 1.1;
        proxy_set_header Upgrade "websocket";
        proxy_set_header Connection "upgrade";
    }
   return 301 https://www.amazon.com;
}

因为,安卓手机的功能不完善,不完全支持 simpobfs功能,所以需要重新下个 改进版的。点击下载: Simple-obfuscation-fix


补充:

如果 shadowsocks需要支持 aes-256-gcm加密的话:

For CentOS 7, if you need AEAD ciphers(支持aes-256-gcm加密), you need install libsodium

yum install libsodium python34-pip
pip3 install  git+https://github.com/shadowsocks/shadowsocks.git@master

 

wordpress-上传文件类型限制

楼主想上传一个脚本文件到wordpress,但是 发现 由于安全限制,无法上传。

文件类型不符合安全规则。试试别的文件。

这种错误是由于WordPress中做了文件上传格式的限制,这种限制可以在WordPress中的wp-include/functions.php的get_allowed_mime_types函数中找到,函数如下:

function get_allowed_mime_types() {
static $mimes = false;
if ( !$mimes ) {
// Accepted MIME types are set here as PCRE unless provided.
$mimes = apply_filters( ‘upload_mimes’, array(
‘jpg|jpeg|jpe’ => ‘image/jpeg’,
‘gif’ => ‘image/gif’,
‘png’ => ‘image/png’,
‘bmp’ => ‘image/bmp’,
‘tif|tiff’ => ‘image/tiff’,
‘ico’ => ‘image/x-icon’,
‘asf|asx|wax|wmv|wmx’ => ‘video/asf’,
‘avi’ => ‘video/avi’,
‘divx’ => ‘video/divx’,
‘flv’ => ‘video/x-flv’,
‘mov|qt’ => ‘video/quicktime’,
‘mpeg|mpg|mpe’ => ‘video/mpeg’,
‘txt|c|cc|h’ => ‘text/plain’,
‘rtx’ => ‘text/richtext’,
‘css’ => ‘text/css’,
‘htm|html’ => ‘text/html’,
‘mp3|m4a’ => ‘audio/mpeg’,
‘mp4|m4v’ => ‘video/mp4′,
‘ra|ram’ => ‘audio/x-realaudio’,
‘wav’ => ‘audio/wav’,
‘ogg’ => ‘audio/ogg’,
‘mid|midi’ => ‘audio/midi’,
‘wma’ => ‘audio/wma’,
‘rtf’ => ‘application/rtf’,
‘js’ => ‘application/javascript’,
‘pdf’ => ‘application/pdf’,
‘doc|docx’ => ‘application/msword’,
‘pot|pps|ppt|pptx’ => ‘application/vnd.ms-powerpoint’,
‘wri’ => ‘application/vnd.ms-write’,
‘xla|xls|xlsx|xlt|xlw’ => ‘application/vnd.ms-excel’,
‘mdb’ => ‘application/vnd.ms-access’,
‘mpp’ => ‘application/vnd.ms-project’,
’swf’ => ‘application/x-shockwave-flash’,
‘class’ => ‘application/java’,
‘tar’ => ‘application/x-tar’,
‘zip’ => ‘application/zip’,
‘gz|gzip’ => ‘application/x-gzip’,
‘exe’ => ‘application/x-msdownload’,
// openoffice formats
‘odt’ => ‘application/vnd.oasis.opendocument.text’,
‘odp’ => ‘application/vnd.oasis.opendocument.presentation’,
‘ods’ => ‘application/vnd.oasis.opendocument.spreadsheet’,
‘odg’ => ‘application/vnd.oasis.opendocument.graphics’,
‘odc’ => ‘application/vnd.oasis.opendocument.chart’,
‘odb’ => ‘application/vnd.oasis.opendocument.database’,
‘odf’ => ‘application/vnd.oasis.opendocument.formula’,
) );
}
return $mimes;
}

以上传入 apply_filters函数中的Array,即使允许上传的类型列表,我们可以修改这个地方,以禁止或允许可以上传的文件类型。

例如我们想要允许rar文件上传,只需添加一行格式说明即可:

‘rar’ => ‘application/rar’,

除了直接修改这个Array外,还有另外一种方法,可以修改wp-config.php文件,这个文件在WordPress的根目录下,在其中增加一行语句:
define(‘ALLOW_UNFILTERED_UPLOADS’, true);

这条语句将去除上传的文件类型限制,一劳永逸。

转载自:https://www.cnblogs.com/kedarui/p/3627307.html

python练手-srt字幕转换lrc字幕

之前因为有学习英语的需求,看了一些美剧。但由于平常时间有限,所以将美剧视频压缩成了mp3,然后顺便将srt字幕转换成了lrc。

github上参考了 一个 srt转 lrc 的 python脚本。

楼主将自己完善的python字幕转换脚本 展示如下:

#coding=utf-8  
# 如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。

'''
Run it in srt file folder.
python 2.7
'''
import glob
import re

SRT_BLOCK_REGEX = re.compile(
        r'(\d+)[\r\n]+'  # srt --> num
        r'(\d{2}:\d{2}:\d{2},\d{2,4})[\s]*-->[\s]*(\d{2}:\d{2}:\d{2},\d{2,4})[\r\n]+' # srt --> time
       # r'(.+)'     
        r'(.*)[\r\n]+'   # srt --> subtitles 
        r'(.*)'   #  srt --> subtitles  ( sometimes srt has 2 subtitles  )
        )
        
      # [^\S\r\n]*[\r\n]+

def srt_block_to_irc(block):
    match = SRT_BLOCK_REGEX.search(block)

    """
    IndentationError: unindent does not match any outer indentation level
    /////////////////////////////////////     python 的 注释 居然 也要 对齐的 我去
Traceback (most recent call last):
  File "srt2lrc.py", line 100, in <module>
    srt_file_to_irc(file_name)
  File "srt2lrc.py", line 50, in srt_file_to_irc
    blocks_out = [srt_block_to_irc(block) for block in blocks_in]
  File "srt2lrc.py", line 24, in srt_block_to_irc
    print('match groups 0: %s' %(match.group(0)) ) 
AttributeError: 'NoneType' object has no attribute 'group'

因为 下面的 print 函数 有问题 啊,每一次 调用 上面的  search(block) 有可能 出现 不匹配,于是 会传给 match = none 
    """



    if not match:
        return None
    #else:
     #   print('match groups 0: %s' %(match.group(0)) ) 


    num, t1, t2, content1, content2 = match.groups() 
    # 匹配 每一个 正则表达式 单元 ---> 就是 正则表达式 里面 加了 括号的部分 时间部分 有11位 ,t1[3:11] 就是 截取 t[3] 到 不包括最后的 t1[11].其实最大是t[10],t[11]越界不存在的

    """
    print( 'hell' )
    print('match num 0: %s' %(num)  ) 
    print('match t1 0: %s' %( t1 )  )
    print('match t2 0: %s' %( t2 )  )
    print('match content1 0: %s' %(content1 ) )
    print('match content2 0: %s' %(content2) )
    """

   # ts = ts[3:-1].replace(',', '.')
   # te = te[3:-1].replace(',', '.')
   # co = content.replace('\n', ' ')
   # python里面的索引的特征是包含起点,但是不包含结束的索引值,-1表示最后一个元素,但是-1是结尾的index,所以含义就是取 第三个元素 到 最后一个元素
   # t1 = t1.split(',')[0]  # 分裂后 取 第一个字符串 
   # t2 = t2.split(',')[0]

   # print('match t1 0: %s' %( t1[10] )  )

    t1 = t1[3:11].replace(',', '.')
    # t2 = t2[3:-1].replace(',', '.')
   # print('match t1 replace: %s' %( t1 )  )

    # return '[%s]%s\n[%s]\n' % (ts, co, te)
    return '[%s]%s%s\n\n' % (t1, content1, content2)

def srt_file_to_irc(fname):
      #  python 3
      #  with open(fname, encoding='UTF-8') as file_in:
      #  str_in = file_in.read()

    with open(fname, 'rb') as file_in:
        str_in = file_in.read().decode("utf-8") # the original srt file encode with utf-8 ,  so this place we decode it with utf-8   
        blocks_in = str_in.replace('\r\n', '\n').split('\n\n')
        blocks_out = [srt_block_to_irc(block) for block in blocks_in]

      #  print('all blocks_out: \n %s' % (blocks_out) )


        if not all(blocks_out):
            err_info.append((fname, blocks_out.index(None), blocks_in[blocks_out.index(None)]))
        blocks_out = filter(None, blocks_out)
        str_out = ''.join(blocks_out) 
      # 卧槽  python 用 对齐方式 判断 作用域的 因为 有了中文注释,源文件是 ascii编码的。所以报错 说 出现 非ASCII字符
      # SyntaxError: Non-ASCII character '\xe5' in file Test1.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
      # 解决方法 python的默认编码文件是用的ASCII码,将文件存成了UTF-8,编译就可以通过。或在在py文件开头(必须是第一行)加入




      #  python3 
      #  with io.open(fname.replace('srt', 'lrc'), 'w', encoding='UTF-8') as file_out:
      #  file_out.write(str_out )

        with open(fname.replace('srt', 'lrc'), 'w') as file_out:
            file_out.write(str_out.encode('utf-8'))


"""

Python–方法: 
1.根据长度判断 
长度为0时,表示空。(其中”判断条件”成立时(非零),则执行后面的语句)

lst = []
if len(lst):
    print 'c'
else:
    print 'cc'

2.根据逻辑判断 
由于一个空 list 本身等同于 False

lst = []
if lst:
    print 'c'
else:
    print 'cc'

"""

if __name__ == '__main__':
    err_info = []
    for file_name in glob.glob('*.srt'):
        srt_file_to_irc(file_name)
    if err_info:
        print('success, but some exceptions are ignored:')
        for file_name, blocks_num, context in err_info:
            print('\tfile: %s, block num: %s, context: %s' % (file_name, blocks_num, context))
    else:
        print('success')

只需将 此 python 脚本,放入待转换的 srt字幕 文件夹里面就行。
然后 命令行 运行该 python 脚本就行。可以 修改 python脚本 的正则表达式,修改srt  解码格式。
脚本文件下载

 

python入门概述

今天查了很多资料,梳理一下Python的知识面。

Python 的语法非常简洁,写起来就像写英语一样,不仅简单而且可以高效地实现面向对象编程。与 C/C++/Java 相比,可以用很少的代码写出同样的程序,跨平台,一次编写到处运行,无须编译,直接运行,还有很多框架包可以选择。

它可以用来进行网络开发、GUI开发、图形开发、Web开发、游戏开发、手机开发、数据库开发,大数据分析等等。

网络开发,有大量的网络编程模块,支持 Socket、Email、FTP、Twisted,Jabber 等。GUI开发方面,有很多强大的GUI库,wxPython、Zope、Plone。游戏开发,例如网络游戏脚本、账号注册系统、物品交换系统、场地转换系统和攻击防御系统都是用Python写的。网站后台,有大量的成熟的框架,如 Django、Flask、Bottle、Tornado。很多知名网站都在用Python,豆瓣、知乎、Youtube、Dropbox、OpenStack等。

数据科学方面,Python也是越来越受到重视,从云计算基础设施,到网络爬虫,再到数据处理算法。私有云 OpenStack,公有云 AWS、GCE、Azure、阿里云、青云,也都提供Python SDK。Spark、Hadoop都开了Python的接口,可以用Python做大数据的mapreduce。用Python写爬虫非常简单,库很健全,而且基于它发展起来了很多并发库,网络爬虫才真正可以达到大数据规模,爬取数据之后,还有自然语言处理程序包NLTK可以做分词处理。

Python在做科学计算方面还有三大神器:Numpy、Spicy、Matplotlib。NumPy 和 SciPy 给其他高级算法打了非常好的基础,用已经封装好的包,可以快速迭代,优化各种参数。Matploglib 可以用来画Matlab那样的图。还有 scikit-learn、pattern、jieba、pybrain 实现了很多机器学习深度学习的算法。

还可以用Python做一些很好玩的事情,比如大神们用21行Python写出的拼写检查器,用微信控制灯泡等等,听着就很是乐趣无穷。

作者:不会停的蜗牛
链接:https://www.jianshu.com/p/108cfb8f6d4b

计算机硬件-科普-主板概述

来自:http://tieba.baidu.com/p/2955636909

BIOS英文”Basic Input Output System”的缩略语,直译过来后中文名称就是”基本输入输出系统”。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。也就是说,在没有装系统之前只能使用这个基层系统。
=========================================================
PC硬件组成:CPU,主板,内存条,显示器,机箱,散热器,电源,光驱,硬盘,固态硬盘
———————————————————–
【主板相关知识】
———————————————————–
【入门篇】
基础知识扫盲贴,PC主机的基石-电脑主板基本篇
http://tieba.baidu.com/p/2636055098 
一篇帖子10分钟教你如何选购主板
http://tieba.baidu.com/p/2191761624 

【进阶-装机篇】
主板硬盘灯、电源灯、重启、开关机接线
http://tieba.baidu.com/p/2206266199 
装机教程
http://tieba.baidu.com/p/2239070608 
电脑组装之接口线缆安装细节图解
http://tieba.baidu.com/p/2235652864 

【进阶-用料篇】
教你看主板上的电容(推荐连下面的帖子一起看)
http://tieba.baidu.com/p/2671593790 
教你分辨日、台系电容
http://tieba.baidu.com/p/2191471094 

【其他知识】
有关主板的多相供电的原理
http://tieba.baidu.com/p/2191774388 
看型号选主板之“微星”篇
http://tieba.baidu.com/p/2458320295 
看型号选主板之“技嘉”篇
http://tieba.baidu.com/p/2458129754 
==================点击切入正题======================

一.主板各部件名称以及各功能粗解

声卡、网卡:主板有集成,有特殊需要的用户可以另行购买独立声/网卡。
南桥芯片:南桥芯片负责I/O总线之间的通信,如PCI总线、USB、LAN、ATA、SATA、音频控制器、键盘控制器、实时时钟控制器、高级电源管理等。
I/O芯片:I/O控制电路,它负责提供串行、并行接口及软盘驱动器控制接口。
CPU插槽:放置中央处理器(CPU)的插槽(在其四周有四个孔洞,那个是固定散热器的位置)。
内存插槽:插内存条的地方,不同的主板型号需要查看其说明书,是否支持双通道以及内存的频率(内存主流频率:1333/1600/1866/2133/2400MHz),注意,光是主板支持也不行行,因为北桥控制内存(北桥芯片已整合进CPU内),所以,也必须在北桥支持的内存频率内,否则频率再高也只能是北桥所支持的最大频率。(北桥在下文有讲解)
双通道:双通道可以提供双倍内存带宽。也可理解为单位时间内的双倍数据交换量。
SATA接口:连接硬盘的接口,需要注意的是,SATA3.0的传输读写速率是SATA2.0的两倍,所以最好优先连接3.0接口(需要查看主板说明,因为有些主板的标记用法不同)。
8Pin电源接口:供电作用,也可4pin+4pin或单4PIN直接接上去使用。
24PIN电源接口:主板供电作用。
USB3.0目前主板的标配,其传输速率是USB2.0的8倍(理论速率),需要支持USB3.0的配件才能使用USB3.0,前置USB3.0需要机箱也支持USB3.0,但后置可以使用。
CPU散热器接口:简称CPU_FAN,一般在主板边缘。(位于主板中间位置的两个散热器接口,称CHN_FAN那个一般是机箱风扇的接口)
PCIE16x:(全称:PCI Express),一般为显卡插槽,除开X倍率还分1.0(淘汰)/2.0(H61以下还在使用)/3.0(B75以上全部普及),具体速率差距如下图:

PCI接口:普通玩家一般用不上的扩展插槽,可插接显卡、声卡、网卡、内置Modem、内置ADSL Modem、USB2.0卡、IEEE1394卡、IDE接口卡、RAID卡、电视卡、视频采集卡以及其它种类繁多的扩展卡。PCI插槽是主板的主要扩展插槽,通过插接不同的扩展卡可以获得电脑能实现的几乎所有功能。
PCI-E 1x:也可以插声卡 网卡,也有这种接口的电子配件,而且貌似都是比较贵的才是这种接口,不过也算是“淘汰”很久了,现在的普通玩家几乎用不上这种插槽。
=========================================================
串口连接插座~系统控制面板排针(从上至下):俗称(跳线),连接机箱的各种线,配置数据清除排针一般不接。

内存条 ,双通道的速率是单通道的两倍。双通道,就是在北桥(又称之为MCH)芯片级里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道。在这两个内存通CPU可分别寻址、读取数据,从而使内存的带宽增加一倍,数据存取速度也相应增加一倍。


I/O接口方面:
PS/2接口:市面上的键盘鼠标(支持PS/2的一般都很低端)等都和PS/2及USB键盘兼容。
VGA接口:显卡所处理的信息最终都要输出到显示器上,显卡的输出接口就是电脑与显示器之间的桥梁,它负责向显示器输出相应的图像信号。CRT显示器因为设计制造上的原因,只能接受模拟信号输入,这就需要显卡能输出模拟信号。VGA接口就是显卡上输出模拟信号的接口,VGA(Video Graphics Array)接口,也叫D-Sub接口。虽然液晶显示器可以直接接收数字信号,但很多低端产品为了与VGA接口显卡相匹配,因而采用VGA接口,转换数字信号需要DVI转接头(具体自行百度)。
DVI接口 :以传输数字信号为主,有DVI-A、DVI-D和DVI-I三种不同的接口形式。DVI-D只有数字接口,DVI-I有数字和模拟接口,目前应用主要以DVI-D为主,转换VGA需要dvi转vga转接头(具体自行百度)。
HDMI接口:高清晰度多媒体接口(英文:High Definition Multimedia Interface,HDMI)是一种数字化视频/音频接口技术,是适合影像传输的专用型数字化接口,其可同时传送音频和影音信号,最高数据传输速度为5Gbps。同时无需在信号传送前进行数/模或者模/数转换。HDMI可搭配宽带数字内容保护(HDCP),以防止具有著作权的影音内容遭到未经授权的复制。HDMI所具备的额外空间可应用在日后升级的音视频格式中。而因为一个1080p的视频和一个8声道的音频信号需求少于4Gbps,因此HDMI还有很大余量。这允许它可以用一个电缆分别连接DVD播放器,接收器和PRR(具体自行百度)。

网络接口:网线接入口,不同主板一般接口型号不同。
音频接口:自行看主板说明书,一般分布颜色不用代表的工具也不同(如麦克风,喇叭)。

另附:一个已经被取消的部件——北桥芯片
北桥芯片:(全称:NorthBridge)是主板芯片组中起主导作用的最重要的组成部分,也称为主桥(HostBridge)。负责与CPU的联系并控制内存(仅限于Intel除Core系列以外的cpu,AMD系列cpu在K8系列以后就在cpu中集成了内存控制器,因此AMD平台的北桥芯片不控制内存)、AGP数据在北桥内部传输,提供对CPU的类型和主频、系统的前端总线频率、内存的类型(SDRAM,DDR SDRAM以及RDRAM等等)和最大容量、AGP插槽、ECC纠错等支持,整合型芯片组的北桥芯片还集成了图形处理器。
(目前的主板均已取消北桥,因为已被整合进CPU了)

 

二.主板板型:(非原创,仅整理)
ATX:(俗称:“大板”
采用7个I/O插槽,CPU与I/O插槽、内存插槽位置更加合理。优化了软硬盘驱动器接口位置。提高了主板的兼容性与可扩充性。采用了增强的电源管理,真正实现电脑的软件开/关机和绿色节能功能。Micro ATX保持了ATX标准主板背板上的外设接口位置,与ATX兼容。
MATX(Micro ATX)结构主板:(俗称:“小板”)
Micro ATX主板把扩展插槽减少为3-4只,DIMM插槽为2-3个,从横向减小了主板宽度,其总面积减小约0.92平方英寸,比ATX标准主板结构更为紧凑。按照Micro ATX标准,板上还应该集成图形和音频处理功能。在很多品牌机主板使用了Micro ATX标准,在DIY市场上也常能见到Micro ATX主板。(没事不建议弄这种主板)
E-ATX:服务器/工作站主板,是专用于服务器/工作站的主板产品,板型为较大的ATX,EATX或WATX,要使用专用的服务器机箱电源。
和AT电源不一样,ATX电源除了在线路上作了一些改进,其中最重要的区别是,关机时ATX电源本身并没有彻底断电,而是维持了一个比较微弱的电流。同时它利用这一电流增加了一个电源管理功能,称为Stand-By。它可以让操作系统直接对电源进行管理。通过此功能,用户就可以直接通过操作系统实现软关机,而且还可以实现网络化的电源管理。如在电脑关闭时,可以通过网络发出信号到电脑的Modem上,然后监控电路就会发出一个ATX电源所特有的+5V SB激活电压,来打开电源启动电脑,从而实现远程开机。

=========================================================

三.主板的选取科普

前要:目前主板分为intel和AMD的主板,所以,大家在购选主板的时候千万看准是支持英特尔还是AMD的板子。
在此基础上,还要看CPU针脚数目和类型以及主板CPU插槽孔数目和类型是否相同(具体可以去ZOL查看参数)
比如
intel:LGA 775/1155/1150/1556/1366/2011
AMD:Socket AM1/AM1+/AM2/AM2+/AM3/AM3+
如果符合以上条件,但仍旧无法开机或者不兼容出现异常,请尝试更新你的主板BIOS试试,如果还是不行请自行联系品牌客服走起.
———————————————————–
(1)Intel 主板芯片组目前主流介绍:
关于intel主板芯片组的区别(目前主流):
三代CPU(Ivy Bridge)的主流芯片组分为:H61(低端) B75(中低端) H77(中高端) Z77(高端,可超频)
区别如下图:

RAID 0技术:即磁盘阵列,可以加多个硬盘在一起形成一个硬盘组,增加读取速率。
优点:没有数据冗余,高可用性,很高的传输速率,大大提高储存性能
缺点:正是因为没有数据冗余,在提高性能的同时,并没有提供数据可靠性,如果磁盘失效,将影响到整个数据,一旦损坏,无法恢复。
=====================================================================
四代CPU的主流芯片组分为:H81(低端) B85(中低端) H87(中高端) Z87(高端,可超频)
区别如下图:


(破解支持:即破解后才支持。)

AHCI:AHCI本质是一种PCI类设备,在系统内存总线和串行ATA设备内部逻辑之间扮演一种通用接口的角色(即它在不同的操作系统和硬件中是通用的)。
———————————————————–
H61 B75 H77 Z77 与H81 B85 H87 Z87相比,区别如下图:

Max DIMMs:内存插槽
SRT:智能加速技术全名为“Smart Response Technology”,简称SRT。实际上,该技术完全基于软件,属于Intel RST快速存储技术驱动10.5版中的一项新特性,不过仅能在Z68芯片组上开启(还支持移动芯片组HM67、QM67)。
RST:(Rapid Storage Technology),
DSA:动态储存加速功能(Dynamic Storage Accelerator,简称DSA)
Z87(芯片组):支持超频,支持SLI或CF,支持RAID,接口丰富
H87(芯片组):不支持超频,部分只支持CF,支持RAID,接口略少
B85(芯片组):不支持超频,不支持CF或SLI,不支持RAID,接口更少
=========================================================
目前旗舰级的CPU芯片组为:X79(最高端)
只支持Intel的CPU 插槽类型为LGA 2011的CPU

关于AMD的主板芯片组:
(由于AMD的CPU以及主板实在太乱了,我就简短说说)
首先,AMD平台当前CPU可分为三大类,一类是以强力的整合显示核心为卖点的APU平台,一类是以多核心、超频为卖点的推土机平台,此外还有一些残余的羿龙II系列CPU
FM1 CPU和FM1主板是绑定死的,只能这样搭配

APU主板目前有A75和A55两种,A75具备原生的SATA3.0和USB3.0接口,而A55则没有,性能和扩展性方面,两者都是一样的,
需要搭配A4/A6/A8 APU或者X4 641等FM1接口的新速龙II才能使用,无法搭配AM3接口的速龙II、羿龙II使用。实际上为了市场划分的需要,很多A55都会做成双内存插槽,扩展性能相对A75会差一些,价格略低一点。
对于选择APU和新速龙II X4 641等FM1接口产品的用户,A75是最佳的选择,因为它在比A55略贵50~100元的基础上提供了速度快10倍的原生USB3.0接口。
=========================================================
FM2/FM2+ CPU和FM2/FM2+ 主板,属于淘汰以及极端冷门级别,脑子没问题就不要去配了。
虽然AM2/AM2+ CPU已经是5~6年前的产品,但是一些用户还是在使用它们,比如用作下载机或者放在家里给长者上网使用。这么用下来其实也没啥问题,因为这些场合对CPU性能要求并不高.
老CPU的最佳选择:AM2+接口780G/790G等

AMD AM2和AM2+两种接口有着比较好的交叉兼容性,AM2 CPU可以支持AM2+接口主板,AM2+ CPU也可以在AM2主板上使用,不过它们两者都只能支持DDR2内存,因此,对于还持有AM2/AM2+ CPU的用户,换主板最佳选择是采用DDR2内存插槽的AM2+主板。
=========================================================
FM3/FM3+ CPU和FM3/FM3+ 主板

推土机平台采用AM3的改进版AM3+接口,和AM2/AM2+关系相似,AM3/AM3+也有很好的互换性,AM3 CPU可以在AM3+主板上用,而AM3+ CPU也能在AM3上使用,只是会有一些限制。
AM3+主要有三种主板,从最低端到最高端分别为970、990X和990FX,主要区别在于多卡支持,970不支持多卡,990X是x8+x8双卡,而990FX则是x16+x16双卡,目前市场主要卖的是970。此外,市面还有一些870、880G之类旧芯片组用AM3接口提供推土机支持的主板,不过由于供电设计较弱、需要刷新BIOS,而且AM3供电能力可能不能完美满足8核级别推土机,因此并不推荐给主流用户。
对于选择用X4 955或者FX-6200级别CPU装机的用户,最值得推荐的是AMD的970主板,它能提供原生SATA3.0接口、RAID功能、高频内存支持和更好的CPU供电支持,而如果用户使用FX-4100这些功耗不高的产品,并且不超频,那么用刷新了BIOS的880G/870也是可以的,只是这个级别的推土机不大值得推荐。
对于APU和推土机CPU来说,大家分别选择A75和970主板即可,他们都是新东西,配新主板应该不难理解。比较容易糊涂的是新速龙II,AM3接口的速龙II目前已经停产退市了,现在的速龙II X4 641、速龙II X4 651K之类CPU实际是屏蔽了显示部分的APU,因此必须搭配A75搭配,大家不要买了AM3/AM3+主板来搭配。

=========================================================

买APU或者X4 641之类FM1接口CPU,必选A75主板;买推土机CPU,最好选AM3+接口的970主板;老CPU换主板,AM2+主板是最佳选择;AM2+老主板升级新CPU,需要有BIOS支持和DDR3内存插槽;AM3老主板升级新CPU,羿龙II X4 955和羿龙II X6 1090T是好选择。
=========================================================
小结:最好选AM3+接口“以上”的970主板。其实除了FX4XXX/FX6XXX。别的就是FX8XXX我更推荐970以上 的主板。