Option

博客解决方案

上一篇博客因为太纠结,导致使用了一套神奇的方式来写博客,不过感觉真的还挺顺手的,以后就这样吧。
嗯,是这样的
在 MarkdownPad 中完成日志,导出网页,复制HTML到 Windows Live Writer 里发布。
同时,复制一份到马克飞象中,同步到印象笔记保存,原始MD文件不在本地保存。
看上去麻烦了点,但是感觉还是不错,Wordpress 的 Markdown 插件没找到满意的,而且还想离线编辑……
话说真心感觉好像还是 Github Page+Jekyll 静态博客最适合呀……等用不爽了以后换吧

无聊的时候写博客

每天刷完知乎刷完什么值得买,有时候看看数字尾巴Chiphell以后剩下来的就是满满的空虚……(唉感觉打字好不爽……我想念你,我的G80-3000……)
嗯,好在现在还能来写博客。

今天的选择

今天花了一天讨论游戏策划修改方案
其实只是选择而已
到底是直接拿完美的200W大家开开心心把项目做完
还是改变游戏形式给Dash看,很大可能的是换一个项目,然后做一个Demo,然后看XD愿不愿意投。
同样,游戏的策划修改也是选择,是要找个方案呢,还是换那个。
可是,现在已经是为了换而换了,为什么要做成这样?因为不能和原来一样。
嗯……
话说突然想知道 Option 和 Choice的区别是什么,容我去查查看

choice 表示从一个系列的人或物中进行挑选;
He made a sane choice.
他做了一个明智的选择。

alternative强调在只有两种可能性或者行为方式之间所作的选择:
An unhappy alternative is before you, Elizabeth. . . . Your mother will never see you again if you do not marry Mr. Collins, and I will never see you again if you do (Jane Austen). “伊丽莎白,你面前摆着只有两种令人不快的选择.…如果你不 嫁给柯林斯先生,你母亲会再也不愿见到你,而如果你要 嫁给他,我会再也不愿见到你”(简奥斯丁).

option常常侧重于已经被权威等所授予的一种选择能力或自由:
The option lies between accepting the candidate the administration proposes and reconstituting the search committee.
可以在接受由领导提名的候选人以及重组选拔委员会之间作出选择.

preference指基于个人价值观,偏见或偏好上的选择,不一定很理性:
We were offered our preference of wines.
我们可以选择自己喜欢的葡萄酒.

selection含有可供选择的许多不同的人或物的意思;
election特别强调选择时使用判断力,也指选举:
The university recommends the election of courses in composition and literature.校方建议选择有关写作与文学的课程.

OK 我发现我用错词了,按照我上面表达的应该是Choice
下面还是用一个正确的意思吧

期权

之前知道期权的英文是 Option 的时候觉得真贴切呀,可不是么,期权就是一个选择。
今天看来更贴切了,

已经被权威等所授予的一种选择能力或自由

这周总算是把这个问题了结了,未来发展的确定性又有了一个稳定的基础。
后面应该还是要把股权激励计划写完,不过看来应该是还有一段时间咯~

跟选择没什么关系了

唉,博客和日记还是不一样,就算这个博客再没人看,也总不能什么都写上去,心里想到的不能写出来,感觉还是憋屈。

好啦好啦,算我矫情~

去找个地方把洗发水什么的买了吧……不然回去没的洗头了……

一个人还是有些寂寞,没人管嘛~

(补充,关于陈浩)

知道知乎上有一个叫陈浩的用户去世了,
只是知道而已。
不止怎得,今天突然去查了他。
关于他的一切。
比我还小近一个月呢。
一个真正牛逼的人。
其实我是怀着很平淡的心情,阅读他的文字,阅读关于他的文字。生死这种事情,只有经历了才会明白。
也就是个事,也就这么回事。

突然就开始谈论生死真的是很奇怪啊呵呵

小时候也许真的挺怕死吧,生日许愿都得加上个长命百岁。
(其他的大约是能得100分呀,能有喜欢的什么东西呀,喜欢的女生能和自己在一起呀)

