最新 | 最热门 | 最高评价

+5  对比Imagick和Gmagick的像素迭代功能

Tag: Technical | Gmagick | Imagick | PHP
老王 发于 2010年10月17日 17:45 | 点击: 1725 | 展开摘要
通常,图像处理工作都是诸如缩略图,水印之类的简单工作,不过有的时候会复杂些,比如像素迭代,本文通过一个实例对比Imagick和Gmagick的像素迭代功能:

像素数据生成代码

<?php

$data = array();

for ($row = 0; $row < 100; $row++) {
for ($column = 0; $column < 100; $column++) {
$data[$row][$column]

查看全文: http://www.udpwork.com/item/5265.html

+3  静态类的原罪

Tag: Technical | PHP
老王 发于 2011年08月14日 22:57 | 点击: 1430 | 展开摘要
黑格尔有句名言:存在即合理。以此为论据的话,静态类的存在自然有其合理性。不过物极必反,一旦代码过于依赖静态类,其劣化的结局则不可避免。这就好比罂粟作为一种草本植物,有其在药理上的价值,但如果肆无忌惮的大量使用,它就变成了毒品。

什么是静态类

所谓静态类指的是无需实例化成对象,直接通过静态方式调用的类。代码如下:

<?php

class Math
{
public static function ceil($value)
{
ret

查看全文: http://www.udpwork.com/item/5644.html

+2  正确重置MySQL密码

Tag: Technical | MySQL
老王 发于 2011年06月12日 15:37 | 点击: 2154 | 展开摘要
谁都不想弄丢家门钥匙,但不管多么小心,时间长了,这样的事情总会发生几次。MySQL密码也是一样,把它写在文档上不太安全,记在脑子里又难免会忘记。

如果你忘记了MySQL密码,如何重置它呢?

下面是错误答案:

首先停止MySQL服务,然后使用skip-grant-tables参数启动它:

shell> /etc/init.d/mysql stop
shell> mysqld_safe --skip-grant-tables &

此时无需授权就可以进

查看全文: http://www.udpwork.com/item/5255.html

+1  MySQL主从服务器数据一致性的核对与修复

Tag: Technical | MySQL
老王 发于 2013年05月03日 21:40 | 点击: 1337 | 展开摘要
我上一次遇到MySQL主从服务器数据一致性问题,想想是几年前的事情了,还依稀记得当时惊慌失措的情景,好在最后借助Maatkit解决了问题。几年后,当我再次面对同样的问题时,Maatkit已经不复存在,转而成为了Percona Toolkit的一部分,不变的是我依旧手忙脚乱,所以还是记录一下吧,保不准啥时候又会遇到这个问题。

如果你在MySQL从服务器上遇到类似下面的错误信息,那么恭喜你中招了:

mysql> SHOW SLAVE STATUS\G

Last_Err

查看全文: http://www.udpwork.com/item/9766.html

+1  实现一个简单的服务端推方案

Tag: Technical | Lua | Nginx
老王 发于 2012年09月28日 16:34 | 点击: 2478 | 展开摘要
客户端和服务端的交互有推和拉两种方式:如果是客户端拉的话,通常就是Polling;如果是服务端推的话,一般就是Comet,目前比较流行的Comet实现方式是Long Polling。

注:如果不清楚相关名词含义,可以参考:Browser 與 Server 持續同步的作法介紹。

先来看看Polling,它其实就是我们平常所说的轮询,大致如下所示:

Polling

因为服务端不会主动告诉客户端它是否有新数据,所以Polling的实时性较差。虽然可以通过加快轮询频率的方式来

查看全文: http://www.udpwork.com/item/8177.html

+1  Nginx与Lua

Tag: Technical | Lua | Nginx
老王 发于 2012年08月31日 17:05 | 点击: 2999 | 展开摘要
火云邪神语录:天下武功,无坚不破,唯快不破!Nginx的看家本领就是速度,Lua的拿手好戏亦是速度,这两者的结合在速度上无疑有基因上的优势。

最先将Nginx,Lua组合到一起的是OpenResty,它有一个ngx_lua模块,将Lua嵌入到了Nginx里面;随后Tengine也包含了ngx_lua模块。至于二者的区别:OpenResty是Nginx的Bundle;而Tengine则是Nginx的Fork。值得一提的是,OpenResty和Tengine均是国人自己创建的项

查看全文: http://www.udpwork.com/item/8037.html

+1  Redis高可用性之Failover过渡方案

Tag: Technical | Failover | Redis
老王 发于 2011年11月29日 18:27 | 点击: 1599 | 展开摘要
稍后重写

查看全文: http://www.udpwork.com/item/6429.html

+1  OAuth的改变

Tag: Technical | OAuth
老王 发于 2011年11月08日 11:56 | 点击: 1691 | 展开摘要
去年我写过一篇《OAuth那些事儿》,对OAuth做了一些简单扼要的介绍,今天我打算写一些细节,以阐明OAuth如何从1.0改变成1.0a,继而改变成2.0的。

OAuth1.0

在OAuth诞生前,Web安全方面的标准协议只有OpenID,不过它关注的是验证,即WHO的问题,而不是授权,即WHAT的问题。好在FlickrAuth和GoogleAuthSub等私有协议在授权方面做了不少有益的尝试,从而为OAuth的诞生奠定了基础。

OAuth1.0定义了三种角色:Use

查看全文: http://www.udpwork.com/item/6229.html

+1  优化InnerHTML操作

Tag: Technical | Javascript | Performance
老王 发于 2011年06月19日 15:00 | 点击: 1693 | 展开摘要
多数现代浏览器都实现了innerHTML操作,它的方便性让我们爱不释手,但如果使用不当,很容易出现效率问题,本文通过一个例子来说明如何优化innerHTML操作。

例子:我们要实现的效果是当用户点击鼠标的时候,就在旧数据上追加若干新数据。

如果使用标准DOM的话,完整代码如下:

<html>
<head>
<title>test</title>
</head>
<body>
<div>

查看全文: http://www.udpwork.com/item/5300.html

+1  MySQL和MongoDB设计实例对比

Tag: Technical | MongoDB | MySQL
老王 发于 2011年06月08日 22:51 | 点击: 2033 | 展开摘要
MySQL是关系型数据库中的明星,MongoDB是文档型数据库中的翘楚。下面通过一个设计实例对比一下二者:假设我们正在维护一个手机产品库,里面除了包含手机的名称,品牌等基本信息,还包含了待机时间,外观设计等参数信息,应该如何存取数据呢?

如果使用MySQL的话,应该如何存取数据呢?

如果使用MySQL话,手机的基本信息单独是一个表,另外由于不同手机的参数信息差异很大,所以还需要一个参数表来单独保存。

CREATE TABLE IF NOT EXISTS `mobiles

查看全文: http://www.udpwork.com/item/5214.html

+0  史上最LOW的PHP连接池解决方案

Tag: Technical | PHP
老王 发于 2017年09月10日 14:39 | 点击: 993 | 展开摘要
大多数 PHP 程序员从来没有使用过连接池,主要原因是按照 PHP 本身的运行机制并不容易实现连接池,于是乎 PHP 程序员一方面不得不承受其它程序员的冷嘲热讽,另一方面还得面对频繁短链接导致的性能低下和 TIME_WAIT 等问题。 说到这,我猜一定会有 PHP 程序员跳出来说可以使用长连接啊,效果是一样一样的。比如以 PHP 中最流行的 Redis 模块 PhpRedis 为例,便有 pconnect 方法可用,通过它可以复用之前创建的连接,效果和使用连接池差不多。可惜

查看全文: http://www.udpwork.com/item/16413.html

+0  实战Guzzle抓取

Tag: Technical | PHP
老王 发于 2017年08月23日 20:30 | 点击: 895 | 展开摘要
虽然早就知道很多人用 Guzzle 爬数据,但是我却从来没有真正实践过,因为在我的潜意识里,抓取是 Python 的地盘。不过前段时间,当我抓汽车之家数据的时候,好心人跟我提起 Goutte 搭配 Guzzle 是最好的爬虫,让我一直记挂在心上,加上最近打算更新一下车型数据,于是我便重写了抓取汽车之家数据的脚本。

因为我是通过接口抓取,而不是网页,所以暂时用不上 Goutte,只用 Guzzle 就可以了,抓取过程中需要注意两点:首先需要注意的是通过并发节省时间,其次需要注

查看全文: http://www.udpwork.com/item/16392.html
|<<<1234567>>>| 一共12页, 139条记录