婚礼微电影剧本

6镜头闪回

音乐:Cloud Atlas Opening

分镜1:军训

  • 时间:2002年9月
  • 地点:虎林中学操场,
  • 音乐:俩少无猜

夏日的操场,空的旗杆,学校的墙壁,树叶

操场上原地踏步的孩子们,男生从背后看着女生,女生的双马尾在晃动

休息的时候,女生和其他女生在玩耍,男生看着女生

分镜2:表白

  • 时间:2004年2月
  • 地点:海冰宫溜冰场
  • 音乐:大无畏

灯光闪耀的溜冰场,技巧娴熟的男生在加速,变换姿势。

渐渐的,脸上流露出紧张的神情。走向寄包处,拿起好时Kisses巧克力。

面对女生,他递上巧克力。女生扭捏收下,湖南的灯光掩盖了女生的红脸。

分镜3:毕业照

  • 时间:2005年6月
  • 地点:虎林中学操场
  • 音乐:路小雨

拍毕业照那天的操场,同学们三三俩俩的拍照留念。

突然一个声音出现:季玙斐跟陆秋石拍一张呀!女生略显尴尬但没有拒绝,男声紧张但按捺不住内心的喜悦。

镜头从操场开始,一路切换到高中

串场

音乐:战败秋明山

同框不同背景下的两个人穿上各自的校服,开始了各自的高中生活。

背景变为相同,两人有少量互动,但没有明显的火花。

最终两人回到不同的背景。

分镜4:重聚

时间:2013年2月12日

地点:环艺电影院

音乐:Cloud Atlas Opening

环艺电影城外景,内景,云图海报,云图片段

渡轮码头,牵手。

苏州河畔桥,单车,闲聊,欢笑,泪水。

分镜5:求婚

  • 时间:2014年8月25日
  • 地点:奉贤路
  • 音乐:Ending-不能说的秘密

接上镜,男女手缓慢松开。悬念。

漆黑的奉贤路,男生放下他的双肩包,取出一束花,和一枚耳钉。

男生下跪,女生赶忙拉男生起来,两人抱在一起。

下跪前12秒,背景音乐起

分镜6:婚礼

  • 时间:2016年9月24日
  • 地点:婚礼现场
  • 音乐:Cloud Atlas Ending

第一段,婚礼当天剪辑。

新郎在追光灯下等新娘

现场(音乐继续)

突然想到一个不错的分词算法——搜索引擎

我一定不是第一个这么想的人吧。

服务器端程序把客户请求的句子作为查询,去请求搜索引擎。在得到的结果中观察被查句子在结果中的被拆分情况,即可确定分词方式。甚至可以确定各种分词组合的频度。

实践结果待续……

新相机试镜之泰晤士小镇

IMGP0318   ƒ/5.6   PENTAX K-50   55mm   100   1/1600s

IMGP0295   ƒ/4.5   PENTAX K-50   40mm   100   1/320s

IMGP0287   ƒ/4.5   PENTAX K-50   40mm   400   1/80s

IMGP0159   ƒ/4.5   PENTAX K-50   28.13mm   100   1/160s

IMGP0117   ƒ/4.5   PENTAX K-50   135mm   100   1/1250s

IMGP0351   ƒ/4   PENTAX K-50   20mm   100   30s

IMGP0347   ƒ/10   PENTAX K-50   18mm   100   6s

IMGP0335   ƒ/4   PENTAX K-50   18mm   200   1/320s

IMGP0334   ƒ/4.5   PENTAX K-50   42.5mm   100   1/160s

IMGP0328   ƒ/4   PENTAX K-50   21.25mm   100   1/400s

IMGP0325   ƒ/5.6   PENTAX K-50   50mm   200   1/100s

IMGP0309   ƒ/4   PENTAX K-50   18mm   100   1/1600s

IMGP0250   ƒ/5.6   PENTAX K-50   55mm   200   1/100s

区分软件包依赖和版本控制,Git历史修剪“核武器”小试

