参加智谷创业培训记——如何写商业计划书

1. 参加过程:

周日晚上6:00-8:00参加智谷创业培训——商业计划辅导,我提前一个小时就
到了下沙浙江理工大学,夜羽是这所学校毕业的.问了下校园里的同学,比较顺利的找
到了 N311 教室,得吃晚饭,于是又出校门找食堂,食堂在校门外宿舍区,我分不清
南北,在挺远的一个地方,好难找到。我在1楼买了一个煎饼果子,才¥6。简单吃了
又回 N311 教室,就我一个人,5:40了都还没人来,拿出 mac 继续码代码。等到
17:50了,我都怀疑自己搞错了,最近老是犯糊涂,买错票,坐错车,来的时候也是做
错了地铁,杭州1号线,往下沙那边走有两个方向,在客运站分叉,一个去临平的,还
有一个是去哪儿的,我正好坐错了方向,又只好折回来,还好,挺快,没有耽误太多
时间。

我一个人来的,自己坐在那儿孤零零的。于是找周围的人搭讪,都是些小朋友。

培训会实际上6:30半过了都还没开始,我问那个培训的老师什么时候开始,我说我住
在城西,得急着赶回去。结果聊上了,问我是什么项目,我大致说了下,结果在接下
来的讲解中,还多次以我的项目为例……

2. 感受:

这次参加培训的主要是在校大学时居多,并且遇到的几个竟然是大一的……我猜,
他们只是想丰富验下生活罢了,创业艰辛

3. 学到的知识:

讲师说,注册公司非常容易,一周就能搞定;杭州市的创业大赛举办了
3年了,无偿给创业团队种子基金,得奖是3w,按讲师的说法是「害了创业团队」;这
次是江干区的组织的创业大赛,是第一年举办,得奖是5w;面向在校大学生,感觉有
点水,讲师的说法是,现在全国找不到一家直接投钱给大学生的,智谷是第一家,智
谷在做「行业投资」,区别于「风险投资」,风险投资方只能通过上市退出,所以要
求很严格。

4. 总结:

参加这次活动最大的意义在于,认识了一群充满梦想的伙伴,创业路上,并不孤单。

5. 图片

1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg

8.jpg

iOS 8 发布对Hybrid app有什么影响?

iOS 8 正式发布后,基于 UIWebView 的 Hybrid app 性能有望获得大幅提升.

webview 使用了和 safari javascript 引擎

Hybrid app 是基于 UIWebView 的应用,比如 Phonegap/cordova 最终会将 html/js/css 打
包运行在 UIWebView 中。而在 iOS 8 之前,处于安全的考虑[1],只有 Safari 开启了 JavaScriptCore just-in-time (JIT) 技术,实时的将 javascript 编译为机器码。使用了 JIT 技术有什么影响呢?js的计算能力有 200% - 300% 的提升,见下图 [2] —— 注意是js计算能力,对于非计算密集型的,比如游戏之外的项目,可能性能提升不是那么明显,比如参考[3]提到了一个 Todo MVC 的应用,经他的测试也有 20% 左右的提升.

ios_chrome

ios_safari

需要 Hybrid 应应用框架 Phonegap/cordova 跟进

iOS 8 发布了,如果开发者的应用依赖像 Phonegap/cordova 这样的第三方框架,是不能立马享受到带来的好处的,需要 Phonegap/cordova 从 UIWebView 迁移到 WKWebView API. 不过,网络上还没有看到 cordova 跟进的消息,本身 iOS 的正式发布也要等一段时间,拭目以待吧.

参考

[1] http://www.cnet.com/news/ios-8-grants-new-power-to-rival-browsers-web-based-apps/ One possible reason was security: a JIT compiler essentially creates a new program on the fly and marks the region of memory it’s stored in as executable, and a hacker could potentially abuse that privilege.

[2] http://developer.telerik.com/featured/why-ios-8s-wkwebview-is-a-big-deal-for-hybrid-development/

http://developer.telerik.com/wp-content/uploads/2014/06/Chrome_for_iOS_SunSpider.jpg

http://developer.telerik.com/wp-content/uploads/2014/06/iOS_Safari_SunSpider.jpg

[3] http://developer.telerik.com/featured/why-ios-8s-wkwebview-is-a-big-deal-for-hybrid-development/

[4] http://www.minemobile.com/nitro-javascript-engine-in-ios-phonegap-apps/

mongodb 的笔记

1. mongodb 的连接数问题

每次接受一个请求,打开数据库,然后将其关闭。像下面这样:

1
2
3
4
5
6
7
8
app.get('/detail/:id',function(req,res){
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
db.findOne({_id:ObjectId(req.params.id)},function(err,result){
// do sth
db.close()
})
});
})

直觉有点浪费,每次 request 都重新建立 db connection,用完后又关掉,对于高并发的应用来说,尤其浪费。

