微信浏览器禁止app下载链接怎么办

通过扫描二维码下载APP已成为一个非常方便的方式,微信也成为扫描二维码重要的工具,但是扫描后微信浏览器会对APK和appStore的链接进行屏蔽,导致用户无法正常下载。本文提供两个迂回的解决方案:1.使用腾讯应用宝;2.提示用户使用浏览器打开。
继续阅读 [ 微信浏览器禁止app下载链接怎么办 ]

如何将iPhone的屏幕镜像到Mac,录制iPhone屏幕

我们在演示app的时候,如果能够将手机屏幕同步到投影那是非常好的事情,现阶段这将借助电脑作为中介。原来我们通常需要itools、airserver这样的第三方工具运行在Mac上,但是在Yosemite和iOS8发布之后,这成为意见非常轻松的事情。

通过lightning数据线将iOS8系统的iPhone连接到Yosemite系统的Mac,在Mac上打开QuickTimePlayer,打开“文件->新建影片录制”,默认使用电脑的摄像头准备录制,点击红色录制按钮的右侧白色小三角,可以看到iPhone,点击即可实现屏幕同步,点击录制,既可以录制iPhone的屏幕了。

苹果官网对字体的css

苹果对于细节的追求值得我们学习,其官网的前端代码也是非常出色,在字体上让人有很强的艺术感。那么让我们来看看它是怎么处理的css的?
对于apple.com美国官网其字体看起来是这样的:
apple-font
对于apple.com.cn苹果大陆网站字体看起来是这样的:
apple-font2
分析来看,其CSS是这么设置的:
对于英文站点

body{
color: #333;
font-style: normal;
font-family: "Myriad Set Pro","Lucida Grande","Helvetica Neue","Helvetica","Arial","Verdana","sans-serif";
font-size: 18px;
line-height: 1.45;
font-weight: 400;
}

对于中文站点

html[lang="zh-CN"] body {
    font-family: "PingHei","Lucida Grande","Lucida Sans Unicode","Helvetica","Arial","Verdana","sans-serif";
}

我们看到苹果中文站点使用了“PingHei”这个字体,“PingHei”有人称之为“平黑”,据传是苹果向华文定制的黑体,其比划表现非常细腻圆滑。但是,平黑并不在Mac Os和Windows被内置,而我们又如何在苹果官网看到这个字体的呢?

CSS3 通过 font-face 实现的 Web Fonts 技术能够下载字体文件解释网页内容,但是中文字体一般都非常庞大,少则几兆,下载耗时太长,因此苹果使用字体子集,将需要的字体打包到字体文件中,因此文件量大大降低。另外,借助CDN加速提升访问速度。

更多关于苹果官网的字体可阅读 如何评价 2014 年 9 月 10 日苹果官网 Apple.com 的改版?

JQuery Mobile开发的移动网页内容链接打不开

Jquery Mobile(简称JQM)对a标签进行了二次处理,默认a标签打开页面使用Ajax方式异步加载打开,而对于一些目标页面的结构并不属于JQM的范畴,会导致页面无法打开,例如,链接到一个外链、PDF文件、Excel文件等等。

为了让a标签在独立窗口中打开,而不是Ajax加载到JQM框架内,需要显式的在a标签中进行表示<a rel=’external’ >。而cms或者blog中创建的文章内容,并不会特殊的针对a标签增加rel属性,而且我们不可能要求用户增加这个属性。因此需要对内容进行二次处理。

这里我们可以采用正则表达式进行处理:

$content = "<a href='http://www.comingx.com'>ComingX</a> and so on";//article content need to be replaced
$pattern = "/(<\s?a)(.*?>)/s";
//<a rel='external' href='http://www.comingx.com'>ComingX</a> and so on
$content = preg_replace($pattern,"$1 rel='external' $2", $content);

如何通过搜索引擎解决技术问题

搜索引擎成为程序猿解决技术问题的主要渠道,本文主要帮助新手找到搜索引擎的感觉,不至于漫无目的的在无数结果中灰心丧气。
这里我们举一个技术问题的例子:
以前我一直是用php开发的,从来没有学过python语言,现在要用python对一个字符串做一个正则表达式的替换,有字符串“<p>&nbsp;&nbsp;文章正文</p>”,我们要把紧跟在<p>标签后的&nbsp;都去掉。
那么在python应该怎么做呢?
继续阅读 [ 如何通过搜索引擎解决技术问题 ]

龙江女性-政务门户集群移动客户端

龙江女性是和景政务集群系统在黑龙江妇联的应用,黑龙江妇联体系共70余家网站,每家网站独立管理的同时,形成了一个站群,在站群上提供移动APP服务。

