易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
一篇介绍色情网站的文章引发的思考

一篇介绍色情网站的文章引发的思考

有一个网站叫printerest,这个大家都知道,现在,又有了一个新的网站,网址是 http://www.snatchly.com/,不建议点击哦
风格是一样的,都是瀑布流的风格。只是这个网站的点击率超高,于是乎,投资界就写了一篇文章介绍了它一下:

Pinterest很流行,而有一个产业从来不会放过任何新的技术和模式,那就是色情产业。最近一家采用Pinterest风格的成人网站正式上线,以其鲜丽夺目的图片墙与无限滚动的瀑布流带给了用户最强的视觉冲击,获得了广泛的关注。

像Pinterest一样,这家网站允许用户将自己在互联网上发现的各种色情内容(包括图片和视频)添加到网站上,并根据不同的风格进行整理和分享。

也正是这篇文章让我明白,原来,色情业居然是技术的前沿阵地,居然是VHS标准等的制定参考对象。投资界中这样描述:

实际上,这并不是色情产业第一次引入成功的互联网模式。回顾历史,我们可以看到色情产业在诸多方面都推动着互联网的进步。

在20世纪80年代的VHS与Betamax录像带标准争夺战中,正是因为色情行业对VHS格式的支持,使得质量更高的Betamax格式反而落败。同样的事情也发生在RMVB与Flash流媒体标准、蓝光与HD-DVD光盘格式的大战中,色情行业的支持直接促成了标准的诞生。

在另一角度,在线支付成为大众接受的支付方式仅仅是几年之前,但是有一个行业,早在20世纪90年代就已经对其进行了成功的实践。是的,这也是色情业,1999年的在线成人内容消费额高达13亿美元,占当年在线消费总额的8%,大大高于在线购书和订购机票的消费额。

广泛的流媒体播放技术直到YouTube开始才被在线媒体广泛应用,但成人网站也早早就已经开始采用无需任何附加插件的早期流媒体播放技术。正如畅销书作家 Lewis Perdue 所说,“28.8K 猫时代的程序员们为了让付费用户看上性爱画面而对在线播放软件进行的极致优化,是今日CNN得以通过网络快速传播新闻视频的技术基础”。成人网站用户强烈的在线流媒体播放需求推动了流媒体播放技术的快速进步。

当然,让我震精的还有:

普通的网站架构是难以承受这样庞大的数据需求的,成人网站们的解决方案包括成立自己的数据中心,租用亚马逊AWS、微软Azure这样的大型云计算资源,采用更高效的网站架构和数据库技术等。他们采用这些方案其实并不是源于其对新技术的好奇,而是为了满足用户不断增长的需求。

果然这些解决方案都是走在了世界前沿啊。要向他们学习。

工作笔记

工作笔记

一个句子的迁移,一个粗心:
原mysql代码是:select date_format(from_unixtime(xxx),'%Y-%M') as xxxxx from table group by xxxxx

sql server转换后:
select (select dateadd(ss,xxx,'1970-01-01 08:00:00')) as xxxxx from table group by xxxxx
因为sql server不支持将as 后的内容做聚集,只能:
select dateadd(ss,xxx,'1970-01-01 08:00:00') as xxxxx from table group by (select dateadd(ss,xxx,'1970-01-01 08:00:00'))
但又报错,说是group by 不能使用子查询。

仔细想了想,(select dateadd(ss,xxx,'1970-01-01 08:00:00')) as xxxxx,这个select用来干嘛 ?如果是在查询分析器里,当然是要用select,因为要输出嘛,但是在sql语句中。。。
不需要啊。

记录一下。

一段聊天记录。。隐藏了QQ号

一段聊天记录。。隐藏了QQ号

因为觉得有意思,也说到了目前的一些创业公司的现状,所以想来放出来给大家看看
再者,隐藏了QQ号,黑黑

觉醒@北京(xxxxxx) 14:54:51
突然感觉创业团队有时候多么不靠谱的一件事情哇....
廖宇雷(xxxxxx) 15:01:01

