2016年11月

根据gamelook文章VR眼镜盒月出货超2000万,单台利润仅1毛,以及其他一些VR发展的历史事件, 猜测VR发展已过了The chasm裂口.

技术成熟度曲线和技术采纳周期

  • 2012年-2014年, Innovator阶段,如果这次VR技术的发展, 以2012年Oculus成立和众筹作为起点的话, 那么2014年7月, Oculus以20亿美元卖给Facebook, 同年谷歌发布VR盒子原型Cardboard, 暴风魔镜以及一批VR创业公司集中进入VR盒子开发领域, 意味着2014年到达VR发展的超高期望顶点(Peak Of Infacted Expectation)

  • 2014-2016年初, Early Adapters阶段, 同时也是裂口阶段The Chasm. 正如gamelook文章中所言: "2014年团队是淌着血过来的,每月尽亏80万", 而到了"去年(2015年)12月以后,销量开始往上蹭蹭地涨". 暴风的VR团队在今年也爆出大幅裁员的新闻.

  • 2016-今后3-5年, Early Majority阶段, 除了上述的VR盒子销量暴涨外, HTC Vive于2016年4月上市, 6月北美上市. HTC同时携steam带来超过100款游戏作品. HTC之后, Oculus有些乱了手脚, 先发后至, 发货之间到了5-8月之间. SONY PSVR以及适配PSVR的"PS4.5"版本PS4 Pro也同期发布, 同期上线30余款游戏. 由于VR设备昂贵, 深圳地区出现多家Vive体验中心, 多为初创公司创建.

参考文章:
* VR眼镜盒月出货超2000万,单台利润仅1毛
* Technology Adoption Cycles

快速迭代,快速试错似乎成为敏捷思想带给葫芦娃啊不互联网经济的灵丹妙药,经典图式常常拿一张蒙娜丽莎的画举例,你不应该做的是:画面分成五块,每一块填完色才画下一块;你应该先快速勾一个蒙娜丽莎的轮廓,哪怕很丑,但能立刻让别人知道你画的是什么,然后再修轮廓,描细线,画背景,最后上色。

敏捷不推荐的画法

敏捷推荐的画法

如果上面的图破了, 在bing.com搜索mona lisa agile

然而这不是万能的。这适用于做一些功能性应用,并且有一些创新的核心点需要快速早期验证的情况。但这不适合做艺术品,比如蒙娜丽莎。因为达芬奇不可能希望拿一个只描了轮廓丑不拉几的画作给世人看,更不可能问世人这么画对不对你喜不喜欢不喜欢我另画?你画这样我能喜欢吗?
对于另一些需要按时间依次浏览的艺术形式,如长篇小说,电视剧,和章节式游戏,有时可以先试试大家的兴趣。然而,发一个粗制滥造的框架或者只是讲述一下提纲,并不能说明你这是个好作品。而是应该一部分一部分的去向读者和观众呈现一个精雕细琢的作品,正如敏捷方法一开始所反对的那样。观众看完一部分,反馈的意见有用吗,或许有,但有时并不那么重要。极端情况,也许像中国网络小说最赚钱作者唐家三少所说,故事我一开始就想好了,读者的意见并不能改变我。

这儿以debian/ubuntu系统举例

1. 安装samba

在debian下当然是:
sudo apt-get install samba

我遇到了安装不成功的情况, 说是get文件的时候404(找不到), 用如下方式解决:

  • 更新了一个网易的apt源
esp8266@esp8266-VirtualBox:~$ vim /etc/apt/sources.list

添加了如下内容

deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse

保存后, 更新apt-get

sudo apt-get update

再次使用sudo apt-install samba安装成功.

2. 查看是否启动了samba服务

esp8266@esp8266-VirtualBox:~$ service samba status
 * nmbd is running
 * smbd is running

俩都是running就OK啦.

3. 配置共享文件

用这个命令
sudo vim /etc/samba/smb.conf

在最后面加上:

[share]
    comment = Ubuntu File Server Share
    path = /home/esp8266/r
    browsable = yes
    guest ok = yes
    read only = no
    create mask = 0755                     

解释:
[share]是共享目录的名称
path是共享的目录路径
comment无所谓了.

最好吧要共享的目录r改一下访问权限
sudo chmod -R 777 /home/esp8266/r

4. 重启samba服务

sudo service samba restart

5.测试

在linux下找个文件浏览器, 用smb://IP地址的方式进行测试.

批处理文件文件后缀可以是.cmd或者.bat,据说两者之间只有微小的区别;

使用call xxx.bat来运行其他bat文件,才能继续执行后面的内容.

%cd% 表示运行环境所在路径

%~dp0 表示被call的bat文件所在的路径

 

知识是对体系的描述,一个体系包括概念,状态,能力,成分(四个基本要素)。概念由状态和能力定义,内涵为class,外延为object。状态为成员,有变量和常量,能力为方法。能力通过逻辑过程和一些概念改变另一些概念的状态和成分。概念切分为不同的成分,每个成分为一个子概念。