龙江女性
扫描二维码安装APP,或者点击下载

和景政务集群系统与传统站群系统相比具有如下优势:

  • 站群基于云开放技术,即保证网站的独立性又能够实时同步数据到集群中心
  • 系统解除了站点与站点、站点与集群中心之间的耦合性
  • 子站站点不收开发语言限制,不收功能限制
  • 子站站点设计风格、布局、前端、后端可自由开发
  • 子站域名、二级域名自由设置
  • 子站数据库独立维护、备份、恢复
  • 子站单独进行服务器配置、服务器优化、CDN加速、缓存、负载均衡
  • 站点之间的数据开放通信基于签名身份认证,保证数据传输的安全性

理解依赖注入 for Zend framework 2

依赖注入(Dependency Injection),也称为控制反转(Inversion of Control),一种设计模式,其目的是解除类之间的依赖关系。

假设我们需要举办一个Party,Party需要主持人、厨师、灯光、音响、食品、酒水等等。那么Party对他们存在依赖关系。用程序语言表示如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//Party.php
class Party{
    //主持人
    private $_host;
 
    function __construct(){
        include "./Host.php";
        $this->_host = new Host();
    }
 
    function startParty(){
        $this->_host->sayHello();
    }
}
 
//Host.php
class Host{
    private $_name;
    function sayHello(){
        echo "My name is " . $this->_name;
    }
}
 
//main
$party = new Party();
$party->startParty();

可见Party的运行依赖于Host,没有Host,Party不能单独运行,也不能单独发布为组件。为了解除Party对Host的依赖,我们可以这么做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Party.php
class Party{
    //主持人
    private $_host;
 
    function __construct($host = ""){
        if($host){
            $this->_host = $host;
        }
    }
 
    function startParty(){
        $this->_host->sayHello();
    }
 
    function setHost($host){
        $this->_host = $host;
    }
}
 
//Host.php
class Host{
    private $_name;
    function sayHello(){
        echo "My name is " . $this->_name;
    }
}
 
//main
$host = new Host();
$party = new Party();
$party->setHost($host);//或者 $party = new Party($host)
$party->startParty();

此时Party类对Host类的依赖被移到外面,运行时Host类通过构造函数或者setter注入到Party中。Party本身可以被单独发布。如果Host没有sayHello方法,将其注入到Party中必然导致异常。为了约束Host必须含有sayHello方法,可以使用接口。
继续阅读 [ 理解依赖注入 for Zend framework 2 ]

Zend Framework 2 事件驱动编程的理解

利用程序解决一个问题时,我们通常会确定各个步骤以及步骤的顺序,这就是面向过程编程;而面向对象编程在解决问题的逻辑上仍然是过程化的。为了使步骤之间能够连贯执行,我们需要函数之间的来回调用,使得各函数之间形成依赖。事件驱动编程能够解耦这种依赖关系。

如果完成一件事分为A、B、C三个步骤(函数),A做完了调用B,B做完了调用C,事情结束了。事件驱动编程不需要A、B、C之间的调用,加入一个事件管理器(EventManager,简称EM),A通知EM我做完了(AFinished事件被EM抛出),此时A就不管了,你们谁接着执行跟我没关了。如果B要在A完成后执行,B就可以预先告诉EM,如果A做完了我做(即将B绑定到AFinished事件)。这样A与B之间的关系是由EM控制的,而不需要A、B之间互相调用。
继续阅读 [ Zend Framework 2 事件驱动编程的理解 ]

Zend Framework 2中如何使用Service Manager

Zend Framework 2 使用ServiceManager(简称SM)来实现控制反转(IoC)。有很多资料介绍了service managers的背景,我推荐大家看看this blog post from Evanthis post from Reese Wilson,但是仍然有很多开发者不能够很好地使用ServiceManager去解决他们的需求。这篇文章我将解释为什么ZF2框架需要使用多个服务管理器以及怎样使用它们。主要包含以下几个方面:

  1. 这些不同的服务管理器是什么?
  2. 不同的服务管理器用来干什么?
  3. 服务管理器与服务定位器是什么关系?
  4. 如何使用这些服务管理器定义服务?
  5. 如何在一个服务管理器中通过另一个服务管理器调用服务?

服务管理器使用在ZF2的许多地方,其中最重要的四个地方是:

  1. 应用全局服务管理(根服务管理器或者说是主要服务管理器)
  2. 控制器
  3. 控制器插件
  4. 视图助手

继续阅读 [ Zend Framework 2中如何使用Service Manager ]

基于ZF2的开源项目

Got-CMS
ZF2 + PostgreSQL
RUBEDO
ZF2 + MangoDB,大数据CMS
ejoom
PI Engine