2015-12-20

明镜止水

下午等考科目三的时候想到的一个问题.

给定一定的skill level k,结果的pass的score s与否应该是一个类似:
s = k*p
的关于p的一个概率关系.

也就是固有的技能熟练程度随一个分布的"随机"波动.

考虑把概率p展开为加权w的因素f的多项式看的话.
即类似:
p = w_1*f_1 + w_2*f_2 + ... = \sum w_i*f_i

则s=k*p
->
s = k*\sum w_i*f_i

这个形式好像没什么意义.

但如果换个思路写成
s = k + w_i*f_i + w_2*f_2 + ...
的话,即在给定技能水平的条件下,最终结果取决于跟其他因素的一个某种形式的和.

实际形式可能是
s = c_0(k) + c_1(w_i*f_i) + c_2(w_2*f_2) + ...
的形式.
其中c_n为某种到s的space的mapping functions.

通俗地说,就是给定技能水平的话,实际的结果收到一些f因素的影响.
也就是对分布p的波动性的某种形式的解释.

一个前提假设.
如果是绝对理性/理想的情况下,那么给定一定的k,则有一个相对于的固定的s.

现在引入c(w,f)作为对p的解释的话.
也就是说s的最终取值收到参考因素的影响/贡献.

实际的例子可能是f为紧张程度,或者环境因素.
对s的影响的形式就是比如过于紧张/环境关系造成的发挥失常/超常等的一种波动性的解释.

也就是当c(w,f)为positive的时候,对s的贡献就是正的.
换句话说,就是这个因素对技能水平的观测/评测有着积极的/超常的作用.

反之类似.

那么单从等式的角度来说,就存在一些解,使得最终的s尽可能地最大化.

即,如果能够分清因素对"发挥"这种行为是正面还是负面影响的话,就有可能使得最终的结果收益尽可能地大.

当然,这里c(w,f)可能隐含一种相互的约束.
因为s应该是一个bounded的,所以c(w,f)应该也是bounded的.
基于在这里认为c_0(k)是一个绝对中立/理性的值.

但是实际来说,在结果出来直接可能很难判定一个因素的影响是积极的还是消极的.
就像"紧张"这种因素.

它可能使得人注意力分散,也可能反过来刺激人的肾上腺素对结果造成正面的影响.

也就是说,这种描述更多地像是对一个one shot的东西做的一个事后的补充解释.
而不能在事前发现和重复利用.

类似于可以事后给出一个形如:
s = c_0(k) + c_1(w_i*f_i) + c_2(w_2*f_2) + ...
的表达式.
其中c_n都是"已知"的表示.

即可以有任意的满足
s = s' = r(k,w_1,f_1,w_2,f_2...)的函数.

即使在当时能够分辨地出能够影响结果的因素的f_n.
那么依然有着w_n的free variable.
并不能够确切地做一个确定的描述.

如果有确切的描述的话,那么就是已知w_n和k.
最大化s的问题就变成调整因素f_n的问题了.

也就是相对可控的"紧张"到什么程度能让结果较优/最优.

问题是,实际上并不能在事前得到这么一种表达方式.

换个思路.

既然假设了c_0(k)是一个常量的话.
也就是假设技能水平是固定不变的.

那么对于
s = c_0(k) + c_1(w_i*f_i) + c_2(w_2*f_2) + ...
就存在一个关于s的确定的解,

s_0 = c_0(k)

也就是说,如果不做一些诸如maximize的speculate的动作,而是遵循实际的技能水平的话.
那么是有一个确定可预知的结果的.

这个解的约束是\sum c_i(w_i,f_i) = 0.

同样的,如果从general的角度来看的话,因为无法在事前确定c(w,f)的具体形式和描述.
所以事前并不能根据实际的描述,来通过调整相应的f取得满足上面约束的解.

但同样的考虑一个特殊形式.
即所有的c(w,f) = 0的情况.

这是对于上面约束的一个特殊解.

即,如果把能够影响结果的因素的贡献都降低到0.
那么也就相当于实际上把这个影响因素移出等式/排除掉了.

世俗上来说,就是如果能把"紧张"之类的情绪等因素排除掉干扰,那么就存在对结果的一种确定性的预期.

代价则是使得结果不存在变数,也就是不存在着某种程度的投机/优化.

所谓的明镜止水.



2015-12-13

同一类人

下午看 万万想不到 的时候在想一个问题.
好像很长一段时间以来的笑点都是在一些对所谓梗的理解上.

有时候只是意识到了用某些元素,但镜头还没达到就先笑了.

而有些时候,对于一些努力制造的笑点可能却没什么反应.
即使周围的人都笑了.

这里不是想说笑点高低的问题.
而是似乎很多行为的动机只是在寻找某些熟悉的东西.

包括一些社交网络上的一些动作.
很多时候也就是一些基础元素的延伸反复变化而已.

就像蛤一样.

有些内容其实并没有什么太大的意义.
但是通过某种联想和映射使之跟某些旧有的东西产生共鸣的话,仿佛就会产生一些奇怪的作用.

比如前段时间12306的验证码.

所谓的一个脑洞,就对各个小圈子/领域的人产生了某种群体创作和参与的潮流.

如果去考虑为什么有这种流向度的话.
一方面可能是某种讽刺形式扩散.

但可能更主要的是形式上的可重复性的某种reinforcement.

无论是哪个圈子的验证码组合,其内容也并没有带来什么新的东西.
反而可能是一些该圈子所共知的一个基本常识/事实而已.

一个更通常一些的形式可能就是某些特定的回复模式,或者说管有的吐槽方式.

就像某些账号黑穆斯林产生的关于羊的回复.

或者更常规的,从 跪了 到 这是我的膝盖 之类的同义固形的回复句式的应用.

再典型一点的就是某些所谓的表情所构成的聊天记录.

尤其是表情.

考虑聊天的内容构成是存在一定的上下文连续性的.
而纯表情能构建起来并继续下去,从另一方面看就是说明这些表情构成了一定的内容描述.

换个角度,如果把"表情"考虑为某种语言的基本"单词"呢.

或者更广泛地来说.

在对外部交互的时候,选择一些固有的模式作为回应的行为.
某种形式上就是以这些"旧"的东西作为基本的语言单位,重新"遣词造句"对外部做出反应的一种类语言行为

于是这种某种圈子内的reinforcement的行为,以及某些笑点上的行为实际上就可以考虑为是基于某种"语言"的共鸣交流/反应.

某种程度上来说,就是某种特定文化背景下面的语言交流方式.
即"共同语言".

所以,实际上,所谓的"共同语言"就是对某些事物的基本的共通性的认识.
或者说带有类似的上下文的演绎方式.

在既定的context下面,通过提供有限的几个元素/"基本词汇"的话,双方就存在着一种限定范围内的,对同一事物进行相同或者类似演绎的可能.
也就是通常所说的"一致的思路"或者"相似的想法",从而完成所谓的"交流".

那么考虑,把"梗"作为基本的"词"考虑.
把表述形式不同,但同义的"梗"考虑为同义词的话.

重新审视各个圈子/领域/亚文化.

比如,
"回老家结婚"

"已经没有什么好怕的了"

再比如
"PHP是最好的语言"

又比如
"谈笑风生"
"续一秒"
等.

看到的时候可能很快地会有类似的短句或者下一句/下几句的内容.

有时候,与其说这是一种交流,不如说是一种补完.
或者说同义反复.

它并不是在讨论什么具体的内容.
而是只对一个固有的模式/模型进行填充.

就好像人听一些动物比如猫的叫声一样.

可能它确实表达了某种信息.

但是表达的形式却不一定具有固定的形式.
而只是某种模式上的相似感/区别度.

人的语气变化也类似.

不同的语气或者同一语气的不同的句子可能都是某种情绪/内容的表达.
而决定其性质的可能并不是"句子"的词汇构成.

所以,某种程度上来说,"交流"只是一种把自己"所想"/"意愿"通过某种模式replicate出去的方式/方法而已.
或者说是context的传递.

考虑眼神交流或者任何形式的交流.

把context以信息量计量量化的话,把交流时间考虑进来作为效率衡量维度.

"只要你一个眼神肯定"
这种描述的其实就是双方拥有类似context的情况下,传输过程可以以一种optimized的"压缩编码"方式进行.
从而缩短交流时间.

反过来说,沟通效率的高低就在于双方context的对等/交集情况如何.

所谓的同一类人的定义.


2015-12-08

由拉格朗日乘数想到

考虑lagrange multiplier的构造.
\mathcal{L}(X) = f(X) + \lambda*g(X)

这里一个比较有趣的地方是constraint function g作为一个余项引入.

根据g的定义,g(X) = 0.
也就是说实际上等价于
\mathcal{L}(X) = f(X)

考虑\mathcal{L}(X)的stationary points.
即满足\nabla \mathcal{L}(X) = 0的集合S.

如果s \in S且g(s) = 0的话,那么就是一个可能的solution.

这里的思路其实是通过构造一个零项保证function的mapping空间/关系不变.
但同时把问题简化为简单的stationary的解.

换个角度考虑的话,其实就是对一个现有space的某种形式的cut/prune/classify.
在保证某种特性不变的前提下,以g做出一定形式的划分.

考虑把f(X)看作是一种feature -> object的函数.
比如X是一组feature,object是一个用户标识.

也就是说假设存在一种描述,使得这个描述对某个用户唯一.
即通过feature vector可以unique地locate到某个用户.

然后考虑有一个对用户的label函数.
使得每个用户对应一个label.

重新如lagrange multiplier的形式的等式.
\mathcal{L}(X) = f(X) + \lambda_a*g_a(X) + \lambda_b*g_b(X) + ...

当X被归类为a的时候,其余的\lambda*g(X) = 0.
即此时的\mathcal{L}(X) - f(X) = \lambda_a*g_a(X) != 0.

如果令lambda都等于1的话,则形式为:
\mathcal{L}(X) = f(X) + g_a(X) + g_b(X) + ...
->
\mathcal{L}(X) = f(X) + col_sum(G*X).
G为一个dim(label)行feature列的matrix,col_sum为对列做的算数和.

那么就有可能解出一个matrix G,使得col_sum(G*X) = 0

对于一个给定的x,apply之后有col_sum(x;G) == 0 意味着什么呢?

意味如果x是在X中,且其对于label a的话,
\lambda_a*g_a(X) + \lambda_b*g_b(X) + ... == 0
->
\lambda_a*g_a(X) == 0即与label a的前提矛盾.

所以如果col_sum(x;G) == 0 的话,则表明x必定不在X中.

那么如果col_sum(x;G) != 0的话呢?

明显也不能说明x就在X中.
因为可能存在g_b(X) != 0等的情况.

如果G*X得到的vector形式V是[1,0,0,0,...]的某个维度值为1的unit vector呢?

也不能.

因为如果把G看作是X向feature space的project的话.
对于某个vector来说,project成unit vector也不足以说明就是在原来的X space.

所以,某种程度上来说,这个只是一个dim(X) -> dim(label)的某种形式的类bloom filter.

即G*X != unit vector的话,则必然不在原来的X中.











2015-12-06

授人以渔

早上看到条关于微博信息流展示算法调整的解释文章.

大致看了下,基本的思路是通过减少汇入的信息条数达到提高阅读率和互动率.
采用的手段里有个比较矛盾的是通过"时移",也就是把之前时段的内容,通过算法把评断为"用户可能在意而又错过"的"过时"微博重新编入信息流.

后面这个做法大概是为了后来人为操控某些信息,比如广告推广资源留的吧.
不过思路也不算完全自私.
毕竟,也算某种程度上的消息填谷去峰.

但是作为效果衡量的KPI选用阅读率和互动率可能就有失偏颇了.

考虑到阅读率/互动率其实是 交互数/信息流微博 数算出来的.
而调整的基本思路和策略则是减少汇入时间线的微博数.
也就是说,相当于直接调整/缩小基数.
于是,阅读率/互动率这几个KPI出现明显增长也算是自然甚至说理所当然的结果了.

所以,某种程度上来说,以这两个指标来衡量主时间线/信息流质量的话,难免缺乏些说服力.
而且,从比较量化的角度来说,要把这两者作为衡量指标的话,也还得除去基数变化带来的对结果的影响.
即,要以这个指数来证明调整确实有好的作用的话,也得把由基数变化带来的变化的影响部分去掉.

因此,至少从数据上来说,这个调整就算有效果,那么效果也不是里面提到的数字.
而是应该更低些.

那么,应该如何才能比较合适地评定一个信息流的好坏呢?

广义的高互动的内容并不一定就是用户所喜欢或者希望接受的内容.

一个例子就是最近那个猎鸟的事件.
自己的时间线上相关的内容其实不少,但考虑到对国内媒体的节操和舆论作风来说,其实没有什么悬念和值得关注的点了.
但是如果单纯时间线上其他人的互动角度来说,机械的算法可能就会认为这个可能感兴趣的内容.

出现这种bad case的原因在于,对用户的"好的内容"的定义过于局限,或者说维度过于片面.
个人的决策过程中还包含一些认知上的倾向性context.
尤其是对于,"好"/"坏"这种主观意愿性很强的东西.

即使是人本身也很难对喜好做一个准确的划分和定义.
毕竟,这是一个很动态的东西.

客观上来说,所能观测到的只是一个人对某条或者某些微博是否有交互的行为.
而这个交互行为本身是积极的还是消极的信息接受过程是未定的.

就像个转发/评论一条微博并不一定是赞同,也可能是批驳.

即使是 赞 这种设计上是积极倾向的动作,有时候也不一定就是赞同的意思.
比如赞的内容是一条转发微博,而里面可能是夹杂了两个对立观点的.

所以,有时候能做的,更多的只是一种交互意愿性的描述.

而要描述交互意愿,可用的维度就多很多了.

比如点开一个微博的转发/评论列表.
点开某条微博的昵称/头像.
点击了某条链接.
阅读长微博时滚动条的变化速率等.

基本上,所有的交互动作都是有倾向性并且可记录的.

那么,对于个人来说,有强交互意愿的内容,对于其他人来说,就也一定存在强交互意愿么?
或者进一步说,交互的概率就比其他普通信息更高么?

这个可能比较难量化.

毕竟,前面说了,这是个很主观的东西.

对于信息的接受方来说,推送过来的可能各个层面和维度的其他人的强交互意愿内容.
但可能只会对其中的某一些部分有较高的交互概率.
而如何界定这一部分的特征,就涉及到当时的立场/认知甚至于心情了.

所以,原则上来说,干涉调整个人的信息流的内容,可能是一个有作用但未必有效的方式.

实际上,早前Google+的circle/分组/list就有一个调整该circle/分组/list内的人的信息在主信息流出现频率的功能.
但基本上最后就只是看和不看的区别.
而不是看多少的区别.

毕竟分组的存在本身就已经是个人调整的结果了.

有特别想关注的自然会做一些分组方便浏览.

如果一个人的内容多数时候不感兴趣或者反感,就直接取消关注就是了.

某种程度上来说,主时间线信息流只是一个相对来说辅助性的东西.
虽然从使用角度上来说,这个是主要场景.

但如果作为一个信息消费品来说,主信息留只是一个广场集市入口.
它要保证的只是内容和来源的多样性.

立场和观点多了,自然能从转发链中吸收到新的关注点/人.


2015-12-04

反编译的一点想法

最近两天在看某券商的Android App.

当然,说看其实不太确切.
只是dex2jar然后再jd回来的混淆代码.

大概是连猜带蒙的看吧.

看的时候发现一些disassemble失败的部分,直接给的是bytecode.
还有一些是比较奇怪的代码分支层次.

前者倒是没想出什么原因.
而且也大致不算影响阅读,毕竟java bytecode其实还是比较简单可读的.

后者的原因想了想,大概是vm结构的区别了.
毕竟,dalvik是基于register,而jvm是stack base的.

register base的话,因为数量限制,加上一些优化策略,涉及到register的复用.
所以在跟源代码对译的时候,难免会出现不一致的地方.

尤其对于Java这种强类型语言来说.
ClassA和ClassB因为"生命周期"的不同可能导致复用同一个register,导致还原的时候,代码效果不是很理想.

而stack base的原则上来说就没有这个问题.
有多少个源代码级别的local variable就有多少个对应的bytecode里的variable.
所以对译起来相对简单得多.

想了下,自己实现JVM bytecode disassembler的话,好像不难.
变量,分支,签名,异常,类型都有.
大概是时间和精力/兴趣问题了.

然后想了下dalvik的情况.

如果搞定变量对应/区分的话,其他应该跟JVM的难度差不多.

考虑,在从source code到bytecode的translate过程中,对register的allocation策略.

一个naive的方式自然是算下source code级别的变量的作用域/生命周期了.
如果到某个点不再被使用,那么其所占用的register自然可以被复用.

某种程度上来说,这是个data dependency的问题.
那么大致的算法过程应该是以数据为中心展开的.

也就是基本的读写操作的序列化和拆分.

换个角度来说,就是以数据/变量为基本symbol的state machine/DAG了.

如果把某个变量v考虑为一个基本basic symbol或者symbol class.
一个赋值或者自增等操作之类的读写之后衍生一个同一symbol class的derivative symbol.
两个symbol之间做个link或者transfer标记.

那么数据之间如果有依赖的话,就是不同的symbol class之间存在link.

于是,一趟parse下来就得到一个大致的forest like的graph了.

这个graph的用处理论上来说可以做一定程度的并行编译.
如果不考虑实际的物理计算代价的话.

毕竟,每个不同symbol class的link intersect point就是实际的synchronize point.
在此之前的都算是独立数据流,可以分配到不同的CPU上执行.

当然,实际代价是另一回事.
而且真考虑的话,优化过程加上一下代价预估,也是顺手的事情.

另一个用途自然是register的allocation了.

如果不考虑dead code elimination的话,那么所有数据流应该都是会汇集到同一个点的.
不管这个点是真实的数据点(return value),还是一个pseudo/dummy.

那么,从这个角度看的话,其实这个graph就退化成tree了.

于是,重新考虑register allocation的策略.

对于基本的单层或者说双层(包含root)的tree来说,所需要的register数量就是root的children的数量.
递归推广下,对于多层的结构来说,就是整个tree structure里面,需要的register的数量就是至少是某个node的直接children的最大值local_max_children.

但实际所需的最大register数并不一定就是这个local_max_children.
因为当把这个subtree eliminate之后,实际上可用的register数为local_max_children-1,即reduce之后的结果要占一个register.

那么怎么算具体需要多少个register呢?

对于一个给定的tree,eliminate的策略应该是首先找leaf node上一层里children数最多的做prune.
因为这时候只能prune这一层的node,且这时所需的register数必然是最大children数.

于是,递归一下,reduce回root的话,实际上就算出了实际需要的register数量了.
而且,如果不关心具体数量的话,那么递归的过程实际上也就是allocation/reuse的过程了.

这个是source code到bytecode的translate过程.

但问题是如何逆向回来.

考虑到正向的过程其实类似某种变种形式的后续遍历形式.

如果正向过程中,对register的选择有固定的顺序或者选择策略的话,那么直觉上这个过程应该是可逆的.

因为每消耗一个register代表的其实是一层max children的leaf tree的elimination.
而每一个被小号的register的读就意味着一次subtree的merge/面向root的propagate.

所以理论上应该是可行的.




2015-11-29

界限

阿里影业在"原创与IP相煎何太急"的那番言论配上那个"我不是针对某个人"的表情了.

平心而论,里面的竞争淘汰轮并没有什么太大的偏差.
只是可能字里行间描述不够妥当罢了.

虽然说作为一个文化创意产业,并不是能单纯的从时间人力上堆出质量的,需要讲究天赋和修养.
但跟竞争体系并没有太大的冲突.

毕竟,就像wake up girls里描述的日本偶像产业.
你努力了并不代表就需要为你付出什么.
只要存在比你努力同时更有天赋的,那么没什么理由拒绝接受更好的.

虽然说这样可能在一段时期内,由比较固定的商业化模式.
但长远来看,无论哪个产业,也得在商业化和艺术性上做出一个权衡.

就像当初 叶隐娘 上线造成的赏析纷争一样.
套用和菜头的说法,就是没有这些商业化的成功,哪里能供养出所谓的艺术性.

所以,对于各位编剧们的反应,大抵是一种较为安逸的时代要过去了的最后挣扎反抗吧.
用阿里的话说,就是拥抱变化吧.

另一点是阿里影业关于IP的看法.

IP这个词应该是前几年才开始谈的概念.

其实也不算一个崭新的思路,充其量不过是周边概念的繁华.
本质上有点类似对既有消费群体的消费点做一些类gradient descent的迁移optimization.

具体到中国电影来说,衍生品的聚焦现象也确实存在.
远的诸如 爸爸去哪儿/跑男 之类的综艺到电影,小时代,到稍近一点的琅琊榜的泛娱乐一条线.

抛开影片质量问题,票房上还是说地过去的.
所以,在数据上来说,阿里影业也自然有底气认为剧本并不是一个决定性的影响因素.

而事实上,从消费者的角度来说,也确实可能如此.

就像某些嘲笑直男的段子说的.
去看电影有时候并不不是真地去看电影.
至少不是只是看电影,而是作为一种娱乐候选.