觉醒@北京(xxxxxx) 15:01:37
2个开发配3个产品...
霖雨(xxxxxx) 15:01:53
苦逼的开发人员
板子(xxxxxx) 15:04:51
嗯,然后经常是刚毕业的产品
板子(xxxxxx) 15:05:13
每天不断“试错”+各种神乎其神的纬度的统计数据"分析"
觉醒@北京(xxxxxx) 15:05:20
绝对是2手产品..
觉醒@北京(xxxxxx) 15:05:47
就一句话..这个好…就抄它了...
觉醒@北京(xxxxxx) 15:06:02
剩下细节开发自己琢磨把
Darren(xxxxxx) 15:06:25

板子(xxxxxx) 15:06:38
我们1年半,基本把热门的产品都做了个遍了
霖雨(xxxxxx) 15:09:55
有%1成功就不错了
霖雨(xxxxxx) 15:10:24
怒鸟的team不是第一个app爆发
Gosber@MySQL+Cluster(xxxxxx) 15:10:39
我们这行 成功率极低
神仙(xxxxxx) 15:11:42
所谓大公司大平台也只是浮云啊
觉醒@北京(xxxxxx) 15:12:03
产品们的理论是...我们的开发不行...
Gosber@MySQL+Cluster(xxxxxx) 15:12:12
这山还望那山高
Gosber@MySQL+Cluster(xxxxxx) 15:12:17
原因都在自己身上
觉醒@北京(xxxxxx) 15:12:17
创业公司就是需要试水
Gosber@MySQL+Cluster(xxxxxx) 15:12:29
中国人就是人人都觉得自己是个明白人
神仙(xxxxxx) 15:12:36
外国人呢
Gosber@MySQL+Cluster(xxxxxx) 15:12:37
团队意识太单薄
觉醒@北京(xxxxxx) 15:13:05
我们目前做的应该就是一个大全- -
觉醒@北京(xxxxxx) 15:13:16
集百家所长一个四不像
觉醒@北京(xxxxxx) 15:13:37
堆起来的东西..
觉醒@北京(xxxxxx) 15:14:00
不知道什么时候能够静下来梳理一下
觉醒@北京(xxxxxx) 15:15:05
我觉得产品应该对每一版本都有一个期望..达到什么目标...
觉醒@北京(xxxxxx) 15:15:13
不是一次一次的试效果

收到linode的通知,顺便记录一下

收到linode的通知,顺便记录一下

这两封邮件来自linode,说实话,觉得linode真心不错。。

比如这一封:
We are currently aware of an issue with the host that your Linode resides on (tokyo49). This issue requires a reboot to resolve. We do apologize for any inconvenience this issue may cause. Your patience and understanding is greatly appreciated. Please do not hesitate to contact us if you have any questions or concerns.

然后过了将近10分钟左右 :
The host that your Linode resides on has been successfully rebooted. Your Linode will return to its last state shortly (running or powered off). There is no need to issue boot jobs for your Linode at this time. Thank you for your patience and understanding. Please feel free to update this ticket in the event that you have any additional questions or concerns about this matter.

于是,linode的管理邮件又自动发来:
Hello xxxxxxx! The following activity has recently occurred:

* linode??????- (7659786) Host initiated restart - Completed Wed, 16 May 2012 04:23:49 GMT
* linode?????- (7659950) Lassie initiated boot - Failed Wed, 16 May 2012 04:23:58 GMT

This is a new feature. You can change your notification settings via https://manager.linode.com/profile.
果然,这些功能是真心不错啊。如果以后有短信息发送就好了。
国内的VPS有哪个有类似功能的?不过国内我是不想用了,NND,备案备案,备死人的案。

iPhone导入Google通讯录

iPhone导入Google通讯录

老婆用的是palm手机,最近因为摔了(?好象是),导致打电话的时候听不到声音,但是用耳线可以,因为它的电话比较多,所以就帮她买了个iphone4s,之所以买这款手机而不是买android或者wp之类的,是因为,这款手机相对比较简单,比如装软件,删软件。不象安卓还得进入软件管理器里才能进行删除。太麻烦了。

新机入手,第一件事就是剪卡,随手一剪,插入后提示无SIM卡。再到网上查了一下,原来剪卡不是说把芯片剪出来就完事了,主要是要对准中心线,于是对着图片,直接下手一刀,把SIM卡的铜片剪掉一点,再次插入,正常了。哈哈。哥还是很厉害的

然后就是导入通讯录了。不得不说,虽然palm没落了,但是它的一些设计理念还不错的,比如它就支持google通讯录,于是这次换成iphone后,通讯录就不是难事了。