所以,更好的方式是复用db connection,以下代码摘自 mongodb node native 官方例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var express = require('express');
var mongodb = require('mongodb');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var db;
// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database) {
if(err) throw err;
db = database;
// Start the application after the database connection is ready
app.listen(3000);
console.log("Listening on port 3000");
});
// Reuse database object in request handlers
app.get("/", function(req, res) {
db.collection("replicaset_mongo_client_collection").find({}, function(err, docs) {
docs.each(function(err, doc) {
if(doc) {
console.log(doc);
}else {
res.end();
}
});
});
});

应用初始化时,就建立一个 db 实例,以后所有的连接,都是使用这个 db connection。

并且,通过上面方式建立的 db connection 单独的连接,而是 connection pool,非常高效。


You open do MongoClient.connect once when your app boots up and reuse the db object. It’s not a singleton connection pool each .connect creates a new connection pool. [4]


更进一步,API 还提供了 maxPoolSize 选项,设置连接池的最大值,默认为 5 http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html

### 2. mongodb 连接失败导致 node crash

见 stackoverflow 上的问题 How to ensure Node.js keeps running after MonogBD connection drops? [1],如何让 Node.js 在数据库挂掉后继续跑? 目前没有特别好的解决方案。

首先描述下问题,创建一个 mongodb client:

1
2
3
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
// do sth
});

当db连接断掉后(可以手动kill掉mongod进程来模拟复现当掉的情况),再访问 web 服务,就会出现下面类似的出错:

1
Error: failed to connect to [localhost:27017]

这时候web服务也宕掉了……

理想的情况是,希望出现一个 500 内部错误提示界面,或者提示在升级什么的,但是数据库连接断掉以后,(我猜测)是 throw 了一个 Error 出来,导致 Node 的主进程挂掉了

其中一个解决方案是,将数据库的连接操作放在 domain 中。

1
2
3
4
5
6
7
8
9
10
var d = require('domain').create();
d.on('error', function(er) {
console.log('Oh no, something wrong with DB');
});
d.run(function() {
// 这里使用的是 mongoose
mongoose.connect(config.db, options);
});

domain 的介绍见 文档 http://nodejs.org/api/domain.html, 不过,有点要注意就是 domain 还不够稳定 ,文档标注的是 unstable
不过,附录[1] 说已经用于生产环境中了,并且没有发现啥问题。

3. 总结:数据库连接可以复用;为保证数据库挂掉后,Node.js 主进程仍然继续跑,可以将数据可的连接操作放到 domain 模块中

4. 附录:mongolab 上的一篇博文 Deep Dive into Connection Pooling [3]

参考

[1] http://stackoverflow.com/questions/20689768/how-to-ensure-node-js-keeps-running-after-monogbd-connection-drops/20690008#20690008

[2] http://stackoverflow.com/questions/10656574/how-to-manage-mongodb-connections-in-a-nodejs-webapp

[3] http://blog.mongolab.com/2013/11/deep-dive-into-connection-pooling/ 介绍两种数据库连接方式,一种复用(好),一种不复用(坏)

[4] https://groups.google.com/forum/#!msg/node-mongodb-native/mSGnnuG8C1o/Hiaqvdu1bWoJ

两个hybrid手机开发UI框架

第一个版本:基于chocolatechip-ui

做了一个手机APP练手,一个月前上线了一个非常简单的版本。

v1_1

v1_2

v1_3

v1_4

v1_5

第二个版本:基于 ionic

ios_1

ios_3

使用下来的一些感受

  1. chocolatechip-ui 只是一个UI框架,UI的展示逻辑需要开发者自己处理,亮点在于在不同的平台下,自动匹配到相应的系统UI风格;
  2. http://ionicframework.com/ 只有一套UI风格,就是iOS 7扁平化的风格,ionic 与 AngularJs 进行了深度绑定,如果熟悉mvvm的开发风格的话,开发起来会非常快,不过曲线略微陡峭,不过 ionic 作为UI单独使用也是可以的
  3. 感觉 ionic 提供更为华丽的组件,而且官方的开发论坛也非常活跃,作为一名f2e,学下Angular自是不在话下,第二版的APP,加上学习Angular也就花了4天时间。

买了一口锅

做饭既是让人享受又十分浪费时间的事情,一天做两顿饭,饭后忍不住还看下电视,基本就
花费了5个小时左右,要是再起的晚,9、10点钟才起,白天真的就所剩不多了。在知乎上逛,
[1]发现一个特别适合一个人做饭的神器——塔吉锅。当时看到,没有立马下单,因为有人一起住,
大家轮流着做饭,倒还可以忍受,最近人少了,没人做饭了,于是准备入手一个。

tajiguo

探索下发现,这货的最大毛病就是粘锅!!!

zhanguo

于是,搜索搜索,发现了一口不锈钢不粘锅,已下单。等待尝试……

myguo

[1] http://www.zhihu.com/question/22515987