所以就消费结构/行为来说,替换选项很多.
反过来说,促成候选的原因当中,剧情/质量可能只是其中一个决策因素而已.

尤其在现在各种互联网概念横行的当下,部分人选择看电影作为娱乐项目的原因可能只是恰好有补贴/打折.
而这点上,恰恰是作为一个经销平台的阿里所促成影响的.

退一万步来说,如果各互联网公司把电影补贴或者在线购票入口关闭,整个电影行业还能否继续繁荣还是一个问题.

毕竟,行为模式已经被重构,各个决策因素的权重也产生了变化.
选和不选的因素,可能已经不是电影/编剧行业能够左右的了.

某种程度上来说,互联网其实是个挺可怕的行业.

可能在不知不觉中就把其他行业摧毁或者变为其附属.

就影视行业来说.
翻某司财报,电视剧的毛利润在60%-70%左右.
制作大概是4000w左右的投入,100-200人的规模.

考虑如果这4kw是通过娱乐宝或者类似的资金筹集,并锁定一年,之后付10%左右的利息.
算50%的利润,减去10%的利息,还有40%的利差存在.

而传统的制造业也就10%-20%的毛利率.

通过互联网渠道众包筹集差不多就是1200w的空手套白狼的纯利润.

换个角度来说,就传统的电影电视自筹资金的模式来说,可能受实际票房的影响.
而实际票房可能直接有影片质量决定.
所以这个时候各个业务线包括编剧的能力就存在着比较大的价值比重.

但是按互联网的做法,实际上是不承受成本风险的.
所影片质量和实际票房只不过是锦上添花的事情.

利润空间的大小跟实际产品并没有直接关系,而跟筹集面的广度有关.
这也就是为什么阿里影业要强调IP的原因.

作为一个"期货"性质的投资,自然是有一定消费用户基础的东西更容易筹措到资金.
而且通常来说粉丝群的忠诚度还是相对较高的.

从广义上来说,这里的IP其实可以指向任何能够促成交易成立的因素.
而不仅仅是某一个节目品牌或者明星.

比如娱乐包当初就是作为一个比余额宝收益高的品牌"投资品牌"出现.
所以即便说没有合适的具体IP可用,通过互联网的导流思路还是能够解决大部分问题的.

尤其当这种三板斧的行业遇上金融这种专攻杠杆和远期套现的产业,一切可能就更加野蛮和隐蔽了.

某种程度上来说,游戏行业就算是这种结合体的一个超前展现.
用不同的难以让人眼前一亮的模式套上万年不变的变现核心.
尤其一些生命周期模式明显的,只不过在换着不同的方式repeat着.

所以有时候会想,到底是什么原因,让人很难再有那种心动感.

就像一潭死水.
辽阔而单调.

不过也可能只是天花板了.
毕竟,很久以来,确实没有什么新的角度和维度了.
虽然不太想承认.

因为到底,这是很沮丧的认识.
但,大概就是所谓界限问题吧.

2015-11-25

人人都可以是产品经理

这两天回老家.
中午吃饭的时候,母亲跟父亲说,
"又不看电视,关了吧"
"这个跟原来的不一样,关了不是马上能开,要等一下"

于是想了想,这里其实有略微妙的变化.

某种程度上来说,现代电视的启动时间作为一个代价项考虑进来的话,改变了某些旧有的决策模式.
从结果上来说,就是增加了某些意义上的在线时间/使用时长.

这跟某些价格策略其实有点相似之处.

本质上来说,是一种压缩效用边际的做法.
只不过"启动时间"是作为一种额外附加的退出成本考虑进来的而已.

用一种简化方式的描述的话,就是
厂商revenue <= 用户utility + premium. 对于厂商来说,maximize revenue的策略自然是尽可能地把效用升水premium接管过来. 即 revenue = baseline + cutted_premium <= utility + premium. ->
baseline = utility + (premium - cutted_premium) = utility + active_premium
其中baseline是提供服务/产品的基础成本,active_premium作为仍可争取的效用溢价.
所以,换个角度,maximum cutted_premium的问题实际上就是minimize active_premium的问题了.

也就是某种形式意义上剩余价值问题.

于是,从压榨的退出成本的角度来说,只要没有达到更换的临界点,那么利润边际就是一直存在的.

也就是说,存在这么一种情况,即即使产品本身并没有任何的改进改善,但只要用户还能容忍,那么就存在着一定的利润增长空间.
而从单纯的定性分析的角度来看的话,存在着一种做改进所带来的ROI不如压榨剩余价值来得高的情况.
就像Braess' paradox,增加节点并不一定能够让网络结构更优.

另一个思路就是.
如果把整个代价决策过程看作一个network structure,或者更直接地,把decision tree当作一个directed acyclic graph考虑的话.
某个成本/支出点的权重变化,带来的就是整个某种shortest path形式的graph结构变动.

所以,如果把开头的案例以另一个角度描述的话.
即,给定一定流量形式的input和一个candidate的revenue output,如果去构建一个系统,使得input和output匹配.

于是,如果假设能考虑到因素都是线性的,或者可线性话的,那么问题的本质就变成简单的neural network的training/regression了.

换个角度,其实就是吧graph的transition pattern以一种近似的压缩方式encode成network的layout matrix了.

反过来说,扩展一点,把deep network的deep借鉴过来的话,其实就是deep graph的概念.
不同层面的平行graph的连接结构之类的,以前大概谈过.

而这个思路的有效也就自然决定于input和output所考虑的维度的覆盖面的问题.

如果考虑的因素无限接近于真实,那么自然拟合能encode的模式信息自然也更多,更容易识别和归类.
反之,便是可能比较具有误导性.

尤其某些系统外未考虑的变量其实更有意义的情况.

比如考虑视频网站的贴片广告.

如果output的index目标是提高使用时长的话,那么策略模型可能提供出一种增加广告时长的做法.
比如一个30s的视频贴上90s的广告,那么这个index的增长率可能突破理论的100%,而达到90s/30s -1 = 200%.

考虑一个稍微复杂一些的情况.

如果把上面的index做个某个deep structure的一部分去做用户价值分类的话,那么由于付费用户没有这种理论外的额外增长率.
所以encode的信息可能是使用市场跟用户价值是negative的.
而在更高层的数据侧面就可能得出短小视频的高价值潜力的结论.

当然,这个只是举例.
具体的decision graph的organize/re-organize是怎样的结果,可能是比较麻烦的数据问题.

当然,抛开具体数据,人人都可以是产品经理.




2015-11-17

世界和平

下午吃完饭走回家的路上想到个问题.

现实中像维持一个类似the avengers/天人的非政府反恐/维和组织的可能性有多大呢.

原则上来说,装备水平至少可以和武装组织,佣兵集团上对齐.
也就是技术支持角度来说,应该是至少存在对抗能力的.

然后就是资金渠道.

假设接受各种形式的捐赠/扶持的话,会有什么问题呢?

如果是有代价的资金合约使用,那么必然地就是某种形式的扶植.
这样的话,不管这种资金流向是匿名还是署名的,都多多少少存在一定的倾向性/非中立性.
因为资金的供给会收到出资方的目的性约束.

所以,这种组织如果存在的话,那么必然需要先解决活动的资金性问题.
保证经济上的中立性.

既然不能接受注资的话,那么如何维持运转和开销呢?

考虑到活动的目的是以暴制暴/武装打击.
所以从结果上来说,好的一面是对方失去反抗能力.

而这个能从经济上产生什么效益呢?

由于存在的意义是武力压制,于是职能也仅限于此.
对于战后的恢复重建,以及可能的远期经济收益,这个自然是不在预期内的.

如果参与因压制而带来的分享恢复/重建效益,那么实际上最初的武装干涉就存在一定的直接经济效益考虑.
尽管这可能并不是本意.

但既然存在直接利益产生模式的话,那么就必然存在逐利的风险.

所以资金的来源也不能是直接或者间接的战胜结果所带来.

既然一不能是外界注入,二不能自己产生,那么还有其他方式么?

考虑这笔资金所需要的特质.
中立性,以及必要的持续性和规模.
加上非内生的产生机制,防止规模化/逐利.

一个可能的候选就是某种税制.

持续性和规模不是问题.
中立性也经由人口基数而基本对冲了.
而且税收是一种被动的缴纳/注入机制,现金流能力在一定时期内是可预见/固定的.

可能的问题在于资金管理能力,以及税制的合理性.

前一个问题其实是所有方案/方式的共同点,跟资金来源没有太大的关系.
所以暂且放下.

至于"税制"的合理性就是个比较现实的问题了.

让所有国家,或者说所有人接受这种税收是不现实,也基本是不可能的.
而如果存在非全民投入的税收,那么也就意味着是一部分人出让/"馈赠"了自己的权益给另一部分人.

因为解决冲突的时候,考虑到中立性,并不能有选择性地解决.
而且,实际上,考虑到人群的复杂性,"选择性执法"并不具有现实可行性.
原因在于,某些冲突点可能是两类人群的混居地.

那么,除了税收之外,还有其他解决方案么?

税制缺点的本质在于单向选择性接受带来的某种非强制性,并由此产生的权益分配的不平衡.

也就是说,如果新的解决方案也存在这种权益不公平性的话,跟税收的方案其实没什么太大的后果区别.

考虑下bitcoin.

如果把交易费率看成某种消费税的话,那么bitcoin在多数情况下就可以看成是跟税制类似的体系.

权益平等性的问题实际上是通过"交易费"的会计性质的转变,划归出去.
因为这是一笔本来"存在"/"必须"的费用,机制的介入只是赋予了这比费用新的价值/转变会计类别而已.

当然,这个方案的一个问题在于规模/持续性.

毕竟,bitcoin作为一个"金融产品"存在设计上的缺陷.
跟常规的"货币"产品来说,其具有明显的对市场的被动性/波动性.
而且,约束于交易频度和实际流通量.

但是如果引入类bitcoin作为基本运作机制的话,还有一个额外好处在于block chain.
或者说基于block chain衍生的voting机制.

这是一个技术上可以确保majority的voting system.
对于一个目的求"中立",并有大量可管理资金的组织来说,一个可信任公开透明的机械议事机构其实是必须的.

因为它必须保证决议的无可争论性.

不然存在解释空间的话,就容易是组织形成某种小众驱动的倾向性.

毕竟,大多数时候来说,"中立"这个词指示的其实是大多数人的意见倾向.

一个更为理想的状况是组织的武装执行力量也是机械性的bot.

一来是避免人员投入带来的伤亡和损耗,以及信息管理上的问题.
二来是某种形式的block chain base的majority approved voting system直接应用到bot上面的话,基本上场景就是通过算力进行全网参与的行动投票了.

当然,这种情况下隐含了一个算力歧视.
或者说,由于投票权丧失带来的权益不公平性.

所以,还是世界和平吧.

2015-11-09

君子爱财取之有道

以前觉得双十一只是对未来销售的一种透支.
现在想想,可能也不一定.

考虑这么一个情况.

在没有促销机制的情况下,每天的整体人群的购买行为其实是服从某种分布的.
于是,每天的营业额度就是接近与这种分布的期望值.

这个从数据上看,也是不无道理的.

不管是电商还是游戏来说,不做活动,一定时期内每天的销售额度其实是在一个稳定范围内浮动.

如果考虑促销本身只是对这个分布做的一个调整的话,那么实际期望E并不见的就是会小于原有的期望E_0的.
因为考虑把这个概率式展开计算的话,实际上就相当于调整每个参与者的概率系数/权重.

即,对于个体i,其概率为p_i,对于的价格贡献为v_i,
则整体期望E=\sum_i p_i * v_i.
满足\sum p_i = 1.

对于给定的
E_0 = \sum_i p{_0}_{i} * v_i
\sum p{_0}{_i} = 1.
存在
E = \sum_i p_i * v_i >= E_0
\sum p_i = 1.
的.

那么考虑一种情况.

加入不做促销时候的p分布已经是最优的了.
那么,继续做促销是否又not economic的呢?

如果考虑一个比较粗的粒度.
比如以月为单位的,看t周期/月的话.

实际上,对于j月的期望为
E_j = \sum_i p{_j}_{i} * v_i

则整个t周期的期望为
E(j;t) = \sum_j E_j = \sum_j \sum_i p{_j}_{i} * v_i = \sum_i (\sum p{_j}) * v_i
令(\sum p{_j}) = S_i的话,
->
E(j;t) = \sum_i S_i * v_i

也就是说,即使展开到t月来看的话,实际上也不过是权重的重新分布/分配而已.
并不一定会低于不做促销时候的期望.

所以,本质上来说.
这类促销即使说会对未来的销售额度产生影响,但也不一定是消极方面的作用.

实际上,这个至少是一个类似组合重新调整程度策略.

如果考虑实际一点的话,至少在做权重调整的时候需要考虑到t周期内的现金流现值问题.
也就是上面的v需要是对应的计算时应该使用的是现值.

再进一步考虑一些季节性消费.
比如时间周期性明显的羽绒服等强销售周期的,那么在做购买分布概率调整的时候,就有可能从某种程度上避免对后面t月的分布概率产生影响.

当然,前提是这个分布概率跟商品的品类无关.

如果有关,也只是退回到前面比较复杂的展开计算里面而已.

所以,理论上来说,做促销活动,起收益的期望至少不会比当前的差.

换句话来说,就是t周期内的预计现金流情况存在有改善的情况.
从另一个角度来说,如果t周期内的预计现金流存在改善的情况的话,也就是某种程度上的周转周期的缩短.

毕竟,对于最末端的零售商来说,越早的清库存也就意味着流动性越高.
推而往上的话,就是相关产业链的周转的加速和改善.

当然,这只是一个比较理想的情况.

毕竟,这里的一个重要假设是对预期的销售额和购买分布的变动影响有一个比较精确的估计.

而这个实际上多数产品多多少少存在一些困难.
一些产品本身有生命周期,加上次代更迭的问题,可能最多只能有一个基于历史数据的预测估计,存在相对明显的不确定风险.

不像通讯消费行业.
移动网络的消费人群相对固定,并且套餐费用相对固定.
未来现金流可以做到一个比较稳定且明确的估计.
在这种情况下做促销的话,就相对简单一些.

最低限度也可以安全地把未来现金流提前折现,用于基建再投资.
然后通过技术的变革升级来变更未来现金流的预计,固化现有收益.

总得来说,就是这个世界其实存在着一些不靠小聪明的价格游戏就能实现诚实健康盈利的方式.

如何选择不过是个人喜好的问题.

所谓君子爱财取之有道.

2015-11-04

写Android的一点事

昨天把Android的VectorDrawable不能rotate 90度的bug给提了issue.
早上起来check邮件的时候已经变为assigned了,大概确实是个bug了.

这个的原因之前也大致提过下.
基本就是算误用了transform Matrix的一些维度吧.

在旋转90度的时候,这个3*3 matrix的MSCALE_X和MSCALE_Y项目会是近似0.
而VectorDrawable的draw实现是直接拿这两个值乘width/height做scaling的.
其结果是算出个零,只是short path return什么都不做了.

于是结果就是rotate 90度的时候,canvas上什么都没有.

看了下注释,提到用这两个值的原因是避免blur.
翻了下commit log,最近的改动的引入也确实是为了解决这个原因.

不过就实际经验来说,抛开90度旋转的问题,这个blur还是存在的.
这个在自己做animation的时候,从0到90度之前的几帧可以看到.

而且翻看了下目前的具体实现,貌似还不是直接走的canvas的通道.
而是draw到一个临时的canvas的bitmap上面,再把这个bitmap draw回提供的canvas上面.

倒是有些不知道当初是如何定位到blur的问题跟这个有关系的.

下午简单地实现了一个半成品的VectorDrawable.
直接是draw到提供的canvas上面,加上animation也没发现有blur的问题.

不过也可能是因为有些功能并没有完全实现的原因.

毕竟,自己写的只取了vector xml定义里的部分值.

一个是vector element的viewportwidth/height.
这个主要是拿来算scale的.

毕竟,虽然说上面提到的Matrix里有两个值有时候能拿来直接动作scale系数.
但终究来说,这个matrix事实上可能是一系列transform的composition而不是单一的scale matrix.
所以直接取值是不可取的.

因此,需要一个svg/vector graph的原始大小定义,然后再通过在canvas上想要paint的bounds的大小一起算scale系数.

另一个是path element的pathData.
这个是类SVG的command string.
也就是实际的SVG/Vector graph的定义.

之前用javascript写的SVG也只用了lineto/moveto/cloase几个command,所以生成的SVG定义也只有这些.
本来想着直接导入的.
但Android的vector resource跟SVG的还不完全一样.

所幸的是这个command序列还是语意相同的.
也少了写麻烦.

所以在写这个的parser的时候,也只支持了这几个命令.

不过看了下,要加其他的话,倒也不难.
毕竟都是直接map到canvas的对应方法上面的.

而且基本上这个的parser也没什么好写的.
本身提供了XmlResourcesParser,自己只要实现个command string的parser就行了.

不过由于这个drawable到底不是原生的drawable,所以要取/构造还是有点不够友善的.

一般来说,都是直接拿context,然后直接通过auto generate的R id去拿drawable.

而现在,这个R id也还是指向原生的VectorDrawable的.

一个思路当然是去hack这个generate的过程,让它指向自己的这个实现.
不过明显的这个成本太高,侵入性太强.
估计至少要动到对应的plugin或者Android Studio.

退一万步说,即使找到了侵入点,那到底也是不兼容的改动,后面纯粹的升级维护纯粹是给自己找麻烦.

所以只能自己直接构造了.

要解决的第一个问题自然是怎么去读vector xml了.

文件路径倒是一目了然.
解析的话,如果不用XmlResourcesParser,随便用sax什么的也OK.

不过这种本身就已经侵入性很强的改动,就没必要添加无谓的不确定/稳定因素了.

翻了下原生实现的locate过程,其实也简单.
拿到AssetManager直接open就行了.

剩下一个就是文件路径的问题.

直接硬编码路径也OK.
但总体来说,不算一个特别优雅的方式.

跟了下相关代码,用R id去locate也不麻烦.
拿到对的Resources直接get value得到的就是了.

这里的问题有两个.
一个是Resources.

本身是有个Resources.getSystem()的.
不过从名字上看就知道是非app specific的.

app specific的也还是只能通过context拿.

另一个问题就是get到的TypedValue.

这里拿到的确实也是路径.
不过需要用value.string这种不太好看的方式来拿.

这里的点子啊与string是个public的field.
虽然说方便,不过看起来终究是有些碍眼.
奈何也没其他稍微顺眼点的方式.

然后既然xml读到了,也parse完了,构造自然是没什么问题了.

剩下的就是一些cache相关的.

原生的drawable一般都会带有个ConstantState,基本上就是对应drawable的实际image数据或者定义.

想想也不难理解.
像image的话,总不能每次都load一次.

所以有个ConstantState的设计,倒也挺符合直觉的.

只是对应的方法倒不是强制overide的,这点有点不太舒服.
毕竟原则上来说可以是abstract强制一下.

不过也无所谓了.

个人喜好问题.

其他的也就没什么了.

说白了就是基本上所有drawble都是到canvas的.
拿到canvas,什么都好说.

不过有一点就是,canvas这个并不是线程安全的.
因为其实也是一个transform的composition,多一个不同batch的modify一起concurrent的话,结果挺难预料的.

有想过看看能不能clone一下,然后parallel batch一下,最后在一个个apply/merge回来.
因为底层估计也是一些matrix的运算,应该可以独立.

不过看到是native的操作,一时也懒得去拉代码看开销,于是就算了.

当初写custom viewgroup的时候就想过.
如果现在的render pipeline对visual region/canvas的invalide能像NUMA一样,分块管理/invalidate的话,估计反而能省一些事.
直接invalidate所属的physical region就好了,交给邮件处理,而不是在拼命算dirty region.

当然,这个也可以软件模拟就是了.
每个visual element assign一个logical region,然后dirty就dirty整个region,然后每个run就batch update/redraw dirty就行了.

之前写custom viewgroup的layout的时候大致也是这个思路.

而且由于采用的取巧的top align的方式,one pass就OK,所以能直接parallel.

如果是像bottom align之类的,可能就不行了.

由于每放置/slice一块区域就可能得重新调整line height.
因为新加的元素的高可能超过了当前的高度,为了对齐得把该行的line height调整到行内最高的元素.
于是,就至少得对之前元素的offset bottom作调整.
无可避免地对整行做重新的layout计算.

所以,这里的一个思路就是,如果现代浏览器做布局的时候基本算法也是如此的话.
那么align-top和提取fix box width/height的话,估计对render性能有点影响.

不过涉及到GUI的,实际开销和代价值不值得,甚至有没必要就是另一回事了.

毕竟,这种有视觉元素的跟纯粹服务端的思路还是很不同的.

后者的哲学在于感觉不到存在.
无论是从性能还是容灾方面来说都是.

而带视觉效果的,评价体系就是相对离散化和多态了.

毕竟,人的视觉系统是一个有着明显边界分段的函数.




2015-10-27

生·日

大雪封山的地方通常都会有所小酒馆.

如果没有,那自然也不会有人告诉你没有.
只有活着的人才会捎话.

