修改wordpress默认前缀

近期网站频繁被尝试非法登陆,虽然没有被登陆成功,但还是认为表名按wordpress默认的来太过危险,故实践了下,把默认表名给更改掉。

以下为操作步骤:

1.确认数据库当前都有哪些表要修改:
show databases;
use xxxdb;
show tables;

2.重要:正式操作前对数据库做快照或备份,方便出错后回滚

3.修改 wp-config.php
把新的前缀指定到table_prefix中

4.重命名wordpress所有的表:
ALTER TABLE wp_users rename to newprefix__users;

5.对如下两张表内的’wp_’前缀进行全表替换,否则权限不对,无法对进入控制台对posts进行编辑
UPDATE newprefix_options
SET option_name = replace (option_name,’wp_’,’newprefix_’);

UPDATE newprefix_usermeta
SET meta_key = replace (meta_key,’wp_’,’newprefix_’);

另外,原来的密钥是人工随机输入生成,为提交安全性,在下述网址生成了最新的安全密钥:
https://api.wordpress.org/secret-key/1.1/

 

WordPress如何让文章有效的组织与显示

wordpress所使用的主题,默认只显示最近编辑的几篇文章,对于文章数量较多的时候,没法形成一个友好的导航列表。

制作Page页是一种办法,但page跟post是不同的对象,每次写一篇post都要单独再加一个page,维护成本太大。

后面发现category可以区分父节点及子节点,那这也意味着可以灵活运用这个特性,先创建出一个相对静态的分类导航列表菜单。后面发布新的post的时候,只需要指定好归属哪一个类,就能自动的通过该导航菜单找到这个post。

现在还剩下的一个问题:点击category后,页面右侧显示出来的是Post的全文,在有多篇post返回的情况下,仍然不利于快速检索访问,并且会导致页面加载时间较长。

用如下的方法修改源代码后,点击category具体某一分类节点后,
只要显示Post摘要,不会再显示post全文。
在wp-content\themes目录下,选择当前使用的主题模板,然后打开index.php,会发现部分代码如下:
while ( have_posts() ) { 
   the_post(); 
   get_template_part( 'xxx', get_post_format() ); 
}

index.php是调用xxx.php的文件用来输出文章的内容,在模板目录下找到xxx.php,打开编辑它,找到这段代码:

the_content( __( 'Read more...', 'xxx' ) );

将该行代码注释掉,修改成:

if(!is_single()) { 
    the_excerpt(); 
 } else { 
    the_content(__('(more…)')); 
 }

保存更新后,重新访问站点首页,发现文章不再显示全文,只会显示文章开头一部分内容。

新问题:

虽然现在只会显示文章部分内容,但有些post还是会显示比较多的内容?有没有办法可以限制显示的字节数?

to be continue…

 

[个人笔记] EC2 PHP 5.3 升级到 7.0

WordPress安全提示,反馈系统的PHP版本太低,建议升级。

升级步骤:

1. 兼容性检查:

安装了php兼容性检查插件,发现升级到PHP 7.0后,可完全兼容当前环境下的所有插件。

2.EC2服务器创建快照,升级后如果有问题可以回退。

3.备份当前服务器下的HTTPD,PHP安装文件夹及配置文件。

4.停httpd服务:

sudo service httpd stop

5.删除旧版HTTPD, PHP:

sudo yum remove httpd* php*

6.安装新版httpd, php:

sudo yum install httpd24

sudo yum install php70

7.检查软件版本:

rpm -qa |grep -i http

rpm -qa |grep -i php

php -v

8.启动新的httpd:

sudo service httpd start

sudo chkconfig httpd on (设置开机服务自启动)

9.检查端口监听情况:

netstat -an |grep 80

10.浏览器访问wordpress网站:

页面报错:

Your PHP installation appears to be missing the MySQL extension which is require

解决方法:

sudo yum install php70-mysql*

11.再次浏览器访问wordpress网站,成功,可正常访问。

[个人笔记] MAC 下安装WebDriverAgent

参考:https://testerhome.com/topics/7220

下载WebDriverAgent源码:

git clone https://github.com/facebook/WebDriverAgent

运行初始化脚本:

./Scripts/bootstrap.sh

该脚本会使用Carthage下载所有的依赖,使用npm打包相应的js文件。

执行这个脚本期间,会因为有些包没有安装而中断:

brew install carthage

brew install npm

WebDriverAgentRunner:

报错1:

The app ID "com.facebook.WebDriverAgentRunner" cannot be registered to your development team. Change your bundle identifier to a unique string to try again.


报这个错是因为WebDriverAgentRunner -> Build Settings -> Build Settings -> Packaging -> Product Bundle Identifier 要改成唯一可识别字符串
报错2:

"Failed to create provisioning profile.There are no devices registered in your account on the developer website. Plug in and select a device to have Xcode register it."

No profiles for 'com.rockets.provenance' were found Xcode couldn't find any iOS App Development provisioning profiles matching 'com.rockets.provenance'.

报这个错是因为没有接入相关的设备到MAC上,只要设备接入,并通过XCode菜单:Product->Destnation->"Select Devices"选中要连接的设备就行。

XCode:
Product->Destination->”Select your iphone”
Product->Scheme->”Select WebDriverAgentRunner”
Product -> Test

注意:运行Test之前,手机先解锁再通过USB线连接到电脑。

运行完”Test”,如果遇到这个报错:

error: failed to launch '/private/var/containers/Bundle/Application/BA42CC5E-D4BF-486F-A45D-4D172E0AFFA2/WebDriverAgentRunner-Runner.app' -- Verify the Developer App certificate for your account is trusted on your device. Open Settings on "iPhone name" and navigate to General -> Device Management, then select your Developer App certificate to trust it.

则需要在手机的通用->设备管理中,选择信任开发者证书。

测试运行期间,会在iphone的桌面上生成一个”WebDriverAgentRunner-Runner”的图标,生成类似下面格式的日志信息:

2018-03-12 15:28:44.099884+0800 WebDriverAgentRunner-Runner[1097:323808] +[CATransaction synchronize] called within transaction
2018-03-12 15:28:44.160403+0800 WebDriverAgentRunner-Runner[1097:323808] Running tests...
2018-03-12 15:28:46.791644+0800 WebDriverAgentRunner-Runner[1097:323808] Continuing to run tests in the background with task ID 1
2018-03-12 15:29:17.746896+0800 WebDriverAgentRunner-Runner[1097:323808] Continuing to run tests in the background with task ID 4
Test Suite 'All tests' started at 2018-03-12 15:29:18.420
Test Suite 'WebDriverAgentRunner.xctest' started at 2018-03-12 15:29:18.421
Test Suite 'UITestingUITests' started at 2018-03-12 15:29:18.422
Test Case '-[UITestingUITests testRunner]' started.
 t = 0.00s Start Test at 2018-03-12 15:29:18.423
 t = 0.00s Set Up
2018-03-12 15:29:18.440098+0800 WebDriverAgentRunner-Runner[1097:323808] Built at Mar 1 2018 18:50:16
2018-03-12 15:29:18.465613+0800 WebDriverAgentRunner-Runner[1097:323808] ServerURLHere->http://169.254.209.183:8100<-ServerURLHere

这里,浏览器直接访问:http://169.254.209.183:8100 会一直超时,无法成功访问。解决方案如下:

端口转发:
原因:有些国产的iPhone机器通过手机的IP和端口还不能访问,此时需要将手机的端口转发到Mac上:
配置方法:
brew install libimobiledevice
brew install ideviceinstaller
$ iproxy 8100 8100
使用iproxy --help 可以查到更具体的用法。 这时通过访问http://localhost:8100/status确认WDA是否运行成功。
而inspector的地址是http://localhost:8100/inspector, inspector是用来查看UI的图层,方便写测试脚本用的。

运行微信跳一跳AI程序的话,还要安装如下组件:
pip install opencv-python
pip install facebook-wda

附:
苹果开发账户相关配置:
http://help.apple.com/developer-account/#/dev40df0d9fa

libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。

通过人工智能深度学习得到的模型来跑微信游戏跳一跳 原帖:
https://zhuanlan.zhihu.com/p/32636329

 

 

 

 

wordpress Pages Post之间差异

wordpress博客主要有两部分构成posts和pages,但是对于wordpress初学者来说,经常把这两个概念混淆。在pages和posts之间有很多不同点,知道并理解这些不同点,能够让我们更好的使用wordpress中的posts和pages。

