Zxing 二维码识别库 横屏修改成竖屏

camera.setDisplayOrientation(90);

不知道为什么,Zxing用的是横屏,也许是因为外国人习惯横屏拍照的原因把,但是,在国内,很多人不习惯,呵呵,我用着也不习惯.所以还是该成竖屏,以适合国内人的习惯吧.

修改方法:

1.在DecodeHandler.java中,修改decode方法

PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height);

byte[] rotatedData = new byte[data.length];

for (int y = 0; y < height; y++) {

 for (int x = 0; x < width; x++)
  rotatedData[x * height + height - y - 1] = data[x + y * width];

 }

int tmp = width; // Here we are swapping, that's the difference to #11
width = height;
height = tmp;
PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);

2.在CameraManager.java中,修改代码:

// 注释掉
// rect.left = rect.left * cameraResolution.x / screenResolution.x;
// rect.right = rect.right * cameraResolution.x / screenResolution.x;
// rect.top = rect.top * cameraResolution.y / screenResolution.y;
// rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;

//修改成这样的
rect.left = rect.left * cameraResolution.y / screenResolution.x;
rect.right = rect.right * cameraResolution.y / screenResolution.x;
rect.top = rect.top * cameraResolution.x / screenResolution.y;
rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;

3.在CameraConfigurationManager.java中,在setDesiredCameraParameters方法中添加一句

camera.setDisplayOrientation(90);

4.在AndroidManifest.xml中,把Activity的属性android:screenOrientation="landscape" 改为

android:screenOrientation="portrait"

解决 nginx 下 Ecshop 后台登录不了bug

 

最近,升级了朋友服务器 (LNMP),nginx 也跟着升级了,但是升级之后,发现,朋友的 ecshop 登录不了了。现象是,输入错误的密码,报告正常,输入正确的密码,就刷新一下,又回到了登录页面。

仔细观察,发现,页面是跳转到了index.php的,只是因为网速快,一下就又跳回来了,感觉只是刷新下,没有变化,呵呵100M宽带也能带来不少麻烦 ((*^__^*) 嘻嘻……)。

结果查看源码,发现了了问题是出在 https 安全登录检测上的。