我的89jian项目依赖于LubanLock,LubanLock又依赖于CodeIgniter,所以我就想当然的把Codeigniter配置成了LubanLock的一个remote,又把LubanLock配置成了89jian的一个remote,被依赖的库有更新了,依赖它的库就git pull LubanLock一下。

我首先发现,这样我每在LubanLock中的一个提交,会重复出现在依赖它的项目中(这当然不是问题),Github在统计个人贡献的时候,会重复计算这些提交。开始我认为是Github的bug,还发了邮件给人家support。人家弱弱的回了一段,说你项目之间的依赖没做好,才会这样的。

然后我就慢慢懂了,包依赖管理,和版本控制,原来是两回事呢!对于一个项目来说,需要自动安装,不直接改动代码,甚至不提交入库的包称之为依赖,这些代码的版本控制其实并不关心,只要确定当前依赖的版本和来源就可以了。而版本控制则记录了每一个贡献者的每一次代码提交,应该仅针对当前项目。如果动不动就把依赖的那些项目的版本管理也纳入,那你的库该有多热闹(我之前看似数百人参与的那些LubanLock的分支就是那么回事)。

不过对于包管理,有一些前提:被依赖的包在项目中可以轻松设置路径,比如composer的就是vendor,一般是不应该去改它的。那么对于我而言,LubanLock对于89jian,是框架,硬要做成依赖扔到一个目录里太伤,不如就像其他几个WordPress项目一样,对于WP的更新不去pull,直接提交更新后的整个代码。把框架纳入仓库,还是出于可能会对框架进行一些项目范围内的局部改动,方便跟踪更改。

于是我现在,CodeIgniter仍然是LubanLock的remote,89jian等项目中的LubanLock代码直接cp,而且纳入前者的版本控制中。

附使用Git剪枝的两端脚本

git filter-branch --commit-filter '
 if [ "$GIT_AUTHOR_EMAIL" = "uicestone@gmail.com" ];
 then
 skip_commit "$@";
 else
 git commit-tree "$@";
 fi' HEAD

还有段好不容易调试成的用grep按照提交hash逐条比较判断是否排除提交的脚本弄丢了,算了,估计这辈子难弄第二回。

未来把框架做到单独的子目录,做成依赖管理,应该是迟早的事,人家node.js的express在npm里不就直接一行install装在/vendors/里嘛。如果我用的框架不能适应这些项目管理方式,只能说明,他们老了。

而如果有一天我没有心情研究新的项目管理方式了,说明我也老了。

更新:自从使用了Composer和Laravel,世界清静了。包管理大一统时代即将到来,代码风格大一统时代即将到来。

抛弃花生壳!直接使用DNSPod配置动态DNS

如你所料,如果你想在动态IP的网络环境下搭建服务器,那么你需要一个动态DNS服务,来使用一个固定的域名,解析到实时更新的IP。

公司随便一个搞网络基础建设或者运维的小哥都能报出一个如驴贯耳的名字:花生壳。TP-Link路由器中甚至直接集成了花生壳的动态DNS服务,自动将IP上报到花生壳提供的超短TTL(40秒)DNS服务器。我自然也是使用这个服务来保证家中的老旧笔记本充当的服务器能7×24在全球互联网中占有一个席位。

可是这几天,由于通过家中路由器的流量激增,使得小小TP-Link不堪重负,内置的花生壳DDNS进程僵死导致无法上报IP。不上报就不上报嘛,IP又不是更新的那么快。可恶的花生壳居然在上报失败的时候显示他的新硬件广告:花生棒!泥煤啊,这玩意怎么看怎么像ChengRen电视Bang啊!网页怎么看怎么像美国XX胶囊啊!

寻找替代方案的时候,意料之外,情理之中地发现了DNSPod的API,通过接入API,可以在服务器使用脚本动态上报当前IP到DNSPod,在后者使用A记录解析即可,再也不用再CNAME到花生壳了。那么动手之前,我只有一个疑问,TTL怎么办?DNSPod的免费服务TTL最小只支持600秒,也就是说网络上的其他DNS服务器要600秒才来刷新,运气不好的话,家里IP变更将造成10分钟的服务中断。好吧,先试试再说。