不知什么时候起,好像就突然相通了。
自己是不知道自己死了呀,既然不知道,那怎么会有痛苦呢?
所以其实自己死了,痛苦的只有亲人而已(没错,我没说亲友,这个世界上少了谁地球照样转,朋友的离开会让你恍惚一时,但是,几个月,几年后呢,所以,只有亲人才会带来一生的影响。当然我的意思是这是很正常的,如果我死了,我最最不希望的就是会给亲友带来悲伤和痛苦,大家把我忘记吧,该干嘛干嘛)

有时候跟母亲聊到这个话题,总会被呵斥“瞎说什么呢!”

唉唉太沉重了,先插入说点其他话题吧。

关于陈浩的才华,我实在是很理解。
一个比我多几倍时间看书的人,才华能不比我高几倍么?
怎样让一个人喜欢看书,我真的挺没辙的。我自己也说不清我为什么从小就那么喜欢看书,我也一直很担心,如果以后自己的孩子不看书我可怎么办啊!也许,是不是应该从小不给他看书,他就会自己偷偷看,哈哈(我用的是“他”,但是实际上呢,还是希望自己的孩子是个女孩嘛咳咳)

插入结束
到了现在,重新来看这个问题。
感觉是很淡然了,对生死,对很多事情。
但是应该又不是那种年老的麻木。
只是,
觉得也不过如此。
我所知道的,我的思考,都不是我一个人。
先哲们在书中告诉我,世界在每一件事情中教导我。
世界不仅创生出你,更会告诉你一切。

也许某天,我突然就不在了。
现在的你,可能会想,那我做的一切,有意义么?

两年前站在讲台上,向同学们抛出的设问:

“人生的意义到底是什么?”

记得当时阐述了很多,最后结论是

“人生的意义就是根本没有意义,人生的意义就是给人生创立一个意义。”

对于现在的我来说呢
人生是一件有意思的事情,做自己想做的事情,被迫做不想做的事情,看书,看别人,纠结自己内心的情感,赚钱,动脑子,插科打诨,回忆,被感动,从心所欲抑或水波逐流。

在我临死的时候,我会说

“哦,结束了,睡吧。”

大家不要也不会记着我。
愿我可以承受世上一切苦难,所有人幸福安康。
我只愿面朝大海,春暖花开。

使用disunity拆解Unity3d制作的游戏获取资源

@凤翔FindiX

听说Windows Live Writer写博客很好用所以我来试一试……
声明:本教程使用所有工具全部来自Github,请不要恶意商业使用版权资源,作为开发者+创意工作者,让我们一起维护自己良好的版权环境。

0. Overview

在产品原型阶段,不可避免的会使用一些他人的素材以及原画缩短开发周期。而在产品风格尚未明朗的情况下,在众多游戏中获取灵感,也是一个“偷懒”的好方法。
过去Cocos-2dX流行的时代,拆解是一个很容易的工作。
而现在越来越多的游戏使用了Unity3D游戏引擎开发,由此带来的问题就是,再也不能右键解压缩对付那些apk了。
本来以为,Unity开发的项目,应该是不能拆了,结果,几经摸索,竟然发现了这么个好东西

DISUNITY
使用Java编写的自动化Unity资源分析器。

废话少说,让我们来看看这是如何使用的吧。

1 .获得Disunity

首先,点击链接下载最新的发行版
直接解压,为了方便,可以把该目录放进环境变量中。
然后在cmd中尝试输入disunity
如果该命令存在,说明已经部署完成。

2. 拆解

同样,还是右击解压apk项目(ipa也可以,只是apk相对比较容易获得)
(对了, 这个网站可以通过Google Play应用地址获得apk下载链接直接下载apk,非常实用向大家推荐)

在项目的libarmeabi-v7a目录下,如果能看到libunity.solibmono.so文件,说明该项目是使用Unity3D开发的,OK,我们可以继续下去了。
下面我们要寻找的,是形如*.unity3d*.assetsff910c990f6ec42858669c600434f140这样一长串符号但是没有后缀名的文件们。
一般来说,他们都位于
assetsbinData
AssetBundlesAndroid
等位置,大家可以自己找找看啦。
找到了以后,事情就简单了。
比如说吧,我们找到在assetsbinData目录下面有很多这样的文件。
我们就可以用这样的命令

C:UsersSeanDocumentsunityassetsbin> disunity Data*

执行完毕之后,你就会发现Data文件夹里,每一个文件都会对应生成一个文件夹,打开他们吧,成果都在里面了!