一般来说,没人会选择这个时候进山.
当然,有一般便有例外.

他开始怀疑自己能不能活到明天.
踏雪带来的脚掌踩碎冰渣的感觉已经渐渐被一种蒸腾的寒气所替代.

要是一天前有人用"蒸腾"形容寒冷,他一定会觉得那个人疯了.
而现在,风雪已经让他觉得没有比这更合适的词了.

冷,像一种不断扑腾的气息不断往上托着脚掌,而脚跟却似连着大地般结实稳固.
冰冷感掰着脚腕一步步地往上侵袭,剥夺着沿途经过的触感.

他忽然希望自己能有点运气.
能恰好前面就是那家酒馆.

然而,哪怕是最贪玩的熊孩子也不会选择在这种杀人的天气,做这种自杀的事情.

但这世界有很多莫名其妙难以理喻的事情.

比如他恰好就姓熊.
别人也恰好就叫他熊孩子.

于是,前面恰好就真真是那家酒馆这件事也就显得没那么意外了.

就像没人知道为什么都叫他熊孩子一样.

有称呼通常比为什么称呼重要.
就好像有些事情发生了就是发生了,没人会去问为什么.

不是每个为什么都对人有意义.

所以,有名字总比没名字好.

一个酒馆总不能关着门做生意.
即使没什么客人,关门总不是一个好兆头.

但风雪交加地,总不能在店里冷清的时候,还冷着自己.
所以这时候通常都会有个厚重的帘子挂在门的位置,稍微遮风挡雪一下.

熊孩子有点吃力地掀开了帘子.

可能他真还是个孩子,没什么力道.
也可能是累了.

"还以为至少能卖壶酒肉呢,没想到是个小屁孩"

一个中年男人从火堆旁站了起来.
嘴里说着刻薄调戏的话,反手却卸下了原本披在身上的棉衣,迎着少年走去.

如果是在寻常的城镇街道,按这人的外形相貌,大概会认为是个樵夫或者马夫.
但这里是家酒馆.

虽然小,但毕竟是酒馆.
虽然看起来不像老板,但毕竟这里只有他一个人.

少年接过棉衣,缩坐在火堆旁.
只言不语,仿佛进来的只是一座冰雕.

老板也在少年对面重新坐了下来.
一手撩弄着火堆.

炭火夹杂这偶尔混入帘来的雪花,纠缠,环绕.

一时是最后的亮点,随之余烬.
一时是雪白而近透明,落地成痕.

只有被帘外偶尔潜入的寒风挑拨着的火焰跃影还在提示着时间的流逝.

许久.

卷帘而入的雪片已经烤地只剩下滩痕片迹了.
蜷在一旁的少年,也渐渐有了些血色.

"老板,来壶酒吧"
少年依然低着头,双手自顾自地在火堆旁取暖.

"小孩子学喝什么酒"
老板笑到.
"没事少来这里"

"我如若是不学喝酒,老板怕就是要喝西北风了".
少年抬了抬头.

焰火的产生的阴影在老板脸上跳动着.
朦胧间犹如少年咄咄老板的眼神.

"况且这里毕竟是酒馆,总得卖些酒与人才是生财的方式"
少年重又低下头,依然细致地烤暖着自己的双手.

"酒馆也不只是卖酒才能存活"
老板自顾自地继续拨弄着火堆.

"就像有些人来这里也不总共是为喝酒."
老板稍稍停下手上的动作,看了眼少年.
"所以,作为商人,总会有些秘密诀窍"

"一个酒馆有太多的秘密也不是见得是件好事"
少年把烘烤的手心换成了手背,继续说道.
"保守秘密并不是件舒心的事"

"但它很吸引人不是么?"
老板忽然笑了笑.

"一个人知道地太多通常不容易活得长久,有些秘密是别人不想被太多人知道的".
也许靠的太近,少年略微收了收烤火的双手.

"但人同时又会想知道别人的秘密"
老板似乎对这个话题很感兴趣.
"所以知道的秘密越多,就越安全.因为所有人都不想失去知道其他人秘密的机会".

"所以,这个人必须在所有人都能随时找到的地方"
少年似问非问地说.
"不然大家宁可牺牲掉这个机会也不愿意冒风险,让自己的秘密被轻易地曝光"

老板挑火的手忽然抖了一下,炭火也变得有些忽明忽暗.

"年轻人还是趁风雪小,赶紧离开吧"

"这条路不好走"
老板望着风雪掀起的帘外,叹了叹气.

"这条路确实不好走"
少年把烤火的手收了回来,整理了下衣服.
站起来,略有所指地看着老板.
"如果不是这里取了下暖,我估计也回不去了"

"回不去就没人知道我在这了"
老板忽然笑了.

"只有活着的人才会说话"
少年也笑了笑.

"但话不都是真话".
老板有些兴奋.

"确实不都是"
少年接道.

"如果我不在这里,来的人就会冻死,而只有活着的人才会捎话"
老板的情绪有些激动.

"你叫什么名字?"
老板忽然问道.

"你知道西方有个节日叫万圣节么?"
"那天如果不给熊孩子糖,他们就会捣乱"

"我没有糖"
"你没有糖"

"所以你捣乱了"
老板笑了.

"是的,所以我捣乱了"
少年也笑了.


2015-10-25

所谓人格

早上醒来一阵,恍惚间忽然想不起来自己在哪.
然后第一个念头倒不是睁开眼睛看看自己在哪,而是觉得好像有点意思.

有趣的地方在于,自己知道如何去解决/确定自己在哪,但又确实回想不到任何相关的内容.
也就是说逻辑思考/推理能力还是正常工作的,只是记忆相关的部分失效了.

当然也不能说完全失效,至少描述性的"语言"/构述能力还是在的,知道"在哪里","什么城市"之类的概念.
只是具体的位置信息,或者说相关的时间地点上下文缺失而已.

有点类似服务器集群的前后端缓存忽然挂掉时候的样子.
取不到任何信息.

这种感觉就像其实你并不拥有"回想"这种能力,因为你其实不知道如何去激活.
就像做梦虽然有时候能意识到自己在做梦,却无法有意识地终止这个梦境,也没办法操控梦境里事件的发展.

某种程度上来说,这时候的"主意识"可能更像是一个分布式系统下的一个轻量master节点,其余功能实际上是function在其他节点上的.
这时候的主意识也只能通过有限的public api去RPC这些remote node.

所以,一旦某些RPC路径失效或者reboot晚了或者延迟高了,那么就有可能出现这种奇怪的感觉.

那么换个角度来说,只要能向这些remote node发送合法的RPC的话,那么原则上来说就是一种人格植入.
至少,从机制或者说从initiator的角度来看的话,就不属于原来生理构成上的"自己"的"自主意愿".

随之而来的问题就在于,如何区别这种不同动机的"人格"驱动因素.

或者以稍微现实点的描述来说的话,如何区别精神分裂里的不同人格,或者说界限在哪里.
或者更进一步地,如何定义一个人格.

如果说以一些行为准则/价值观/底线来限定的话,其实有些牵强.
毕竟,这个对于个人来说并不是固定不变的.

而且有些东西也并不是不能逾越的.
很难说以某种概率的所为或者不所为就能限定一个人,使之区别于另一个人.

像"性情大变"这种通俗现象来说,人多数还是根据外表的认知来确认一个人,以及区别于他人的.

这也就是为什么通常双胞胎有些难以辨认.
而在熟悉之后,又有可能区别出来.

能区别的原因在于行为模式例如一些小动作之类的存在差异.

而如果做个control experiment,让一组人认为双胞胎只有一个人的话,估计可能就区别不开.
或者认为存在双重人格.

如果行为模式上区别不大的话,可能就只是认为性格起伏不定而已.

所以,原则上来说,人区别个体不同的主要依据应该还是外在,辅助的是行为模式的概率性检验.

在有限接触的情况下,可供鉴别的行为模式可能并不多.
换句话说,就是在有限的情况下,一个人可能做的选项组合可能并不多.
所以存在着一种在有限假定下,将人就行划分的方式.

一个典型的例子就是星座.

虽然说这东西有过多牵强的地方.
但是,从思路上来说,也并不是完全地没有借鉴的地方.

毕竟同一个时间段出生的人,在季节以及后续生长上会遇到较多的公共共同点/事件,这个对性格和行为方式的影响也不能说是没有.
尤其如果考虑农业社会,按照季节耕作带来的家庭作息规律变化,理论上也不是完全说不通.

当然,这也并不是说星座本身就是科学的.
只是至少是存在一种可解释的思路来阐述它.

就像MBTI职业测试,也不过是基于一些行为准则做分布概率划分的方式而已.
在多数倾向性比较明确的情况下,自然概率描述的匹配度会较高.

像个人这种倾向性不太明确的,就时而INTJ时而INTP.
算是个边缘案例.

所以,如果以行为模式来做人格限定/划分的话,其实存在一个度的问题.

如果粒度太粗,那么区别性就不大.

如果太细,那么分布自然会稀疏很多.
虽然可能被命中的会比较准确,但是没命中的可能就存在某些人格点上的摇摆和游移.

尤其所谓的类似"阴晴不定"这种描述.
就是在模式选择上存在比较多的不明确/边缘case的情况.

那么,既然生理和行为上都无法确切地区分一个"人"的话,如何才能够区分呢?
或者说,有可能区分么?

考虑,如果无法区分会如何.

假设某种大脑手术,或者更进一步地存在着某种人工辅助器官就行决策支持.
以及存在完整的人体器官替换/移植技术.

或者考虑下Ghost In The Shell的相关设定.
尤其是其中的义体和虚假记忆的概念.

将两者结合的话,是可以构建出现有体系下对"一个人"的完整"克隆"的.
而这种克隆跟生理/细胞意义上的克隆有着完全不同的区别.

它更接近于一个完整的人的复制.

那么这时候应该怎么定义这个第二个人呢?

如果再考虑像tachikoma这种,给予义体的话,又如何定义呢?

从某种层面上来说,能接受的区别定义是"独立的思考单元".

也就是即使两个人有着完全的行为模式,但是如果彼此独立做决策的话,那么就应该是认为是单独的"人格".
而想浅层的类似tachikoma这种形式的,就应该认为整体作为一个人格看待.

也就是类似现在对于大脑的定义,各个functional component如果存在协作关系的话,那么就应该认为是一个整体.

但问题也只不过变为了如何定义"协作"这个概念罢了.

比如,Google Search能作为"一个人格"看待么.
基本的frontend,indexer,online/offline/realtime ranker,storage,aggregator.
然后aggregator可能又对接了其他一些第三方服务,最基本的至少有click log的一部分供离线分析,然后ad network的东西.
ad network又至少对应了3th party的数据,然后这里就是对外的API协作.
然后类推下来就是整个internet都是在这个"协作"的框架下.

如果再考虑人的参与提供的行为/数据,然后人跟外界的各种交互,那么整个已知世界本身就存在一种协作关系.

所以,以协作来划分范围的话,也不是那么地经得起推敲.

就算退回到人本身.

做一个事情的决策的时候,除了自己所思所想,多多少少也收到外界的一些影响.
有些是以劝告/指导的形式,有些则是无形的social sphere.

所以这个区分的界限可能是一个更弹性的存在.
视区分的具体目的而适应的衡量标准.

就像你要问某段代码里的某个变量是什么类型一样.
这个只能在具体的上下文环境里才有可能区别地清楚.

即使是强类型语言,只要存在继承这类composite的问题,也多多少少说不清.

毕竟,运行时本身就是动态的东西.
语言侧面做些静态化,只是为了方便逻辑描述和组织.

虽然有Rust这种古怪语言存在,妄图用ownership把这feature当bug解决.
然后又创造了borrowing,把自己的错当作没发生地弥补回来.

所以,某种程度上来说,道家的一些思路还是挺有实际价值的.
比如it depends.

2015-10-12

关于房产的一些想法

最近某朋友有些许购房意愿,于是就跟着另一个朋友陪着去看了下.
反正闲着也是闲着.

后来想想,其实挺有意思的.

一个是自己这些年来待过的地方/城市,似乎在房价方面是一个比一个高.
广州上海北京深圳.

就现在租住的这个小区,大概两年前搬来的时候差不多就是3w,3w5左右吧.
最近路过越来越多的链家门口和销售,貌似已经差不多6w,6.5w了吧.

也就是两年差不多的时间翻了个倍.

远一点的,某前同事好像150w在龙岗买过一套,前几个月貌似卖了.
在职的时候聊过他的心里价位大概是180w.
估计差不多也是这个价格出手的吧.

粗略算下也是20-30%左右的涨幅.
算两年的话,差不多年增长10%+吧.

某自己的房子还有去年看的某复式公寓也差不多现在翻倍的样子.

再往北点到坪山也差不多是2w起了.
惠州交界处目前也大概是8k+.

想想也挺有意思的.

这k和w的区别也大概就是直属行政区域的区别.
价格体现在这,那么至少说明构成部分里行政区域至少有相当权重.

之所以说是行政区域而不是地理位置,是因为两者空间距离其实相差不远.

另一个例子就是深圳辖内的南山跟罗湖.以及南山内的前海深圳湾香蜜湖之类的比较.
以及其他地方城市的比较.

与其说是以行政权证为主,倒不如说是跟商业发展配套的成熟度相关.

某种程度上来说也是一种口碑效应的因素加成.

毕竟现在的一般居住社区建设,附带一定的商业附属配套是真自然的事情.
但毕竟来说,很难形成超规模的聚集效应,然后产生附加价值.

当然,像一些巨型社区可以自我闭合相当一部分需求,然后反过来促进.
尤其在购买力水平上面造成的消费聚集推动.

所以,从某种层面上来说,如果把房价按区域做个heatmap的话.
大致可以看作是一种社会阶层的promotion graph.

毕竟,一定范围内的资源是有限的.
所以大致是遵循供需反应的.

而非中心的热度变化,则更像一种事件预期.
更多的是一种资本的需求驱动.

就像A股市场的事件驱动一样.
并不是因为内在价值有所变化,而是有某种变化的预期.
然后遵循默认的规则去提前兑现而已.

所以,某种程度上来说,不能说A股市场或者房地产存在炒作行为.
而是某种预期的强制兑现.

或者说,一些先行资本将这种预期以价格的方式打包成了一种call option.
跟后来的需求者或者说跟风者做了一个类似套期保值的操作.
将远期的价格波动风险转嫁给了后者.

毕竟,就像某些startup,讲个故事,你愿意听,且有钱愿意投.
那是你自己的判断.
对于他人来说,没有所谓的对错.

所以,这里就有了第二个有意思的点.
就是房产这种特定固定资产的玩法.

几年前刚接触经济金融相关东西的时候,跟某些朋友扯过.

如果有一笔足够全款的现金,那么是全款买房还是经可能地贷款买房.

现在看其实就是一个简单的现值加机会成本的问题.
而且以现有的速度和趋势来看,选择后者几乎是毫无疑问的.

考虑首付百分比为down_payment,手头现金为money,利率为interest,年回报/增幅为premium.
那么实际后者回报是杠杆率为money/down_payment的premium跟interest的差额.

按4成首付,8%利息来算,年增幅只要3.2%就够了.
这个看起来是轻而易举的事情.

即使考虑到跟premium本身的benchmark,年增幅也只需要5.4%就够了.

所以就现金和房产两个方案来说,自然是持有房产是一个dominate的option.

当然,这里是没考虑风险的.
因为这里的因素比较复杂.

比如一线城市跟以下城市有着明显不同的risk structure.
尤其是上面提到的区域集中的feature的权重有本质的差别.

然后考虑第二个方案.
money有asset的年回报.

那么benchmark就变为
(money/down_payment) * premium - interest - premium < asset ->
(money/down_payment - 1) * premium - interest - asset < 0 按上面给的数值简略带入一下的话就是 asset > 2.5*premium - 0.08

即使premium是5.4%这个基准值,那么asset的收益率也需要是5.5%.

于是,这个从直觉上来说,也是能够直接reject的一个方案了.
尤其如果按照premium=10%代入的话,可能结果更不理想.

所以,就这几种情况而言,在premium至少保持现有水平的前提下,还有什么比投资房地产更划算的事情呢?

当然,这里其实还有一个稍微有点社会责任感的方案.

考虑把抵押出去做asset.
即假设discount的房屋的折价率.
那么,实际收益就是
(discount - interest)*house*asset + house*premium
->
(discount - interest)*asset + premium

跟benchmark之间的差额也只是
(discount - interest)*asset + premium - ((money/down_payment - 1) * premium - interest)
->(discount - interest)*asset + (2-money/down_payment)* premium + interest
-> discount*asset + (1-asset)*interest + (2-money/down_payment)* premium
0.6a+(1-a)*0.08 + 0.5p
52a + 50p > 8
以杠杆率2.5,折价0.6,利息8%代入的话
->52*asset - 50*premium > 8

那么即使premium算20%的话,asset需要35%左右.

如果进一步考虑,允许未清偿的房产再抵押方式的话.
也就是说再加入money/down_payment的杠杆的话.
则有
((discount - interest)*asset + premium)*(money/down_payment) - ((money/down_payment - 1) * premium - interest)
->(discount - interest)*asset*k - premium + interest
-> discount*(money/down_payment)*asset + (1-asset*(money/down_payment))*interest - premium
-> 1.3*asset > premium - 0.08

同样如果premium算20%的话,asset只需要到9%+了.

也就是说,在允许再抵押的情况下,对整体经济是有一定积极作用的.
毕竟,asset是实际进入生产相关渠道的,对整个产业的上下游有乘数效应.

问题在于如何合理合法化这种再抵押方式.

考虑如果可以把成本打包为债券或者无抵押发行等价的债券.
那么就是实际地把房产变现.
也就是把债务方从银行变为债券持有人.

而如果银行再作为债券持有人持有这些债券的话.
然后通过最近的信贷资产质押再贷款的方式,以某种形式上的暂时地把债券"移交"到央行.

那么,从某个层面和角度来看的话,其实算是企业利用未偿付的房产做了二次贷款.
或者说是把原来流动性不好的固定资产,变为更活跃形式的现金流了.

对于因为资金问题运转不良的企业来说,应该可以起到一定的正面刺激作用.

关键的问题在于,这比新的现金流能否回到正常的生产序列中去.

毕竟,本质上这是个加杠杆的行为.
前车之鉴依然历历在目.



2015-10-10

野蛮的互联网

看到条谈某互联网金融产品App的评论,尤其是其中说到的定期本金锁定偿还息的方式.

想起最近闲着没事也去面了几家做互联网金融/P2P借贷的公司.
大致也算聊了些比较有意思或者说有启发性的东西吧.

最开始这个概念可能只是单纯的打包理财产品或者基金换层皮.
算是传统的互联网思路,从线下渠道争抢利润的路径.

现在的这个概念大多是指向P2P借贷了.

而P2P借贷具体来说,更多是指一些小额的借贷配对.

当然,原则上来说,也可以看作是从线下渠道争夺利润的方式.
但有一点不太一样的是,算是正式的金融行为了.
带有一定的风险性,虽然目前来说,还没有兑现的顾虑.

用某司的话来说,就是违约率可能还不到1%.
当然,这跟它的放贷群体有关.
主要是面笑一些学生白领之类的小额消费贷,尤其是以学生为主.

从借款方来说,如果P2P贷款提供的实际利率高于信用卡的话,那自然会用信用卡.
问题在于有些群体是缺乏信用卡支持的.

比如学生以及一些人群的额度问题.

所以这一块算是传统金融行业不屑于做的部分.

毕竟,对于传统金融行业来说,所用的信用体系和资金规模都不太适用与这种小额且人数不少的群体.
尤其考虑到违约偿付的追溯成本.

而做互联网的人是没什么行为底线的.
只要能赚钱大概就是拼了命去赚.
毕竟支撑这一行业的理念是量变产生质变这种magic.

所以,对一些像学生群体这种实际违约率并不高的群体,其实也是能够分一杯羹的.

关键在于,从资金配对的角度来说,对每一个借款人的额度都不会很高.
所以,再加上借款人数的基数,总体的违约风险可以降低到一个相对低的水平.

如果考虑借款资金是从其他子产品的小额理财上面通道过来的话,那么实际上这是一个小额借贷的配对游戏.

在这个小额理财的通道下,理论上是有可能把违约风险变为一对一的风险匹配的.
即将具体的一个借款人和贷款人做配对,或者做一个一对多的配对也行.
本质上是将这个中介平台本来就已经相对低的违约风险进一步细化分摊到各个借款人人身上.

如果配合一下不保本的条约的话,那么理论上平台是可以完全抹去违约风险的,嫁接到个人身上的.

即使是保本协议,通过对贷款人的兑现/取现周期以及借款人的还款周期做个时间差的话,也是可以基本对冲掉风险的.

当然,有些是自己没有集资渠道,而是从其他渠道借过资金的.
有一定的资金成本.

但是,原则上来说并不影响上面的时间差和风险分散的思路.
只要制造一定程度的利差即可.

所以,基本上可以说,小额借贷算是继游戏之后的互联网生存的又一个更纯粹的空手套白狼的模式了.

自然,也不能说是完全没有风险.
毕竟,现在还是比较初级的阶段,大多数借款人还不是恶意借款.
所以在总体违约率不高,再加上以各种方式分层稀释之后违约率可以很低.

但终究来说,这一模式依靠的还是低违约率.

所以,如果这一前提不存在,相关模式也就没什么意义.

而要攻击这个前提,就目前来说还是相对容易的.
毕竟,现阶段还比较初级,没有什么大规模违约的考虑.
所以,在放贷方面还是相对宽松.
需要提供的资质并不严格,对违约的追溯实际有没有有效的方案.
于是很容易成为骚扰电话或者诈骗等以数量为基本方式的刺探.

实际上,这里关键的一点在于,平台对违约者并没有什么实际上的处理措施.

虽然一般来说平台的风控系统会有借款的基本征信信息.
然后可能还会从其他渠道买一些个人信息和交易记录.

这里一个题外话就是,这些渠道售卖的数据包括个人的交易记录和短信内容.
这点,虽然说可能是从黑产那边过来的.
但是鉴于XcodeGhost这类再打包形式的各种App以及各种第三方SDK,很难说不是某些Store/Market的一些应用打包做的事.

还有就是某些国内厂商的手机也是内嵌有自己的行为搜集器具的,而且还是在本身ROM的系统层面做的.
而这些收集到的信息基本包括你能想到的各种数据,而且这些数据对于签约的合作伙伴来说,是半公开的.

所以说,隐私这个东西,告诉你或者说你知道的对方在收集的,都不算什么.
而且对于多数人来说,并不知道追溯一个人技术上有哪些手段.
因此,很多时候看到人谈隐私问题就有一种"你高兴就好"的想法.

像最简单的追溯一个人,如果你的流量不是匿名,那么只是单纯的根据在大约什么时间访问过什么IP/服务基本就可以确定一个人了.
难度最多就是再多几个离散点去提高区别度而已.
而一旦区别出来了,追踪不追踪就是兴趣/价值问题了.

考虑到没有什么是能完全隐蔽流量即使有也只是暂时没有缺陷暴露出来而已这点的话.
隐私保护这个问题,个人的观点就是让信息的利用价值尽量低就好了.

举个示意但并不确切的例子就是.
你知道它是周杰伦那有如何.

回到风控的问题.

平台就算能拿到个人的各种私密信息,但是没有现金流方面的资料的话,做风控其实是很儿戏的.

说以社交关系等做feature的,只能说是一种辅助措施.
但本质上是一个充分非必要的条件.

对于大多数人来说,即使是自己,也很难准确地把握自己的风险点在哪里.

一个明显的例子就是之前一段时间A股市场的各种故事.

重要的还是基本现金流/偿付能力的一些支持.

所以,对于这些平台的风控部门大多由银行/金融界的来把控这点,还是有相当道理的.

毕竟金融计量也算是比较正经的科学分支.
所用的工具和理论也衍生自很多自然科学分支.

所以在做预测/分类这方面,比互联网来说还是早了很长时间的.

加上互联网本身就不太顾虑准确性这一点,所以虽然方法和工具上可能有写类似.
但是思路立场还是有相当区别的.

就像某些公司可能随便由"富有激情"的产品经理拍几个feature出来甚至只是随机形式上随机几个initial feature vector然后套几个network假装是deep learning,然后就出来一个鉴黄产品.然后还可能在一个数据集里反复"调参数".

这里只是说,做金融计量/工程的至少承认只是"拟合程度",会强调参数的可解释性.
不像某些行业,只要相关不讲因果.

所以,其实挺好奇接下来这个互联网金融的发展情况的.

因为按照逻辑来说,这行到现在还没有出现问题,用户都安分守己不钻研漏洞,这是有点不可思议的.

还有就是其能达到的规模.

一个较合理的想象是,考虑淘宝上全部变为信用交易,那么对于消费需求会是怎么一个影响.

像花呗的额度可能随便就有几千几万.
如果再进一步分期偿付的话,按照年8%的利息算的话,那么实际上是对未来的个人实际消费额做了折扣.

即使不分期的话,还有一个问题就是阿里自身现金流对兑付的支撑.

如果这条兑付链条上,阿里出现一个阻塞,那么直接地就是从商家往上游渠道扩散.
尤其目前电商主要是服装消费占多数的情况.
往上的库存制造原材料以及边缘附加产业.

也就是说,除了银行之外,还多了这类消费贷平台的流动性风险.

所不同的是,银行背负的是止于企业端,或者说通过存贷关系隔离的终端消费对生产的直接影响.
而消费贷平台的流动性风险则是直接的消费/零售直接的多米诺关系.

如果再考虑广一点的,互联网"理财"通道出去的资金可能也是多投向零售等末端生产方.

而不是像银行的信贷/公司债等比较偏向上游产业.
尽管也有类小微贷款,但相对来说不容易,且门槛相对高.

于是,相对来说,这里的流动性和风险问题可能更具有不稳定性.


2015-10-05

独立思考

看到屠呦呦获得诺奖的消息,然后扫到有中医研究院字样,第一反应大概就是又要有场关于中西医的论战了吧.

而事实证明,自己想地还是不够周到的.
这个事情能牵着到的话题除了中西医,还有体制学术,以及医疗之外的文革问题.

这种事情,换做几年前,也可能会选个阵营战个不亦乐乎.
现在大概已经没有那种欲望了吧.
所谓兼听则明.

存在就是合理.
凡事都有正确的一面.

就中医来说呢,为人诟病的一点就是缺乏现代医学的检验程序.
没有"科学"的置信度.

这个中立点说,中医毕竟不是精确计量的现代生化学科.
究其成因和历史时期来说,把它列入经验学科也有点勉强.

尤其一些经典/药方的编撰带有比较强烈的个人选择倾向,缺乏普适性.

但抛开这些,以纯理论框架看待的话,也不是完全不能自圆其说.

就中草药的使用/熬制而言,从某种程度上来说也可以认为是某种萃取制剂过程.
只不过没有精确的元素计量的一种近似提取罢了.

跟现代的制造工艺,思路上来说并没有太大的差异性.

就治疗效果而言.
现代医药起左右的方式大抵应该是要么直接的生化侵蚀作用,要么就是诱导性的自体应激/免疫治疗.
两者都是基于精确计量的方程式工程.

中医的用药行诊从抽象概念上来说,也是归类到这两方面的.
尤其被攻击的草药毒性这点.
兼有两者的作用.

当然,思路一致不代表就是差不多正确.

中医跟现代格格不如的一个地方在于其建立的理论基础.
气血加上阴阳无形这类神化宗教性质的系统概念.

但是如果换一个角度看,结合其时代特征的话,也不是不能理解.

毕竟至少它尝试建立一个统一的理论框架来解释一些因果关系.
至于这个框架正确不正确,那就是时代局限性的问题了.

就像量子理论发展的波函数.
在经典框架里无法解释的东西引入概率函数,能够解决一些问题/自洽,就说明至少正确了一部分.

尽管可能实际的因果关系并不是这样.

比如可能波函数的概率性质其实是缺少了某种高纬度的描述变量,才使得在目前已知的低纬度上出现概率性现象.

考虑实际是y=f(h)+g(x)形式的描述在目前的理论维度下变成了y=g(x;p)的描述.
f(h)的高维信息被投影成低维度的一个观测概率了.

或者像随机一些变量做feature vector去神经网络去CNN图像识别,那可能也有60-70%的"正确"率.
毕竟本身就是个基于"经验"的一个巨型encoder.
你也不能说它不科学.
毕竟这不是精确计量的范畴.

所以说中医那套玄学理论完全没有价值,也不一定.
至少它尝试自洽地解释一些问题.

而如果它"自洽"到一定程度,能给出人一个新维度的想法应用到其他理论框架火提供思路,也不是不可能.

当然,这也并不是说会接受诸如能治不孕不育/癌症等的说法的.
毕竟复杂病理放在那里,也不是一两个固定"方程"能解决的事情.

但对于其他一些常见小伤痛倒是不置可否.
因为想想,也不是不可能的事情.

本质上来说,就是没有找到跟自己现有认知产生明显冲突和矛盾/否定地方.

反过来说,会"据理力争"的大概都是跟其理念有所冲突的部分了.

这些围观下,吸收值得吸收的东西也不错.

毕竟,大抵每个人都有自己成套的系统体系/世界观.
至于完善不完善,正确不正确,其实是没有事实上的评价的.

就每个人而言,自己所做的都是某种程度上正确的,有对应世界观和知识储备支持的.

对与错的界限其实并不明显.
也可能不是一成不变的.

就像体制问题.

本身就是个围城问题.
只不过身处所在,有些表现会额外关心和瞩目罢了.

如果以在其位谋其政的角度思考,可能也并不能做出更高明的决策.
尤其有时候,信息可能更不透明.

加上现代社会,信息的泛滥程度,通常需要有自己的筛选过滤鉴别方式.

就像诸如近期的日本讹人事件,以及之前种种的社会热点反转再反转的事情.

很多事情依靠的还是自己对各个部分的判断推理组合.

至于如何"判断"本身就是个因人而已的问题.

就像有人觉得微博上加V是种可信度保证.
但本质上只是对身份的一个认证而已.
言论如何是另一回事.

有时候甚至是一种筛选信号.

毕竟,把微博当作一个正常的信息渠道工具的,其实并不在意自己对他人来说是谁.
而是他人对于自己来说是什么消息渠道性质.

毕竟大多数人还是默默的消费者.

能够有能力有力量输出信息的,也不是一个认证能保证的.
某种程度上来说也是不需要.

就像和菜头.
从下午南派三叔被攻击开始到现在就做了一场很好的媒体行为艺术.

有时候挺钦佩他的洞察力和人品的.

无条件/奋不顾身支持朋友也不是今天这么一次了.
尤其有时候,在道德上并不占有优势甚至劣势的情况也能挺身而出.

而平时对粉丝的各种看似尖酸刻薄的调戏,对对方来说其实算是种另类的教育/劝戒.
对大众来说也是种调笑之余的反思.

毕竟来说,如果要说心灵鸡汤的话,很早之前的槽边往事应该是没人比得过他的.

现在这种混乱邪恶的姿态,也算是某种超越性的怜悯姿态吧.

毕竟,对于不是玻璃心的,自然也就无所谓形态.
而对于玻璃心,最好的方法就是及早打破,及早恢复.

这种应该就算是所谓的睿智吧.

不是独善其身的独立思考.
而是致力于让其他人也学会独立思考的努力吧.

2015-10-01

由盲人的交互障碍谈起

翻到篇Facebook的论文,谈的盲人在社交网络体验的一个survey.
尤其侧重的在照片相关的这个点上面.

想想也确实,现在很多的App关注点都在于照片或者视频等.
尤其以Instagram这种形式的社交内容.

相对于听力障碍的人来说,视力障碍在这方面的局限性/缺陷可能更为明显.

诚如文中提都的一个观点.
视觉障碍只能依靠screen reading,在检索效率和友好度方面总是有所欠缺的.
加上现在的电子设备还是flat screen,很难提供诸如盲文之类的辅助消费方式.

如果再考虑下听力视觉双障碍的群体的话,这方面的问题就更严重一些了.

毕竟,就目前来说,除去听视觉方面的内容,互联网这个second reality就没什么实感了.

那么,能够提供除此之外的第三类接触方式么.
并且,这种方式是可以适用于移动等手持设备上的?

套用五感的说法.
视觉,听觉,嗅觉,味觉,触觉.

前两者是功能性障碍.
中间的两个则本身主观因素影响较多,且层次感不算特别分明,也不太适合用于信息载体.

剩下一个触觉.

广义上来说,人跟外界的交互也不过是一些生物电子反馈而已.
所以,原则上来说,能直接transcript成人体能识别的信号的话,也就没有这些功能性障碍病理表现了.

除非是涉及都大脑的某些先天性处理缺陷问题.

但原则上来说,也是有办法解决的.
前提是能弄清楚工作机制,然后模拟代替,做inception.

狭义上来说,触觉的范围可以约束到一些具体的肢体触碰反馈上面.

一个例子就是震动反馈.

尤其在手机的设计上,震动很早就存在作为静音时对来电提醒的一种反馈设计.

如果抽象点考虑的话,这种交互传递的就是一个二元的信号了.
理论上来说,跟构成现代计算基础的电子特质无异.

所以原则上来说,各种现存的对信息的encode方式都可以通过震动状态来传递.

但现实的约束在于人的解码能力以及更主要的传播速率限制.

考虑一个更近代一点的编码方式morse code这种现实应用的无线传播形式.
无线电时期的繁荣,至少说明了这种传导方式的实用性和有效程度.

应用在手机上的话,也已算是一种替代读屏的方案.
只不过曲线和实用性是另外一个问题.

这里是以吸收信息的角度看待的.
换个角度,如果是一个Morse code的方式,对手持设备就行交互呢?

也就是说用震动对手机传递信息/指令呢?

想想,早几年的摇一摇也算是这方面的尝试.
不过传递的信息只是一个特例形式的on口令.

后来的Moto X和Nexus 6的Ambient display某种程度上来说,也是这种形式.

本质上来说,是向手机传递的一种物理变化构成的反馈机制.

具体到上面的几个例子的话,差不多都是来自于位置变化.
尽管在敏感度和变化尺度什么有所不同.

另一个例子是照相.
尽管这个application的反馈来源实际上是镜头.

但如果假设是通过手机的sensor计算位置变化做出的处理的话.
其实就是Oculus Rift类的VR应用了.

如果考虑zoom in/out的操作的话,那么跟微软的Hololens/SurroundWeb的在交互上也可以有一些相似性.

在这种条件下,相当于透过手机屏幕,操作另一个世界的"实际物理设备".

或者中二点的说法,手机屏幕投影了一个异世界.
通过对屏幕的touch和这个"window"的位置变化,去实际操作和影响对界的一些设备.

游戏化地来说,Ingress就是这个方向的.
只不过只限于把故事背景设定了一下而已.
游戏的实际方式依然是基于实际地理的.

这个当然是可能有当初的一些其他商业化和数据需求的考虑.

但本质上来说,是可以构建一个等比现实大小的游戏空间出来提供交互的.
就像后续作品Pokemon Go目前给人的想象空间一样.

或者做成一些解密游戏也是思路很直接的.

如果把这种交互方式嫁接到现有的一些游戏机制上呢?

考虑消除类.

消除游戏的本质是用某种search algorithm去solve/optimize某种形式的objective function.
同时adversary则是introduce进来的某种类random variable的error term.

比如传统的三消或者trees或者祖玛都是一种search matching的过程.
俄罗斯方块某种程度上也是search matching,只不过对于的variable是shape而已.

把手机位置的变化作为一种search function来看待的话.
它带来的一些变化量有哪些呢?

一个直接的因素自然是其自身位置变量.

如果考虑屏幕反馈的是类似相机这种projected informa的话,那么可以认为是project context的变化.

那么这种直觉上的屏幕关注区域的变化就是这个search function的一般过程.

依然把matching作为objective function的话,error term应该如何设计呢?

color/shape match的过程,实际上就是从一个project context/screen到另一个context/screen的过程.
如果每一个screen都是静态的,那么这个search algorithm就是deterministic的.

deterministic的话,一个突破点可能就在于混淆性.
犹如拼图.

可以是形状的相似度.
也可以是如纯色拼图这类.

本质上是降低区别程度/减少可供区分的变量.

non-deterministic的话,可以考虑是因素就多谢了.
就shape match来说,可以是shape本身是变化的.

这个变化的含义可能是随时间,或者是本身是个moving object,或者复杂些的需要满足前置收集/match条件的transform.
color match的思路类似.

还有一种是time limited game的思路.
也就是通常的限时任务.

推而广之的话,就是某种外在资源的限制因素.

比如在context/screen switch的时候,并不能显示某些区域等.
而是需要满足某些条件,如移动模式/路径/速率等.
类似war frog的概念.

当然,这种交互方式虽然说能够把可交互领域不止一个维度地扩展.
但相对的,一个局限性就是依赖于物理位置的变化,也就是对现实空间有些要求.

而且在同等交互概念项目,视觉VR的路线可能对这方面的约束更少一些.
毕竟,这种情况下的投影区域/入口不依赖于手机位置,而在于穿戴的设备.

再者,像黑客帝国的脑后插管的Matrix方式可能更环保和空间利用上更高效.

尤其考虑到原则上来说,是可以每个人活在自己世界的.

2015-09-25

无用功

今天晚上看到某条关于新浪微博调整timeline显示算法的消息.
大致意思是04年底的一个改动,对一些高频发布和所定义的低互动内容做"降权"处理.
同时对广告渠道的这里消息做豁免.

对商业渠道做保留处理,这也不是不能理解.
毕竟需要一种盈利模式.

而且就赚钱能力来说,不得不承认新浪微博比先驱Twitter更早实现.
后者现在有许多功能其实也是在借鉴微博的做法.

毕竟,做这种公共消息平台,始终是很难脱离用流量变现的.

只是对用户自己timeline的干涉,这点倒是颇有中华民族的传统美德/家长精神.

事实上,这种看上去是"为你好"的做法,对于国内公司来说,算是某种定势思维吧.
之前的微博自己的智能排序,以及BAT的种种默认开启的做法.

一个算是载入失策的典型应该算是著名的"艰难的决定"吧.

中性地来说,操纵用户的timeline,服务方不明说的话,大概多数人也不会有什么发觉.
毕竟,虽然说timeline的成分构成是自己筛选出来的,但是具体产生了什么其实自己也是不知道的.

这便是这种公共场合性质平台的一个特点.

消息的消费其实是个体自己筛选编辑的一个合集/结果.
里面构成的偏好,其实来源可以很复杂.

有些是资讯类,有些是说话方式,有些是个人关系,有些是其他一些兴趣点之类的.

这几个基本点原则上也是个概论兴致,实际上是可以继续细分下去的.

但如果想通过做feature然后做推荐的话,估计效果并不会太好.

因为从结果上来说,拟合的也只是当前follow状态的一个近似快照.
按照这个结果去寻找匹配的话,谈不上有很强的依据性.

第一是因为这个结果是一个time vary的过程.
某个feature的有效作用可能只在某个时间段或者某些时间段有效.

当然,把每个feature做time serial方向的predict,然后用在分别每个时间段的predicated value做feature vector重新做拟合的话,可能更符合直觉.
但计算量是一方面,实际有效性又是另一方面了.

第二个原因则是个人的偏好其实也是个time vary的过程.

虽然可以再在一个predict,然后跟上面的结果再一起做regression.

但是明显的,这里有太多的predication了.
说没有误差,或者说不影响"准确性"之类的,实在很难令人信服.

所以,通过推荐来扩充网络的健壮性并不见得是一个好方法.

而且从发展历程来看的话,个人的timeline其实多多少少还是靠自身去发掘维护的.

因为毕竟是公共空间,而且早起的模式是更aggressive的转发而没有steady的评论.

这点跟微信这类封闭空间是有先天优势的.

微信一个值得称道的点就在于早期理念的封闭性.
依靠某种程度上的口口相传建立的network.

某种程度上来说,这是一个值得记录的关于口碑传播的大规模社科实验.

结果也可能很明显.

口碑传播确实具有相对的高质量预告以及忠诚度.
但是同时反映了"口碑"供给和发放的有限性.

毕竟,某个领域的周知品牌也就那么几个.
所以从传播效果上来说,其实是一个固定配给的市场.
或者从消费角度来说,是需求固定的一条供需曲线.

而且一个明显的缺点在于,品牌的传播性是的dominated tipping point可能更靠左.
因为这种封闭环境的口口相传很难有足够的突破性去推翻原有的口碑.

一是前辈有着先发优势,覆盖面不是一个层级的问题.
二是传播毕竟是一个存在延时和损耗递减的过程,能存活多久本身就是个问题.

当然,这不是封闭空间独有的问题.
开放空间也有.

只不过开放空间的消息暴露度基本是100%.
个体有动机的化,筛选优化剔除的难度相对低很多.

简单说,就是区别在于消息多元化的程度不同.

消息结构单一或者不够多样的话,纠偏的能力就较弱.
但同时也因为纠偏能力偏弱,传播速度和接受程度可能比多元结构的更快.

毕竟一个闭合圈子的话,某种程度上来说思维结构和接受方式存在一定程度的相似性.
消息处理和消化成本会低很多.

多元结构需要各种预判和处理,相对来说,对消费的门槛和需求复杂度要高些.

不过不管是哪种结构,基于的一般逻辑都是消费者自身的一个筛选再组织过程.
区别只不过是候选的来源问题.

所以,本质上来说,这些流量平台的立足点首先是消费者对消息的主动接受过程.

虽然表现形式上来说可能是一种推送过程.
但实际上,还是基于用户的一个预先选择.

因此,对于用户这个node来说,network flow的驱动方式其实是来自这些node的pull过程.

考虑这么一个network或者说graph.
用户作为subscriber,s-node.
流量的变现提供方,或者说广告主,或者营销实施方作为publisher,p-node.

那么,在这么个一个graph里,实际上就可以划分为两个sub-graph.
分别由s-node和p-node构成的s-graph和p-graph.

于是,该如何定义这个graph的network flow的cash模型呢.
或者说,怎么评估这些网络所能带来的变现能力呢?

考虑,对于network里的某个节点,初始有一定的energy.
然后pull的过程其实是从其他节点slice/aggregate energy.
即energy_x(t+1) = absorb( \sum_{i=neighbour(x)} slice(energy_i(t))) )

也就说t+1时间的节点energy是吸收/pull的t时间的周边节点的energy构成的.
即从following的node里吸收信息,然后再消化之后,供其他节点消费.

这里犹豫的一点是absorb function要不要是守恒的.

如果不守恒的话,也就是整个network的energy可能是可变的.
而且具体到个体node的话,还有个问题是energy到0之后,是否要从network里移除,还是继续保留甚至允许非实数的参与.

守恒的话,直觉上模型/论述起来可能要简单一些.

因为如果把energy替换为cash的话,就是相对简单的零和市场.
不然的话就是一个动态变化的市场.

所以先考虑一下守恒的情况.

如果不区分s-graph和p-graph的话,那么对于graph的network flow来说,不过是energy/cash的互相自然周转而已.

考虑区分的情况的话,把"流量变现"行为定义为一种对flow做routing的行为的话.
那么,实际上就相当于吧neighbour函数返回的neighbours做了更改.

也就是说,实际上是更改了网路的连接结构/状态.

付费的p-nodes实际上是往原有的s-graph里添加新的节点,并改变原有的s-graph的结构变成一个新的graph.
而新加的p-node的作用实际上就是往外emit energy.

那么如果absorb是守恒的,而且考虑p-node的目的只是emit完所有的energy然后退出.
也就是说,纯粹的推广传播之后就消失.

则留在network里的energy就会越来越多.
而这些energy的多寡并不在开始的pull模型里参与任何作用.

也就是说,理论上并没有囊括对现有网络结构变化的影响描述.

考虑absorb是一个非守恒的过程.

对于纯粹的s-graph来说,非守恒就因为这整体network的energy可能衰减到0.

那么,对于平台方来说,一个动力或者说objective就是尽可能地维持或者maximize整体network的energy/cash.

考虑一个特例的简化情况.
也就是,在没有p-node参与的情况下,整体s-graph的energy是恒定/稳态的.
而p-node的加入,则是跟特定的s-graph子集产生连接.

即:
energy_x(t+1) = absorb( \sum_{i=neighbour(x)} slice(energy_i(t)))) + absorb_p(slice(pnode)).
即每个被连接的s-node的energy状态改变的absorb function被加入了一个absorb_p项.

那么,对于原有的objective就相当于maximize各个\sum absorb_p了.

也就是对与付费传播选定的advertise target,其影响不能使得network的整体energy有所衰减.
而如果\sum absorb_p >0的话,那么这一部分的energy就可以当作是平台的盈利来源/cash.

于是,如何定性absorb_p呢?

假设p-node向外emit的energy都是equal quantities的.
那么,实际上absorb_p的性质就相当于对energy的接受/转化程度如何.

也就是说,在这种稳态假设的前提下,广告推送的目标应该是对广告不反感,不会降低自身energy的目标群体.

理论上来说,给定一定的emit量,并不一定总能找到足够的positive的s-nodes去absorb这些energy.
现实一点的情况是,这个candidate的sub s-graph可能存在一些s-node的absorb_p的值是negative的.
但总体来说,还是一样的objective function.

考虑给s-graph的energy稳态做个限定区分的话.
即,如果某个s-node的energy低于/高于一个值的话,那么就不会再往外emit energy.
换句话说,就是s-node不会从低energy的s-node上面absorb.

于是,在理论上就存在某个energy级别并且低connectivity的s-node变成一个黑洞.
从而实际上地减少了整个network的effective energy/flow.

对于s-node在某个值不往外pull的情况,其实原则上是reduce到不emit的情况的.

因为不pull不代表不存在network flow.
只要不到emit的临界点.

所以,回头看的话.
其实说了一堆废话.

毕竟,推送到不反感的用户,维护/鼓励用户的读写活跃度这些都算是直觉上就能想到的东西.

说到底不过是在自我强调一些东西而已.



2015-09-18

夸夸其谈

昨天还是前天,手上的Nexus 6收到了例行的OTA.
完了之后,发现除了是个security update之外,还多了Android Pay.

说起来,Android Pay算是Google第二次做支付相关的了吧.
之前的是Wallet+Checkout的组合,现在Checkout没了,变成了Android Pay而已.

有趣的是,Checkout原来是一个可线上线下的解决方案.
不过相对来说偏向线上.
毕竟原型对手是Paypal这类为在线商家支付提供的解决方案.

现在的Android Pay则是针对线下的一个支付场景.

大概的思路应该是线上没有先手优势,线下大家起跑线都差不多吧.
而且手上有Android这个移动基础设施,多多少少有点先天优势.

原则上来说算是一个关于card的管理应用工具.
毕竟除了信用卡银行卡之外,各种会员卡礼品卡之类的也可以应用.
这点不由得让人想起Coin.

就个人来说,还是比较偏向于Coin这种实体卡形式的.

手机虽然说作为现代接入终端,计算能力和便携性都没什么问题.
但其多功能多角色的职能,可以说既是优点也是缺点.

一个简单的场景就是打电话的时候支付.

所以,终究来说,有些功能还是需要从手机上面decouple出来的.

就像现代的PC和video game console的关系一样.

通用和专用多少是有差别的.

而且就Coin独立存在的形式来说,至少免除了跟其他App混杂在一个运行环境的问题.
这点对于涉及钱的地方还是比较敏感的.

所谓环境越复杂,结果就越难以保证.

不过就Coin的具体产品形态来说,之于Android Pay还是有些局限的.
毕竟,后者能轻松扩展到其他领域的卡片.

虽然说这点局限性在于磁条和IC卡的技术代沟.

当然,除了这点Coin说到底还是一个开创者.
除了集成卡片这个思路之外,加入卡片的方式也较Android Pay更Google一些.

只要照片就能辅助完成.

而Android Pay还得自己填.

尤其是涉及gift card之类的.
开始以为是依靠Google的图像识别技术去匹配可能的候选.
后来看FAQ倒是取巧地扫条码.

这点多多少少有点失落.
到底看上去不太符合"人类希望"的风格.

不过像Android Pay这种东西,很难说不会走Checkout的失败老路.

从支付的角度来说,并没有带来太多的革新和令人眼前一亮的地方.
唯一的unify card的概念还是源自于Coin.

便捷程度上也很难跟其他可能的产品做出太大的区分度.
唯一可能让人放心的就是Google的技术能力至少能保证一定的安全性和隐私习惯的问题.

所以,本质上来说,这并不是一个能让人眼前一亮或者说有所启发的东西.

这大概就是创新的艰难之处.
尤其是基于一个follow别人思路的东西.

加上Android Pay的价值只是为Wallet的数据做桥梁的.
本身战略意义不及后者.

就算是要Cash Flow的数据,也不一定需要Wallet和Android Pay的存在.
有只是说更光明正大和方便精确一些而已.

虽然说对Google来说应该还是会有些底线的.
不像某些国内公司,拿了Android的各种权限,通过诸如读银行淘宝等短信收集消费行为数据.

Google的风格大概回事劝诱其他人通过它自己的支付接口或者给追踪SDK里加针对性的方法诱导第三方过渡数据.
所谓don't be evil的真谛.

说白了,就是为了一些数据而已.

毕竟这几年来稍微有点新意的模式都是基于数据做优化的.

像Uber和Airhub之类的,本质上来说也是基于结构化做的一种效率方面的social optimization.

不过相对来说,Uber在这方面可能藏着一些更深入的思路.

当你去看Uber的时候,会觉得不就是一个利用闲散时间和闲散社会资源做整合优化的一个东西么.
就跟它的follower lyft/滴滴/快滴之类的一样.

但看它经常做的另一件事其实是线下的一些cross promotion的活动.
看起来就像是跟某个品牌一起做的一个营销活动而已.

然而,如果换个思路,把Uber看作一种推广/推送渠道的话,可能就是另一种场景.

从这个角度看的话,其实Uber不仅在提高社会效率上面做了优化.
而且在此基础上创造除了新的广告和推广价值.

如果把车流和人流同比为线上流量的话,那么cross promotion的意义就相当于流量经过各个站点是展示的广告位.
Uber则是代替Google做这个广告位的publisher.

所以,某种程度上来说Uber是在起一种线下的定向导流的价值再创造活动.

某种程度上来说,把Uber比作线下的Google也不为过.

因为本质上来说,出行这一点代表的是线下的一种流量.
而Google在网上所做的一切也是基于对流量的操控提取做到的.

现阶段的Uber可能还只是浅层的商家活动.
但本质上来说Uber是可以对这种流量做manipulate的.

就像Uber Pool.
虽然依然个是social optimization的问题.
但是技术上说是做到了merge network flow的.

而支持这个的必然是关于network flow的各种pattern的数据.

这个数据就好比网站的PV/UV,还是全时的数据.
如果再把每个地点看作一个URL/Web Site的话,做个pagerank也是不难的.

而且如果考虑时间分布,做个分时变化的dynamic pagerank也是可以的.

这个往大了说,可以优化交通.
毕竟现在的Uber的schedule分配应该是不会look forward的.
而且有时也无法look forward.

但如果有了一定关于路线的概率分布数据,那么区域性的资源优化利用和预规划也理论上是可行的.

这是从Uber的全局出发的角度.

而对于每一个地点这种线下website来说,也可以有一个时段性的refer和bounce数据.
更乐观点的是refer和bounce数据是可以撮合到一起的.

这点对地点商家来说,至少可以做一些跨区域的上下游的促销行为支持.
对于商业中心规划来说,也可以根据link in/out来做一些选址方面的优化.

如果把同样的思路apply到indoor navigation的话,对于一个特定的商业中心来说,就有可能优化一下商铺的分布.
或者商场的一些机构性调整.

当然,这种调整是一种相对于游客/顾客来说被动的调整.

顾客主动的调整的话,可以是商家/商场针对流量概率的一些预判做的动态活动引导.
至于目的是疏导流量还是提高转化,就看具体需求做不同的规划的问题了.

像参考Ingress和即将有的Pokemon Go.
在不考虑使用群大小的前提下,是很容易引导流量产生变化的.

所以对于Uber来说,它对这个领域social optimization的理解可能比其他人更深入细化一点.
一旦上升到抽象的network flow的问题,它的愿景可能就更广大一些.

简单想下,直接把Google在web方面的所作所为和各种优化apply到Uber身上,也是没什么大问题的.

所以,就这点来说,原创者到底是原创者.

理解和接受别人的想法,可能要么是天赋问题,要么是努力的问题.
而创造出新想法,那就真的是天赋问题了.

而且更重要的是,一个东西内里所隐含的真正逻辑可能只有自己知道.
尤其,如果一个东西重要的其实并不是结果,而是得出这个结果的过程.

就像你拼命地烧钱补贴抢占市场,以为模式的终极模式是革命是垄断是定价权.
而这个模式真正重要的地方可能在你根本想不到看不到的地方.








2015-09-17

随机应变

也许有时候得承认,一个人用地最多的语言多多少少会影响到对其他语言的看法.
毕竟,每门语言都有自己独有的模式.

最近又用NodeJS写了点东西.

选它的理由很直接.

因为是想用SVG画点简单的图形做logo/icon之类的.
所以最直接的思路就是打开Chrome console里直接SVG的JavaScript API画.
简单封一下就是命令式的作图工具了.

虽然说,解决这个问题的方法很多.
比如SAI/PS什么的,花样还多些.
或者退一万步来说,也有现成的SVG library或者现成Pixlr App,也不用自己手工写.

但想想,可能只是简单画线而已了.
所以大概不用上这么些重量级的东西.
而且自己写的,多少可控些.

说到底,可能还是某种NIH Syndrome的表现吧.

于是,既然前面所见部分都是Javascript了,那么后面存储转换什么的,也就直接NodeJS了.

虽然原则上来说,处理小事情个人还是偏向python的.
但对于这可能最多几百行的东西来说,异构的技术栈可能没那么必要.

而且有一点是,至少从Http模块来说,NodeJS可以直接上手.
python内置的那个,多少还得做点事情.

事情到这里其实都还是意料之中的.

直到开始考虑SVG转PNG的时候,大概问题就来了.

首先考虑的自然是imagemagick去做转换.

估计着NodeJS的流行度,找个binding库应该不难.

然而看了Google Search头几条的基本都不维护了.
而且稍微翻了下实现,都是直接spawn一个命令行convert出去的.

当初考虑用binding库的时候就是不想这么做的.
而且,如果接受spawn的话,自己spawn就行了,何必再带一个第三方库.

于是想想,这些项目被主动abandon倒说明作者还是有点良心的.
免得别人写个hello world还得带上一堆三方库.

不过native的binding也还是有的.

问题在于,NodeJS的许多库,它存在不代表可用.

由于node版本的关系,目前node-imagemagick-native master的版本对4.0.0这个版本的node是不行的.
大概是依赖的nan库还没跟进上.

说到底就是v8的某些接口改了,上游没跟进,于是下游自然也没办法.

暂时妥协,nvm换低版本的node.

本以为就此结束了.

然后事实是始终无法svg to png.
直接异常,还不带堆栈.

至少看看怎么改对应实现一步步debug看下什么问题.

所幸的一点是这项目的gyp配置写得还不错,build没问题.
于是把吞掉的异常重新抛出来看了下.

大致是SVG本身算是XML文本,跟其他通常意义的image格式的一个明显差别是没有明显的meta信息.
尤其是图片规格/大小.

这个虽然说可以在XML里作为属性附上,但毕竟不是必选项目.
而且要一个图片处理库去处理XML,换自己也懒得去管.

所以,问题是convert的时候需要提供一下SVG的size.

然后回头看了下node-imagemagick-native,根本就没考虑这种情况.
于是proposal了个pull request加个参数解决.

但即使接受也不知何年何月的事情.
况且还有node版本的问题待解决.
加上看了下node的native module也不难的样子.

于是去翻了下gyp的文档.

看完之后的一个想法是.
这不清不楚的居然是官方文档.

不过gyp本来就是一个特定项目的build tool.
自己人自己知道怎么用,文档不是太重要.
被node拿去用,只能说node社区就是这样的性格/风气.

依照的有限的文档写配置,build.
结果确实什么都没发生.

对比了下generate出来的makefile和node-imagemagick-native的区别,发觉是cflags/ldflags没生效.

照文档的说法改了几种方式依然.
于是只能Google下有没类似案例再不行就只能看实现了.

所幸这个问题还算常见.
原因只是在OSX上,gyp是用另外的xcode相关的参数在generate的时候代替标准的clfags/ldfags配置.

于是只能再次感叹,gyp果然是一个自己人给自己人玩的东西.

不过一个意外收获倒是直接了解了gyp的大致parse过程.
也算是聊胜于无的收获.

解决完这个想着,该没什么其他问题了吧.

然而很快地build发觉居然还是symbol not found.

重新看了下generate的makefile发觉看起来不至于.

Google之后到了node-imagemagick-native的某个issue下面.

里面解释了说brew的magick++ build的时候link的是libc++.
而node link的是libstdc++.
于是感谢C++的mangling,symbol not found也就难怪了.

解决途径只能是告诉xcode,这里用的libc++,并且得指定targeting的OS是OS X 10.7以上.

然而,事情还是没完.

不过剩下的都是magick++的API设计问题了.
或者说SVG这种无相对有效meta信息的格式带来的问题.

所以convert的只能是empty image,然后设置完必要的size之后再read,然后write出去.
不然一般的话,应该可以直接构造image然后write.

不过这种超出写作时的设计范畴的事情,也只能这么解决.
毕竟,要单独弄一套API出来,可能更不好看.

不过最终还是convert完成了.

虽然说,自从之前被grunt打击过之后,对NodeJS的印象其实不太好了.
这次的一些问题更觉得node可能不太适合一些严肃的地方.

至于C++的部分嘛.
至少以后提到说over engineering的时候,大概有除了Java之外的候选了.

晚上重新review了下SVG的部分.

估计以后会再用到的时候会选path而不是polygon做代表了.

毕竟来说,path确实更general一些.

想想,不考虑曲线的话,可能也够了.

不过真有重新用的一天的话,大概会重写相当部分吧.
毕竟,到时可能思路和思考方式又不一样了.

所谓随机应变.







2015-09-11

才华横溢

Apple发布会里有一个比较有趣的就是iPad Pro.

从命名上看,应该是从属于iPad的产品线/品牌之下的.
但从尺寸和配套外设Smart Keyboard来看的话,其实是类似与Surface的定位.

而Surface的定位,本身就是从pad向laptop进一步迁移的结果.
即使更偏向于轻娱乐的笔记本.

本质上来说,Surface应该还是属于笔记本的.

那么,按照这个逻辑的话,iPad Pro就应该是归属Mac的产品线/品牌的.

没有的原因大概是因为之前有了一个比较失败的Macbook路线的创立.

Macbook不如Surface的原因大概还是因为它采用了已有的笔记本设计.
即一体化.
这样就结果上来说,并没有减少笔记本对于娱乐需求的便携负担.

所以某种程度上来说,Surface目前的结构是结果上来说比较折中的且被认可的一种方式.

那么,为什么不是像iWatch一样另立一个路线呢?

考虑iPad自2014年以来各个季度的销量数据,实际上是逐步下滑的.
从2014年的大概季度13k的销量到现在不到12k的销量.
即使是在有新品release的季度,也存在的总量上的下滑.

所以,如果从考虑废弃iPad品牌的角度来说的话,与其另立一个品牌不如升级下,继续沿用iPad的称呼.
而且,从iPad的早期定位来说,就是介于手机和笔记本之间的一个路线.

原则上来说,也就是.
iPhone作为mobile的代表.
iPad作为轻娱乐的代表.
Mac系列作为办公的代表.

这样路线就差不多清晰回归了.

然后考虑Pencil和iPhone的3D touch.

这个本质上来说,是对交互从纯平面的横向领域到纵深方向的一个期望吧.

毕竟,现有的touch交互都是平面的.
而二维平面能提供的区别模式也基本上挖掘完了.
swipe,press,drag & drop.

所以,现在的UI布局方式大都还是平面展开的.

除了Google的Material Design在交互方面有向纵深领域拓展的倾向.
一个明显的例子就是UI component惯用的Hero transition.

这个在web开发层面上看,是基于single page app做的一个交互切换策略.
而且从技术上来说,基本是resize的一些layout的transform/reflow.
但从实际引导效果来说,提供的是一种back/front的用户focus提示.

也就是某种程度的在平面做交互层次化的尝试.

而Pencil和3D touch则是直接提供给了用户一种突破深平面的交互方式.

虽然现有的宣传视频里多是一些popup tooltip类的应用.

但从结果上来说,还是给了一个明确的希望交互往纵深方向发展的尝试倾向.

不过这种压感方式的引导可能更容易让人把思维固定在垂直方向的velocity的一些应用上.

比如zoom in/out的加速浏览.
以及可能的把内容组织从列表改为cascade layout card之类的方式的导航等.

结果自然就是垂直方向的UI结构变得繁琐复杂.

所以,就垂直方向的交互来说,还是不太喜欢这种简单粗暴的拓展方式.

毕竟,多数touch screen的应用场景都是在一个主要的active view上面.
过多的纵深上面的安排,其实并没有提供太多的交互便利.
而且很容易把能够结构化/树状的交互层次变为凌乱的graph.

另一点就是,基于velocity的想法可能并不比现有的解决方式更优.
考虑Android切换task的UI交互.

所以就偏好而言,还是比较倾向于material design的paper/ink思路.

之前考虑过的一种形式是Hero transition的每个card其实是可以作为depth entry.
变为active的时候flip到背面又是一个新的canvas.

这样从UI层次上来说,还是一个树形结构,而且能够每个交互过程都是有一定延续的.
从风格切换上来说,也可以逐步替换掉色调之类的做渐适应.

本质上还是有一点single page app的思路在的.

实际上,现在的windows的平板模式或者说Metro的card的交互大致上也是这样.

不过怎么说微软呢.
虽然经常很多想法走在时代的前沿,但是拿出来的产品和成果却没能让人惊艳到.

Surface可以说是重新发明了平板.
但是估计如果这种类型成功了,功劳还是归到Apple头上.

Metro UI当时给了人灵光一闪的感觉.
只不过从结果上来说,Google借鉴地更好,因为本来就是偏向简洁风格的.
而偏向拟物的Apple最终也接受了这种风格.
某种程度上来说,也是微软改变了一个行业的思维.

更早点的则是智能家居/电器的概念.
可能2000年或者2004年就已经有prototype了,而当时智能手机可能还是一个高端的东西.

还有各种OS方面language方面的超前设计.

虽然很多都被后来者居上.
但是能有那么多次,而又好不顾忌地放手浪费掉.

大概就是所谓的才华横溢了.


2015-09-04

所谓事实

考虑一个简单的ROI形式,即:
return = f(investment).

对于一个人的主观决策,也即就是其expected return则是:
E(return) = f(investment).

考虑到之前提过的实际过程中,人决策过程中irrational/overconfident的量化形式,那么实际上应该是:
E(return) = f(investment) + g(bias)

也就是说,实际上,人做一个事情或一个决定的时候,对结果的期望是一个加上个人偏好的修正结果.

