Category Archives: Web

NGINX userid 分析、解码

生成userid的代码在 http/modules/ngx_http_userid_filter_module.c 大概550行左右。
uid_set 是4个uint32构成的,其中比较有用的是第二个unit32,是userid的生成时间。第四个是一个递增值 以 0x03030302 为初始值,每次递增0x100。

default: /* AF_INET */
                sin = (struct sockaddr_in *) c->local_sockaddr;
                ctx->uid_set[0] = sin->sin_addr.s_addr;
                break;
            }

        } else {
            ctx->uid_set[0] = htonl(conf->service);
        }

        ctx->uid_set[1] = htonl((uint32_t) ngx_time());
        ctx->uid_set[2] = htonl(start_value);
        ctx->uid_set[3] = htonl(sequencer_v2);
        sequencer_v2 += 0x100;
        if (sequencer_v2 < 0x03030302) {
            sequencer_v2 = 0x03030302;
        }
// 用PHP解码nginx userid
$str = $_REQUEST["uid"] ?: $_COOKIE['uid'];

function nginx_userid_decode($str)
{
        return  unpack('N*', base64_decode(str_replace(' ', '+', $str)));
}

$hash = nginx_userid_decode($str);
var_dump($hash);
date_default_timezone_set("UTC");
var_dump(date("Y-m-d H:i:s", $hash[2]));

参考文章:
http://www.lsproc.com/blog/nginx_userid_decode/

Read: 2369

广告术语 CPM、CPC、CPA 是什么意思?

1.CPM(Cost Per Mille,或者Cost Per Thousand;Cost Per Impressions) 每千人成本
 
  网上广告收费最科学的办法是按照有多少人看到你的广告来收费。按访问人次收费已经成为网络广告的惯例。CPM(千人成本)指的是广告投放过程中,听到或者看到某广告的每一人平均分担到多少广告成本。传统媒介多采用这种计价方式。在网上广告,CPM取决于“印象”尺度,通常理解为一个人的眼睛在一段固定的时间内注视一个广告的次数。比如说一个广告 横幅的单价是1元/CPM的话,意味着每一千个人次看到这个Ban-ner的话就收1元,如此类推 ,10,000人次访问的主页就是10元。?
 
  至于每CPM的收费究竟是多少,要根据以主页的热门程度(即浏览人数)划分价格等级,采 取固定费率。国际惯例是每CPM收费从5美元至200美元不等。
 
2.CPC(Cost Per Click;Cost Per Thousand Click-Through) 每点击成本
 
  以每点击一次计费。这样的方法加上点击率限制可以〖WX)〗加强作弊的难度,而且是宣传网站站点的最优方式。但是,此类方法就有不少经营广告的网站觉得不公平,比如,虽然浏览者没有点击,但是他已经看到了广告,对于这些看到广告却没有点击的流量来说,网站成 了白忙活。有很多网站不愿意做这样的广告,据说,是因为传统媒体从来都没有这样干过。
 
3.CPA(Cost Per Action) 每行动成本?
 
  CPA计价方式是指按广告投放实际效果,即按回应的有效问卷或定单来计费,而不限广告投 放量。CPA的计价方式对于网站而言有一定的风险,但若广告投放成功,其收益也比CPM的计 价方式要大得多。 ? 广告主为规避广告费用风险,只有当网络用户点击旗帜广告,链接广告主网页后,才按点击 次数付给广告站点费用。

Read: 2568

一些网站开发中常用到的Javascript项目

图片轮播 SlideJS

SlidesJS is a responsive slideshow plug-in for jQuery (1.7.1+) with features like touch and CSS3 transitions. Give it a try above and check out the examples to help you get started adding SlidesJS to your project.

官方地址: http://www.slidesjs.com/

 

图片滚动(Marquee) jCarousel

jCarousel是一款 jQuery 插件, 用来控制水平或垂直排列的列表项. 这些项目(可以是静态HTML内容或是Ajax加载内容)内容是可以来回滚动的(可以有动画效果)。

官方地址: http://sorgalla.com/jcarousel/

中文文档:http://www.zhangxinxu.com/jq/jcarousel_zh/

 

图像放大 Etalage

A ready to use jQuery image zooming plugin to present your images in the highest detail without leaving the page.

官方地址:http://frique.me/etalage/

 

简单粗暴的在线编辑器 KindEditor

KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。

官方地址:http://www.kindsoft.net

 

树状列表 zTree

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。

官方地址:http://www.ztree.me/v3/main.php

 

数据报表 Google Chart

Google chart tools are powerful, simple to use, and free. Try out our rich gallery of interactive charts and data tools.