3. 分类

文件都拆解开了,但是你会发现,他们都是杂乱堆在一起的
难道要我们一个个找出来么?
不,当然不是啦~
有两种方法解决这个问题
一种是把所有文件全部取出来,然后根据拓展名排序即可
还有一种则是通过搜索功能,找出对应拓展名的文件
我一般使用的是第一种
在说明方法之前,先简要介绍一下拆解出来后文件的格式

类型 扩展名 状态
音频片段 .mp3.wav.ogg Ok
字体 .ttf.otf Ok, but wrong file extension for OpenType fonts
Mesh Unity 4 and uncompressed only
TextAsset .txt Ok
Shader .shader Ok
Texture2D .tga Missing support for PVR, ATC and some exotic color formats
Cubemap .obj Wrong texture flags
SubstanceArchive Ok
MovieTexture Ok

有一个需要特别解释的是,最重要的图片素材,是以.tga格式析出的,这种文件可以直接通过Photoshop打开,也可以使用格式工厂之类软件转换为别的格式如.Png等。
知道了扩展名,搜索的方法应该很容易了,不表。
第一种方法主要问题是如何从文件夹中拷贝所有文件出来。
我自己是写了一个Python脚本

# -*- coding: utf-8 -*-

import xlrd
import os
import os.path
import shutil

#需要遍历的目录
fromDir='.'
#文件汇总到的目录
toDir='..result'
list_dirs = os.walk(fromDir)
for root, dirs, files in list_dirs:
    for f in files:
        print os.path.join(root, f)
        shutil.copy(os.path.join(root, f),  toDir+f)
print "All Done"

得到所有文件后,选取需要的,或者分类也都不是问题了

4. GUI

自己是Linux重度使用者
(主要是服务器,桌面用Linux我只能说真的是蛋疼,虽然用着没问题,但是美工模式的时候连Ps都没有你让我凭什么混饭吃……)
shell下工作很顺手,但是也许有些纯美工盆友也需要使用这个工具吧。
(美工:我们才不要呢,我们可以自己画,哼)
有个GUI,可能会方便一些。
OK,这里还真的有人基于.Net写了一个GUI,点击链接下载发行版,直接解压粘贴到disunity目录中,双击打开即可食用,哦不,是使用- –


基本上就是这样喵,如果有什么不清楚的地方可以留言啦~
本来这篇想写的欢快一点的,没想到技术文写的这么严肃……唉真是的。

Five two zero

第一次尝试在iPad上写博客

今天得知,Metrix67顾森和localhost竟然已经结婚了,算是一个幸福的消息吧。

刚刚还跟大家开玩笑说,今天是我大#FFF团圣战日呢(为什么要加#号?纯属作为设计师这么看着感觉比较和谐。。。

当初,是大一还是大二的时候,期末考试前期,无意中发现了Metrix67大大的博客。

其实不是第一次知道,但是之前一直没有关注。

结果这次,花了4天时间,一口气似懂非懂地看完了博客里1000多篇日志,真的是酣畅淋漓之感。

进而,对顾森大大的崇拜之情啊,都要冒小星星眼了★.★

竞赛出身,北大中文系(没错真的是中文系!),应用语言学专业。

所写文字从趣题到算法到语言文字研究,极度广博,文笔优美。

(顺便提一下,之后看到的另一个大神,造了一架飞机在人人卖的……谢晓喵,本名谢晓虎,俄罗斯某某大学党史专业(…………),人家修电脑都是捣鼓软件顶多换CPU的,他是上焊台换北桥芯片,挖出图纸从显卡飞线上高分屏的……)

后来知道localhost的博客也就很顺理成章了,顾森好像有很多任女友,我所知道的最后一个就是localhost了,localhost的博客叫考据癖,果然也是我喜欢的类型啊,除了日志发的慢了一点,文章质量真的是太赞了。

今晨睡前,看到rss上localhost的日志,才发现他们都已经结婚了。

感觉好像只比我大一届吧…………哎哎哎,让我这种还没女朋友天天叫嚣#FFF团其实就是赤果果嫉妒的人怎么是好啊。

祝福你们,你们的孩子肯定是超级优秀的人呢!

——————————————————————————-

以前总感觉有了博客也不会写东西,但是实际上,还是写起来了嘛。