而实际的一个事情的结果往往是个人投入加上其余环境影响的一个综合结果.
即:
Fact(return) = f(investment) + H(environment).

那么,通常说一个事情不如预期的话,实际上是指:
delta(return) = E(return) - Fact(return)
也即
delta(return) = g(bias) - H(environment).

现在考虑一个问题.
如果一个人能够forecast所有事情,那么能否让预期结果和实际结果一致.
也即让delta(return) = 0呢?

考虑delta(return) = 0
->
g(bias) - H(environment) = 0

如果把环境因素简化为一个多人参与的同质描述的函数.
即,
H(environment) = \sum h(f_i(investment) + g_i(bias)) 的形式.

也即是说,把环境因素考虑为其他人决策的一个实际结果的某种加权形式.
则有
g(bias) = \sum h(f_i(investment) + g_i(bias))

这个意思就是为了使得个人决策结果与预期一致,或者说使得forecast的偏差为零的话.
决策的代价的依据是其他人的预期结果.

通俗地说就是在realize objective的时候,通过协调其他人的给定的已知的决策依据做调整.
也就是所谓的顺势而为.

这里对其他人的expected return是没有做任何限定的.
也即是其预期可以是任何形式.

考虑其他人决策的目的也是minimize delta(return).

因为delta(return) = g(bias) - H(environment).
对于单个个体来说,minimize的objective function是一个跟自身投入(investment)无关的一个函数.
而个体的delta(return) = 0 也就因为着对任意一个个体i,
g_i(bias) - H_i(environment) = 0
也即
g_i(bias) = H_i(environment).


H(environment) = \sum h(f_i(investment) + g_i(bias))
->
H(environment) = \sum h(f_i(investment) +H_i(environment))

由于
Fact(return) = f(investment) + H(environment).
->
f_i(investment) = Fact_i(return) - H_i(environment)

于是
H(environment) = \sum h(Fact_i(return) - H_i(environment) +H_i(environment))
->
H(environment) = \sum h(Fact_i(return))
也即
g(bias) = \sum h(Fact_i(return))

也就是说在一个人要使得自己的做法完全符合预期的调整函数是一个跟其他人的实现有关的一个函数.

这里隐含的一个条件是其他人的实现跟预期也是一致的.
即delta_i(return) = 0.
也即Fact_i(return) = E_i(return).

所以,实际上这个bias function其实是跟其他人的预期有关的一个函数
g(bias) = \sum h(Fact_i(return)) = \sum h(E_i(return))

重新rewrite一下ROI函数的话,就有
E(return) = f(investment) + g(bias)
->
E(return) = f(investment) + \sum h(E_i(return))

另外,
Fact(return) = f(investment) + H(environment)
->
Fact(return) = f(investment) + \sum h(Fact_i(return))


delta(return) = E(return) - Fact(return)
->
delta(return) = (f(investment) + \sum h(E_i(return))) - (f(investment) + \sum h(Fact_i(return)))
->
delta(return) = \sum (h(E_i(return)) - h(Fact_i(return)))

也就是说,个体决策的结果偏差是一个跟其他人的预期E_i和实际结果Fact_i有关的一个函数.
也就是形式上的
delta(return) = F(E_i,Fact_i).

那么问题就来了.

最初的假设是一个人可以forecast所有事情.
也就是说,对于某个时间点,Fact_i是通过forecast已知确定的.

而同时,E_i这个跟各个单独个体相关的预期函数可能不知道.
但基于个人预期是确定的这一假设,其值应该是固定的.

那么,也就是说
delta(return) = F(E_i,Fact_i)
在forecast的时候是已经确定了的.

换个角度来说,就是即使能够forecast,那么也无法改变什么.
因为delta(return)是一个跟自身无关的函数.

也就是说,即使你全知全能,但也无法改变什么.

当然,这里基于的一个假设是E_i是确定不变的.
或者说一个与forecast的个体无关的函数.

所以,如果E_i是一个跟forecast个体有关的函数呢?

重新考虑
delta(return) = F(E_i,Fact_i).

对于一个特定的forecast,Fact_i可以认为是一个常数项.
把它eliminate掉,就有:
delta(return) = G(E_i)

如果E_i是一个与forecast个体的某要素x有关的函数的话.
则有
delta(return) = G(E_i) = G(y(x)) = Y(x)

也就是说,如果一个人在能forecast所有事情的前提下,并且能够依此满足自己的任何需求的话.
那么,对于这个人,存在一个要素x,使得这个要素x能够影响其他人的先期预期.
使得通过其他人先期预期的调整,造成环境因素的contribution的变化,以转化为bias function的效用.

然而,如果这个成立的话.
那么就说明两点,
一是其他人的预期/决策模型/模式的改变不会改变任何forecast的事实,也就是说其他人的"主观能动性"是零.
二是做forecast的个体,可以在不改变其他结果的情况下,通过某种要素x实现对个人愿望结果的偏差操纵.

而这两点是互相矛盾的.
在基于个体都是平等的前提下.

当然如果这个个体是一个系统外的超越性存在的话,就另当别论了.

既然这两点是矛盾的.
那么对于给定的描述:

"如果一个人在能forecast所有事情的前提下,并且能够依此满足自己的任何需求的话.那么,对于这个人,存在一个要素x,使得这个要素x能够影响其他人的先期预期."

就是不存在逻辑关联性的.

也就是说,对于命题:
存在一个要素x,这个要素满足能够影响别人的先期预期.
是不成立的.

也即
delta(return) = Y(x)
是并不reasonable的.

所以结论回退到:
delta(return) = F(E_i,Fact_i)

即,即使能够forecast所有事情的发生,那么也无法操作自己的期望结果与实际事实的偏差.

即使E_i是一个random variable,但也是一个与forecast个体无关的函数.

也就是说,即使能够预知未来,但也无法确切地改变什么.

所谓事实.













2015-08-31

原则问题

以下大概还是一些笑话.

本来打算三不管了的证金忽然又借钱打算入市了.
这个一开始觉得略匪夷所思.

毕竟,这个是被事实证明了于市场和预期均无效的方法.

上周的几件事.

一个是双降.
直接结果自然是利率的降低和流动性的增加.

考虑到最近几天央行还有比较频繁的SLO.
那么一个直接的观察结果就是央行主要是释放流动性.

目的呢?

思考广一下.
证金从银行再借款卷土重来.

假设数额上跟以上两个流动性手段有一定吻合.
那么,综合的结果就是实际上并没有对实际流通造成实际上的影响.

因为这笔钱实际上通过银行转到证金的手上.
而并没有经过传统的诸如普通贷款等流向常规的流通领域.

于是,剩下的实际影响就只有利率的降低.
特别的是贷款利率的降低.

所以,某种程度上来说,这是一个空手套白狼的降息手段.

降息的目的自然是常规的促进企业负债和融资成本的降低,促进实体经济.

第二个是养老金入市的消息.

一个普遍的玩笑话就是,等什么时候养老金入市了,就是A股阶段性底部的时候,毕竟没人能占国家的便宜.

抛开这个段子,不管具体以及以什么样的方式节奏进入市场,至少,从长期来看是补充了一定的市场活跃度的.

毕竟,现在的A股波动性过大的一个因素是交易不够活跃和多样化.

伴随这个的就是连续几天的沪港通资金北上"抄底"的行为.

这个一方面可以理解为对人民币升值的投机和避险行为.
另一个方面也至少说明,A股的不确定风险较至于汇率变化风险来说,要相对平稳地多,或者预期要好.
不然就没有避险和投机的余地了.

对于现在的市场而言,一方面是包括证金和养老金在内的政策性资金.
一方面是避险和投机的外部资金.

考虑一个老问题.
国企改革,或者更general的,企业融资渠道/方式的问题.

原则上来说,通过市场化渠道募集资金是相对有效益和容易得到正反馈的一种方式.
毕竟,无论如何,交易代表着某种程度的认可.

但就目前的状况而言,市场总体是向下的,而且总体情绪算不上乐观.
完全的市场化行为很难让理想中的改革方式得到展开.

这一点,也是第一阶段救市的原因.

考虑到上周的另外一个事是证金和中信的利益输送的问题.
权且把第一阶段救市失败的原因归咎于人性的话.

那么,实际上来说,方案可能并没有错.
只是执行上面出了问题.

那么二次救市,恢复市场信心也不是不可预期.

考虑到前次完全市场化操作带来的道德风险问题,所以这次以限制期货交易等管制手段的姿态重回也不是不能理解.

然后考虑到市场并不太可能因为这些就马上恢复活跃度和繁荣.
甚至于基于之前的经验可能只会做适度投机,并不会如原预期般地让企业融资市场改革顺利展开.

所以,在一个萎缩市场的预期下,如何推进资本改革呢?

从二级市场投入,换个角度理解为间接注资的话,在不理想的情况下,也勉强能相当于之前以各种方式直接国资注资的方式.
所以,政策性资金在二级市场的操作,从一般情况下来说,并不是一个比现有策略差的选择.

好的情况自然是市场恢复,如预期般地展开资本改革.

坏的情况是市场继续恶化.

那么如何尽量减少最坏情况下的损失呢?

考虑政策性资金在市场的操作是对企业直接的类似股权置换的行为.
也即是说,以企业持股置换国资.
某种形式上的变现行为.

而作为变现行为考虑的话,则存在一个套利方式就是股价的差额部分.
也就是说,存在企业以一个相对较低水平的价格回购/持有自身股份,然后再以一个较高的价格置换国资.

即是某种形式上,在市场不理想的情况下,还有一定的概率是可以杠杆一部分资金的.

这样的话,从总体上来说,总的投资期望就有可能规避掉市场不理想状况下的损失.

也就是说,最坏的情况下,可以通过鼓励企业以某个相对低的价格来以某种远期套保的方式.

或者说,是得到了某种形式的无偿贷款,然后由政策性资金在未来的某个时期择机兑现风险.
而由于这个资金的性质是国家侧面的,也就是投资周期可以认为是无限的,按年限展开一下的话,风险系数可以降到很低.

所以,实际上来说,如果执行上没有什么偏差的话,这是某种万全之策.

那么对于在市场内的这部分政策性资金而言,盈利或亏损其实并不是关心的主要问题.
因为目的不在于常规的市场内套利,而是带有市场化操作的政策性扶持.
所以,对市场本身的影响,从长远看应该是中立的.

对于具体企业来说,则是跟不跟的问题了.

市场内的另一部分外部的套利和避险资金而言呢?

短期内套利和避险的目的主要是人民币的汇率波动.
所以,如果这个波动风险不存在了或者预期改变,那么就这方面而言,也就没有继续留存的必要.
加上,另一方面还需要考虑在A股侧的波动利差是否还成立.

这样的话,一般的思路应该就是合理的分级获利了结,以及市场向下时的推波助澜了.

所以,本质上来说,不过是各方各自的既有逻辑的延续而已.
原本做什么的继续做什么.

所谓原则问题.







2015-08-25

空谈

以下大概是一些笑话.
毕竟只是个连基本经济金融素质都没有的前互联网工程师的一些联想.

从今年5,6月开始,A股市场开始清查两融.
原因大概是过高的杠杆率已经使得原本就不健康理性的市场变得更加不稳定.

当时普遍的一个预期是市场迎来一个长期向上的趋势.
不管这个趋势是冠以什么名号,毕竟沪深从来不缺乏概念创新.

所以在这样一个普遍的预期下,自然会吸引资金关注.
加上从去年开始的创业板在各种概念催动下,动则翻倍的行情,乐观情绪驱使下自然众人拾柴火焰高.

那么,在这样一个和谐氛围中,动用正规非正规的杠杆最大化收益就是非常自然而然的想法.
毕竟市场的预期使得风险偏好会偏向积极.

加上实体经济不算景气,于是进入市场的资金构成就更复杂一些了.
从部分公司的季报年报里可以看出,有相当部分的业绩增长来自于金融资产的增值.

所以这里过于乐观的情绪带来的第一个问题就是社会资产结构的配置出现的病态.
本应该流向实体的也进入了金融领域,不能变成实际的增长环节.

随之而来的问题就是,既然繁荣的市场是由于不断的资金注入造就的,而非正常的双向交易促成.
那么很明显的一个问题就是,当资金断流的时候,这就变成了实际上的击鼓传花.

所以,即使没有清查两融造成的抛售,迟早也会因为没有后续资金的进入而崩盘.
而且到时是因为社会总体资金的流动性匮乏造成的崩盘,连带的效果可能更绝望.

从这个角度来说,清查本身倒是个长痛不如短痛的措施.

既然这个做法是正确的,那么为何还要救世呢?

因为市场的初始预期和乐观点是国企改革.
也即是预期市场化资本操作国企一个改革尝试.

隐含的意思就是,如果市场崩溃了.
那么这个改革尝试即使不算失败,也是没有意义了.

所以救市的目的是稳定市场.
而刚好由于大批国企参与了指数成分构成.
所以某种程度上来说,一个简单直接的方案就是指数维稳.

一个本来皆大欢喜的局面就是接受招安,共同维护市场繁荣的初衷.

但是作为腰斩的投机资金部分,考虑的是如何尽可能地减少损失.
其策略还是会走比较积极的杠杆路线.

这便是矛盾和冲突点.

尽管后来双方有一定的利益契合点.
但由于救市资金有限,且有各种操作上规约约束,到后面已经是有些无能为力了.

而且原则上来说,继续救市也并不一定能把市场情绪带回市场化改革的路线上.

所以后面如果放弃任由指数下跌到稳定点也是合情合理的.
毕竟,一个改革失败,至少比整个经济系统紊乱更划得来.

然而,一个新问题是救市资金的缺口.

这部分是由央行提供担保的.
也就是是,如果不能够及时回收,那么就相当于基础货币的投放.
通货的增加就意味着一定时期内通胀可能性的增大.

而央行的一般职责就是控制通货膨胀率.

所以这个问题怎么解决呢.

最近央行的一个措施是人民币的主动贬值.

一方面,这个可以看作是人民币汇率市场化的一个尝试.
另一方面,如果跟救市的资金缺口结合在一起考虑呢?

由于人民币的特殊性,以及流向境外的渠道的多样性,近年来离岸人民币的数量大致是增长比较快的.

因为各种不明的流出渠道,以及大量境外游带来的离散人民币交易,所以离岸人民币的回流一直是个问题.
毕竟进出口也大多不是人民币结算,金融渠道也有着各种限制.

一方面央行需要把这部分没有什么流动性的人民币纳入到基础货币的考量当中,调整国内市场的货币流通量.
这个造成的一个结果就是因为流动性缺失造成的额外通胀压力.
因为实际上就数量来说可能是足够的,但由于缺乏流动性,所以需要额外的部分补充这部分死货币.

另一方面,因为要维护对美元的汇率,所以对于这部分人民币就需要持有/买入"等值"的"美元"以维护比较稳定的国际汇率.

所以离岸人民币的回流问题造成的结果就是持有的美国国债越来越多,国内发钞也越来越多.

那么,现在人民币主动贬值的影响呢?

一个直接的市场反应就是通过离岸市场,由央行主动购买抛售的离岸人民币.
这样就间接地实现了回流,以及汇率的市场化试探.

这样的话,至少回流的人民币可以补充救市资金带来的发钞压力.

代价是暂时性的人民币贬值.

而实际上,如果把主动贬值前的汇率价格看作是实际稳定价值的话.
那么长期来来看,美元应该也跟着贬值以维持原有的汇率关系.

连带的就是在人民币贬值带来的对国际贸易的影响,以及美元跟随贬值的压力预期.

于是,再看近期周边经济的动荡,和美国市场的情绪.
其实也不是很难理解.

这样话,央行的主动贬值,至少从这个侧面来看的话,是一箭双雕的策略.

那么,如果这个思路是对的.
也就是说存在一个人民币跟美元汇率回升的预期的话,资金会流向人民币资产和渠道也不是不能理解.

当然,其实并不清楚玩法规则,也没有数据.
所谓空谈.

2015-08-22

关于Polymer的一点琐事

最近又把某Chrome扩展翻出来重写了一下.

原因大概一是依赖的某Polymer也到底1.0版本了,该切换下了.
二来,也是原来Proxy逻辑部分的kernel的有些华而不实的地方,用了比较多functional的形式写法.

其实早前也有过这个打算的.
当时Polymer的版本还是0.5吧.
简单bower了下,然后发现有些component的行为改了.

主要是当时用了个core-list吧.
最初的版本是不要求parent元素有height的,后来的版本要求了,于是一些地方就broken了.

然后简单翻了下,要fix的话,最简单的就是做个height限定.
不过这个终究不算是一个优雅的解决方法,毕竟分辨率这个是不定因素.
于是也就算了.

当时觉得这个改动还是挺儿戏的.
毕竟作为一个公共library,随意改行为终究不算什么太有原则的事情.

后来,当再npm update一下的时候,就觉得,这些其实不算什么.
毕竟,比起Node社区的某些工具链来说,至少core-list还保持了接口不变.

再后来,就是Polymer的1.x版本了.
也算正式版了.

看了下,基本上改动还是比较大的.
至少core-*的component基本上都改叫iron-*了.

倒是衍生的material design的paper-* component名字没怎么变.
虽然说实现也是基本改了.

毕竟,跟0.5甚至0.x时代来说,整个项目和某些哲学上的变化还是挺大的.

最明显的就是webcompoment这个东西算是独立出来了.

毕竟,当初还算是比较初级的阶段,浏览器支持不多.
基本是polyfill而非native的支持.

现在shadow dom基本算是常识了.
于是虽然保留了polyfill的部分,但至少从项目结构上来说,webcomponent不再是Polymer独有的东西.

对应的某些Polymer的某些template的语法变更了.
比如原来的custom-element改叫dom-module了.
template的functional的registration也由原来的Polymer(name,config)改为没那么多余的Polymer({is:name})了.

不过一个比较重要的改变应该是对templates的data binding部分吧.

开始的版本是可以随意bind对应model的某个attribute的,现在倒是限定了只能bind properties下面的东西.
而且在property的定义是一种显示的声明,得提供binding的一些行为和本身的类型之类的.

相对来说,这个改动使得binding的灵活性大为降低.
但原则上来说,倒是比较符合webcomponent的隔离哲学的.

毕竟,如果以component的思维和角度去看待这些templates的话,这种黑盒思路还是很有必要的.
不然的话,由于javascript本身语言比较随意,所以hack也能比较随意,带来的结果自然是component行为预期的不确定性了.

另外一个比较明显的改变是貌似取消了component的extends方式.
也就是说,component是没有父子继承关系了.

这点也不难理解,终究是黑盒的思路.
所以,要关掉一些可能更改行为的可能.

代价当然是灵活和所谓的复用性.

而所谓的"灵活"也只是特定条件下的术语.
毕竟,不能extends还能composite嘛.
所以并不算是一个实际的牺牲.

而复用性,在UI方面的话,composite就是解决方案.
有待解决的只是一些功能性的东西.

所以,这里就是behavior的mixin思路了.

这点其实是有些类似go之类语言的fucntion set的概念的.

实际上,这种设计很多地方确实就叫behavior.

就像某句著名的话.
"程序就是数据结构和算法".

其他一些改动就是对inline expression的evaluation.
这个也是比之前的较为严格了.
不再各种操作符.

原则上就是直接的property的direct mapping.
no more magic.

当然,也不是说现在的Polymer就是完全不能做hack做侵入的.

最简单的就是event/listener机制.
结合behavior的话,还是能够模拟一套能让外部侵入现有component,改变其行为的方法的.

只不过得考虑下怎么处理event driven的状态机而已.

还有一点改进是web-animation的部分.

之前的paper-* component系列的animation部分也是用这个重写了的.
特效部分也拆分为独立的neon-animation了.
也是顺应时代进步了的一个改动吧.

不过大体看了下,基本就是css3的transform的一些应用吧.

毕竟说到底material design的一个思路还是"平面UI立体交互吧".
所谓的paper和ink的关系.

所以基本上来说,paper也就是静态展示的部分基本上就是Google一贯风格的简约加上从微软metro吸收过来的视觉分块思路.

至于ink的动态部分.
一方面是分为UI状态变化.
一方面是用户交互的反馈.

前者的状态变化比较突出的就是hero这种联动的视觉块大小变化效果了.
通过变化做某种直觉引导的作用.

后者典型的就是ripple效果.

原则上来说,ripple类的效果也是做直觉引导的.
不过侧重点在于告诉用户交互已经发生.
而不是交互的变化结果.

这点大概就是material design为什么要用paper和ink来描述的原因了.
paper是书写/painting的效果/结果,ink是书写painting的动作及反馈.

所以Polymer的其中一个价值,至少是比较方便地自带material design的东西,可以直接用.
尤其考虑一些paper-style里的配色方案typography的话.

当然,除了这些算是比较好的点之外,1.x的Polymer用起来也还是有些地方比较tricky的.

不过,应该多数有two-way databing的都有这个问题.
即使bind的value update和paint的时间差的问题.

具体到Polymer来说,data change的observer的diff是在一个microtask或者说一个tick的最后,从一个pending的queue里取出来执行的.
因为Polymer实际上来说,还是以原则上300ms做一次check和update的.

所以,在每个300ms的time slice之后,是pop一些async/debounce的东西出来执行.
而pop的源里面其实至少包含了一个是data diff/change的处理,以及对应的dom modify.

所以,这里一个可能的案例就是,bind了一个array,然后array增加或者删除了元素.
然后,直觉上,应该是对应的dom节点应该也在这个function invoke的处理context/现场变更了.

而实际上是没有.

因为对dom的修改是在这个context之后.
更确切地说是在当前tick的microtask的lifecycle的最后才发生.

因此,该context的内容还是原来的.

要怎么解决呢?

一个解决方法就是去hack这个pending的queue.

假设实现不变的话,那么这里就只有一个queue.
而且dom changed应该是在queue的比较靠前的部分.

于是,既然有一个确定的position了,那么剩下的问题就是hack的点是需要在dom change前还是change后了.
对应的就是是在处理queue之前还是push到queue后面的地方.

当然,这算不上一个完美的解决方案.

毕竟这个依赖于Polymer的实现.

就像最近Go 1.5的某个更改一样.
原来的goroutine的scheudle的顺序是可估计的.
1.5之后,这个assumption不存在了,那自然要broken依赖于这个的很多东西.

不过无论怎么改,都解决不了实际上的bind value change和dom change是两个操作的事实,而不是一个atomic operraion.
除非就是什么时候浏览器暴露一个atomic的render hook了.

不过即使有,底层估计也还是会做一些batch或者类似tick的东西.

毕竟,这个世界很多时候其实是离散的.
instant是个很理想化的东西.

所以很多时候,很多东西其实是按照某种tick来计划安排的.
如人的秒.
如distributed system的versioning.

剩下的kernel方面的改动,其实多数是一些map/reduce/foreach等当时觉得好玩的写法的该写.

虽然这种functional的写法看起来可能阅读效果不错.
但实际上可能做的事情比较多余.
有些可以fast path的地方变得不太方便.

就像前段时间写Java 9的stram和lambda.
能用stream的地方就用stream,能写lambda就写lambda.
甚至还考虑写个基于Yarn的stream实现,写个基于socket的classloader基本就是分布式计算了.

不过后来想想,其实是种拿到新玩具的炫技心理吧.
有了新锤子,看什么都是钉子.

所谓的喜新厌旧.






2015-08-03

销售为王

早上,或者说中午过马路的时候,顺手收了张传单.
然后冒出一个问题.

怎么去追踪这些传单的转化率,或者说评估效果呢?

像互联网上的话,追踪手段其实很多.
但是这种线下的方式的话,如果按照线上的思维思考的话,可能不太容易.

对于传单本身来说,不像线上可以对访问者/接受者做各种annotation.
也很难从其他地方infer出一个人的identity.

所以,依照常理来想的话,貌似是个很难解决的问题.

但有人提到了一点,传单上的返点/优惠券.

作为一个promotion,最根本的目的还是提高营收.
或者说提高转化率.

所以这里要追踪效果其实很简单,统计下使用情况就可以了.

而且衍生的计算边际效益/成本等问题也就自然而然了.

于是,到这里发觉自己的想法还是比较幼稚的.
或者说不切实际.
没有根据实际的商家情况却考虑估计的问题.

开始的思路是把宣传的"收益期"过度扩展了.
纳入了诸如接受了传单,但是没有在当期宣传期转化,而是在以后被转化成店里客人的情况.

即是考虑宣传的目的是"知名度"/"流量标的"这种可能不太适合的思路.

毕竟,在一个以浮夸著称的互联网行业待久了,视野总是被类似"流量为王"/"用户基数"这种东西所困惑.

对于实际的商家这种程度的scale来说,关注的点可能是实际的营收波动变化,而不是这种long term和huge scale的问题.
所谓小本经营.

所以,回过头来看派发传单这种行为的话,其实它关心的并不是转化率之类的问题.
而是实际的销售提升.

或者说,"打折促销"这个词语组合的本质目的在于后者的 促销.

因此,评估这种行为的工具就不需要是追踪或者可追溯性,而是直接的绩效或者KPI指导.

也就是,这是一个可以直接量化观测的东西,就没必要做一些准量化的时期,去曲折地观测结果了.

某种程度上来说,这种把简单问题复杂的化的原因还是在于个人的局限性上面.
就像经常用来嘲笑工程师的那句话一样,手里拿着锤子就看什么都是钉子.

对于一个普通的小店铺商家来说,只需要评估传单带来的边际营收效果即可了.
不用考虑那么多.

那么,如果换个角度.
给定一定数量的传单,如何最大化营收效果的提升的?

比如不同地段派发效果带来的转化率.
如果存在区别的话,那么如何均衡分配才能最大化收益呢?

如果是常规思路,自然是不同传单,然后通过不同的样式来区分转化来源了.

但是,这对于商家来说其实是不太现实的.
毕竟不同样式也就因为这一定的印刷成本增加.

而且小规模的来说,即使提升了,最终的效果可能还cover不掉增加的成本.

所以,一个能想到的办法就是分期不同地点派发.
这样实际上就是把一个稳定可预测的收入方程拆分成一个加权的线性组合收入.

把区分转化率的"投入成本"变做概率性风险散落到各个地点的转化系数/权重上面了而已.

于是,这里其实可以看出为什么线上思维不符合线下思路了.

本质上来说,线上的追踪成本某种程度上来说很低廉.
所以很容易多样化.
而且通常来说,追踪的周期理论上是无限延长的.

但是线下不同.
线下要考虑一定的投入成本以及时效性.

线下的促销本质决定了它关注的周期很短.
而线上可能更关注的是engagement.

如果考虑大型线下连锁的呢?

其实没什么太多变化.

因为区域性决定,效果和观测方法都不会有太大的不同.
只不过从连锁规模的角度看的话,需要一级级往上汇总区分.

所以,拆开来看的话,不过是简单的层别关系而已.

然后考虑网上销售/零售的方面.
或者说电商的促销广告.

某种程度上来说,电商的促销目的也是为了提升销售额.
所以,原则上来说,对于来源追踪并不需要太关心.

把广告成本也考虑进来的话呢?

其实就是类似线下的地区转化率区别.
这个依赖的是前期数据.

所以,电商在这一块跟线下的策略其实是没什么区别的.
甚至在成本控制和收益目标方面,也是没什么差别的.

电商有限的优势之一在于点对点的物流.
而随着目前电商的自提以及线下已有的就近送货来说,能拉开的空间其实不太多了.

当然,C2C是另外一回事.

但是C2C的处境可能更尴尬.

因为客户分布地理上和网络上都可能更稀疏,于是带来的就是通过优化"投放"的可能收效微乎其微.
尤其是在一些平台型的地方.

而对于像Tmall之类的大中型C来说,其实已经是某种程度的B2C了.
这个跟线下的区别只是"销售地点"的不同.

就如同一家线下零售提供了一个在线订单的服务一样.
本质上来说,还是线下的那套成本/利润模式.

因为最终关注点都是销售.

所以,抛开C2C的部分.
所谓电商,只不过是一家开在互联网的分店而已.
游戏规则和侧重点并没有太多的不同.

于是,把互联网其他地方的玩法搬过来用,其实就显得有些无谓和多余了.

毕竟,这是销售为王的地方.

2015-07-27

烟花易冷

null是种很奇怪的东西.

本身指的是不应该存在的,但自身却又实实在在地存在着.
不同的null和null之间,也并没有什么可比性.

所以,既然它代表的是一种空虚,一种无意义或者说意义不明的状态.
那么,为什么会有这种需要的场景呢.

也就是说,为什么需要去描述一些意义不明,不存在,或者毫无意义的东西呢?

为什么一个概念,对应着会有一个与之相反的概念.

如果,逻辑代数里没有 否 这个操作.
那么这个体系就不存在了吧.
毕竟,二元才存在这转化/变化.
一元本身是确定的,也就无所谓代数了.

所以,概念之所以为概念,是因为它有区别与"其他"的地方.
而这一点隐含的假设就是至少存在着一个对立面,使之有区别度.
或者说能区分出状态的变化.

所谓差别.

从这个角度上来说,"区别"本身不算一种独特有意义的存在.
只是一种现象级的东西.

基于A和B的各自独特性,才在此基础上衍生出"不同"这种概念.

所以,"不同"在脱离特定的比较环境之后,是没有什么具体意义的.

也就是说,一个东西A的,其对应的反面B的存在的意义跟A本身是没有什么关系的.
因为同时存在了A和B,而A和B有着各自的特质,于是才衍生出了"不同"/"反面"这种概念.

对于一个能名之的某物,如果要探寻它存在的价值,则试图从它对立面去寻找的话,多数是无关的.
因其两者间并没有直接的因果关系.

而一个名物之所以存在,是因为它本来就存在.
只不过由于需要有一种方式去称呼它,所以有了字面意义上的存在.

所以,原则上来说,某物的"存在"只是因为意识到了它的存在,所以某物存在了.

当完全没有某种东西的概念的时候,这种东西某种程度上来说就是不存在的.
因为不可描述,无从描述.

于是,某种程度上来说,"存在价值"的意义只不过是处于某种需要"描述"的动机才"存在的".

如果不去观测/衡量一个问题,那么问题本身就是不"存在"的.
如果没有意识到"问题",那么又何来问题呢.

于是,null的存在只是因为它是一种被观测/意识到的一个问题,所以被描述了出来.
所以便有了"存在价值"了.

那么,它为什么会被意识到呢.
或者说描述的基本动机是什么.

"描述"的本质在于,明确状态之间存在差别.

null之所以会被意识到,是因为它被感知为一种不同于已有概念的状态.
是一种新的未被描述所定义的状态.

所以,某种程度上来说,如果没有经历过这种状态,也就不需要描述和定义.

因此,null的存在是因为它是一个确实发生/经历过的,无法用已有描述定义的一个东西.

所谓烟花易冷.

2015-07-16

一个称不上新的想法

算是今晚早些时候的一个想法吧.
关于书籍二手交换的.

一般来说,跳蚤市场或者说二手市场的旧物交换都是直接的交换.
所谓直接交换就是,一方所需的正是另一方所能提供的.

但是总体来说的话,这种交易能成立的几率相对较小.
毕竟并不是所有人都能达成这种直接交易.

从进一步的整体市场角度来考虑的话,其实还是有促成交易的优化空间的.
考虑这样一个场景.

甲持有物品A,意欲换物品B.
乙持有物品B,意欲换物品C.
丙持有物品C,意欲换物品A.

这里明显的是存在一个环状交易结构能满足所有人的交易需求的.

但是对于基于直接交易的模式来说,这种本来能够促成的交易其实是不可解的.
因为交易局限在直接匹配的双方之间.

即是说,两种交易结构的区别在于,市场在撮合的过程中,考虑的参与者的多寡问题.

所以,如果把所有交易者纳入到一个交易需求当中的话,就有能够尽量地最大化实际成功的交易比数.
这就有点像金融市场里的做市商.
实际上,是承担流动性提供者的这一个角色.

或者通俗点说,存在一个名为市场的掮客,通过制造一些流动性促成了原本并不能成立的交易.
也就是一个事实上的撮合系统.

通过把每个交易标的物/欲交换的物品看作是一个有向图的节点node N.
对于一个参与者想要用N1交换N2的话,即是在有向图中存在一个从N1指向N2的edge.

于是,整个交易的"意图市场"/intention就是由这些node换个edge构成的有向图.
而促成交易的方式就是尽可能地把图中的闭环剥离出来.

因为闭环实际上就等价于上面提到的ABC类型流动性提供支持的环状交易.

对于直接交换模式的交易来说,实际上就是环状交易的一个特例而已.
参与者节点只有两个的情况.

因此,本质上来说,这个撮合交易的方式并不复杂.
只不过具体到实践上的话,utility function的选择可能涉及到不同的maximize策略.
毕竟,但就闭环的选择来说,就存在是最大化链路长度,还是最大化全局促成的交易数,这也是个抉择.

然后是about the business.

具体到二手交换这个范畴来说,因为不同的标的物存在不同的价值/价格.
那么在具体的实现上面的话,就存在着两种选择.

一种是ignore不同标的的价格区别.无视不同物品的价值差异.
这样带来的好处就是简化的撮合模型.

当然问题也很明显.
一个明显的cheating的方式就是高价物换低价物.
虽然从市场平衡的角度来说,应该都还是围绕等价交换或者近似等价交换来进行.

但是不管这样,都存在一种方式让系统产生过多的无效撮合,产生不必要的交易噪声影响撮合效率.
因为从机制上是系统可以给出撮合建议,但是用户会无视这种不平等的交换.
而过多的这种无效撮合必然地影响着撮合系统的效率和可用度.

而且从概率上来说,也因为各种原因实际产生了不平等的的交换的事情.
这个对于系统还是被损失方来说,都不能算是一件好事.

第二种是respect不同标的的价格区别.
这个是能够解决不等价交换的问题.
但随之而来的问题是,从一定程度上来说降低了环状交易的发现概率.

因为存在价格区间/匹配度的差异,相当于过滤掉了一些本该存在的edge,改变了图的拓扑结构.

一个解决办法是引入 信用代币 补充因为价格差距产生的流动性缺失.
比如,甲 用 价值10的物品A 换 乙 的价值100的物品B.
系统在促成这比交易的时候,对甲乙做个会计处理.

计甲,
借:100的物品B
贷:10的物品A + 90的信用代币

计乙,
借:10的物品A + 90的信用代币
贷:100的物品B

在这种理想情况下,整个资产负债表是平衡的.

但这里存在另外一个问题.
这个信用代币到底是什么,或者说如何产生.

如果把它设计成系统"赠予"的类似一些游戏经济系统里的货币的话.
从长远来看,这种信用代币的实际价值是趋向于零的.
即使实质上是把交易推回到不等价交换.

因为无论信用代币的产生是以时间作为参考因素还是以其他用户行为作为增减标准,都同样存在这个问题.
关键点在于,无法把用户行为直接变现/等价为对应的货币价值.

考虑把系统引入作为流动性的负债方,即

计甲,
借:100的物品B
贷:10的物品A

计乙,
借:10的物品A
贷:100的物品B

计系统,
借:乙的90的信用代币的溢价抵押
贷:甲的90的信用代币的折价债务

这样的话,把系统作为risk taker加入进来的话,整个资产负债表也还是平衡的.
而且这里的信用代币跟货币价值是直接挂钩的.

这样是不是就没问题了呢?

考虑系统对甲的90代币的折价负债.
如果甲最后"违约",没有后续的正向交易以间接通过系统平掉这90的债务的话,那么就相当于系统多了90的不良负债.
因为甲"违约"的同时,还必须保证对乙90的信用代币的溢价/抵押赎回支持,整个系统的负债表变为:

计乙,
借:10的物品A
贷:100的物品B

计系统,
借:乙的90的信用代币的溢价抵押
贷:甲的90的信用代币的折价债务

也就是总体增加了90的货币债务.

所以这种方式的风险实际上是类似甲的信用交易的违约行为.

如果完全杜绝这种负债交易的话,实际上也还是退回到等价交换的模式.
因为如果不允许信用透支的话,是促成不了这种非等价交换的.

所以,要么通过一些行为模式给予一定的信用透支额度,尽量把系统坏账风险降低.
要么就是让用户提供足够的"保证金"避免信用透支的产生.

如果采用"保证金"方式的话,信用代币的模式实际上等价于一个折扣价格购买标的的形式.
也就是说,对于拥有溢价抵押的一方来说,有点类似于传统销售模式里的卖方,通过销售得到了一笔收入.

那么,进一步地,提供信用代币和货币直接兑换的话,实际上就是一个物品销售平台.
只不过销售的方式是经过系统撮合促成的交易.

更进一步的话,如果把整个市场的"买方"情况暴露出来,提供给卖方.
那么卖方就有能力像做高频交易一样,"主动"利用撮合系统促成交易,完成销售.
同时,也存在一个利用不对称信息做交易的间隙,使得做市商能够通过"优化"交易配对,赚取差价利润.

一旦市场买卖信息是可获取的,那么类似各种金融衍生品的玩法都可以复制过来了.

退回来说的话,这么一种交换撮合系统,实际上就是一般的二手买卖市场.

在刨除了金融交易系统的一些特质之后,只不过是一种存在以物换物的特例的零货币/现金交易的特例的形式而已.
实际上,如果考虑让系统承担一定的信用透支风险的话,其实就类似现在电商的各种白条/信用产品了.

再考虑一下现有电商环境下的各种比价工具,实际上也算某种撮合系统的原始形式.
只不过不算高效且只是单向撮合而已,卖家没有对应的反馈信息以做可能的相应调整.

所以,这是一个称不上新的想法.



2015-04-26

哀莫大于心死

有时候觉得所谓父母对于我来说只是个纯粹意义的义务而已了.
所谓的亲情意义上的家,已经不是回得去回不去的问题了.
而是还存在不存在的问题.

去年裸辞待业那段时间,为了削减开支回了趟家.
后来在没找到工作的前提下,又滚回了深圳.

对外我可以说是为了方便找工作什么的.
但实际原因只有自己知道.

开始的几天还能得到安慰,说凡事慢慢来.
但不久便是无休止的埋怨.

这些我也能理解.
毕竟,决定是我做的.
长时间找不到工作无业也是事实.
我没理由反驳.

某天,所谓父亲说了一句
"你这样每天无所事事,有意义么".

然后我看了看眼前这个还在50几岁就辞掉一份清闲工作在家赋闲的人.
默默起身回了自己的房间.

"无所事事".

流完该流的泪,出房间跟母亲说.
"明天回深圳".
"不多待几天么,外面开销那么大,找到了再出去嘛".
"明天回深圳".

虽然我对他没什么感情.
毕竟从小到大他多数时间都在外地工作.
但当时的我不确定还有多少空间去承受这种额外的歧视压力.
况且,某种程度上来说,他说地也没错.

回到深圳日子也并没有太多的改变.
依然是漫无止境的等待,以及无休止地心里调整.

某天跟所谓母亲通电话,情绪没控制住说了句:"不就是我现在没钱给你们么".

刚说出口的时候,我有点后悔.
毕竟这句话挺伤人的.

"对啊.你要有工作就有钱了".

于是我觉得没什么好说的了.

有些地方我已经回不去了.
或者说没有必要回去了.

从那天起,我想了很多事情.

从小到大,他们在我生活里到底算什么角色?

小时候,一个在外地工作不在家.
一个上班之后还继续打牌.

于是,经常就是一个人饿着肚子,从家走到她公司,喊她回家,不回应.
再回家,再到她公司,喊她.
如此反复.
然后最终得到的是一句对小孩说:"加班".

学生时期,是他们在楼下打牌,我在楼上学习.
要想入睡的话,还得等到他们消停散伙.

有时候我会想.
除了养大我之外,他们给过什么么?

这么多年来,什么事情都是自己一个人默默吞下,默默承受.
他们也觉得一切一帆风顺,挺好的.

后来,也许他们觉得我走得太远太自由了,想拉回来,控制住.
我只能说抱歉了.

我承认我是个冷血无情的人.

他们现在对于我来说只是某种程度上的债权人.
生老病死之后,走完过场大概就两清了.

某种程度上来说,是他们那两句话让我看清了很多东西.

所谓哀莫大于心死.

2015-03-30

所谓小国寡民

某天在小区电梯间,闲着没事就开始浏览周围的广告.
于是忽然发觉,其实这些平面广告挺有针对性的.

印象中之前是一些针对老年人的优惠,现在是一些补习班和小升中之类的.

想想,其实这个很理所当然,毕竟广告的投放还是要考虑受众以及覆盖面和回报的.

但换个思路看待的话,投放广告的行为,是某种主动的的对特定特征人群的筛选行为.
也就是说,是一种现有目的,再找受众的过程.

那么,反过来,如果已有受众,再找目的呢?

对于一个居住小区来说,由于价格因素,大致可以人物居住人群有着相似的资产水平.
再考虑到平均收入范围以及小区附属的交通属性的话,应该可以认为有着类似的年龄和工作年限背景.
至少从经济实力和收入水平上来说,应该不会有太大的差异.

于是,这里就有了一群相似收入和支出结构的人群存在.
且比较重要的一点是有着相似的年龄和家庭组成结构.

这也就因为着在人生的一些共同路径,诸如婚丧生老病死上面,有着隐含的类似的现期和预期需求.

这一点的话,观察下一些小区的配套商圈也可以看得出来.

毕竟,作为商铺来说,首要的目的是寻找可供挖掘的消费人群.

如果把时间范围拉长一点看的话,理论上作为配套商圈的商铺经营内容应该也会随着变化.
在假定居住人口变动不大的情况下,人口年龄结构便会相应地重心往后推移变化,从而对消费的需求变化产生方向性的影响.
从而使得供需结构产生变化,对商户结构就行重新的编排.

也即是所谓的"老龄化"或者年龄的整体结构性变化产生的经济影响.

那么从个体的角度来看,如果把整个居住环境作为一个统一的服务提供者来看待的话,则是类似一个终身服务的概念.
随着消费者生理心理年龄结构的变化,服务提供者随之提供适应性的变化服务,以解决其需求.

所以,重新把各个个人放在一起作为整体看待的话,就是一个系统提供一个闭环的终生服务的概念.