在文件 includes/cls_ecshop.php  156 行左右有如下代码

    /**
     * 获得 ECSHOP 当前环境的 HTTP 协议方式
     *
     * @access  public
     *
     * @return  void
     */
    function http()
    {
        return (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'http://' : 'http://';
    }

因为检测 isset($_SERVER[‘HTTPS’]) 是 true 而且 里面的值是空,不为off;所以返回了 https

为什么 更新了 nginx 之后就这样呢,大家可以看下nginx的配置文件。

/etc/nginx/fastcgi_params

fastcgi_param	QUERY_STRING		$query_string;
fastcgi_param	REQUEST_METHOD		$request_method;
fastcgi_param	CONTENT_TYPE		$content_type;
fastcgi_param	CONTENT_LENGTH		$content_length;

fastcgi_param	SCRIPT_FILENAME		$request_filename;
fastcgi_param	SCRIPT_NAME		$fastcgi_script_name;
fastcgi_param	REQUEST_URI		$request_uri;
fastcgi_param	DOCUMENT_URI		$document_uri;
fastcgi_param	DOCUMENT_ROOT		$document_root;
fastcgi_param	SERVER_PROTOCOL		$server_protocol;

fastcgi_param	GATEWAY_INTERFACE	CGI/1.1;
fastcgi_param	SERVER_SOFTWARE		nginx/$nginx_version;

fastcgi_param	REMOTE_ADDR		$remote_addr;
fastcgi_param	REMOTE_PORT		$remote_port;
fastcgi_param	SERVER_ADDR		$server_addr;
fastcgi_param	SERVER_PORT		$server_port;
fastcgi_param	SERVER_NAME		$server_name;

#因为下面这项配置,导致了,https是一定会被设置的,如果你不想修改ecshop,又刚好有权限修改配置文件,可以把这个给注视了
fastcgi_param	HTTPS			$https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param	REDIRECT_STATUS		200;

而朋友的ecshop不是在https上工作的,是在http上的,所以,就不停的跳到了登录页面,更详细信息的,可以再百度下。

支付宝高级即时到帐的坑 千万别跳

呵呵,最近掉坑里了,换了支付宝高级支付之后,接口没有修改。回来,发现会员的充值,没有付款的,也给他充值了,原因是。支付宝修改了即时到帐的通知方式。

TRADE_FINISHED状态原本的通知方式,应该会员付款,之后,支付宝发来TRADE_FINISHED状态,现在,高级版的做了调整,发来TRADE_SUCCESS状态,因为,之前做担保交易的时候,处理了TRADE_SUCCESS状态。又处理了TRADE_FINISHED状态,导致给用户充值了2次!

Linux 使用grep 查找文件bom头

呵呵,做PHP开发的,是不是经常会用utf-8编码呢?用了utf-8编码,是不是经常有各种奇怪的错误呢?是不是总是再说,utf-8的坏话呢。

其实这不是utf-8的错,是你用的记事本的问题吧,换个编辑器就好了,另外,觉得,尽可能不要在记事本里面编辑utf-8的文件了。

出问题的是记事本在文件加了bom头标记,想知道上面是bom头就自己百度好了吧。

下面说下,这么找到有bom头的文件,Linux系统下的,执行下面命令

grep -r -I -l $'^\xEF\xBB\xBF' ./

执行完后,会列出当前文件夹里面包含bom头的文件,用编辑器去掉就好了,我之前是用 zend studio,不过现在不用了,用nodepad++

Centos 7 新特性整理

Centos 7 发布了,发现,用起来很多都不相关了,呵呵,是我不相关了还是Centos 7 变动有点大了呢。

也许是因为好久没有弄Centos了吧,呵呵。不管太多,他变总有变的道理,就按照他的来就可以了。

1、防火墙变了

默认使用了 firewall 防火墙

下面常用命:

systemctl stop firewalld   #关闭
systemctl start firewall   #启动
systemctl restart firewall   #重启(猜的)

也可以用原来的server 命令,不过,好像centos 现在比较推荐使用这个命令。

2、mysql 数据库换了

mysql在centos 7啊安装源里面已经没有了,现在默认使用 mariadb。功能和使用习惯、配置文件等还是和 mysql 的差不多。就是名字变长了,唉,英文不行背半年啊!

yum install mariadb-server  #安装 mariadb 数据库
systemctl start mariadb     #启动
yum install mariadb         #安装 mariadb 客户端 记得这个是客户端哦,不是服务端

Ubuntu 14.04 server 设置静态IP

 

今天记一下Ubuntu14.04 server版 修改静态IP的方法。呵呵,只因为最近在Centos 7 和Ubuntu14.04上切换来切换去的,两个修改IP的格式有点不一样,头有点大,一时就修改错了,先记下来,等过几天又切换到Centos7的时候,再把Centos的修改方法给记下来吧。

1、找到相应的文件(/etc/network/interfaces )

sudo vi /etc/network/interfaces
auto eth0  # 这个要用 ifconfig 确认下是不是这个名字
iface eth0 inet static
address 192.168.0.220
gateway 192.168.0.1	 #这个地址你要确认下网关地址,在路由器那边
netmask 255.255.255.0    #这个基本上都是这个

2、修改DNS,原本是动态获取dns,但是修改成静态ip后,也不会去获取dns了,所以不改的话,上不了网。

这里,14.04 server 修改dns不能使用 /etc/resolv.conf 文件,这个文件修改是一次性的,重启后就没有了,所以想要永久修改,想要修改 /etc/resolvconf/resolv.conf.d/base 这个文件,呵呵,这个是和之前版本不一样的地方。

sudo vi /etc/resolvconf/resolv.conf.d/base

加入如下内容(google提供的dns),主要是为了让电信和联通的用户容易修改吧,呵呵,不要误会,如果你有电信或联通的dns ,也可以用电信或联通的。

nameserver 8.8.8.8
nameserver 8.8.4.4

3、重启networking服务,不过在重启之前,可以先关闭网卡

sudo ifdown eth0 # 关闭网卡,不知道为什么有时候重启了IP没有改过来,所以关闭下网卡
sudo service networking restart
sudo ifup eth0  #打开网卡

好了,就写到这里,修改dns的就完了,下次接下去写Centos的,现在没有开Centos的机器。呵呵!

常见负载均衡方法 Nignx代理 LVS DNS轮询

最近一直在研究系统,主要原因是,哪怕效率再高的语言,在并发面前,其所谓的效率都只是浮云!

所以,在这样的情况下,研究负载均衡(或者说流量分发)就变得很有必要。下面收集一些负载均衡的常用实现方法。用于日后参考。

1、NDS轮询

RR-DNS(Round-Robin Domain Name System) 轮流排程的方式是:在DNS服务器中,可以为多个不同的IP地址配置同一个名称,当客户端查询这个名字时将在解析这个名称时得到其中的一个地址。因此,对于同一个名字,不同的客户端会得到不同的地址,他们也就连结不同地址上的Web服务器,从而达到负载平衡的目的。例如 : 当客户端连结 www.muti-ip.com.tw这名称时,DNS 有能力依序将名称解析到 202.1.1.1 、 202.1.1.2 、202.1.1.3和 202.1.1.4等不同的网络地址,而这些是提供相同服务的主机,让客户端不自觉有不同。

优点:

成本低,几乎为不需要成本,现在一般的域名提供商,都提供该功能,只需要设置下,就可以使用。

缺点:

为了使本DNS服务器和其他DNS服务器及时交互,保证DNS数据及时更新,使地址能随机分配,一般都要将DNS的刷新时间设置的较小,但太小将会使DNS流量大增造成额外的网络问题。

单点故障,一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。

DNS负载均衡采用的是简单的轮循负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。

要给每台服务器分配一个internet上的IP地址,这势必会占用过多的IP地址。

 

2、LVS

LVS是一个开源软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。

3、Nginx

Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多此次应用Nginx实现多台web服务器的简单负载均衡,直观了解负载均衡的工作原理。

Ubuntu 14.04 server 163 源 (mirrors)

这是Ubuntu 14.04 163 的更新源 ,更新速度要比ubuntu 中国区服务器好很多,呵呵,提供上来,方便大家使用。

deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse

163对应镜像下载 http://mirrors.163.com/ubuntu-releases/14.04/

事实上,人家如果要安装ubuntu 也可以选择在163这里下载,下载速度也比ubuntu中国区服务器好。另外,如果大家选择在线安装,那一定是要用这个源的了,呵呵。因为在线安装对网速要求比较高,如果网速不好,成功的机会很小,或者,装到你不想在装了!

解决Linux(ubuntu 14.04 server)中文环境语言错误

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "zh_CN:zh",
        LC_ALL = (unset),
        LC_TIME = "zh_CN",
        LC_MONETARY = "zh_CN",
        LC_ADDRESS = "zh_CN",
        LC_TELEPHONE = "zh_CN",
        LC_NAME = "zh_CN",
        LC_MEASUREMENT = "zh_CN",
        LC_IDENTIFICATION = "zh_CN",
        LC_NUMERIC = "zh_CN",
        LC_PAPER = "zh_CN",
        LANG = "zh_CN.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Selecting previously unselected package language-pack-zh-hans-base.

安装Ubuntu时,选择的是中文,在下载软件的时候,因为网速不好,取消了。安装完之后,经常出现上面的错误,呵呵,导致有时候apt-get 安装软件时有些软件不能成功,也不知道为什么,反正知道了问题,就把语言包装上就好了。ubuntu 安装语言包还算容易,下面是ubuntu14.04 server版的安装方法。

sudo apt-get install language-pack-zh-hans language-pack-zh-hans-base

安装好之后,中文也正常显示了。

有关Linux 中文语言的一些知识,来自网络,没有验证,大家自己看看吧。

查看当前安装有那些语言:

locale -a

当前语言相关配置:

root@ubuntu:/etc/sphinxsearch# locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC=zh_CN
LC_TIME=zh_CN
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY=zh_CN
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER=zh_CN
LC_NAME=zh_CN
LC_ADDRESS=zh_CN
LC_TELEPHONE=zh_CN
LC_MEASUREMENT=zh_CN
LC_IDENTIFICATION=zh_CN
LC_ALL=

locale 把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是:
1、语言符号及其分类(LC_CTYPE)
2、数字(LC_NUMERIC)
3、比较和排序习惯(LC_COLLATE)
4、时间显示格式(LC_TIME)
5、货币单位(LC_MONETARY)
6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES)
7、姓名书写方式(LC_NAME)
8、地址书写方式(LC_ADDRESS)
9、电话号码书写方式(LC_TELEPHONE)
10、度量衡表达方式 (LC_MEASUREMENT)
11、默认纸张尺寸大小(LC_PAPER)
12、对locale自身包含信息的概述(LC_IDENTIFICATION)。