官方地址:https://developers.google.com/chart/?hl=zh-CN

Read: 25

Subversion SVN 分支 (Trunk/Branch/Tag) 在WEB项目中如何应用?

Trunk = 主干,包含所有开发代码
Branch = 分支其实是主干的copy(svn copy URL URL)。通常用来添加新功能、修改bug、创建发行版等。
Tag = 标记,通常用来做milestone标记,mark某个版本,比如bugfix前后的版本。
以上3个名词其实是版本管理中都概念,在svn中并没有对应功能实现。branch、tag实际上都是用svn copy实现。

感觉svn还是不太适合这种更新频繁的项目。
参考文章

SVN: How to structure your repository

http://ariejan.net/2006/11/24/svn-how-to-structure-your-repository/

SVN: How to release software properly

http://ariejan.net/2006/11/21/svn-how-to-release-software-properly/

Organizing, managing and deploying PHP projects in subversion (SVN)

http://www.ericbieller.com/2011/02/04/organizing-managing-and-deploying-php-projects-in-subversion-svn/

Read: 1469

[转]新京报观察:IE6必须死 却没人做得到

src: http://www.donews.com/Content/201003/ce107084fcb3466ca88b6a2d1b7fc0c6.shtm

观察家

  上周末,一群黑衣人聚集在美国丹佛市某会所内,举行了一场葬礼。葬礼现场烛光摇曳,鲜花环绕,悼词卡片放在逝者的棺材周 围。唯一古怪的是,棺材中的“逝者”没有头,它的头部被一张光盘封套取代———上面的遗容是IE6的徽标。这是一场为IE6浏览器举办的非官方葬礼——尽 管据说微软官方的IE6开发小组也送来了卡片,怀念“那段美好的时光”。

  近年来,IE6无论在安全方面,还是在支持互联网新标准方面, 都越来越老态龙钟。震惊世界的Google被黑客入侵事件,其来源就是IE6的一个漏洞;在上述IE6葬礼的官方网站上,也有哀悼者留言:“我不得不无数 次收拾我父亲的计算机,因为他用您观看网络色情内容……好好在地狱里燃烧自己吧,那是你该呆的地儿”。

  尽管如此,IE6短期内仍然不会 被淘汰。业内人戏称,能让IE6死的,只有微软自己;可是微软连续发出IE7、IE8两张王牌,IE6却仍岿然不动。要论置IE6于死地的决心,微软其实 不比Google小——它已经挡了接班人的路。

  这种尴尬境地,其实反映了微软自己在产业体系上的短板。整个微软-英特尔体系的起家契 机,是PC机体系架构的开放;当大量有生产能力的硬件厂家都能生产PC机时,必需的CPU芯片和操作系统便成为战略物资。但在互联网时代,微软已经不复 1980年时的轻松潇洒。现在要背负封闭体系负担的是它自己。一代一代的windows,为了保持与以前软件、设备的兼容,不得不容忍软件体积的空前膨 胀。到了WindowsXP的继任者Vista推出时,这个操作系统的代码量达到了5000万行,动用了9000名程序员。第一代的windows95只 有1500万行。微软自己拖死了自己,才导致Vista在开发三年之后,于2004年突然全部推翻重来。这个夭折,带来了XP的空前长寿,连带着使XP中 捆绑的IE6成为软件界的奇迹。

  中国又是另一种情况。尽管IE6随XP捆绑,但此后的IE7、IE8,和诸多第三方浏览器如 firefox、chrome、safari等,均开放了免费下载,安装也并不复杂,在使用体验上更是远远超过了IE6。因此,在计算机比较普及的欧美国 家,这些非IE浏览器的市场份额不断增加;在欧洲,firefox甚至在2009年还超越了IE6,成为市场份额第一的浏览器。

  但在中 国,即使号称拥有三亿网民,“互联网潜力最大”,在互联网的应用方面却仍然停留在极为原始的水准。IE6尽管无法完整地显示那些美轮美奂的效果、实现高效 的互动,但在偷菜、卖奴隶、逛网店方面已经绰绰有余了。firefox等优秀浏览器在欧洲大出风头的2009年,中国的IE6份额居然反弹到69%。落后 的浏览器背后,反映的是中国互联网低效、重复的应用开发水准。相应地,中国所有银行的网银,现在都只支持IE系浏览器,这成为世界金融界的奇观。

   阴差阳错的业界现实造就了IE6的长寿,而在微软宣布的正式寿命——2014年——之前,IE6的死亡,看来仍有漫漫长路要走。

  曹悦 平(北京媒体从业者)

Read: 967