从经营的角度来看,就是通过消费这一行为在系统中得以"生存"下来.

从广义上来说,整个人类社会就是这么一个系统.

如果把范围缩写点,国家本身也是一个这样的系统.
并且,国家作为系统考虑的话,还有一个比较明显的特点.
就是税收.

原则上来说,可以将"税收"作为是这种生存服务系统的盈利模式.
尤其把国家以及其对公共行为的影响作为商业行为考虑的话.

换句话说,"税收"这种商业模式的实质在于,倾入到人一生的各个交互点,从而进行利润化处理.
也就是说,这种盈利模式的立足点不在于单次或者某几次的最大化收益,而在于长期性的比率处理.

考虑如果把人的一些偶发性购买行为作为独立事件考虑的.
那么,一般的思路就是最大化单次购买的成本和价格差.

而如果把人一个的支出看为一个定量的话,那么这个定量则是由上面所说的各个独立消费事件组合而成的.

由于各个事件本身已经利润最大化了,那么对于参与支出利润瓜分的各个生产者来说,最大化利润的策略就剩下尽可能地包揽覆盖这些消费组合了.

通俗地说,就是覆盖产品的覆盖面.

像税收的形式,实际就是以各种税的形式渗透在各种产品渠道上.

而像沃尔玛之类的就是渗透日常消费的部分.

值得注意的就是想Amazon/淘宝这类电子商务,覆盖面是线下百货不能企及的,而且类似国家,在上面的所有交易都会有类似"交易税"的佣金.
也就是说,某种程度上来说,这跟"国家"的商业模式是几乎一样的.

不同的地方在于,"国家"是一个单一的寡头模式,具有独占性.
但一般商业则没有这种几乎绝对的垄断方式.

由于竞争的存在,一般企业的有着相对的lockdown成本,以使得其独占模式并不具有国家般的绝对性.

那么,在存在竞争的情况下,"税收"这种商业模式的利润最大化策略是如何的呢?

由于消费的总支出固定,而对于各个商家来说,最大化的策略又都是消费组合的覆盖面.
在存在竞争的前提下,消费者对应的策略就应该是在支出固定的情况下,最大化收益.

也就是寻找能够相对低成本提供覆盖面的商家.

于是,原则上来说,均衡点就应该是各个商家覆盖边际为0的地方.

问题在于,这个为零的地方是否存在/有解,或者说有现实意义.

对于一个始终有利可图的消费点,只会对覆盖边际差生正的影响.

考虑一个不那么有利可图,即是需要从其他店腾挪利润以保证覆盖面和使得边际大于零的情况.

也就是,存在那么一个消费点,它是在倾斜利润之后,强行扩大覆盖面的话,会使得边际小于零.
这样的话,作为商家来说,就有了不进行覆盖的决策.

也就是说,存在一个消费点,使得某些商家不再进入.

那么,在假设存在覆盖边际小于零的消费点/领域的前提下,竞争性的税收模式是允许存在相异性的.
即,允许商家之间有着不同的覆盖面.

于是,在不考虑研发和开拓成本的前提下,或者在研发和开拓成本足以保证足够的进入门槛的假设下.
税收模式的最佳策略应该就是尽可能地独占某些消费点的优势.

而独占的方式有很多.

朴素的技术创新/需求扩展.
以及lockdown手段.

像服饰的风格,电子产品接口的非标准化等.
概括来说,就是某种形式的品牌忠诚度.

所以,这里的关键点在于某人说的"think different",所谓的差异化.

而要成为类似"税收"这种长期且覆盖面广的维度的模式的话,也就要求这种差异化具有长期/持续性,并且需要能不断"横向"扩展.

就电商来说,它虽然可以横向无限扩展,但是很难有确定的持续性和长期性.
毕竟,无论从哪个维度来看的话,都不是无可替代/不可竞争的.

那么回到最开始的问题.

如果已有受众,那么如何产生"目的"呢?

对于小区居民来说,存在一些特质是具有区域性的.
也就是这些特质是具有独占性的,这就保证了一定程度的长期和持续性.

而覆盖度的话,由于小区居民是整个人类社会的子集.
那么可以认为只要是合理存在的模式,都可以在这个子集内应用扩展.

某种程度上来说,如果把小区作为"国家"来看待的话,物业可以认为是一个授权的代理执行机关.
理论上来说,可以有专有的商业交通医疗教育和一切对公对私处理通道.
也就是相当于某种形式上的次级行政区域划分,只不过这种划分的依据不是地域,而是建立在雇佣关系的联合体下面.

所谓小国寡民.

2015-03-07

正确量化的重要性

记得Behavioral Finance里有个概念叫做overconfidence.

对于一般的return on investment来说,是类似R=f(I)的形式.
如果考虑对应f(I)的概率的话,那么应该也是expected return = \sum P(I_i)f(I_i)的形式

而overconfidence描述的则是expected return > \sum P(I_i)f(I_i) ~ R+\varepsilon 的形式.

即是说,实际在计算策略是,对R的期望是大于纯粹/绝对理性情况的.

这种解释也很容易理解和接受.
毕竟单独引入一个变量含糊过去,确实不费什么事.

但如果要深究这个\varepsilon 是什么的话呢?

把overconfidence考虑为一种个体的utility function的话.
可能也就有一定的合理性.

因为overconfidence的作用是放大理想状况下的期望值.
一种可能的形式就是,这个utility function是跟P(I)相关的复合函数.
在P(I)*f(I)值不符合主观期望的时候,进行对应P(I)的非理性的概率相关的向上修正.
即 R+\varepsilon = \sum P(I_i)f(I_i) + U(P(I_i))

也就是说,\varepsilon 实际上是个关于发生概率越低,向上修正值越高的一个utility function.

就像赌徒的最后一博时的心里动机.
或者追一个不可能的人的时候的策略评价.

所以,如果这么考虑的话,overconfidence并不算是一种非理性的行为模式.
之所以认为非理性,是因为考虑的评价函数是绝对中立/理性的R形式.

而实际上,正在在行为选择上参与计算的是这个中立函数加上utility function的复合/加权值.
也就是,决策过程是非常reasonable的,并不是随机或者不可解释的.

那么,为什么会出现这个向上修正的utility function呢?
或者说,支持utility function参与计算的策略模式又是什么呢?

为什么会有一个影响中立性的因素被主动包括进来.

对于单次博弈来说,utility function可能只是中立函数分解形式的一部分而已.
所以,这种情况没有所谓的包含不包含的问题,只是代数形式的不同.

考虑多次重复博弈的话.

如果这些多次重复博弈可以等价为相互独立的单词博弈的话,也没什么需要特别说明的.
但如果是类似Lag function的有某种time serial/序列特征的话,即之前博弈结果影响后面结果的话.
那么utility function也许就有存在必要性的解释了.

考虑,如果这类博弈的是带终止条件的.
比如return < 0的时候,这种多次重复博弈就停止了.

那么存在的价值就很显而易见了.
为了让博弈尽可能地延续下去,所以会有依据于中立函数的预期return < 0的概率,进行概率相关的向上修正的utility function.

也就是说,utility function是对f(I)值域的一种调整策略驱动的.

由于overconfidence的策略中立形式是 R + utility function驱动的.
所以,其与绝对理性情况的策略差异,主要也是因为utility function造成的.

于是,要让决策尽可能地接近理想状态的话,所需要做的只是简单的减少utility function的影响.
也就是让expected return从R+utility的形式,退化为R.

或者避免发生这种目标解被无意识替换的事情.

毕竟,在random walk要得到一个minimize的解的话,还是靠运气的.
虽然可能得到一个全局最优解的结果.
但这个"可能"两个字已经把解目标从"科学的可重复的解"变为了"可能的全局最优解"了.

评价体系不同,计算再精确,也不一定是正确的.

所谓正确量化的重要性.


一个悲伤的故事(完)

"有曾经考虑过我么?"

"没有,我是个慢热型的人,不相信什么一见钟情,更在意能不能聊的来.第一次见到你,你确实把我吓到了,那天你穿的衣服,那条围巾我蛮喜欢,看了下你刚好不是我讨厌的类型,然后就给你了QQ.后来聊天,我们聊的并不多.你有自己的主见,思想属于浪漫型吧.但有时我不知道回应你.后来确实我们也没怎么聊了.每天走在上班熟悉的路上,有个人面对面的相互打招呼,我觉得这是一个很神奇的事情,让一条平淡的路,有点不同.每个人都有每个人认识相处的模式.像你的人生每一个阶段,都有一个人来陪你走一段路程,某一个人突然出现教会你某一个道理,那个阶段走完了,道理弄懂了,然后都会消失.然后我就在想,我们相识的缘分或许就在那么一段路上.过了这个时期,在相同或许各自的城市相互奔忙着."

所以.
这里最好的部分在于接触之前.

把手里的信息跟她逐条过了遍,告诉她我怎么知道的.
毕竟这个世界不全是良民.
加上,其实对我来说也没继续保密的需要.

然后跟她说了下如何拒绝的问题.
复述了下剧本,逐条罗列当初给的余地和错觉.
然后是她逐条的演练.

"不用逐条反驳的.说多,错多"

"我会祝福你的,有一天你会重新遇到你想找的那个女孩儿"
就这样,这段故事算正式完结了.

回头想想.
整件事情大概只是一时兴起的自编自导自演的剧本吧.







2015-03-03

一个悲伤的故事(续)

一月剩下的日子,本以为遇见她的机会不多了.
然而事实似乎是相遇反而填满了余下的每一天.

于是,强装镇定地主动打招呼.

于是,地铁安检相遇时略喜出望外的微笑.
于是,女伴同行时不回避的挥手回应.
于是,穿新衣遇见时不自觉的低头小动作.

想着,也许还有也许吧.

然而,当试着几天了聊几句的时候,收获的却是诸如"我去洗刷刷了","不跟你聊了,我要做点东西"之类的呵呵感.

有时候晚上回家,走在她曾经的方向上的时候就会开始怀疑人生.

也许,到底还是难免地bias严重.
毕竟,也许自己始终不是个完全冷血中立的,人.

人类感情就像The Matrix描述的一样,是个只能用不等式描述的东西.
即使勉强用个epsilon化为形式上的确定性等式,也很难切实地解决量化定性的问题.

所以,很难说服自己,是,或者不是.

时间在这种阴晴不定的不可自拔中到了二月.

翻了翻日历,估计着年假安排.
结合之前的聊天内容,推算着应该是恰好14号回家吧.

想着13号做点什么吧.
一来,日子也算暧昧有余敏感不足.
二来,最坏的情况也是大概半个月的再也不见.

她曾经说过自己喜欢紫色和几米.

送几朵紫色郁金香吧.
刚好季节.

然后挑了本向左走向右走.
再在淘宝里找了同主题的手绘当书签,夹在"生命中充满了巧合,两条平行线也会有相交的一天"那页.

想着自己是不是入戏太深.

于是.
默等时间.

周末.

再约次看看吧.
也算某种pre-release.

"有没兴趣出来喝杯咖啡晒晒太阳呢?"

经日无语.

大概就是如此一个恰当地意料而情理的结果.

所以Plan还是搁置吧.

周一.
同样的道路,同样的遇见.
不同的大概是她跟几个同事说说笑笑的.

犹豫之间,擦身而过.
于是,心里的BGM歌手适时地切换到了阿杜.

就此结束的话,大概也算是个不错的结局.

带着某种复杂的解脱感,上班.
翻开Air,唤醒,挂代理,收邮件.

"周六周天很少上QQ呢"
右上横插了一条她的消息通知.

"过两天回去了,跟朋友一起去逛街了"

于是,沉默了几分钟.
然后拍了拍身上的土,又跳了回去.
回复着,"周三就不在了吧?"

"是呢".

于是,作为一名"专业"的互联网从业人员,即刻把废弃的Plan又翻了出来.
然后安慰自己说,这是快速迭代持续改进.
而不是计划赶不上变化.

翌日.

"你好?你知道我在哪个公司么?"
"猜的吧.位置"
"花是你送的吧"
"嗯"

10分钟的无所适从.

"所以,还有机会再见么?"

"谢谢,花很漂亮,我之前以为是我男朋友送的呢"
"有机会开年来,可以一起坐着喝喝茶,聊聊天什么的啊"

"好吧".
这么想着,也这么回着.

也许是有个送花人送了喜欢的郁金香,所以开心地有些放肆吧.
后面倒是聊得稍微多了些,诸如理想计划什么的.

但,毕竟,如果中间没什么意外的话,花到底不是匿名送的.

也算是比较聪明的方式吧.

于是,也就等着老老实实安安心心过年了.

年后上班几天,倒是再也见不到她了的样子.

翻了下微博.
"明明只是想你哄我下,居然不理我了...".

叶寒凝珠泪,
滴水乱清涟.

本已平复的心情,多少又有些五味杂陈.

一来,大抵是真有男朋友的,毕竟算避而不见了.
二来,倒是某内心BGM又有些阴魂不散了.

这淡淡的挥之不去的烦躁感.







2015-02-23

系统化社交

某种程度上来说,微信抢红包的行为模式还是挺有代表性的.

"抢"的动作实质上是某种方式的reward function.
然后就是根据各自的reward promote/elect出新的activator,而后继续下一轮的reward.

也就是纯粹的reward -> elect -> reward 这种类feedforward的形式.

类似的还有某些诸如劝酒等酒桌文化的一些东西.

而原则上了来说,这些场景下的所谓氛围如何,实际上就是这个pattern repeat的次数和周期如何.
也就是这系列的function是衰减的还是稳态的抑或增长的.

从构成形式上,主要是reward和elect两个layer的共同作用的结果.

换句话说,最终social sphere如何,取决于这两个layer之间的互相调整的结果.

就像赌钱.
如果某个参与者的reward低于一定程度,那么就有可能发生退出,从而需要对feedforward的计算形式进行重新调整.

而即使参与人数的变化不会对reward function及其相关过程产生影响,但是如果elect出来的新的activator有问题,或者根本elect不出来的话.
那么,对最终的结果也是有影响的.

比如抢完红包之后,没有promote出新的人选出来.
这样自然也就没有所谓的新的reward了.

所以,如果给定一个objective的话,如何设计一个尽可能理想的crowd behavior呢?

因为存在两个互为input/output的layer.
所以,如果两者是相互独立的,或者说不相关的,那么某种程度上来说,就等价于是接受一个random input的layer.

也就是说,在这种情况下,如果有一个既定的objective的话,那么运气的成分可能占主要部分.

而如果两个是dependent的,比如是简单的线性变换的话,那么其实就等价于一个有着确定input的transform layer.
在一些情况下,就是类似time serial的问题了.

也就是说,如果在给定一个activator的情况下,各个参与者的reward也是已知的,那么要达到既定的objective的话,只要适时调整elect的策略即可.
反过来说,如果elect的策略是deterministic的,那么,只要调整reward的策略也有可能逼近objective.

比如如果赌博的objective是维持各方帐目均衡的话,且elect是赢家开局的话,那么reward的策略就可能要考虑到输赢的倍数问题.

而像微信红包的话,尽管看上去reward是随机的,但是,概率分布是确定的.
所以,如果考虑的参与者的定义从具体的人,变换到某个分布上的人的话,这个reward就是"已知"的.
那么,elect的策略的制定应该也是以这个"参与者"的定义来决定的.

换句话说,这种"社交"是可以设计出来的.

也就是说,本质上来说,这种设计出来的机制并不直接依赖人与人的关系.
而纯粹是规则运作/保障的交互.

所谓的系统化社交.

2015-01-25

三青国记事

北方有狼,故主事者惮其狠凶,以栓国门,不往通行.

国内有通狼语者,私贩狼贾,隧往于墙隙之间.
初,上有察,以通商事故,且不枉纲常,佯巡一二,例行纪律,贩狼者司风而动,竟也两相无碍.

至新君,国运昌明,政通人和,宇内欣欣然.
遂修葺旧城,贩狼者不复得路,渐无通商.

越明年,通狼语者愈寡.
狼患之事亦不复有议.

自此,堂内升平,四海称颂.

2015-01-13

一个悲伤的故事

大概去年10月底11月的时候开始吧.

上班去地铁的路上偶尔会遇到一个女孩.
多的时候大概一周能有两三次吧.
她出,我进.

见地多了,多少就会留意下.
留意多了,就会莫名地get used to it.
习惯了,每天仿佛就多了点期待.

有时候会想,是不是应该每次遇见的时候拍张照片.
做成collection的话,好像也挺有意思的.
连名字都想好了.

就叫九点二十的姑娘.

想着也许以后认识了,可以拿出来,说那段每天9点20相遇的日子.

不过也就是想想而已了.
毕竟缩了几十年,这点小张扬的事还是做不出来的.

不过这不妨碍回到十几岁的样子,虚构一个每天可见的她.

戴着眼镜,嘴角微翘似笑,手里私有若无地撩着路旁齐人高的绿化里探出的丛枝,指尖一跳一跳的.
大概就是巧笑倩兮了.

----

打量了下周围,大概是在某处的办公楼工作了.

有时候看着路上会拿着个iPad,大概是在玩某个App或者游戏吧.
只是貌似有点近视,又不太喜欢戴眼镜的样子.
略显专注的神情,使整个镜头显得有些微妙.

不过这样也就避免眼神交流,更方便自顾自地延伸扩展这个avatar的她了.
于是,每天一边默默地观察,一边慢慢加上各种有的没的推论设定,倒也过得挺自娱自乐的.

某天想了想,如果以后见不到了,是不是有些遗憾呢?

好像是有点.

不过错过也是种人生,何况也不是一次两次了.

本来是这么想的.

后来听了Jay的新专辑,想了想.
"哦,难过"这句轻嘲其实也挺沉重的.

----

于是,是不是应该give it a try呢.

就这样,在接下来的日子里,一边step forward,一边repeat着Jay的另一句歌词step back.

直到有天,"hi,我在想,是不是应该认识下加个微信什么的"

毕竟你我也擦肩几个月了,多少互相有点印象.
心里这么补充着.

"嗯?"
"就是能不能加个微信,互相认识下,这样子"

"哦...那你加下吧."
伸手应该是找手机,然后忽然停顿了下.
"要不你加我QQ吧,加我QQ也行".

"哦好的,那我先记下"
"..."

"那,先这样?"
"嗯."
"88".
"88".

略微地意料之外情理之中.
随手用QQ搜了下微信,看上去还是挺match的.
不过既然对方保留了,也就当不知道吧.

于是,作为一个别人主动聊都能冷场的人,开始了艰难的主动撩.
而且第一天就撩到吃饭的话题.
于是理所当然地被"刚吃完"挡了回来.
还临下班的时候问了句"附近坐坐么",然后就没有然后了.

想想,这大概就是fail fast的哲学吧.

晚上到家,稍微社工了一下.

于是觉得,这世界上大概是有两种人.
一种是一个ID出来一个人的.
一种是一个人出来一堆ID.

她大概是后者吧.
没有固定ID.

不过即便如此,一个人只要还在一个connected graph里,多少还是可抵达的.
尤其在SNS里,你的身份可能比较模糊,但你好友亲朋的可能就不太一样了.

所以最终还是get到了某微博.
虽然几年才几百条.
不过对于典型的人格/性格来说,其实足够了.

本来这个后面略带惊悚的故事就到此为止了.

但看到一条陈述被搭讪的微博,以及一条邀约当晚没回应之后陈述不知道怎么办了的微博.
于是,illusion就继续了.

----

如果理解为困扰的话,那么只能当作什么都没发生了.
就像剧本编不下去了,重新reset一个设定大概又能work了的感觉.

不过这种双人参与创作的剧本也不是说reset就能reset的.

第二天若无其事地遇见,早安,扯.
第三天若无其事地遇见,扯.
第四天若无其事地遇见.

大概是把一生的主动性用光了吧,也或者确实没什么共同话题.

于是开始想,如果是是喜欢的话,那么对象是谁呢.
她还是想象中的她.

这个答案就有些微妙了.

虽然有些地方和推测出来设定不太一样,不过也差不了多少.
而这个差不了多少具体怎么量化呢,就是个有趣的问题了.

说到底,没有共同话题,多少是算有缘无份了.

就在准备收拾细软跑的时候,第五天却貌似找到了些共同点.

"还是想去看电影呢".
"有没兴趣一起啊".
"最近都加班呢.我去画画了喔".

所以,如果有必要做retraining的话,大概得先把这个false positive去掉吧.

就这样,这个故事差不多就完结了.

除了过完周末,周一周二路上再见打招呼的时候看上去对方有些尴尬的样子.

对此,也只能继续笑笑,然后心里默默说声抱歉.

毕竟,本质上来说,这算是一个人自导自演的试验剧.
只不过break了其他人的balance.

于人于己,总归是个悲伤的故事.


聊聊卡布里尼

最近看了部片叫卡布里尼,算是可能这段时间来比较有意思的一部电影. 故事也不算复杂,就是一个意大利修女去美国传教,建立慈善性质医院的故事. 某种程度上来说,也很一般的西方普世价值主旋律. 但是如果换一套叙事手法,比如共产国际的社会主义革命建立无产阶级广厦千万间的角度来看的话,也不是...