博客和SNS的区别就在于,给自己看,很多事情就可以不用顾忌的挥洒自己的心情。

——————————————————————————-

Facemesh

The Social Network 社交网络

这部电影从我看第一遍起就狂热的喜欢。

大卫芬奇真的拍的非常好。

我这个人呢,总有个习惯。

当一个东西电影电视动漫什么最火的时候,总是不看。

等到过去了,偶然的时候,翻出来看看,哎,还真是不错。

社交网络也是有如此。

看了真是非常非常多遍,推荐到团队,也成了很长期的梗(最经典莫过于,0.03%的股份……)

电影中,节奏感最强的一段,就是Mark在分手夜,微醺的时候,一边写博客,一边侵入学生公寓服务器,下载了全部学生的照片,做出了Facemesh成功的挂掉了Harvard的网络。

我呢,酒倒是有,只是分手之夜也没这机会了,再说有Mark的前车之鉴,我也不敢真做这么个网站把自己搞出个处分来。

上次看教学管理系统的时候,玩到后来没意思了,也在考虑下载全部照片看看,但是呢,毕竟人家是教学管理系统嘛,还真是挺周全的。查询条件不仅有学号,还有一个PID,随机字符。

这个可就没辙了,研究了很久还是放弃了。

昨晚,机缘巧合在另一个地方发现了能拿到全部的数据,比我想要的更多……

(……我还是觉得我这个时候写博客完全是在作死,no zuo no die……)

后面的就简单了。

拉到的是一个xml,包含全部信息,这种时候当然是Python上了,最方便。

# -*- coding: utf-8 -*-

import xlrd
resultFile = open("./info.txt", "w")
fname = "./info.save.xls"
data = xlrd.open_workbook(fname)
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols
for i in range(nrows):
if i==0:
continue
sno = table.cell(i, 0).value
if(len(sno)==8):
resultFile.write(sno+'n')
resultFile.close()
print "All Done"

 

脚本简单的从xml中拉出了所有学号,省得遍历。

下面是实际下载用的脚本了,其实更短。
(具体地址隐去)

# -*- coding: utf-8 -*-

import urllib
infoFile = open("./info.txt", "r")
for sno in infoFile.readlines():
sno=sno[0:-1]
print sno
urllib.urlretrieve("http://210.35.95.97/dlyq/StudentPhotos/"+sno+".jpg", "./photo/"+sno+".jpg")

搞定。
下一步可以再按照男女分类啊,什么的……
Facemesh看来是一个还挺麻烦的事情,现在还真没这闲工夫,而且……确实是对同学不太尊重(T T)因为我真的很想把我一卡通的证件照换一张啊!!!

很简单就搞定了男女分类嘛,Python果然好用~

# -*- coding: utf-8 -*-

import xlrd
import os
import os.path
import shutil

fname = "./info.save.xls"
dic=dict();
data = xlrd.open_workbook(fname)
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols
for i in range(nrows):
if i==0:
continue
sno = table.cell(i, 0).value
gender = table.cell(i,2).value
# print sno+' '+gender
dic[sno]=gender

list_dirs = os.walk('./photo/')
for root, dirs, files in list_dirs:
for f in files:
# print os.path.join(root, f)
if dic[f[:-4]].encode('utf-8')=='男':
print f[:-4]+' '+dic[f[:-4]]
shutil.copy('./photo/'+f, './photo/male/'+f)
elif dic[f[:-4]].encode('utf-8')=='女':
print f[:-4]+' '+dic[f[:-4]]
shutil.copy('./photo/'+f, './photo/female/'+f)
print "All Done"

好吧,可以说结果了……
结果就是
我们一整层楼的人像蛇精病一样笑了一个晚上直到1点钟啊!!!!!!!!!!!!!!!!!!!
真的是证件照毁三观啊!!!!!!!!!!!!!!!!!!!!
所有美女全部现原形啊啊啊啊!!!!!!!!!!!!!!!!!
很熟的同学愣是看了十几次都没认出来啊!!!!!!!!!!!!
太恐怖了啊!!!!!!!!!!!!!!!!!!!!!!!!!
我觉得如果真的写了个Facemesh发到网上去,肯定会被全体女生集体围攻致死……切成一条一条的……
算了吧还是小命要紧,只是,再也无法直视同学们了T T

最后再免费附赠我用来识别教学管理系统验证码的Tampermonkey脚本吧……

// ==UserScript==
// @name SHIEP教学管理系统登录验证码识别
// @namespace com.find1x.js.shiepTeachingManagement
// @version 0.1
// @description 自动填写教学管理系统验证码
// @match http://210.35.95.65:7777/schoolmanager/*
// @match http://210.35.95.65:7777/schoolmanager/
// @copyright 2014+, FindiX Studio
// ==/UserScript==

window.onload = function() {
var image = document.getElementsByTagName('img')[8]; //如果要用在greasemonkey脚本里,可以把下面的代码放在image的onload事件里
var canvas = document.createElement('canvas');
var ctx = canvas.getContext("2d");
var numbers = [
//模板,依次是0-9十个数字对应的明暗值字符串
"1100011100100100111000011100001110000111000011100001110010010011100011111111111111110000000",
"1110011100001111100111110011111001111100111110011111001111100111000000111111111111110000000",
"1000011011100111110011111001111100111100111100111100111100111110000001111111111111110000000",
"1000001011110011111001111001100001111110011111100111110001110011000011111111111111110000000",
"1111001111000111100011101001101100101110010000000111100111110011111001111111111111110000000",
"0000000011111101111110000011111100111111001111100111110001110011000011111111111111110000000",
"1100001100111010111110011111001000100011000011100001110010011001100001111111111111110000000",
"0000000111110011110011111001111001111100111100111110011110011111001111111111111111110000000",
"1000001001110000111000001001100001110000010011000001110000111001000001111111111111110000000",
"1000011001100100111000011100001100010001001111100111110001110011000011111111111111110000000"
];
var captcha = ""; //存放识别后的验证码
canvas.width = image.width;
canvas.height = image.height;
document.body.appendChild(canvas);
ctx.drawImage(image, 0, 0);
for (var i = 0; i < 4; i++) {
var pixels = ctx.getImageData(9 * i + 3, 3, 7, 13).data;
var ldString = "";
for (var j = 0, length = pixels.length; j < length; j += 4) {
ldString = ldString + (+(pixels[j] * 0.3 + pixels[j + 1] * 0.59 + pixels[j + 2] * 0.11 >= 140));
}
var comms = numbers.map(function(value) { //为了100%识别率,这里不能直接判断是否和模板字符串相等,因为可能有个别0被计算成1,或者相反
return ldString.split("").filter(function(v, index) {
return value[index] === v;
}).length;
});
captcha += comms.indexOf(Math.max.apply(null, comms)); //添加到识别好的验证码中
}
document.querySelector("input[name=validateCode]").value = captcha; //写入目标文本框
};

Milestone

Milestone这个词能让我想起很多。

第一个想起来的,是曾经最喜欢的一部手机,Motorola Milestone 2.

它,让我对侧滑机产生了无比的爱。

可惜的是,当年反正因为很多原因吧,没有买,而是随便买了CLIQ用着,当然了,CLIQ我也是有很深的感情的,也是侧滑嘛,而且Motorola的第一款Android,也是我的第一部手机。

一年之后,需要一部电信3G,于是在淘宝上用了一年前1/3的价格,买下了Milestone 2的三网通用版,Droid 2 Global。白色的很漂亮。

虽然没有当年那样的热爱,毕竟当时,Milestone 4都已经出了,侧滑设计也以进入暮年(事实是,在这之后,好像再没有侧滑机型发布)。

但是,还是喜欢到不行,后来在电信卡到期之后,还买过联通卡用,真的是三网通用,很方便呢。

Milestone

拆开来就是 Mile+stone

英里石。

可不就是里程碑么。

也许当时就是这样喜欢这个单词的吧。

Mile,就想起初学英语的时候看的脑筋急转弯

英文中哪个单词最长?

答案是Smiles

因为两个s中间有一英里……

而说到Smiles,呵……后面省略吧(单纯的觉得如果这条线写下去估计今晚就别睡觉了)。

 

今天说,7月要发布一个Milestone版本。

其实今天更是一个Milestone。

经历过那么多个被认为是Milestone的时刻,终于等到今天。

 

继续吧,寻找真实。

勿忘初心,方得始终。