这篇只是流水帐,请不要过于期待。
acfun是能在天朝动漫历史上留下很深一笔的站。从07年单纯的新番观赏网站到后来08年初转型成综合的弹幕视频网站,不到一年的时间迅速积累了大批忠实用户,这些人都是属于死忠类型,就算acfun三年界面不变、经常宕机(08-09年)、功能不加反减(例如从有视频预览封面到没有)、一直是使用视频外链等情况下也坚持每天上去日常的人。08年时候我基本每天都要花上1-2个小时在上面,还写了个介绍文章普及一下弹幕视频站知识。从08年到现在,acfun对于天朝内的ACG文化的推广可以说是毫无疑问的第一位,创造了数不清的(圈子内)流行词语和文化,例如新华里业务员、221的音MAD、NINI的游戏视频、TANK的各种(坑)神MAD、AIPC等等等等……
而从acfun创站开始就不停地踩掉各种同类网站,印象中的就有肥猪网(fz222)、回音山(echogames)、56网(短暂地有过一段时间支持视频评论结果迅速被喷子占领了)还有各种不知名站点。回音山高调介入让人觉得是不是acfun挑战者终于来了:界面相当华丽,甚至拥有专门的视频服务器,不用忍受新浪外链带来的不便,管理员也勤奋地很(虽然到最后播放器都很难用)。或许后来的商业化企图直接导致了回音山挂掉,但它真是没能展现出一点可以对抗acfun的态势——无论是评论、弹幕还是视频数量。其他的网站就更不必提,惨败二字足以概括。
所以后来的哔哩哔哩视频——也就是最初叫做Mikufan的那个站点起步就艰难多了,因为一直到去年中期为止,国内的弹幕视频站流量基本都被acfun霸占。但2010年11月开始,bilibili的流量开始直线上升,终于在11月24号超过了acfun,不过当时还是没稳定下来。直到今年春节后,两个站的拜年视频出来后攻守颠倒(?),bilibili在pv、ip、视频更新速度上超越acfun。我分别在alexa.cn和cn.alexa.com上查了一下两个站的数据:
cn.alexa.com:
acfun.cn的网站信息 Alexa网站流量排名: 13,946 CN的流量排名: 1,843 反向链接:178
bilibili.us的网站信息 Alexa网站流量排名: 8,866 CN的流量排名: 938 反向链接:223
alexa.cn:
站点 bilibili.us 的 Alexa 排名查询结果
当日排名 5223
日均 IP 访问量[一周平均] 447000
日均 PV 浏览量[一周平均] 3978300
站点 acfun.cn 的 Alexa 排名查询结果
当日排名 12593
日均 IP 访问量[一周平均] 378000
日均 PV 浏览量[一周平均] 1247400
很明显,差距越拉越大。对于两个站点比较的帖子其实有不少,引用一个就说acfun和bilibili,其实有些领域真是先到先得,当然那个时候acfun的访问量还在bilibili之上,但已经可以看到大家讨论acfun的问题在于:
- 更新太慢,包括视频审核速度和网站功能速度。如果说不增加新的功能也可以留住之前的死忠用户的话,那么在新用户的吸引力上必然大打折扣。acg_xilin是个有耐心而且想做更好的人,可惜没能在acfun后续发展上体现出来。实话说现在acfun的管理员之一是否还是acg_xilin都不好说了。
- 喷子泛滥,审核不力。有些投稿(90%是文章)争议性过大,尤其是政治性的,连擦边球都不是,从1L开始一直可以开战到1000L。要是说这样可以增加PV真是成本太大了。acfun能不被拔网线真是太运气了。
- 无节操地广告放置手段。有段时间甚至满屏有三四处广告,而且和界面效果完全不合拍。首页和弹出的页面还有声音,在chrome下,ad block插件开启的时候甚至有一定几率看不到弹出框但是能听到恶心的音乐。广告是非商业性网站的生存之道,几年下来我还养成了每天看视频空隙点开几个google adsense推荐的页面的习惯。但是过于密集的广告所带来的负面影响非常巨大。
- 基本功能的问题:评论引用效果差、弹幕容量小会被刷掉、搜索页面不稳定。
至于界面,不是大问题。甚至于09年取消视频封面后站上的用户多半给予理解的态度,也很快适应了纯文字的视频列表。而三年不变的“老土”界面其实也成了acfun的象征。
不过与此同时bilibili的站长bishi一步一个脚印地为网站提供改进,有段时间更新频繁到让人觉得那绝对不是一个人不脱产能产生的工作量。bilibili的细节非常值得称道,例如一开始就非常完善的搜索功能、个人空间的管理、投稿者对于本人视频的弹幕管理权力的下放(这点非常重要,可以保护优秀的字幕和效果弹幕)、缩略图直接预览、播放之中的滚动条拖动(节省流量)等等等等。最近的一次大更新增加了积分系统——无论在什么站点上,和数据有关、尤其是类似于货币流通符号的个人数据都是必要的。多数人(例如我)只是看视频,没有技术做视频,也没有时间和能力去搬运视频,但通过积分分享可以得到更多的互动性。bilibili对于实际参与非常看重,例如去年海选看板娘,还有后来的协作乡,都是在提倡每个人做点什么,而不只是看着达人们在不停地提升存在感。
总之一句话,希望a站b站促进双边合作以及双方在弹幕技术、搬运能力方面的交流,互信互利,夺取天朝ACG界的全面胜利。
03 5月 2011 in 动漫, 网络
Comments [11]
在Project Euler通关的时候有个题用遍历循环过了后觉得应该有更好的方法,于是去论坛看别人的解法,结果发现了一种变态语言Befunge。去维基看了看:
这门语言由Chris Pressey在1993年创造,本意为设计一种尽量难编译的语言……结果马上出现了一批编译器。
还真是够欠啊……简单来说这种语言以二位形式书写,程序维护一个指令指针(IP)指向当前执行的指令,用^v<>作为指针移动的依据、四则运算则是直接取出两个栈上的值进行运算。和汇编一样,代码中出现的任何符号可以是数据也可以是指令,甚至可以是注释(不用特别标识,只要永远不执行即可)。比如下面这段代码就是寻找第10001个素数(来自于Jarjar):
25*:*:*1-20p 300p030p040p v
@.g04<v `g02g03<
|< v g00 <
vg00<>00g:40p > 2+00p^
> :10p1-!v!-1p01:-1g01<
^ p03+1g03_00g10g% #^_^
>93*\: 50p60p>50g:60g\/v
|:-1p05/2+<
^ $\g05<
看完这让人斯巴达的语言后我想了想中文编程内有没有类似的恶搞语言呢?基于Whitespace的“草泥马语言”算是一个,当年看到时候笑到敲地。然后突然想到文言文编程何如?没想到已经有高人完成了:唐鳳,被称为计算机怪才的Perl Guru,致力于用Haskell实现Perl 6的自由程序员。她的故事不赘述,想了解的话可以google一下,我们这里只看看PerlYuYan。文言文的Perl写出来像是下面这样,有兴趣可以去CPAN上下载回来玩玩。
#!/usr/local/bin/perl
use Lingua::Sinica::PerlYuYan;
用警兮用嚴。
印道
一至一
哉兮
印編曰雜申雜申矣
又纖曰龍鼠矣
又曰一矣
亂曰
國無人莫我知兮 又何懷乎故都
既莫足與為美政兮 吾將從彭咸之所居
最近在看WP7通信相关的内容,做个小结。
首先说说什么可以用(from Networking in Silverlight for Windows Phone):
- WCF,也就是Windows Communication Foundation,微软力推的(把WSE拍死在沙滩上的)新一代框架,面向服务但是用起来对OOP程序员友好(不过细节上说起来就不行了,例如不能直接支持重载之类),消息基于SOAP Message。扩展性很好。后面会专门提到WP7上的WCF。
- 大名鼎鼎的WebClient和HttpWebRequest。这两个类是MS在System.Net中对于Socket的封装。
- 上面两类通信的基本验证(Basic authentication)功能,以及设定user-agent的能力。
- Push Notification。也是微软力推的一个服务,和Azure合体的话能做出不错的东东,例如现在Marketplace里那个”Send to WP7″程序。
你可能会问了,Socket呢?蓝牙呢?Wifi控制呢?Socket的话,微软的意思就是让你安心用WebClient去做HTTP请求吧,至于什么监听端口啊拆包啊之类就不要想了。虽然有人(搜Jeremish Morrill)Hack出了直接访问Socket的方法,但用本地代码也只能得到接口,上层封装——包括各种System.Net内的框架类(IPEndPoint之类)——都写出来工作量不会小,弄不好写完时候API已经开放(虽然去年这个时候MS就说“未来会开放”)。
而蓝牙……至少在开放的API中没有看到任何消息。现在连文件对传都不行,所以估计一时半会没法实现。最后,有关Wifi:对于一般的程序而言,网络访问是系统全局控制的,程序没有办法选择是利用蜂窝网络还是Wifi作为访问方式。不过可以得到当前的网络类型:
NetworkInterface.NetworkInterfaceType
CodeProject上有人封装了一个网络相关的类用于检测网络类型以及判断手机各种连接状态(包括Zune连接),很好用,文章和代码见Zune Detection and Network Awareness。
另外,还要注意,Silverlight在WP7上和其他版本的Silverlight也有不同,例如NTLM认证、UDP多播和Silverlight的Tookit网络功能都无法使用,更多信息可以参考Differences Between Silverlight and Silverlight for Windows Phone。
好了,现在来说最后一个话题,WP7上的WCF。之前在桌面平台以及Silverlight里面用过WCF的同学们要失望了:WP7上的WCF纯粹就是一充满了太监类的太监框架。先来看看我这几天在学习过程中遇到的各种不支持:
- 不支持basicHttpBinding以外的各种内置Binding方式,同时也就是说:
- 不支持Duplex方式访问,无法进行有session的访问以及服务器端的回调,同时也就是说:
- 不支持PerCall之外的另两种服务实例的维护方式(PerSession, Singleton),你每一次访问服务都会创建/销毁一次Service实例(靠……)
- 不支持自定义Binding
- 不支持代码自定义创建Channel和Client,只能使用SLsvcutil.exe创建或者用IDE的Add Web Reference
- 不支持basicHttpBinding的大部分属性(……),我这边试了一下,代码中只能修改MaxBufferSize和MaxReceivedMessageSize,剩下的必须在.config里面配置。
好了,这么看来,WCF在WP7上的可玩性真的不高,我能想到的就是远程控制之类的单向消息程序,顺带一提”PC Remote for WP7″和“LazyAdmin”就是基于WCF的。今天决定好好学学WCF,推荐这个教程《我的WCF之旅》和《WCF后续之旅》,作者是WCF和分布式开发的大牛,写过《WCF技术剖析》,是难得的在布教微软技术以及本身技术能力方面都强大的MS MVP。
发现这篇Blog多数都是在说“不支持”,没有办法,现状如此。但就算如此也有很多牛逼的程序被做出来,例如GoVoice和FreeTalk这两个Google Voice的客户端,还有前两天出来的那个Youtube客户端。
30 3月 2011 in 程序
Windows Phone 7上面的通信方式和限制已关闭评论
此篇文章只是拾人牙慧而已,顺带总结过程避免浪费脑细胞。过程比较曲折,也希望遇到的各种问题和错误解决过程能给后来的同学们省时间。
周末拿到HD7后一直在摆弄,发现了一个可以使用对焦摄像头的第三方程序,还有大名鼎鼎的ZXing Barcode的WP7移植版。当时觉得奇怪,因为按照之前看过的教程来看,微软开放出来的摄像头接口只有一个PhotoTask,作用是切换到内置摄像头程序,等用户拍照完毕后返回照片数据,无法直接在程序中打开摄像头查看图像。于是祭出神器Reflector查看,它用到了Microsoft.Phone.Media.Extended.PhotoCamera和VideoCamera类。然后通过ZXing的代码验证,确实如此。
打开VS2010 Express创建工程,却发现根本没有这类——连Microsoft.Phone.Media.Extended这个程序集都没有。顺藤摸瓜找到了Den Delimarsky写的两篇文章Not your regular photo and video camera on Windows Phone 7和How VideoCamera/PhotoCamera content is saved on Windows Phone 7,前一篇介绍了如何使用PhotoCamera和VideoCamera进行摄像头图像实时显示,后一篇则是介绍怎么取到拍照后的数据,写得很棒,通俗易懂。文章中提到:
通过反射调用摄像头比较慢而且增加多余的代码。所以我转而使用GAC程序集“GAC_Microsoft.Phone.Media.Extended_v7_0_0_0_cneutral_1.dll”,由于是托管代码,所以就不用加上WMInteropManifest.xml文件(或者<Capability Name=”ID_CAP_INTEROPSERVICES”/>)了。
并且提供了GAC Dump(可以看作未开放API程序集的集合)下载。不过没有详细教程,于是搜了一下实现GAC Dump的牛人Thomas Hounsell的Blog,找到了方法 Avoiding Reflection: Adding the InteropServices library to the WP7 SDK。总结起来很简单:
首先下载Hounsell那篇文章里面的7z文件。
捡自己需要的放到C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone,记得改名,把前后下划线前的内容都去掉。比如对于原生摄像头,我们需要Microsoft.Phone.Media.Extended.dll。
打开RedistList文件夹里面的FrameworkList.xml文件,记得用管理员权限。新增一个File标签(复制之前的就行),程序集名改成你刚刚加入的那个dll的,去掉publicKeyToken属性。保存。
于是我欣然照做(后来尝试发现,对于InteropServices需要这么做,但Media.Extended似乎不用,dll扔过去就可以了),结果……
搞屁啊……连设计器都打不开了!只好再搜,找到个帖子[Q] Usage of Microsoft.Phone.Media.Extended,问题类似,都是“强名称验证失败”,不过帖子中还能打开设计器而运行时出现COMException:
解决方法很简单,利用Window SDK的工具sn.exe执行下面的命令跳过验证,看到后面的信息即可(也要用管理员权限,或者从VS命令行执行):
sn.exe -Vr [dll path]
Verification entry added for assembly ‘Microsoft.Phone.Media.Extended,24EEC0D8C86CDA1E’
有关强名称和sn.exe的信息可以参看具有强名称的程序集和强名称工具 (Sn.exe)。简单说来强名称就是带有唯一公钥信息的程序集,好处是可以验证程序集的可靠性以及dll名字可以随便改。但坏处就是现在遇到的问题了:每台机器的.net环境都需要强名称程序集验证后才能使用。
其实这个地方还是衰了一下,因为我发现Windows Phone Developer Tools中的Visual C# Express并没有传说中的sn.exe(靠……),于是又跑到微软网站上下了个Visual C++ Express 2010,这才彻底搞定。如果你直接装了Pro版那就没这个困扰了。
最后再说一下有关PhotoCamera的使用。首先建议详读Den Delimarsky那两篇文章,基本覆盖了所有使用和可能碰到的问题。除了里面提到的API外,还有个比较有用的是GetCurrentFrame()。这个函数接受一个WritableBitmap参数,尺寸一定要是640 x 480,不然会有异常抛出来。另外拿到的WritableBitmap最好不要尝试通过ImageBrush画出来,不然会慢死(模拟器上大概200ms处理一帧,真机也就500ms)。下面截图就是模拟器的效果,大的白色区域(加那个黑方块)是原生的View Finder,左上角的是通过GetCurrentFrame()后重新画的。
21 3月 2011 in 程序
Comments [21]
最近一篇blog是1月写的去年阅读总结。这俩月并非抽不出时间写点东西,问题在于拿不出东西可写。于是觉得写写最近做的事、玩的游戏、看的书,凑数成一篇blog吧。
微软和Nokia合作,成了Mikia(黑桐干也:谁叫我?),于是之前Qt辛辛苦苦整出来的那一套QtQuick又成了后妈生的。QtQuick和QML虽然是被逼出来的一种界面、引擎代码分离解决方案,但实际上可玩性相当高。QML的语法容易学(至少比XAML更容易懂),对于美工、UX或者原型设计师来说好用,再会点JS,可以替代Flash作为界面原型和UI演示的制作工具(如果再有个Blend那样的工具就更好了)。比如这个例子,模拟WP7主屏,都是利用QML自带动画和标签实现的效果。
春节期间补了一下神作《空之境界》。之前一直没看是因为误解了标题中的“空”为“天空”的空,于是脑补了最不喜欢看的宇宙大战、机器人肉搏之类的场景……年三十儿那天偶然点进去了《空镜》的Wikipedia页面,发现那个空不读sora而是kara,也就是“色即是空”的那个“空”,于是一下子就哲♂学了。动画已经补课完毕,开始看小说版。
一般来说,死程序员在完成本职工作外都会对更底层的东西感兴趣,比如做C#的通常都会学学CLR;写脚本的会自己拆拆Python、Ruby的源代码;做C/C++的都会搞搞汇编、编译器之类的;做汇编的学机器码;玩机器码的……用针扎出来win98?于是我下定决心开始重新学习8086和80×86汇编了。教材用的是王爽著《汇编语言》。推荐个神器emu8086。
STG尝试中——体会就是,数学功底太差和想象力不足(比如我)不适合做弹幕类STG!
06 3月 2011 in 其他, 未分类, 游戏, 程序, 读书
最近已关闭评论