吐槽 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文件。
务必要做好备份工作。

Sponsored Post Learn from the experts: Create a successful blog with our brand new courseThe WordPress.com Blog

WordPress.com is excited to announce our newest offering: a course just for beginning bloggers where you’ll learn everything you need to know about blogging from the most trusted experts in the industry. We have helped millions of blogs get up and running, we know what works, and we want you to to know everything we know. This course provides all the fundamental skills and inspiration you need to get your blog started, an interactive community forum, and content updated annually.

为 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小时工作,还安排了运动、聚会、美食和兴趣爱好等。

  摘自《环球时报》

流浪的人

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

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

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

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

如果…
你还年轻。