Locale是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为:语言[_地域[.字符集]]。完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]。zh_CN.GB2312=中文_中华人民共和国.国标2312字符集。

设定locale就是设定12大类的locale分类属性,即 12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:
LC_ALL>LC_*>LANG
可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。
1、如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。

2、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_*=en_US.UTF-8。

3、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值 zh_CN.UTF-8 。

4、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的locale设定将是:

LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。

所以,locale是这样设定的:
1、如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG= zh_CN.XXXX都可以,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将覆盖所有其他的locale设定,不要作无用功。
2、如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX就可以了。这样LC_CTYPE=zh_CN.XXXX,而 LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。

C.LANG和LANGUAGE的区别:
LANG – Specifies the default locale for all unset locale variables
LANGUAGE – Most programs use this for the language of its interface
LANGUAGE是设置应用程序的界面语言。而LANG是优先级很低的一个变量,它指定所有与locale有关的变量的默认值

Cordova 调试利器 Ripple

Ripple是Chrome(谷歌浏览器)的一个插件,主要功能是用来调试Cordova(Photogap)软件。可以有效的提高Cordova的开发效率,防止每次都将软件Run 到android虚拟机的麻烦,并且,在这里,调试可以使用 javascrpt debug。

Ripple是一个开源的Apache项目(http://incubator.apache.org/projects/ripple.html)。它允许浏览器作为移动设备的模拟器。目前已经支持Blackberry和Cordova(PhoneGap)。

一旦安装了Ripple,Chrome浏览器将得到一个新的工具图标: