linux上部署ASP.NET

Install ASP.NET vNext on a DigitalOcean Ubuntu droplet

Install Mono on Linux

Installing ASP.NET on Ubuntu with Mod_Mono Autoconfig

Hosting ASP.NET 5 web application on GNU / Linux

今天你消费了多少比特?

比特(bit),是信息的基本单位,代表“一位二进制数”,也就是0或1。我们日常生活中的所有信息流动都是以比特为单位进行传输的。我们经常说“我家的宽带是XXX兆”其实就是说比特率(bps),也就是每秒可以传输的比特数量。而我们日常使用的所有计算机文件大小,也都是用比特来衡量的,比如“这张照片的大小是XXX兆”其实说的是字节(byte)数量,一个字节是有8个比特组成的。
 
好,科普结束。那你知道你每天能消费多少比特吗?
 
也许你会说,这我怎么知道?很简单,就是你每天接收到的比特数量,而最重要的两个接收“传感器”就是眼睛和耳朵。从手机接打一个电话,发送一条短信,到下载一个App,阅读、看视频等都是某种形式的信息消费。比如,我们看一部1080P的蓝光电影,一般是10个GB以上,在手机上看一部10分钟的短片,大约是几十MB。Youtube上每分钟会有20小时的视频内容被上传到网上(虽然很多人没机会看到,你懂的)。
 
在互联网时代,信息消费如同我们消费食物、水、空气一样必不可少。而不加限制的消费,让我们不可避免的遭遇“信息过载”。你是否觉得自己已经不知不觉加入“低头族”大军,你是否总是“刷”微博、朋友圈,而且根本停不下来,你是否已经忘记上次拿起一本纸质书是哪一年。虽然我们消费了前所未有的海量信息,但是我们和以前的人有什么区别吗?我们比前人更聪明吗?我们比前人更有创造力吗?
 
“信息过载”让我们成为信息的被动消费者,因为我们并没有利用信息来创造新的东西,而只是“消费”。就如同不停地在吃垃圾食品一样,只会对心智产生不健康的影响。要避免自己被动地消费信息,这里有几个建议:
 
1.不要过度肯定(affirmation)
也就是能够识别出自己已经肯定并认同的观点,而不用重复地去消费他。比如朋友圈里那些被转了成千上万遍的信息,重复消费它们的结果就是让自己过度肯定自己的观点,产生的后果可能是:对新的事物排斥,先入为主地看待问题,头脑僵化。
 
2. “少吃、吃好”
减少被动地信息消费,被动消费信息如同摄入垃圾食品。浪费精力而不会产生有效结果。如果有机会,尽可能接受有价值的信息,比如经典书籍和高质量的学术论文和评论。尽量去接近信息的源头。
 
3. 既要有“输入”,也要有“输出”
无论是“垃圾食品”还是“有机食品”,如果只“输入”,不“输出”都不会有助于信息的消化。经常性地将自己的想法和见解“输出”,不一定要投稿什么,开一个个人的博客或微博将自己的一些想法和别人分享。这个过程也会产生很好的反馈效果。
 
4. 多样性,均衡获取
信息获取渠道应该多样,尽可能看一些不同的声音和思想碰撞,避免思维陷入偏见和狭隘。这里有一点需要注意的 — 不要过度评判,也就是可以不同意,但是要知道别人为什么提出这个观点,自己又为什么不同意。避免过多的主观代入,而应客观公正地审视。从这个角度来说,“垃圾食品”是可以吃一点的,前提是你要知道它是垃圾食品。
 
参考资料:
1. A Healthy Information Diet: The Case for Conscious Consumption
2.《The Information Diet》
3. Our compulsive consumption of information

 

你好,你被微信屏蔽了

昨天,很不幸地发现,微信内置浏览器屏蔽了支付宝的支付接口跳转,这意味着今后在微信内的支付唯有使用微信支付了。呵呵!

跳转屏蔽页面上的提示是:支付宝屏蔽了微信。但真正的原因,不得而知。

从今年年初发现的微信屏蔽了网易云音乐的分享开始(屏蔽的原因竟然是微信认为网易云音乐存在侵犯版权行为),我就越来越觉得中国人很多事情做不大的原因 – 格局太小,又喜欢占领道德制高点。好吧!用一个词来形容:伪君子!

先说说版权问题,微信这么做希望人们怎么想呢?大概是这样:你们看,网易云音乐是不错,但是有侵权行为,我作为一个这么大的平台是有责任对这样的事情说不的!这种事情法律管不了,我微信可以管呀!哼,什么是侠之大者。你看,我家QQ音乐就没有这个问题。(最后才是重点,我就是这么阴暗地推测,源于我本身就是一个阴暗的人,呵呵)

个人觉得,在中国,这种在线音乐平台没有一家是干净的,大家只不过都心里算计算计而已,别把网友当傻X,然后摆出一副道貌岸然的样子。

支付也是一样,不管是支付宝屏蔽还是微信屏蔽,其实最终的结果只有一个 – 用户不方便。互联网又一次被我大中国国民心中的那堵“GFW”割裂为一个个信息孤岛。是的,你看看那一个个天天琢磨怎么翻墙的“精英们”,你以为他们真的知道“自由”精神吗?看看国内的互联网界,没有。

之前说过“专制是流淌在中国人的血里的”,现在我更加确定这个观点。并且,我对中国的IT精英们再无好感!

解决ubuntu终端无法显示中文的问题

1、安装apt-get install language-pack-zh,默认已安装  

2、编辑/etc/environment,添加或改成:

    LANG=”zh_CN.UTF-8″

    LANGUAGE=”zh_CN:zh:en_US:en”

3、编辑/var/lib/locales/supported.d/local:

    en_US.UTF-8 UTF-8

    zh_CN.UTF-8 UTF-8

    zh_CN.GBK GBK

    zh_CN GB2312

    en_GB.UTF-8 UTF-8

4、执行命令:locale-gen

5、修改/etc/default/locale:

    LANG=”zh_CN.UTF-8″

    LANGUAGE=”zh_CN:zh:en_US:en”

6、执行locale命令,查看环境变量。

摘自互联网

关于邮件订阅的想法

现在无论是什么类型的网站,邮件订阅都是一个非常重要的用户互动渠道,无论是新的产品发布还是各种促销活动都需要经过这个渠道。就我自己的感觉来说,除非是邮件中有很明确的“实惠”否则大多不会点击进去,比如godaddy的域名续费优惠券,我会有点兴趣;而携程的某某100元订房抵用券就算了。

其实上面不是我的重点。

类似这样的邮件,每当我要去点击进去看的时候,都是看不到任何内容的,因为 – 需要登录!!!

本来就是一个费了很大力气才“转化”过来的点击,这一登录估计至少流失50%,一点都不夸张。产品经理难道认为我已经点了,就不会在乎再登录吗?显然产品经理想当然了,而且是所有的产品经理!!

其实对于这样的邮件点击,完全可以通过一个短期有效(比如3天)的passkey来解决,实现细节就不用说了。也许某些人会觉得“这样不安全”,世界上没有绝对安全,先想想到底什么样是方便用户的再说吧。

使用监控宝snmp监控ubuntu

第一步:在ubuntu上安装snmp服务

apt-get install snmp

安装完成后snmp会自动启动,使用这个命令检查: lsof -i:161 

第二步:修改配置文件

vi /etc/snmp/snmpd.conf

  • 默认只允许localhost:agentAddress  udp:127.0.0.1:161
    修改此行:agentAddress udp:161,udp6:[::1]:161
  • 添加一个用户:createUser jiankongbao MD5 “12345678”
  • 激活用户:rouser jiankongbao auth

第三步:重启snmp

service snmp restart

第四步:配置监控宝

填入服务器ip,选择snmp版本为v3,填写上面配置的用户和密码。保存。

done!

 

 

Class “MongoClient” not found

在命令行执行php脚本时报错:Class “MongoClient” not found,但是通过apache打开phpinfo是有的,而命令行通过 php -i | grep ‘Mongo’ 却没有。

原来是加载的php.ini文件不同,apache是这个:/etc/php5/apache2/php.ini

而命令默认加载的这个:/etc/php5/cli/php.ini

按照apache的配置把extension加入cli的php.ini文件即可。

还是对php的执行机制不熟悉啊!不过今天算是知道cli的一些基本用法了。

在Mac上最简单地用VPS进行翻(fuck)墙(gfw)

既然是VPS,我就假设你至少会用ssh吧。

不用搞很多issh还是什么客户端。最简单,在终端里输入:

ssh -D 7070 用户名@服务器的IP地址

简单点,你可以直接做个密钥放到服务器,省去每次输入密码的麻烦。

再简单点,直接把这个命令放到bashrc或者zshrc里,设置一个别名:

alias fuckgfw=’ssh -D 7070 用户名@服务器的IP地址’

最后,在网络设置里直接使用socks代理,设置为127.0.0.1,端口7070

done。

补充:这最后一步设置代理,也可以用命令来解决:

alias fuckon=’sudo networksetup -setsocksfirewallproxystate Wi-Fi on’
alias fuckoff=’sudo networksetup -setsocksfirewallproxystate Wi-Fi off’

电影“归来”

我承认,电影《归来》是一部让我昏昏欲睡的电影,看到3/4的时候,突然有一种看《千里走单骑》的感觉。张艺谋电影里的人物总是透着一股执着,执着的让人肃然、让人觉得不可思议、让人觉得“尽他妈扯淡”。好吧,《归来》不是一部我通往“文艺中年”路上的里程碑作品。Keep calm and carry on,stupid and proud!

但是,今天看到某些针对《归来》的评论的时候,让我不得不对我天朝某些人的智商肃然起敬。大体上,有这么一帮人觉得《归来》有丑化文革之嫌,居然提到剧中女儿跳芭蕾时的化妆和表情,然后联系到张艺谋之前的种种不敬行为,甚至提及其对“伟大的”《红色娘子军》的不敬。首先,说说我这个毫无*革经历的80后的感受,说实在的,看片时候基本没有因为芭蕾演员的化妆和表情有特别的感觉 – 可能是以前集邮的缘故,看过一些上世纪七十年代的邮票,那表情还真有点相似的地方。其实,对片中的很多所谓“反面人物”,到并没有联系到“丑化”那个时期的地步,只是觉得那时的人那时的事在特定的历史时期的正常反应,也就无所谓产生鄙夷之情。

妄想症的一种症状就是觉得所有人都在别有用心地针对自己和自己所维护的东西。患此症时,已无关乎“信仰”了。

有时候又在想,这种愚蠢的争议是不是张艺谋的一种炒作方式呢?我倒宁愿相信他一个人蠢。

网站用户系统集成微博登录时注意事项

借用微博账号来登录网站是一件很方便的事,微博也提供了比较丰富的API来完成这件事。比较常用的就是JS API和服务器端oauth API。

JS API的好处是集成非常简单,只需要引入微博的js文件并定义一个WB2.anyWhere函数即可,在这个函数里定义好login和logout的回调服务器接口,而在服务器接口里,你仍然需要服务器端oauth API获取登录用户信息,并完成本地网站的用户创建过程。

但缺点也非常致命,你无法对登录按钮和登录后的状态信息进行完全控制,如果你需要一种看起来非常自然的集成效果,那微博自带的那几个屌兮兮的样式绝对让人无法忍受。而另一方面,实际上服务器端的oauth API使用也是必不可少,回调时候总归要在服务器端绑定一个本地用户。

最终,我们还是选择抛弃JS API。通过服务器端API完成登录的基本流程是:

1. 生成登录链接

$o = new SaeTOAuthV2( WB_AKEY , WB_SKEY );

$code_url = $o->getAuthorizeURL( WB_CALLBACK_URL );

$cur_url = $_SERVER[“REQUEST_URI”];

return “$code_url&forcelogin=true&redirect=$cur_url”;

2. 用户点击时会,打开微博的登录页面。用户登录成功后重定向到回调页面。此时,根据回调带回的code参数获取accesstoken,在用accesstoken获取登录用户信息,并完成本地用户创建或绑定。

$o = new SaeTOAuthV2( WB_AKEY , WB_SKEY );

if (isset($_REQUEST[‘code’])) {

$keys = array();

$keys[‘code’] = $_REQUEST[‘code’];

$keys[‘redirect_uri’] = WB_CALLBACK_URL;

try {

$token = $o->getAccessToken( ‘code’, $keys ) ;

} catch (OAuthException $e) {

var_dump($e);

}

}

 

if ($token) {

$_SESSION[‘token’] = $token;

setcookie( ‘weibojs_’.$o->client_id, http_build_query($token) );

$c = new SaeTClientV2( WB_AKEY , WB_SKEY ,  $_SESSION[‘token’][‘access_token’]);

$uid_get = $c->get_uid();

$uid = $uid_get[‘uid’];

$um = $c->show_user_by_id($uid);

$u = UserSns::create($um[‘id’],$um[‘name’],$um);

Visitor::login($u->getUser());

$this->simpleRender(‘weibosuccess’);

} else {

echo ‘授权失败。’;

}

这样完成了用户创建后,基本就完成了。

但有时候,如果用户系统是基于email的(也就是email要用来登录、验证、找密码、接收通知等等),最好的办法是在授权成功后不要只是简单地自动创建一个用户,而应该让用户完成注册流程,也就是再填写email和登录密码然后创建一个不是那么特殊的用户,从而更好地将微博登录的用户和网站自身的用户系统融合。