设计与开发
设计与开发

如何判断微信浏览器?

最近围绕微信工作平台的需求越来越多,所以就需要判断访问者是否为微信浏览器。

PHP方法:利用PHP的“_SERVER ”数组“HTTP_USER_AGENT”项,获取该页面的用户代理的信息,来完成这个工作。

<?php
echo $_SERVER["HTTP_USER_AGENT"];
?>

【winows/chrome】 输出结果:

weixin

Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36

而【ios7/weixin】下输出结果:

viewfile

Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11B554a MicroMessenger/5.0.3

在字符串中可以看出“MicroMessenger ”为微信浏览器版本,所以可以使用“MicroMessenger”参数,来判断访问来源是否为“微信浏览器”。

if(strpos($_SERVER['HTTP_USER_AGENT'],"MicroMessenger "))
{
	echo "Hello Weixin";
}

Javascript方法:

function is_weixn(){
    var ua = navigator.userAgent.toLowerCase();
    if(ua.match(/MicroMessenger/i)=="micromessenger") {
        return true;
    } else {
        return false;
    }
}

PHP QR Code类库生成二维码

由于二维码被广泛使用,现在在web开发中不得不经常生成各种二维码。可以利用PHP类库“PHP QR Code”来生成一种常见的二维码——QR码。

类库下载URL: http://phpqrcode.sourceforge.net/

qrlib.php 是完整版,官方的调用实例:

QRcode::png('code data text', 'filename.png'); // creates file 

QRcode::png('some othertext 1234'); // creates code image and outputs it directly into browser

phpqrcode.php 是合并版,只有一个文件,但生成速度较慢且不太准确。使用方法:

//
include "phpqrcode/phpqrcode.php; 

$data=“http://www.hiheng.com”;  //二维码数据

$filename = $errorCorrectionLevel.'|'.$matrixPointSize.'.png'; //生成的文件名

$errorCorrectionLevel = 'L';   //纠错级别 L | M | Q | H
$matrixPointSize = 4;    //每个黑点的像素 1~10
QRcode::png($data,$filename,$errorCorrectionLevel,$matrixPointSize);
//

广告创意中的3B原则

3B原则是从创意入手提出的beauty(美女)、beast(动物)、baby(婴儿),以此为表现手段的广告符合人类关注自身生命的天性,最容易赢得消费者的注意和喜欢。也被称为“ABC原则”,即animal、beauty和child。

Google Images 日本 广告 《Fashion Show with Google》
“谷歌搜索”跟“时尚”有什么关系? 看日本导演Kosai Sekine用“美女”来解决这个问题的。广告清新亮丽,创意让人眼前一亮,顺便还介绍了Google强大的图片搜素、色彩搜索、相似图片等功能。

IOS7发布后关于“扁平化”与“拟物化”的思考。

设计十诫的第一条和最后一条:

1、好的设计是创新的。
……
10、好的设计是极简的

IOS7的发布让“扁平化(Flat Design)”和“拟物化(Skeuomorphism)”的争论变得愈演愈烈,这比上次微软发布Metro 来的还要强烈。

为何IOS的改变会引起这样的争议?
我想这跟苹果公司一直以来作为的“拟物化”设计的的领军形象不无关系。我们可以回想,iphone发布时,将手机的物理拨号键以触屏软件的形式植入ios系统开始,或者从imac桌面那一个个跳动的水晶图标开始,再或者在ibook像翻开一本真实的图书一样来阅读,苹果公司一直在引领了“拟物化”设计的浪潮。而新发布的IOS7现在开始推动“扁平化设计”,这样颠覆性转变必然会引起大家的争议。

拟物化的优势是什么?
“当你应用中的可视化对象和操作按照现实世界中的对象与操作仿造,用户就能快速领会如何使用它。( iOS Human Interface Guidelines)” 也就是说以模拟实物的视觉设计和交互体验,让用户完全不用去抽象的理解就可以直观的认知和使用。
拟物化设计在视觉上有着很高的识别性,让原本抽象的产品形象变得具有亲和力,更加优雅,在使用上降低用户的学习门槛。

推荐我最喜欢的拟物化设计App:Paper by FiftyThree