page的特点

  • 博客中的page页面独立于post显示,通常很少发生变动
  • 通常使用page来和读者分享信息,但是很少去更新它
  • page页面没有发布时间,我们不需要显示page发布的时间
  • 根据主题的不同,page可以显示在任何地方
  • page通常按字母排序,但是我们可以改变排序的方式
  • page没有标签和分类
  • page页面不会出现在RSS源中,读者需要访问博客才能看到page页面的更新情况
  • 不要在page页面中嵌入Post
  • 通过page页面之间的父子关系,可以建立复杂的网站结构

post的特点

  • post通常按发布时间倒序排列
  • post经常被更新,需要显示发布时间
  • 可以通过标签和分类来组织post
  • post会出现在Rss订阅中

转自:http://www.wpcourse.com/differences-posts-pages.html

MAC下安装TensorFlow

内容直接参考了官网: https://www.tensorflow.org/install/

方法1: 下载编译好的包直接安装

pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl

验证:

$ python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>

方法2: 通过Anaconda进行安装

1.先下载并安装Anaconda, 中国大陆可以从: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载, 速度很快. 注意选择对应版本, 安装包里的数字对应的就是python的版本号.

2.创建一个 conda 中名字为 tensorflow的运行环境:
$ conda create -n tensorflow pip python=2.7 # or python=3.3, etc.

3.激活conda的tensorflow环境:
$ source activate tensorflow
 (targetDirectory)$ # Your prompt should change
 (逆向操作:source deactivate)

4.使用下列命令在conda里的tensorflow环境中安装tensorflow:
(targetDirectory)$ pip install --ignore-installed --upgrade TF_PYTHON_URL
where TF_PYTHON_URL is the URL of the TensorFlow Python package.

例如, 下述命令将安装一个python 3, 只支持CPU运算的tensorflow版本:(targetDirectory)$ pip install --ignore-installed --upgrade \
https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.5.0-py3-none-any.whl

5.验证安装结果:
执行一个tensorflow小程序验证.

6.在conda tenforflow环境下额外安装pandas:
(targetDirectory)$ # pip install pandas

方法3: 下载源码到本地根据本地环境编译安装

环境准备:

Mac OS X 下环境搭建: 
1.从 app store 安装 xcode 
2.安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL \  https://raw.githubusercontent.com/Homebrew/install/master/install)" 
3. 安装Bazel (Google开源的软件构建工具) brew install bazel 验证: bazel version 更新版本: brew upgrade bazel 
4. 安装SWIG 
brew install swig 注意: 你需要安装PCRE, 而不是 PCRE2. 
5. 安装Numpy,six,wheel
sudo pip install numpy six wheel

tenforflow的GPU计算只支持NVIDIA的显卡, 故MAC的机器不用考虑该部分内容.
(MAC)编译过程:

2.1 克隆TensorFlow仓库到本地

$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow 

2.2 进入源码目录
$ cd tensorflow 

2.3 生成环境配置
$ ./configure
  (中文网站没有说到这一步, 但如果不执行的话, 会报找不到numpy)

2.4 编译并安装:

$ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

2.5 创建 pip 包
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

2.6 安装pip包
# .whl 文件的实际名字与你所使用的平台有关
$ pip install /tmp/tensorflow_pkg/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

安装遇到的问题:

1. 从源码编译安装, 执行:

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

命令成功完成, 在执行命令的这个shell窗口, 可以以python里import tensorflow, 但是在其它的shell窗口, import tensorflow提示:

$ python

Python 2.7.13 (default, Mar 19 2017, 21:40:17) 