官网推荐的一段脚本,Python写的。首先很愚蠢的花了很久才发现有只要有python环境,.py文件可以直接运行,甚至没有后缀名也没有关系。果断很干净地移到/usr/local/bin/。脚本本身是间歇循环运行的,考虑加入开机自动启动,方法在这

惊喜的是,使用这段代码调用API写入的DNS A记录,TTL居然是10秒,10!秒!。

这下好,IP是自动上报了,机器关不掉了,这段循环运行的脚本阻塞了关机或重启的过程,具体原因就不深究了,直觉直接改由系统来负责定时,把脚本改成一次运行。虽然不会Python,注释一句while神马的问题还是不大。

sudo crontab -e

* * * * * /usr/local/bin/pypod >> /var/log/pypod.log

搞定,重启都免了。

希望明天不要再中断服务了。

 

在服务器上重新编码(转换)视频

受公司和Zhouyi项目双重需求,研究一下如何在服务器上使用命令行远程压制视频,将一个mpg,mp4或者mov视频转换为适合在网页内播放的h.264 mp4视频。

搜索中,首先重复出现的就是大名鼎鼎的ffmpeg,它是一整个视频解码和编码套件。但ubuntu 14.04中,它被从官方库中开除了,取而代之的是libav。后者是前者的一个分支。

个中恩怨就不深究了,信任一个系统,就信任它的全部,因此我选择直接从ubuntu官方仓库下载libav。

sudo apt-get install libav-tools

侦测一个视频的信息:

avprobe [filename]

转换一个视频

avconv -i [input_file] -s 960x540 -b 1M -c:v libx264 -c:a copy -movflags faststart [output_file]

详细文档

咦?怎么服务器转换速度比我的MBA还慢?哦,服务器是我的老笔记本啊,老笔记本……

更新:命令在后台运行并且忽略终端退出的方法(月光博客)disown命令几种方法的比较

更新:输出的视频为了能更好支持老的播放环境(比如flashplayer),解决需要完全下载完成才能开始播放的问题,需要在编码的时候,在输出参数加上-movflags faststart,或者转码后还可以用一些工具后期处理,详细qt-quickstart

 

 

在第三方CA机构创建一个SSL证书

由于一些中国特色的原因,本站不能在我家的80端口运行了。但是世界上还有一种协议叫做SSL,世界上还有一种端口叫做443.

443还开放,人间就有爱。

这里找到使用startssl认证的指导,这是一家被Chrome,Safari和IE,对没错,微软,信任的证书机构,而且是免费的。

生成自签名证书并配置Apache,以及提交申请给CA的认证文件的方法,在这里

最后的结果是一个.pem/.crt的证书文件和一个.key的密钥文件。复制apache2的site-available下默认的default-ssl.conf修改证书文件路径和网站基本配置,即可。

Apache的Rewrite中这样配置,将http请求转发到https上:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

TODO: 根域名CNAME解析将造成mx记录异常。之前将uice.lu CNAME到花生壳,uice.lu下的mx记录设置为腾讯企业邮箱,Gmail发的能收到,但startssl发的就没有收到。临时将uice.lu改为A记录到Google IP解决问题。但不是长久之计,除非我使用ddns.uice.lu来CNAME,而uice.lu将不用作动态域名。总觉得还有哪里不对。更新:uice.lu和www.uice.lu需要解析到接入商的主机,不然备案有被注销的风险。但ddns.uice.lu可以使用A记录,因为DNSPod提供了API,可以从服务器自动更新动态IP。

更新:除了证书文件和私钥文件,“证书链”文件也需要在Apache中被配置,否则将导致有的浏览器认为证书无效。StartSSL的FAQ

更新:2015年7月16日发现电信家用宽带的80端口已经被重新打开