概念有实虚,对应具象和抽象概念。前者如人,后者如青春。

知识体系中,还包括人的特有要素,联想。两个毫无关系的概念、能力、状态、成分之间,可以产生联想。再从一个概念通过层层关系到达另一个概念后,这两个概念之间就产生了联想,下一次,这两个概念之间就不再需要层层关系,可以通过联想直接到达。两个概念之间到达的频次为联想的强度,强度越高的越容易被联想到。

文档可离线,几乎搜罗了很多主流非主流的开发语言的文档。

奇怪的是没有C#和java...很可能是因为这两个语言被MS和Oracle控制,文档没有开源。

1. <div hidden="hidden"></div>

完全隐藏了

2. <div style="display:none"></div>

完全隐藏,与上面的区别在哪儿,不大明确。有的说hidden会在使用zepto.fullpage.js的时候,使用这种方式隐藏整个.wp会出现问题。而使用hidden则不会。原因未知。

另有文章说

2. <div style="visibility: hidden"></div>

视觉隐藏,空间保留,相当于全透明了。

参考文档:

1) What is the difference between the hidden attribute (HTML5) and the display:none rule (CSS)?
http://stackoverflow.com/questions/6708247/what-is-the-difference-between-the-hidden-attribute-html5-and-the-displaynone

2) HTML5 Accessibility Chops: hidden and aria-hidden
https://www.paciellogroup.com/blog/2012/05/html5-accessibility-chops-hidden-and-aria-hidden/

// 显示器的宽高像素
screen.height
screen.width

//HTML的可视宽高像素,不是物理像素,是缩放后视口viewport 的显示像素,随着视口的缩放而改变
document.documentElement.clientHeight
document.documentElement.clientWidth

//HTML的<body>的可视宽高像素,不是物理像素,是缩放后视口viewport 的显示像素,随着视口的缩放而改变,chrome默认有8px的margin,所以默认要比上面的documentElement窄
document.documentElement.clientHeight
document.documentElement.clientWidth

//窗体的可视宽高像素,会保留前一个页面的视口缩放比,如果前一个页面视口缩放了,此数值也会缩放
window.innerWidth
window.innerHeight

// 在华为内置浏览器上, screen.width显示与其他浏览器表现不同, 其他浏览器为虚拟尺寸, 并且所有其他显示都基于虚拟尺寸, 华为是实际尺寸, 而显示却基于虚拟尺寸.
// 导致华为浏览器缩放不准确. 需要用window.innerWidth替代. 而window.innerWidth是随着initial-scale变化的.

//旧代码在华为上出问题:

if (window.innerWidth != width) {
alert(width + " " + window.innerWidth)
document.getElementById("metavp").content = "width=" + width + ",initial-scale=" + screen.width / width + ", maximum-scale=" + screen.width / width + ", user-scalable=no"
}

//改为如下代码才正常

if (window.innerWidth != width) {
alert(width + " " + window.innerWidth)
document.getElementById("metavp").content = "width=" + width + ",initial-scale=" + window.innerWidth / width + ", maximum-scale=" + window.innerWidth / width + ", user-scalable=no"
}

动态效果:transition,定义在css属性值改变的时候,经过多久渐变过去
transition property duration timing-function delay
transition-property none/all | property
transition-duration ?s
transition-timing-function linear/ease/ease-in/ease-out/ease-in-out/cubic-bezier(n,n,n) ,n=[0~1]
transition-delay ?s
动态效果animation
animation name duration timing-function deley iteration-count direction
animation-name none | @keyframe规定的动画名称
animation-duration ?s
animation-timing-function linear/ease/ease-in/ease-out/ease-in-out/cubic-bezier(n,n,n) ,n=[0~1]
animation-delay ?s
animation-iteration-count infinite | n,取值自然数
animation-direction normal/alternate,在偶数次数反向播放
动画名称@keyframes
@keyframes xxxname{
from {} to{}
0%{} …%{} 100%{}
}
transition和animation区别 1. transition真的改变css属性,并且在改变属性的时候产生动画,动画则没有(或许因此动画的效率高?)
2. transition相当于只有from和to,且只运行一次,但是to是可以动态改变的;
静态效果:transform
transform none | transfrom-functions;
matrix(n,n,n,n,n,n) matrix3d(n,n,n,n…..*16)
translate(x,y) translate3d(x,y,z) translateX(x) translateY(y) translatez(y) 沿着x,y,z轴移动x,y,z长度
scale(x,y) scale3d(x,y,z) scaleX(x) scaleY(y) scaleZ(z) 沿着x,y,z轴方向缩放x,y,z比例,取值0~1
rotate(angle) rotate3d(x,y,z,angle) rotateX(angle) rotateY(angle) rotateZ(angle) 沿着中心旋转,或者沿着x,y,z轴旋转,x,y,z取值0或者1,angle取值0~360deg
skew(x,y) skewX(x) skewY(y) 沿着X,Y倾斜的角度,取值-90~90deg,如果等于90,则因为太倾斜而消失。