吐槽 Cordova4.0 plugin 开发

为Cordova贡献了一个TTS文字转语音的简单插件,查看源代码可以移步:
https://github.com/etonn/Cordova-TTS-Plugin

在Cordova 4.0项目中,用前端Javascript调用Native代码,需要用plugin的方式实现。
以Android为例,按照官方说明制作好plugin后,本地安装:

cordova plugin add ./com.etonn.plugins.tts

提示:
Error: Could not find plugin info in /mypath… at new PluginInfo(…lib/src/PluginInfo.js: 229: 15)
然后竟然…把我做的plugin文件都删掉了,不论是我使用本地绝对路径还是相对路径,都无法顺利安装,
原来安装plugin的时候,Cordova会自动通过网络查找plugin.xml的信息,
找不到则认为plugin无法安装并自动删除目录中已经”下载”的plugin。

通过分析安装其他网络上的plugin后发现,成功安装一个plugin后,除了copy代码文件到相应目录外,还会自动修改以下文件:

plugins/android.json
platforms/android/assets/www/cordova_plugins.js
platforms/android/res/xml/config.xml

其中:
android.json记录了有哪些plugin已经安装,
cordova_plugins.js记录当运行app时,自动载入哪些js文件,
config.xml会添加feature告诉Native app增加了哪些package。
所以手动调试安装plugin就可以直接修改以上3个文件了。
如果这时运行命令: Cordova build 依然会自动删除手动添加到platforms里面但未注册的plugin文件。
务必要做好备份工作。

为 Mac OS X 系统下的 PHP 增加 mCrypt

现在Laravel、Opencart等软件都是需要PHP支持mCrypt了,
可是Mac OS X 默认的PHP版本是不支持mCrypt的,
使用homebrew可以像yum或apt-get那样快速的安装它。

步骤如下:

# 安装 Command Line Tools
xcode-select --install

# 安装 homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew doctor
brew update

# 添加源, 因为默认源没有php55-mcrypt
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php

# 安装 autoconf
brew install autoconf

# 安装 mcrypt
brew install autoconf mcrypt

# 安装 php55-mcrypt 同时会安装最新版本的PHP5.5
brew install php55-mcrypt

# 查看安装到哪里了
brew info php55-mcrypt

# 现在php55-mcrypt安装好了,但是phpinfo()的时候应该没有mcrypt,还需要修改libphp5.so的路径
# 编辑 /etc/apache2/httpd.conf
LoadModule php5_module /usr/local/opt/php55/libexec/apache2/libphp5.so

# 现在php.ini使用的是
/usr/local/etc/php/5.5/php.ini
不是默认的
/etc/php.ini.default

在 Mac OS X 系统下配置 Apache MySQL PHP phpMyAdmin 环境

我用的Mac系统版本是OS X 10.10.1,其实系统中已经默认安装了Apache和PHP,只需要再安装一个MySQL就行了。

一、启动Apache

sudo apachectl start

访问 http://localhost/ 会看到Apache已经成功启动。
web root 的默认目录为 LibraryWebServerDocuments

二、配置Apache

编辑httpd.conf文件修改为自定义目录:

sudo vi /etc/apache2/httpd.conf
DocumentRoot "/Users/UserName/Sites"
<Directory "/Users/UserName/Sites">

把libphp5.so的注释删掉

LoadModule php5_module libexec/apache2/libphp5.so

把虚拟主机配置文件的注释删掉

Include /private/etc/apache2/extra/httpd-vhosts.conf

编辑虚拟主机配置文件

sudo vi /etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot "/Users/UserName/Sites/localhost/"
ServerName localhost
ErrorLog "/private/var/log/apache2/localhost-error_log"
CustomLog "/private/var/log/apache2/localhost-access_log" common
<Directory "/Users/UserName/Sites/localhost/">
Options Indexes
AllowOverride None
Allow from all
</Directory>
</VirtualHost>

三、安装MySQL

我下载的是MySQL 5.5,个人觉得5.6的很多特性在laptop上用不到,而且占空间多。
当然如果是多核服务的话,强烈建议使用5.6。
安装后在 System Preferences 里面会出现 MySQL 的控制面板,进去启动它。
默认的root用户是没有密码的,修改密码

/usr/local/mysql/bin/mysqladmin -u root password your-new-password

四、安装phpMyAdmin