原来我以为在邮件里直接绑定gmail就OK了,但事实告诉我,这是不行的。嗯,网上都说了,还是用exchange吧
于是在exchange里输入了gmail的帐号,点击下一步,会让我输入服务器,这时候输入:m.google.com,再下一步就OK了。

黑黑,通讯录就这么导回来了。轻轻松松啊。

Linux命令行下面一个有趣的小命令(tested in ubuntu)

Linux命令行下面一个有趣的小命令(tested in ubuntu)

在微博的#SAE技术分享# 看到一些有意思的东西,比如这一篇的标题,嗯,确实是有一些奇怪的玩意。
比如,ubuntu下的apt-get moo,居然出来了这样的玩意,你能相信吗?》

root@webserver:/# apt-get moo
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
...."Have you mooed today?"...

好一只羊?还有一些其他的命令,比如yes,好象记得这个命令是专门用来处理自动化安装的吧?即自动输入y,N个,直到安装完成,如果没有安装,就在屏幕上拼命的输出。。。
还有一些其他的。。比如banner,会将你输入的字符用##打印出来,比如我这个:

root@webserver:/# banner bannertest

##### ## # # # # ###### #####
# # # # ## # ## # # # #
##### # # # # # # # # ##### # #
# # ###### # # # # # # # #####
# # # # # ## # ## # # #
##### # # # # # # ###### # #

,再比如fortune,这个函数很有意思,既能学英文又可以很好玩,该网页上这么显示了:

orange@orange-desktop:~$ fortune
Q:How many IBM types does it take to change a light bulb?
A:Fifteen. One to do it, and fourteen to write document number
GC7500439-0001, Multitasking Incandescent Source System Facility,
of which 10% of the pages state only "This page intentionally
left blank", and 20% of the definitions are of the form "A:.....
consists of sequences of non-blank characters separated by blanks".

想看更多?到这里看一下吧:http://www.linuxidc.com/Linux/2007-05/3784.htm,不是每个linuxer都是闷瓜。

继续几点注意事项

继续几点注意事项

命令行和WEB运行程序中遇到的问题就是,这两个方式生成的图片目录权限不一样,目录命令行,如果以xxx用户登录,生成的目录组就是xxx,而WEB因为指定了apache或者nginx的用户组(如:www-data),生成出来的权限就是以www-data为主,如果需要读取和处理Xxx目录下的图片等,很可能会遇到不能读取或者没有权限的问题
因此,一个办法是:su www -c 'xxxx'这种指定权限的方式来处理

还有一个办法:
suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp)
嗯看一下:
suPHP
现在就可以了?但总是不爽。没有什么更好的办法 .。。

小笔记

小笔记

最近在与IOS交互的时候,是由weiview里改变location.href来使得页面的URL产生变化,然后由IOS来截取这些URL信息以达到截获消息的机制。
有人推荐了:https://github.com/marcuswestin/WebViewJavascriptBridge
看了一下,其实也都差不多一样,不过看到FlipBoard的代码中,也还是用location来改变的,但是它也有一个机制,当你用网页打开时,并不会触发Location的变更,所以我在想是否有一种相对比较好的机制,能够使得数据的交互更方便。
抛开上面的例子以及flipboard,这两种其实最终都是用addEventListener来监听和传递,但毕竟要和客户端交互,除了URL其他用什么呢?
我随便想了想,不知道是否正确:
1、localStorage,客户端定时检查localStoage的信息
2、cookie,改变cookie值以获取改变后的值
3、利用Safari的特性,捕获console.log的数据

cookie应该是肯定可以,但是太慢了吧?第三个,有可能,但没有测试过

怎样刷新页面

怎样刷新页面

看这个标题,或许很多人会嘲笑我,刷新,谁不会呀。F5一按就完事了呗。
大家都知道刷新分:普通刷新和强制刷新,普通刷新的话,如果图片做了缓存(304)那么几乎是永远都看不到新图了。做开发的,当然希望是每次都强制刷新,可以看到真实的效果,不过。。。。万一用户没强刷怎么办。
看了一下taobao QA的文章才了解,刷新的种类居然有这么多:

浏览器的刷新有2类
第1类:普通刷新。会首先从缓存中加载内容,缓存中已过期部分内容会从服务器重新请求。
第2类:强制刷新(刷新缓存和页面)。会从服务器重新请求所需要加载的内容

