存档在 2013年3月

Android模拟器RAM修改方法

2013年3月29日

Android模拟器启动速度慢,运行也很缓慢。如何加速?可以通过修改Android模拟器的RAM大小来解决。一般情况下,真机的RAM都大得多。

我的模拟器配置路径为(Administrator目录是我的Windows用户名称,okayname.avd目录是所创建的OkayName模拟器设备名称)

C:\Users\Administrator\.android\avd\okayname.avd

okayname.avd目录下的congfig.ini就是OkayName模拟器设备的配置文件:

用EditPlus打开这个ini文件:

avd.ini.encoding=ISO-8859-1
hw.dPad=no
hw.lcd.density=240 # 是屏幕的密度
hw.cpu.arch=arm
hw.device.hash=-1812631727
hw.camera.back=none
disk.dataPartition.size=200M
skin.path=480×800 # 模拟器皮肤路径
skin.dynamic=yes
hw.keyboard=yes
hw.ramSize=512 # 模拟器的RAM运行内存大小
hw.device.manufacturer=Google
hw.sdCard=yes
hw.mainKeys=yes
hw.accelerometer=yes
skin.name=480×800
abi.type=armeabi
hw.trackBall=yes
hw.device.name=Nexus One
hw.battery=no
hw.sensors.proximity=yes
image.sysdir.1=platforms\android-10\images\ # 模拟器的映像文件路径
hw.sensors.orientation=no
hw.audioInput=yes
hw.gps=yes
vm.heapSize=512 # 虚拟机默认堆大小

这里主要是修改hw.ramSize这句,将后面的512换为更大的,比如增加为1G,在hw.ramSize=后面写1024,保存即可。然后启动AVD试试。

怎样安装Zend Guard Loader

2013年3月24日

由于zend optimizer不支持php5.3,使用php5.3以上版本就要安装zend guard loader。

参考:http://amon.org/zend-optimizer

PHP 5.5:Zend Guard Loader for PHP 5.5
PHP 5.6:Zend Guard Loader for PHP 5.6
PHP 5.2 files encoded with Zend Guard 5.0 or Zend Guard 5.5 require Zend Optimizer as the runtime decoder.

【Atomic库安装】

参考:http://www.laozuo.org/1940.html

Atomic源支持Fedora,RHEL和CentOS的YUM包管理。

清单:http://www.atomicorp.com/channels/atomic/

需要先安装Atomic库,然后安装zend-guard-loader:

wget -q -O - http://www.atomicorp.com/installers/atomic | sh
yum install php-zend-guard-loader

安装完后在 /etc/yum.repos.d/ 目录会有一个 atomic.repo 文件。

【源码安装】

下载:http://www.zend.com/en/products/loader/downloads

参考:http://files.zend.com/help/Zend-Guard/content/installing_zend_guard_loader.htm
参考:http://www.cnblogs.com/qiandu/p/4201456
参考:https://serverpilot.io/community/articles/how-to-install-zend-guard-loader
参考:http://blog.chinaunix.net/uid-14735472-id-3764932
参考:http://jingyan.baidu.com/article/ceb9fb10dae0d98cad2ba005
参考:http://dedecms.com/knowledge/servers/linux-bsd/2012/0819/8491

wget http://downloads.zend.com/guard/7.0.0/zend-loader-php5.5-linux-x86_64_update1.tar.gz && tar zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz
cp -R zend-loader-php5.5-linux-x86_64/ /usr/local/zend/

编辑 php.ini ,在最后位置添加:

[Zend Guard]
zend_extension=/usr/local/zend/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=

查证:

php -i | grep "Zend Guard Loader"

报错:

Failed loading /usr/local/php/lib/php/extensions/zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so:  /usr/local/php/lib/php/extensions/zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so: undefined symbol: executor_globals

参考:http://www.verydemo.com/demo_c101_i53243
参考:http://forums.zend.com/viewtopic.php?t=22958

参考:http://smilejay.com/2013/05/apache-mpm/
参考:http://www.aichengxu.com/view/934944

apache有两种运行模式:prefork模式;worker模式。区别请看:http://bbs.ywlm.net/thread-919-1-1
–with-mpm=worker 即worker模式,很多第三方模块不支持的
–with-mpm=prefork 重新编译apache就OK了。
如果用yum安装的,默认用的是prefork模式,这是为了兼容性。

参考:http://files.zend.com/help/Zend-Guard/content/installing_zend_guard_loader.htm
参考:http://www.phpfans.net/ask/question2/2455115949

参考:http://forums.zend.com/viewtopic.php?t=126063

Zend Guard Loader requires PHP NTS (non-thread-safe) and when loaded under Apache, use Prefork MPM.

参考:http://stackoverflow.com/questions/22201013/error-failed-loading-opcache-so-opcache-so-undefined-symbol-compiler-globals
参考:http://stackoverflow.com/questions/13883646/apache-prefork-vs-worker-mpm

You’re using Apache2 MPM. So PHP builds an ZTS (Zend Threaded System) build. See Apache Prefork vs Worker MPM for a discussion on this. With MPM PHP stores its compiler globals in a thread array. However, OPcache is looking for the non-threaded version of this structure compiler_globals.

IMO, if you are using a PHP, then using MPM is a mistake as (i) the PHP runs ~25-50% slower, (ii) many extension don’t work; (iii) OPcache isn’t properly tested with ZTS builds. Stick to a Prefork worker configuration, and rebuild.

以 –with-mpm=prefork 参数重新编译安装Apache2:

./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --with-mpm=prefork --with-crypto --enable-rewrite --enable-headers --enable-deflate --enable-socache-shmcb --enable-negotiation --enable-ssl --with-ssl=/usr/lib --enable-http2 --with-nghttp2=/usr/local/lib

查看当前apache中已经编译了的模块:

service httpd  -l

输出:

Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  prefork.c

由于MPM只能在编译时指定其中一种,所以列出的静态模块中MPM只有1个:

查看httpd加载的所有模块(包括静态编译的和动态共享的模块):

service httpd -t -D DUMP_MODULES

输出:

Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_prefork_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 dir_module (shared)
 alias_module (shared)
 cgid_module (shared)
 php5_module (shared)

查看 httpd.conf,有关于 mpm 模式的设置:

# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf

conf/extra/httpd-mpm.conf 的对应设置:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of connections a server process serves
#                         before terminating
<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

参考:https://smyl.es/how-to-fix-ioncubezendguard-undefined-symbol-executor_globals-after-upgrading-apache-and-php/
参考:http://stackoverflow.com/questions/17272439/how-to-enable-zts-on-php
参考:https://github.com/krakjoe/pthreads/issues/436

重新编译安装PHP
重新安装ZendOptimizer
在程序都重新编译安装完后,重启Apache,就可以了

输出:

with Zend Guard Loader v3.3, Copyright (c) 1998-2014, by Zend Technologies
Zend Guard Loader
Zend Guard Loader => enabled

部署zend guard

实证未遂。

参考:http://files.zend.com/help/Zend-Guard/content/install.htm
参考:http://static.zend.com/topics/Zend-Guard-Release-Notes-v5-5.txt

下载:http://www.zend.com/en/products/guard/downloads

http://downloads.zend.com/guard/7.0.0/ZendGuard-7.0.0-linux.gtk.x86_64.tar.gz
http://downloads.zend.com/guard/6.0.0/ZendGuard-6_0_0-linux.tar.gz
http://downloads.zend.com/guard/5.5.0/ZendGuard-5_5_0.tar.gz

wget http://downloads.zend.com/guard/5.5.0/ZendGuard-5_5_0.tar.gz && tar zxvf ZendGuard-5_5_0.tar.gz && ./ZendGuard-5_5_0.bin

专注决定了你是否能在互联网赚到钱

2013年3月22日

原文:专注决定了你是否能在互联网赚到钱

最近一直在反思自己,为什么这几年自己没有一点成长,经常把某些事拿来当借口,当作自己不作为的理由。
安静下来想一想真的是这样吗,真的是抽不出时间来做事情?我想应该不是的

互联网太容易让人浮躁,像魔鬼一样诱惑你我,看看下面的几种情况是否也发生在你的身上就知道了:

1、你发现你注册的EMD[Exact Match Domain]域名大多都被放在了域名停靠页,而你当初注册它们的时候并不是为了做域名停靠
2、你在网上购买,下载了许多网络营销相关的培训资料,电子书等,却没有认真的完整的读完其中的任何一本
3、你注册了N个CPA,Domain Parking等广告账户,却只有很少数的几个号在收点微不足道的钱,而你还是对账号的申请乐此不彼
4、当你发现一个认为还不错的niche后,你并没有马上为它建立一个网站或者Landing Page,而仅仅是把它放到你的 to-do list 或者笔记本中去,顶多也不过是再注册一个EMD而已
5、你觉得网上有太多的东西可以做,并确信你肯定可以通过它们赚到钱,可你就是不愿意动手去做了,或者你是不知道该如何,从哪里开始去做了。

如果上面几种情况也发生在你的身上,别让这种情形继续下去,否则,后果或许并不仅仅是你会失去一份收入,互联网最终会毁了你!尤其对于全职做Affiliate的朋友们来说,这绝对不是危言耸听。

理论+实践是检验真理的唯一途径,没有行动,理论就是一堆狗屎,还是没有热气长着绿毛的那种。所以,从现在起,忘记过去你有多辉煌,忘记过去你曾经多沮丧,从零开始,别让你自己过得太轻松。
行动,我该如何,从哪里开始?

1、首先为自己设定一个目标,并定期检查目标的完成情况
2、把时间花在最有价值的活动上面[内容,流量,列表]
3、确保你每天的活动都能对你设定的目标有所贡献
4、保持专注

App推广方式及相应技术准备

2013年3月21日

1、在各个版本App中植入数据统计代码

可以使用Flurry Analytics(http://www.flurry.com)。iOS和Android开发者可使用Flurry SDK 来获得用户行为分析、新用户获取分析和App崩溃报告。

2、可识别终端并选择性推送相应安装包的URL链接

代码:http://mobiledetect.net/

工具:http://tools.okayname.com/agent/

源码:http://sourceforge.net/projects/wurfl

3、将下载链接制作为二维码

可以使用PHPQRCode组件(http://sourceforge.net/projects/phpqrcode

4、将二维码刊登在纸媒或网站

  • 报纸
  • 名片
  • 传单
  • 餐巾
  • 信封
  • 广告

多语言po/mo文件的修改

2013年3月3日

程序的汉化涉及到两种文件,po和mo文件,po是源文件,mo是程序实际调用的已编译文件。

2种文件互相转换的程序如下:

  • gettext – 将mo文件反编译成po文件
  • poedit – 将po文件编译成mo文件。

反编译 mo 文件成 po 文件,使用 gettext 的 msgunfmt.exe 工具,命令如下:

msgunfmt.exe d:\test.mo -o d:\test.po

编码 po 文件为 mo 文件,使用 poedit 的 msgfmt.exe 工具,命令如下:

msgfmt.exe -o d:\test.mo d:\test.po