我使用的是phpMyAdmin 4.3.3版本,这里有个大坑,
在我尝试登录phpMyAdmin的时候,总是提示我
Cannot log in to the MySQL server
这个错误太笼统,造成不能登录MySQL的可能性很多,于是用排除法先用命令行登录,成功,
然后用NaviCat,也没问题,由此判断为phpmyadmin本身的问题,
换成phpMyAdmin 3.5版本,尝试登录后提示
#2002 Cannot log in to the MySQL server
原来错误代码是#2002,Google搜到这篇文章,
http://blog.ryantremaine.com/2011/03/2002-cannot-log-in-to-mysql-server.html
编辑phpMyAdmin的config.inc.php文件,修改

$cfg['Servers'][$i]['host'] = 'localhost';

$cfg['Servers'][$i]['host'] = '127.0.0.1';

问题解决。:)

Ubuntu 14.04 安装Redmine及整合Git环境之快速偷懒篇

现在网上转来转去的文章太不靠谱,坑太多,填坑填得心很憔悴。
这篇文章在我填坑埋土大半天后写成,已经反复测试过3遍,整个过程只需要手动copy即可。
系统环境为 Ubuntu 14.04 LTS ,不保证其他版本依然有效,但仍可作为有效参考。

一、准备工作

# 首先升级软件包
sudo apt-get update
sudo apt-get upgrade
# 安装LAMP环境
sudo apt-get install tasksel
tasksel
sudo apt-get install phpmyadmin

二、安装 Redmine

sudo apt-get install redmine-mysql
sudo apt-get install redmine
sudo apt-get install imagemagick #可选
sudo gem install bundler
#安装后主要目录结构如下:
#redmine目录:/usr/share/redmine/
#配置文件目录:/etc/redmine/default/
#日志文件目录:/var/log/redmine/

三、安装Email

sudo apt-get install postfix #Select ‘Internet Site’

四、一些必要的权限配置

#程序启动时需要创建配置文件及log,给他权限
sudo chmod 775 /etc/redmine/default/
sudo chmod -R 775 /var/log/redmine/
sudo mkdir /usr/share/redmine/tmp
sudo chmod -R 775 /usr/share/redmine/tmp
#sudo mkdir /usr/share/redmine/public/plugin_assets # 如果需要安装plugin
#sudo chmod 775 /usr/share/redmine/public/plugin_assets
sudo mkdir /usr/share/redmine/files
sudo chmod 775 /usr/share/redmine/files
#为整合apache做准备
sudo chown -R www-data:www-data /usr/share/redmine

五、使用 webrick 测试

sudo ruby /usr/share/redmine/script/rails server webrick -e production
#默认端口是3000,例如访问http://git.mimiz.cn:3000/ 查看效果

六、配置Apache

sudo apt-get install libapache2-mod-passenger
sudo ln -s /usr/share/redmine/public /var/www/redmine
sudo vi /etc/apache2/sites-available/redmine.conf
#增加一行:RailsBaseURI /redmine
sudo vi /etc/apache2/sites-enabled/000-default.conf
#修改web根目录为:DocumentRoot /var/www
#增加一行:ServerName localhost
sudo vi /etc/apache2/mods-available/passenger.conf
#增加一行:PassengerDefaultUser www-data
sudo a2ensite redmine
service apache2 reload
sudo service apache2 restart

七、配置 Redmine

#创建config配置文件
sudo cp /usr/share/redmine/config/configuration.yml.example /etc/redmine/default/configuration.yml
#编辑config文件
sudo vi /etc/redmine/default/configuration.yml
#查找修改以下内容:

production:
    email_delivery:
        delivery_method: :sendmail
attachments_storage_path: /usr/share/redmine/files
scm_stderr_log_file: /var/log/redmine/redmine_scm_stderr.log

sudo service apache2 restart #重启生效

八、安装 Git

sudo apt-get install git git-core
#一些简单的设置
git config –global user.name “mimi”
git config –global user.email “mimi@mimiz.cn”
#查看设置
git config –list

九、为Redmine创建版本库

#为图方便我创建到Redmine目录中
sudo mkdir /usr/share/redmine/gitrepo
sudo mkdir /usr/share/redmine/gitrepo/project1
cd /usr/share/redmine/gitrepo/project1
sudo git init –bare
#给他权限,同样为了方便我设置777
sudo chmod -R 777 /usr/share/redmine/gitrepo/
sudo chown -R www-data:www-data /usr/share/redmine

十、在Redmine系统中设置版本库路径