第2类刷新的情况:
1) 快捷键CTRL + F5
2) 按键CTRL + 点击工具栏刷新按钮
3) 按键CTRL + 点击地址栏右侧刷新按钮

第1类刷新的情况:
1) 点击工具栏刷新按钮
2) 点击地址栏右侧刷新按钮
3) 网页中右键菜单,点击刷新按钮
4) 菜单:查看->重新载入
5) 快捷键F5
6) 快捷键SHIFT + F5
7) 通过鼠标手势刷新
8) 按键CTRL + 网页中右键菜单,点击刷新按钮
9) 按键CTRL + 菜单:查看->重新载入
10) Webkit核下,快捷键CTRL + R

mac下面,几乎就是接ctrl换成command。
Firefox,如果安装了firebug,打开firebug,在net标签中可以选择:强制刷新,这样每次请求都不会从缓存中走了。

开发中的几件事

开发中又遇到一些事情,于是记录一下
1、CURL的问题
curl在安全模式下或者设定了open_basedir的情况下,如果使用了OPT_FOLLOWLOCATION,会导致无返回值。这个理由很多,但FOLLOWLOCATION这个参数是用于目标网址会多次跳转而使用,还可以设置最大跳转次数,因此,如果你要抓取的对象有多次跳转,这个参数就非设不可(真纠结,实在不行就file_get_contents了,它自动支持多次跳转,但不如curl更可控一些)
具体关于CURL的一些常用参数,可以看这里:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
//HTTP协议的版本号
curl_setopt($ch, CURLOPT_NOPROGRESS, 1);
//如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。注意:PHP自动设置这个选项为非零值,你应该仅仅为了调试的目的来改变这个选项。
curl_setopt($ch, CURLOPT_NOBODY, 0);
//如果你不想在输出中包含body部分,设置这个选项为一个非零值。
curl_setopt($ch, CURLOPT_HTTPGET, 1);
//设置HTTP请求的方法为GET
curl_setopt($ch, CURLOPT_ENCODING, ”);
//设置HTTP请求头中可接受的压缩格式
curl_setopt($ch, CURLOPT_COOKIEFILE, 1);
//传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式,或是堆存在文件中的HTTP风格的头。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
//最多可以进行几次HTTP重定向,一般和curl_followlocation联用
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)’);
//在HTTP请求中包含一个”user-agent”头的字符串
$http_header = array();
$http_header[] = ‘Connection: Keep-Alive’;
$http_header[] = ‘Pragma: no-cache’;
$http_header[] = ‘Cache-Control: no-cache’;
$http_header[] = ‘Accept: */*’;
$http_header[] = ‘Host: ‘.$url_ary['host'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header);
//一个数组格式的HTTP头文件格式
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//将curl_exec的返回值转换成一个字符串,而不是直接输出出来
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
//设置一个长整形数,作为最大延续多少秒
curl_setopt($ch, CURLOPT_REFERER, $url);
//在HTTP请求中包含一个”referer”头的字符串
curl_setopt($ch, CURLOPT_URL, $url);
//这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项


2、命令下行指定用户组来执行命令
最偷懒的方法就是:su www -c 'php xxx.php'

3、hightman遇到的Javascript函数parseInt(''),返回NaN,这个让我想起有个人做了一个PPT,来说明JS中的一些特殊问题,它的地址是:http://neatstudio.com/show-1987-1.shtml

4、PHP的header跳转
大家都知道header("Location:http://xxx.xxx.com");在这个之后如果你file_put_contents内容去一个文件,还是会被执行的,于是我们习惯性的在header跳转后继续处理一些内容,即不影响跳转,也可以完成一些内容性的处理。
但尝试了一下,如果是header()下面跟上sleep(10);你会发现header不会即刻跳转了,会等10秒后再跳转。
因此,现在了解header跳转还是会受原有代码的影响的。

5、HTML5的a标签属性ping
ping的属性说的很好,当a有href属性时,如果有ping属性,会在跳转链接时候,自动ping网站(ping标签中的对应网站),但测试了一下之后发现。居然没用。查看了一下资料,我操:

6.6 Changes from 4 March 2010 to 24 June 2010

  • The ping attribute has been removed from the W3C version of HTML5.

我郁闷啊。。。

-------EOF------