拟物化的劣势是什么?
在追求拟物化设计的浪潮中,出现了另外一些的问题。
一、视觉设计:上面有说,拟物设计具有很高的识别性、质感、亲和力。
但是盲目的追求拟物化设计需要付出更高的开发成本,在移动设备的小尺寸屏幕里不能高效的利用的有限的空间。
二、移动设备上的平面操作毕竟与现实生活中有着巨大的区别,盲目的拟物有时候反而会对用户造成困惑。
三、既然拟物是一个模仿过程,这就限制了开发者的创新和想象间,产品容易臃肿且局限。

拟物与极简是矛盾的吗?
我不这么认为,苹果公司是一家崇尚极简主义的公司,在过去的一段时间里,苹果以优雅的拟物设计和极简的产品体验,真正的做到了简单而丰富,我的小外甥女拿到IPAD不需要教她就可以自己玩的不亦乐乎。

扁平化设计的优势和劣势
扁平化设计就是用最简单、最轻量级甚至抽象的方法来传达产品本身核心内容或功能,也就是说“扁平化设计”并不追求画面的质感、重量感、甚至产品的实际形态。优秀的扁平化设计给人感觉简洁、整齐、清晰,所有的功能一目了然,没有什么是多余的。因此“扁平化”可以更高效的利用空间,给用户最少的干扰去理解产品内容。

但是扁平化设计太过简洁,识别性极差,容易审美疲劳,缺少亲和力。最重要的是,抽象的表达提高了学习成本。举一个例子大家就明白:拟物化设计就像“象形文字”,全世界人不用学习都能猜出它所表达的大概意思,但是它的表达却非常模糊和局限,而扁平化设计就像抽象的现代文字,你必须通过学习才能理解它所表达的意思,但表达精确而丰富。(PS:我并不是说“拟物化设计”原始,而是举例说明他们之间直观的感受)

推荐我最喜欢的扁平化设计App: Any.do

为什么IOS7开始推动扁平化设计?

“It’s very easy to be different, but very difficult to be better(标新立异、与众不同,这很容易做到,但要做到比现有的更好,这很难。)”
——Jonathan Ive

我在本文开头所引用的设计十诫中的两条描述,在IOS7发布后似乎给人传达了这两个信息:创新、极简。
同时,我也有个猜想:Google glass已经公测,传说中的Apple iWatch也越来越近,电子产品似乎正在往穿戴市场发展。穿戴式的电子产品体积更小,屏幕空间有限,而扁平化设计恰恰能够更好的利用空间

IFTTT,用微信更新facebook

IFTTT ,通过API授权,根据“if this then that”的逻辑,自动帮你完成不同应用之间的互联。通过IFTTT,可以在不翻墙的情况下,使用“微信”来更新你的“facebook”。就像这样:

iphone-ifttt

配置教程请戳这里:http://www.zhaoyuhao.com/work/show/90

另外在配置过程中需要还是翻墙授权,可以看下之前的博文:《正常使用GOOGLE及facebook的hosts文件》

apache配置中的ThreadsPerChild\MaxRequestsPerChild\Win32DisableAcceptEx

【记录】公司的服务器近期不怎么稳定,五一假期都没消停。在排除硬件、软件问题后,开始检查apache配置问题。

win2003系统下的apache,mpm_winnt.c模式,优化参数:

ThreadsPerChild 说明:每个子进程建立的线程数,默认值:64,最大值:1920。网上查询资料建议设置在100-500之间。如服务器性能高,可设置更大值。

MaxRequestsPerChild 说明:每个子进程在其生存期内允许伺服的最大请求数量,也就是最大线程。如果超过限制,子进程会结束。默认值:0。
MaxRequestsPerChild的值不能设置为0,会因子进程不结束而耗尽内存。

线程设置也不是越大越好,太大会导致产生新的子进程后长期空闲,并非最佳优化。要根据服务器的硬件配置、系统环境、访问流量等调试设置。

Win32DisableAcceptEx
使用accept()代替AcceptEx()接受网络链接。AcceptEx()是一个微软的WinSock2 API ,通过使用BSD风格的accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。

优化后目前还比较稳定,做个记录继续观察。