在Redmine系统中,path 路径要填系统的绝对路径 /usr/share/redmine/gitrepo/project1
这里有个大坑,需要commit一次代码才能显示出来,否则总是显示404:
The entry or revision was not found in the repository

十一、本地连接Git

#这里的username是你ssh登录系统的username
username@server-ip:/usr/share/redmine/gitrepo/project1

十二、如果你想修改目录

#参考这篇文章:
http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_in_a_sub-URI
sudo vi /usr/share/redmine/config/environment.rb
在文件最后一行添加:
Redmine::Utils::relative_url_root = “/path”

———-我是无敌的终结线——–

搭建CentOS6+Apache+MySQL+PHP+PostFix服务器环境之快速偷懒篇

以目前最新版CentOS6为例,整个过程只需要手动copy即可。

一、配置网络

如果购买的云主机可以省略这步,如果自己安装的CentOS需要先配置IP地址,以静态IP为例:
配置网卡:

vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0

修改网关:

vi /etc/sysconfig/network
NETWORKING=yes
GATEWAY=192.168.1.1

修改DNS:

vi /etc/resolv.conf
nameserver 8.8.8.8

重启网络:

service network restart

二、增加国内yum源

cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
wget http://mirrors.aliyun.com/repo/Centos-6.repo
yum makecache
yum install yum-fastestmirror -y

三、提前配置防火墙

vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT #for ftp
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT #for ftp
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT #for ftp
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #for apache
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #for mysql
-A INPUT -p tcp --dport 12000:13000 -j ACCEPT #for ftp PASV
service iptables restart

四、安装Apache

yum install httpd
vi /etc/httpd/conf/httpd.conf
修改以下内容:
ServerName localhost:80
AllowOverride All
Options FollowSymLinks
DirectoryIndex index.html index.html index.php

创建虚拟主机:
vi /etc/httpd/conf.d/httpd-vhosts.conf
增加以下内容:
NameVirtualHost *:80
<virtualhost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
ServerName localhost
#ErrorLog “logs/localhost-error.log”
#CustomLog “logs/localhost-access.log” common
</virtualhost>
<virtualhost *:80>
ServerAdmin webmaster@domain.com
DocumentRoot /home/domain_com/public_html
ServerName domain.com
ServerAlias http://www.domain.com
#ErrorLog logs/domain.com-error.log
#CustomLog logs/domain.com-access.log common
</virtualhost>

设置Apache开机启动

chkconfig httpd on
service httpd restart

五、安装MySQL

yum install mysql mysql-server
/etc/init.d/mysqld start
chkconfig mysqld on

设置root密码:

/usr/bin/mysqladmin -u root password 'new-password'

六、安装PHP

yum install php
service httpd restart

目前yum安装的是PHP5.3.3

根据yum源选择需要安装的组件:

yum search php
yum install php-bcmath php-gd php-imap php-ldap php-mbstring php-mysql php-odbc php-pdo php-pear php-soap php-xml php-xmlrpc php-mcrypt
service httpd restart
service mysqld restart

七、安装phpMyAdmin

目前最新版本是4.2.4,但根据yum安装的php和mysql版本,应该安装4.0.10才更合适。
首先进入要存放phpmyadmin的目录

cd /var/www/html/
wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.0.10/phpMyAdmin-4.0.10-english.zip
unzip phpMyAdmin-4.0.10-english.zip

为apache配置phpmyadmin的虚拟目录:

vi /etc/httpd/conf/httpd.conf
Alias /phpmyadmin "/var/www/phpmyadmin/"
<Directory "/var/www/phpmyadmin/">
AllowOverride None
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

八、安装vsftpd

yum install vsftpd
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
#注意这里:如果chroot_local_user设置了YES,那么chroot_list_file是不被chroot的用户(可以向上改变目录)。
#如果chroot_local_user设置了NO,那么chroot_list_file是被chroot的用户(无法向上改变目录)。
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
pasv_max_port=13000 #这里是设置PASV使用的端口范围 和前面iptables规则对应
pasv_min_port=12000

创建chroot_list
touch /etc/vsftpd/chroot_list

创建ftp用户

useradd -d /var/www/html/ -g ftp -s /sbin/nologin -M ftpusername
passwd ftpusername
chown -R ftpusername /var/www/domain_com
chmod -R 755 chmod -R 755
service vsftpd restart
chkconfig vsftpd on

