前几天被人给问到了chunked,电话中怎么都没有听清是什么单词,以为是 truck ,心道前端里哪里有这个词汇,被人家狠狠鄙视了一把。电话挂了后才各种搜索,终于知道原来人家说的不是truck,而是 chunked 。
这是做什么用的呢。在服务器端需要做长时间处理例如一个耗时操作、大文件下载等行为时,可以先返回一些数据,并告诉客户端,这只是部分数据。客户端就可以先拿这部分数据做些事情,比如 UI 呈现等等。
查看的方式也很简单,就是看response 的 header ,里面有 Transfer-Encoding ,其值为 chunked。报文体据说是由四段chunk、last-chunk、trailer和结束符组成。当每个chunk 以0开头,则表示长度为0,是最后一个chunk,既last-chunk。结束符号就是CRLF咯。每个chunk 由2部分组成,并由CRLF分隔,第一部分是长度和长度单位(单位一般不写),另外一部分是具体的内容。长度是用的16进制编码的。
对于后端来说,我看网上有说法是,Response.Write方法即是,我更倾向于在Write方法后使用的 Response.Flush()方法。
周末的时候刚把应用的 ios 给上架了,接着他们就问我什么时候出安卓的版本。好久都没有再打开eclipse,安卓的开发我几乎都忘记完了,看样子要重头再来了。
安装好最新的更新,新建立了项目,发现无论是 官方的模拟器还是我那可怜的魅族M9,调试都很慢。慢到什么程度呢,从我按下调试按钮到应用的界面被显示出来,需要35秒+的时间。而我又是那种猜测编程式的,简直很崩溃。
在微博上抱怨了一番,结果表弟发了个关键词 Genymotion,我一查,是一个第三方的android 模拟器,果然不错。这里就推荐给大家,虽然我的这个空间几乎没有多少观众。
首先,需要去 http://www.genymotion.com 去注册一个帐号,这个帐号在后续中会使用到。注册并激活帐号后,就可以下载了。
然后,需要下载安装 vitual box 软件,下载自己对应的操作系统版本就可以了。
接下来,安装上面的2个软件。
第四步,打开eclipse,安装新插件,插件地址是http://plugins.genymotion.com/eclipse/。安装完成后,打开eclipse的选项菜单,里面就有genymotion的配置项,设置 SDK 的目录,以及代理什么的。
运行 genymotion ,创建虚拟设备。接下来就可以开工运行了,非常的方便。
这里我没有写更具体的,因为我觉得对于常见的 windows 和 mac 平台,是非常傻瓜式的,几乎不需要思考。
友人服务器最近到期,准备迁移到阿里云上面。
买好了云服务器后,就开始部署,结果一直报错。说不是有效的32位程序,由于网站的登陆页面使用了加密狗,而报错的就是这个加密狗相关的dll 文件。在IIS 里添加了对32位程序的支持,还是不行,错误提示说是无法加载指定的模块。
后来想到加密狗dll 是用c++开发的,是不是缺少相关运行时导致。不清楚dll是用c++的哪个版本开发的,只好把05、08、12的32/64位运行时都下载了安装。
还是不行。
有点小崩溃了。想到既然是无法加载指定的模块,那应该是缺少模块咯。又用depends查看加密狗dll引用了哪些系统dll。发现引用了msvcr71.dll和mscoree.dll,把这2个dll 从别的电脑上复制到服务器上。运行又报错,不过错误提示发生了变化。
说是 c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\946055b8\92eead15\xxxxxx.dll 拒绝访问。
开始以为是这个目录的权限问题,添加权限还加不上去,估计server 2008 默认是不允许的。后来查询了下,很多人说是需要给系统临时目录添加权限,果断给 temp 目录添加了 network service 权限,发现还是不行。
反复搜索,终于解决,原来是需要在应用程序池设置中将“加载用户配置文件”(Load User Profile)设置为true。
再次运行终于正常出现页面了。接下来又是数据库无法登陆,这个按照网上是说明,选择附加进来的数据库,右键属性,如上图,文件–〉所有者–〉选择用户sa,即可用此sa用户登录数据库。
弄好了这些,都深夜2点多了。
7月份都过去大半了,今天才来写这个月的博客。今天可以来说一说最近发生的一件事情。
这个月,除了玩了很多的LOL外,就是写一个小应用了。某一次在威客网站上接了一个iOS的活,人家已经有android 的版本了,想再来一个iOS的,功能都比较简单。人家问我要多少钱,我很不自信,因为才学习iOS开发没有多久,所以准备说200块。然后又一狠心,又加了50块。
接着就轮到人家不相信了,我想如果从事开发的同学就知道,这个价格是非常低的了。在人家质疑能力的时候,幸好前不久在store上架了一个html5介绍的应用,于是人家也没有多说什么,当然这么低的价格也让人家最终选择了我。
当然最后结果还是不错的,人家主动说250块太低了,然后给加到350块了,后来觉得和我合作很舒服,于是又给添加了350块。虽然钱真的不多,也就一顿饭的支出。但那种被认可的感觉,真的很爽。
因为这个事情,妹子把我说了好几顿了。正所谓万事开头难嘛~再接再励好了。
今天拿到一个 pad mini,所以就想看看糗事在pad 上运行的效果是什么样子的。先在网页上添加了设备的唯一编号,然后运行。结果就报错,弹出错误提示为 “a valid provisioning profile for this executable was not found”。
网上查询了下,大致都是说证书的问题,我印象只是记得在 xcode 的界面中曾提示过什么密码不正确。后来又查看了 provisioning profile ,发现果然没有选择新添加的设备。勾选并重新生成证书,下载安装。问题解决了。
第一个iOS应用终于上架了。这是一个分享传播html5知识的简单应用。历时3个月,被拒绝了5次。通过审核时,真是感觉泪流满面啊。
由于E文水平很菜,当初想了解下苹果从开发到上架的整个流程,于是就想写一个简单的应用尝试看一看。我的很多朋友都是在做前端开发,所以就选择以 html5 作为切入点。
其实最头疼的是没有设计参与进来,所以界面简单而且丑陋。苹果的审核是很严格的,对于不会做设计的我来说,实在是有点难为我。由于程序功能简单,网上很多的界面都只有参考意义。
后来有一次看到微博上一个讲述统计的图片,有点感觉,于是使用了四叶草的变形。也恰好符合程序的几个功能菜单。在最开始的版本里,有放一个广告墙的推荐。被拒绝后在原因描述里说违反了苹果的策略。按说在应用里放广告是很正常的事情,不知道为什么会拒绝。只好给移除掉。
位置是空闲出来了,但是接下来要考虑填充的内容,恰好在看一个 cover flow的特效,那天在家在翻阅一本前端开发的书籍,当时就决定使用这个特效来推荐一些关于 html5的书籍。于是也就有了现在的样子。
应用最初出发点是想熟悉流程的,被苹果拒绝后,看着页面上显示 reject 字样,有点强迫症的我,又开始不甘心了,坚持要给做到通过。是的,最后我坚持下来了,不知道是不是因为他们的审核团队比较烦我才给通过的。
丑是丑了点,我接受各位同学的鄙视,不过你们谁有比较好的设计资源,一定要告诉我呀。
上一个应用中的下拉刷新我是自己摸索着写的,不过是针对 UITableView 的,这次的应用是要针对一个 UIScrollView ,就想用现成的,反正大概原理都差不多,没有必要重复造轮子。于是选择了 EGORefreshTableHeaderView 。
下午就边网上搜索边尝试使用,但是发现这个组件里的文字使用了多语言设置,诶呀我去,我的应用根本不需要多语言,估计写代码的多少都和我一样有点强迫症,于是按照它的结构来添加多语言处理,没有修改源码,顺便就当学习下如何使用多语言呗。
添加语言时,弹出了一个对话框,大概是问是不是要引用系统默认的英文。一想应用又不上国外市场,要着毛用。就取消,然后选择英文,点击删除。列表里干净了,洁癖的人你伤不起。准备添加中文,但是这个时候添加不了了。
对话框里只有一个 Choose files and reference language to create **** localization ,无法下一步了,在这下班的点来了这么下,网上一顿好找,google 时不时和谐,后来终于在 stackoverflow 的某个网页上发现了方法,现在放出来,方便和我一样E文是个半吊子的人。
右键点击*.xcodeproj 文件,选择显示包内容,然后编辑 project.pbxproj 文件,搜索/* End PBXSourcesBuildPhase section */字符,在这个段落的后面添加一个新的段落如下:
/* Begin PBXVariantGroup section */
27548D921611B0BE008EA1CD /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
27548D941611B0BE008EA1CD /* en */,
);
name = Localizable.strings;
path = ../Code;
sourceTree = “<group>”;
};
/* End PBXVariantGroup section */
到这里都还算简单,后面的步骤我是摸索了才明白。
接下来,在项目中添加 Localizable.strings 资源文件,然后在project.pbxproj文件中搜索 /* Localizable.strings in Resources */ 字符串,找到前面的字符串标志,替换我红色标记的部分。记得喔,绿色部分的不要替换,我给替换了然后 xcode 直接崩溃掉。蓝色部分的 path 我就不清楚啥意思了,原帖中只是说让大家自己尝试就知道什么情况了。我看了下project.pbxproj里其它地方对于 Localizable.strings 文件有 path 关键字的描述,最后给修改成 Localizable.strings 这个字符串了,而非上面的 ../Code。
重新打开项目,系统默认的语言就又回来了。接下来就是该怎么办就怎么办了,真长姿势。
后面的总结就是,XCode 真心木有 VS 好用。
昨天编译的时候,突然间给跳出了编译错误。File was built for archive which is not the architecture being linked (arm7s)。反正也看不懂英文,就拿错误信息在网上搜索了下,有人说是修改 build setting ,按照操作,发现木有效果。
于是又重新搜索,发现了解决的方法。XCode -> Project Setting -> BuildSettings -> Build Active Architechure Only 从No改成Yes .
问题解决,编译后果断提交审核。
在我们的 metro/modern 应用中,如果我们的程序想实现直接跳转到微软的windows store中的话,可以参考下面的方法,这些也是我在翻 MSDN 的文档中看到的。
使用协议,关于自定义协议的文章,可以看衣服自己洗的文章。
通过ms-windows-store协议来实现。目前该协议支持3种行为,分别为 PDP、Updates、Search。首先我们要知道应用程序的包名,把应用程序的包名作为参数传递过去就可以了。如果是应用程序本身的话,可以通过 Package.Current.Id.FamilyName 来获得。
完整的程序代码:
await Launcher.LaunchUriAsync(new Uri(“ms-windows-store:PDP?PFN=” + Package.Current.Id.FamilyName));
PDP 是打开应用的列表页,参数 PFN 为应用程序的包名。Updates 是打开 store 的更新页。Search 是打开store 的搜索结果列表页,参数 query 是搜索关键词。