[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ImportError: No module named tensorflow

观察发现, 能成功import tensorflow的窗口打印的python版本信息为:

$ python
Python 2.7.13 (default, Apr 1 2017, 13:31:12) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>

也就是说虽然看上去python版本都是2.7.13, 其实执行的环境并不一样.

pyenv打印出来的信息对比:

成功的shell窗口:

$ pyenv versions

  system

  2.7.10

* 2.7.13 (set by /Users/xxx/.pyenv/version)

失败的shell窗口: 

$ pyenv versions

* system (set by /Users/xxx/.python-version)

  2.7.10

  2.7.13

查看pyenv help, 发现通过pyenv local 来指定环境信息:

$ pyenv help local

Usage: pyenv local <version>

       pyenv local --unset

Sets the local application-specific Python version by writing the

version name to a file named `.python-version'.

When you run a Python command, pyenv will look for a `.python-version'

file in the current directory and each parent directory. If no such

file is found in the tree, pyenv will use the global Python version

specified with `pyenv global'. A version specified with the

`PYENV_VERSION' environment variable takes precedence over local

and global versions.

<version> should be a string matching a Python version known to pyenv.

The special version string `system' will use your default system Python.

Run `pyenv versions' for a list of available Python versions.

根据帮助内容, 简单粗暴地执行了如下命令:

$ export PYENV_VERSION=2.7.13

强制设置一个环境变量, 让python执行时使用: 

2.7.13 (set by /Users/xxx/.pyenv/version)

接下来再执行import tensorflow就正常了

$ pyenv versions

  system

  2.7.10

* 2.7.13 (set by PYENV_VERSION environment variable)

$ python

Python 2.7.13 (default, Apr  1 2017, 13:31:12) 

[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf

>>> 

 

EC2服务器Apache下 /var/www/目录权限的配置

EC2上, Apache 文档根目录默认的路径为: /var/www/html, 因为这个目录有可能被不同用户访问, 如果不修改默认权限配置的话,后续无法使用不同用户对这个路径下的内容进行更新.

思路: 把要操作这个路径的所有用户都加到同一个组: apache.

配置步骤:

当前用户: ec2-user

原来安装apache的时候, 已自动生成apache 组.不再另外添加新的组.

1.将ec2-user加入apache组, 参数a表示append:

sudo usermod -a -G apache ec2-user

执行后可通过 groups这个命令来查看当前用户都在哪些组中.

2.将 /var/www 及其内容的组所有权更改到 apache 组:

sudo chown -R ec2-user:apache /var/www

若单独更改组, 可执行下面这条命令:
sudo chgrp -R apache /var/www

3.递归添加组写入权限:

sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;

4.重启Apache Web服务器, 让新的组和权限生效:

sudo service httpd restart

现在,ec2-user 用户 (以及 apache 组的任何未来成员) 可以在 Apache 文档根目录中添加、删除和编辑文件。

5.后续有新的用户ftpuser要更新/var/www/下的内容, 可将它加入组apache中:

sudo usermod -a -G apache ftpuser

Amazon EC2 RDS迁移到新的区域

之前创建EC2实例的时候,没有注意到区域的问题,后面才发现所创建的实例被设置在了美国东部的Ohio,从大陆访问的话,加载速度太慢,于是研究了一下如何切换区域。

这里先要明确AWS里两个概念: available region和 available area.

1. Region是指一个大的区域,比方说:california, tokyo, Ireland这些地方就是AWS有提供服务的一个区域。

2.Area是同一个区域划分出来的多个区,一般AWS在每个Region都会搭建若干个Area。

本文所指的迁移,是从一个区域到另外一个区域的迁移。

下面开始步入正题:

1.首先,因为这次是要优先保证从中国大陆访问EC2的速度,所以可以先通过工具测试下杭州到每个有提供AWS服务的城市的网络延时,具体可访问这个网址来得到测试数据:

http://www.cloudping.info/

可以多测试几次,综合判断出最适合自己访问速度最满意的地方。

下面我们将以从Ohio迁移到California为例进行说明。

2.迁移EC2,主要操作步骤如下:

控制台右上角的Region先选择Ohio

2.1 对Ohio当前EC2创建AMI镜像:

Instances->选择虚拟机 -> Actions: Image -> Create Image
Update the permission if you need:
Images->AMIs-> select AMI -> Actions-> Modify Image Permissions

2.2 把新创建好的镜像从 ohio 拷贝到 california:

Images->AMIs-> select AMI -> Actions->Copy AMI->Choose Destination region

2.3 把控制台右上角的区域切换至california:

launch new EC2 instance -> select custom AMI -> Your AMI from Ohio

后面的步骤按个人需要进行配置就行。

需要特别说明的是, 迁移后,California这边的安全组需要另外再配置一遍。同时,要重新配置SSH访问的证书。

如下旧的EC2实例不需要再使用,记得把它关掉,以免被计费。

 

3. 迁移RDS,主要操作步骤如下:

控制台右上角的Region先选择Ohio

3.1 先对Ohio这边的RDS创建快照:

Instance -> select DB instance -> Instance actions -> Take snapshot

3.2 把创建好的快照拷贝到California:

Snapshots -> select Snapshot -> Snapshot Actions -> Copy Snapshot -> Copy to California

3.3 把控制台右上角的区域切换至california:

Snapshots -> select Snapshot -> Snapshot Actions -> Restore Snapshot

3.4 配置下安全组。

3.5 更新下EC2实例中数据库访问的地址信息。

简要步骤就是上面这些。