这时登录ftp应该会出现550错误,原因是没有配置SELINUX权限
因为是偷懒,直接关闭SELINUX:

vi /etc/selinux/config
SELINUX=disabled

临时关闭:

/usr/sbin/setenforce 0

九、安装Postfix

一般来说CentOS内置了Postfix
检查下看看:

yum -qa | grep postfix

yum安装:

yum install postfix

安装后命令行运行mail测试一下,就算没问题了估计也不能通过php的mail()发送邮件,因为httpd没有maildrop的权限

chmod 777 /var/spool/postfix/maildrop

其他可能存在的权限问题:

chown apache.apache -R /var/www/html
chown mysql.mysql -R /var/lib/mysql

完毕!

自定义WordPress主题widgets

将以下代码添加到functions.php:

function widget_footer_copyright() {
register_sidebar(array(
'id'=>'widget_footer_copyright',
'name'=>'页脚版权信息'
));
}
add_action('widgets_init','widget_footer_copyright');

在模板文件中使用:
<ul><?php dynamic_sidebar(‘widget_footer_copyright’); ?></ul>

在WordPress主题中使用自定义Shortcode

WordPress 的 Shortcode 常用的主要有3种:
[shortcode foo=”bar”]
[shortcode]text[/shortcode]
[shortcode foo=”bar”]text[/shortcode]

这里简单介绍第一种的定制方法,编辑以下代码到functions.php:

// [redirect url="?page_id=100"]
function sc_redirect( $atts ){
extract( shortcode_atts( array(
'url' => 'http://mimiz.cn',
), $atts ) );

$result = ‘window.location.href=”‘.home_url(‘/’).$url.'”;’;

return $result;
}
add_shortcode( ‘redirect’, ‘sc_redirect’ );

以上代码作用是创建一个重定向的shortcode。

需要进一步了解shortcode请移步官方文档:
http://codex.wordpress.org/Shortcode_API

在WordPress主题中自定义菜单

1. 首先在主题的functions.php中注册菜单:

register_nav_menus(array(
'primary_nav' => 'Primary Navigation',
'secondary_nav' => 'Primary Navigation'
));

2. 在后台的 Appearance -> Menus 中设置菜单项。

3. 在主题中显示菜单:

wp_nav_menu( array('menu_class' => 'primary_nav', 'theme_location' =>'primary_nav') );

wp_nav_menu(); 函数支持丰富的参数,详情参考官方文档:
http://codex.wordpress.org/Function_Reference/wp_nav_menu

时间为什么不够用

  什么是企业家最头疼的事情?接受调查的大部分高级管理者都给出了同样的回答:时间不够用。正因为如此,“时间管理”近来成为企业家关注的焦点。一些专家也提出了一些理论,例如“向时间要效率”、“以12个小时做完14个小时的事”,他们把时间管理等同于“提高速度”。

  时间管理等同于速度管理吗?怎样的时间管理才是最科学的?带着这些问题,记者采访了被德国《资本》杂志等媒体誉为“时间管理界教皇”的罗特尔·塞维特教授。

  事务性工作浪费了太多时间

  作为一名深受欢迎的演说家及教育家,塞维特教授迄今已经培训了10多万名时间管理学学员。1999年,他成为首位获得美国培训发展协会“杰出实践奖”的德国人。设于海德堡的塞维特培训顾问学院就是专门研究“时间管理”理论和“终身领导”理论的机构。

  说起时间管理,塞维特教授先给记者讲了个寓言:一人在林中散步,见到一名伐木工正在大汗淋漓地锯着已经砍倒的树干。散步者觉得奇怪,便问伐木工人:“打搅一下,我发现你的锯子已奇钝无比!你为何不把它磨锋利呢?”伐木工气喘吁吁地回答:“我可没时间———我还得锯大树呢!”

  很多管理者上班的时间被各种工作占满,回到家里还要寻找时间继续工作,从早忙到晚,还是感觉时间不够用、工作做不完。问题出在哪里?塞维特教授认为,就像忙碌的伐木工人,管理者不愿意抬头看一看,究竟谁偷走了我们的时间。

  前不久,塞维特对企业管理者的时间分配进行了调查,结果出乎很多人意料:占用管理者最多时间的并不是作出战略决策,也不是关注行业动态,而是打电话、开会和处理邮件。“正是这些事务性的工作偷走了我们的时间,而这些工作本身并不能创造价值”,塞维特教授认为,一旦“抓住了偷时间的贼”,剩下的问题就很好解决了。比如,可以有很多方法提高处理电子邮件的效率:清理文件夹,对每封电子邮件回复、归档或删除;把电子邮件分类,设置“自动回复”功能;要求自己处理任何一封电子邮件均不要超过2分钟;回复邮件时使用“群发”功能等等。

  按“优先原则”工作

  会不会利用时间,关键在于会不会制定完善、合理的工作计划。塞维特教授认为,要按照“80/20定理”工作,即将80%的精力集中在20%的关键业务中。

  米歇尔是德国西门子公司的技术总监。以前,米歇尔每周要工作50至55个小时,周末还要把工作带回家做;现在,在下班前1个小时,他就完成了过去全天都做不完的任务。发生这样的变化,是因为他使用了塞维特教授提供的方法———制定每天工作计划。

  在制定计划过程中,塞维特教授建议米歇尔注意两点:第一,预留出弹性时间,因为有时候,计划赶不上变化;第二,适用优先原则,把工作分成非常重要、重要和次要三类,以重要程度排列先后次序。此外,每天还要做点使自己特别高兴的事情,因为这样能够鼓励自己按照工作计划执行,并且可以消除工作疲劳。

  学会拒绝、大胆授权

  有一些管理者发现,他们预留的弹性时间永远不够用,总是会遇到一些突如其来的事情,比如,同事拿着一个问题向你请教,或是老板又指派一些新的任务。塞维特教授的建议是:要学会恰当的拒绝。

  拒绝是时间管理中摆脱变化和纠缠的有效方法,但很多人担心得罪人而不愿这样做。塞维特教授认为,拒绝的方法是非常重要的。首先,必须耐心听别人把事情讲完,拒绝时应和颜悦色,但要显露出坚定的态度。拒绝之后,若有可能,可为他提供其它途径的帮助。特别重要的一点是,切忌通过第三者拒绝,因为这样做会显示出你的懦弱,也让对方认为你不够真诚。

  对于高层管理人员来说,塞维特教授则说服他们“大胆授权”。德国巴符特公司总经理弗里柯现在已经离不开录音机了,每天一上班,他把一天的计划录到磁带里交给秘书,并把一切日常工作和琐事尽量委托出去,剩下的时间,就可以做最重要的事情了。“管理是通过他人将事情办妥,可是很多人并不知道这一点。”

  说到这里,塞维特教授总结说,时间管理并不能简单理解为节约时间、提高效率,它的概念要广阔得多,时间管理中包含了构思个人的生活远景、制定具体生活目标以及合适的成功发展策略等等。

  管好时间、享受生命

  塞维特教授说,如今的社会文化过于强调成绩和效率,很多人因此而忽视了生命的意义。工作、朋友与家庭、个人的健康以及个体的精神层面探索,是生活中的四个核心领域。每个人在这四个领域的“幸福平衡”各有不同,有些人觉得花1小时听音乐会得到的享受足以弥补周末10小时加班的辛劳,而另一些人则会感觉与家人在一起更能消解疲劳。但是,这四项当中偏废任何一项,都可能使心灵感到空虚。因此,塞维特教授提出,除了时间管理技巧之外,人们需要一种“生命管理”的意识,它是时间管理的延伸。

  那么怎样才能取得四个方面的“幸福平衡”呢?塞维特教授认为:一是提高工作绩效,要积极参与工作和事业,不做不切实际的计划;二是健康,要用固定的时间去休息或健身,提高工作效率;三是人际接触,花时间与儿女、父母、朋友、同事与邻居建立良好的关系;四是生命意义问题,积极构思自己和家庭的未来蓝图,关心环境和人类的大问题,为心灵找到归宿。

  塞维特自己也是这么做的。塞维特的公司里只有5名员工和19名兼职培训师。但就是这区区20多人,其工作效率及经营收入却可以和一个上百人的顾问公司媲美。据记者了解,塞维特教授给企业培训的小时工资超过1000欧元,但他每个月却只安排不到10次讲课。记者看了他的日程表,除了6小时工作,还安排了运动、聚会、美食和兴趣爱好等。

  摘自《环球时报》

流浪的人

流浪的人啊,
你究竟在追寻什么?

既然选择了流浪,
就只管风雨兼程。

你错过了夏花绚烂,
必将走进秋叶静美。

起点就是归处?
要寻找光芒万丈的天堂。

如果…
你还年轻。