去除safari浏览器的默认样式 -webkit-appearance: none;

mac查看端口占用情况 lsof -i tcp:port

upload.py执行失败

upload.py报错“upload review does not support the current workspace version control system”如何解决?

npm 显示ip地址插件, ip.address()

按格式输出json内容

JSON.stringify(obj,null,4);

express.static的其他参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var app = new express();
app.use('/test/', express.static('/test/'));
app.use('/test/',express.static({
dotfiles:'ignore', // 点文件
etag: true, // 是否发送etag标签
extensions:false, // ['html','htm'] 自动增加扩展名
fallthrough: true, // 错误时处理
index: 'index.html', // 默认文件
lastModifed: true, //
maxAge: 0, //
redirect: true, //当是目录时,自动增加“/”
setHeaders: function(res,path,stat){}
}));

console输出彩色文字

console.log(“%c%s”,”color: red; background: yellow; font-size: 24px;”,”警告!”);
在node中输出可以使用库colors

事件代理 delegate 不仅可以代理点击事件,mouseenter和mouseleave,mousemove等事件都可以代理

javascript window.postMessage

时区bug,不同浏览器默认时区不一致,开发使用事件时最好加上时间时区

react学习

  • react数组解析
    1
    2
    3
    {this.state.arr.map(({prop1,prop2}) => (
    <div>{prop1} and {prop2}</div>
    ))}

多个ssh key同时使用

shell 打开finder

  • open .

mac显示桌面

  • F11
  • Command + F3
  • Trackpad 上 五指散开
  • 如果有多个桌面,四指滑动到空白的桌面即可
  • 配置触角 (偏好设置 Mission Control」里可以设定此功能的「触发角」和键盘快捷键;)

学习fis

  • npm install fis3 -g
  • fis3 -v
  • fis3 release
  • fis3 server
  • fis3.match
  • useHash
  • csssprite
  • watch

使用命令行打开webstrom

菜单 Tools->Create Command Line Lancher..
一般命令格式: wstorm 项目路径

sourceTree用webstrom打开项目

sourceTree偏好设置,自定义操作,目标脚本wstorm 参数$REPO

java项目内搜本地部署

  • 安装jdk1.7
  • 安装mysq
  • 导入数据库
  • 配置Run-Edit Configurations

系统

* 修改数据库密码 src\main\resources\app.properties

提交代码(技巧:先检查再合并)

* 合并代码Terminal
    * cd webapp\neisou\build
    * node r.js -o config.js
* 检查代码,提交到cooder,查看地址cooder.baidu.com
    * cd neisouweb\
    * python ./upload.py -o
* 修改版本号:src/main/webapp/WEB-INF/jsp/include/meta.jsp 修改ver(版本号)以及contextPath(调用代码路径:neisou->ns)的值
* 检查无误后提交到vpn,通过demo.neisou.baidu.com

ie9及以下的mousemove

  • 没有buttons,就是说mousemove时没有办法判定鼠标是否按下

browserify

webpack

react

  • react es6中去除掉了getInitialState,使用constructor代替

事件有自己的生命周期,异步处理后再使用时可能会发生改变

func.bind 生成一个新函数,并且新的函数参数已经固定

1
2

chrome代理插件 SwitchySharp

react调试工具

  • chrome插件可以直接看到节点的结构

fiddle autoresponder

PAC代理配置

使用pac的地方
- 百度代理 内搜搜索代理 http://pac.internal.baidu.com/bdnew.pac
- shadowshocks代理配置
- chrome插件 switchysharp
- fiddle的路由是不是呢?可以测试下看

使用express做代理服务器

PAC代理和express服务器结合制作本地测试

  • mac使用terminal设置pac: networksetup -setautoproxyurl “Wi-Fi” “http://somedomain.com/proxy.pac
  • 获取代理地址: networksetup -getautoproxyurl “WI-FI”

Macbook Pro外接显示器分辨率问题

在外接显示器的分辨率设置中按住键盘上的Option键,再点击 Scaled 选项,此时会发现分辨率选项多了很多选择,问题迎刃而解。

最字符串最后一个字符 str.slice(-1);

webstrom好处

  • 自动保存
  • 查看文件编辑历史vcs->Local History -> Show History(快捷键:ALT+~ -〉7)

mac 快捷键MAC苹果系统:

查找相关

command + shift + o 根据文件名查找文件
command + f 查找当前文档
command + r 替换当前文档

代码相关

command + d 副本当前行或选中的区块
command + option + t 将代码以某种格式包括起来
command + option + l 将代码格式化
command + shift + u 切换大小写
shift + return 在任意位置换行
shift + F6 高级修改,可快速修改光标所在的标签、变量、函数等

定位相关

option + f1 在左侧文件树中定位到当前打开文件
command + g 跳转到文档的某一行某一列
command + w 选中当前单词、行、区块等
command + y 删除整行
command + [ 移动光标到代码块前
command + ] 移动光标到代码块尾
command + -> 光标移到行尾
command + <- 光标移到行头
option + -> 以单词为单位移动光标
option + <- 以单词为单位移动光标
command + shift + [ 切换到上一个Tab页
command + shift + ] 切换到下一个Tab页

其他

command + + 折叠区块
command + - 展开区块
command + shift + + 折叠所有区块
command + shift + - 展开所有区块
command + p 显示参数信息
command + mouseover 显示主要信息
control + shift + f find in path
control + shift + j 合并行
control + shift + r replace in path
option + delete delete to word start
option + fn + delete delete to word end

快捷键windows平台

查找/代替

  • ctrl+shift+N 通过文件名快速查找工程内的文件(必记)
  • ctrl+shift+alt+N 通过一个字符快速查找位置(必记)
  • ctrl+F 在文件内快速查找代码
  • F3 查找下一个
  • shift+F3 查找上一个
  • ctrl+R 文件内代码替换
  • ctrl+shift+R 指定目录内代码批量替换
  • ctrl+shift+F 指定目录内代码批量查找
  • ctrl+R 文件内代码替换

    界面操作

  • ctrl+shift+A 快速查找并使用编辑器所有功能(必记)
  • alt+[0-9] 快速拆合功能界面模块(分屏)
  • ctrl+shift+F12 最大区域显示代码(会隐藏其他的功能界面模块)
  • alt+shift+F 将当前文件加入收藏夹
  • ctrl+alt+s 打开配置窗口
  • ctrl+tab 切换代码选项卡(还要进行此选择,效率差些)
  • alt+<-或-> 切换代码选项卡
  • ctrl+F4 关闭当前代码选项卡

    代码编辑

  • ctrl+D 复制当前行
  • ctrl+W 选中单词
  • ctrl+<-或-> 以单词作为边界跳光标位置
  • alt+Insert 新建一个文件或其他
  • ctrl+alt+L 格式化代码
  • shift+tab/tab 减少/扩大缩进(可以在代码中减少行缩进)
  • ctrl+Y 删除一行
  • shift+enter 重新开始一行(无论光标在哪个位置)

    导航

  • esc 进入代码编辑区域
  • alt+F1 查找代码在其他界面模块的位置,颇为有用(左侧文件树)(必记)
  • ctrl+G 到指定行的代码
  • ctrl+]/[ 光标到代码块的前面或后面
  • alt+up/down 上一个/下一个方法

    建议配置版本控制快捷键

  • ctrl+C 提交代码
  • ctrl+p 向远程版本库推送更新
  • ctrl+G 到指定行的代码
  • ctrl+]/[ 光标到代码块的前面或后面
  • alt+up/down 上一个/下一个方法

PAC代理配置

  • 主要函数 FindProxyForURL

    1
    2
    3
    4
    5
    6
    7
    function FindProxyForURL(url,host)
    {
    // 支持javascript,可以使用正则表达式进行处理
    if(host=="http://www.domain.com/") return "DIRECT";
    return "PROXY myproxy:80;PROXY myotherproxy:8080;DIRECT";
    }
  • 返回值

    • “DIRECT” : 不做处理,直接返回
    • “PROXY host:port” 发送到代理服务地址
    • “PROXY host:port;host:port;DIRECT” 多个代理服务地址,自动按顺序请求
  • 其他函数
    • isPlainHostName(host) 判断是否是本地主机
    • dnsDomainIs(host,domain) 判断是否属于某个域
    • localHostOrDomainls(host,””) 判断是否属于某个域或者域名
    • shExpMatch(host,””) 主机名匹配判断
    • url.substring(0,n)
    • dnsResolve(host) 域名ip解析
    • myIpAddress() 本机ip
    • dnsDomainLevels(host)
    • weekdayRange(“WED”,”SAT”,”GMT”) 星期几

示例:匹配test.com到localhost:3000

1
2
3
4
5
6
7
8
9
10
11
12
function FindProxyForURL(url, host) {
if (shExpMatch(host, '*.test.com*')) {
return "PROXY localhost:3000";
}
// 或者使用正则表达式
if (/test\.com/.test(host)){
return "PROXY localhost:3000";
}
return "DIRECT";
}

《移动Web手册》读书笔记

nodejs process.env.NODE_ENV 配置

>
process.env is a reference to your environment, so you have to set the variable there.
To set an environment variable in Windows:
SET NODE_ENV=development

on OS X or Linux:
export NODE_ENV=development

在百度开放云中可以通过app.conf配置环境变量
https://bce.baidu.com/doc/BAE/GUIGettingStarted.html#.E9.85.8D.E7.BD.AEapp.conf

多行文字最后显示省略号及更多

  • 单行文字省略号text-overflow: ellipsis;

    1
    2
    3
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  • 多行文字省略号-webkit-line-clamp: 2;

    1
    2
    3
    4
    5
    overflow : hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
  • jquery.dotdotdot插件计算省略号和显示更多 http://dotdotdot.frebsite.nl/

html5 history操作访问历史

  • history.length // 长度
  • history.back()
  • history.go()
  • history.forward()
  • history.pushState({page: 1}, “title 1”, “?page=1”);
  • history.replaceState({page: 3}, “title 3”, “?page=3”);
  • history.state
  • popstate事件
  • history.js

location.replace函数

jquery生成二维码插件 qrcode

vue.js介绍

webpack 入门指南

轻松入门React和Webpack

node的版本管理工具n和nvm

修改

  • 自增$inc db.doc.update({“username”:’test’},{“$inc”:{“loginTimes”:1}});
  • $set
  • $unset

查找

  • find
  • findOne
  • findById

清空数据代码

1
2
3
4
5
6
// 连接数据库
var db = mongoose.connect(config.db, function (err) {
// 清空数据库
db.connection.db.dropDatabase(function (err, result) {
}
}

原来的加载数据代码(使用mongoose-fixtures)

1
fixtures.load(reuire('../data.js'));

加载代码时,没有考虑到数据延迟问题,假如后来加载的数据的校验需要用到之前的数据,则会因为之前数据不存在而出现问题.

更新代码为

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**使用promise保证只有当前的数据保存成功时,才会继续下一个(因为保存卡片和文档时,需要频道数据)*/
var promise = Promise.resolve();
function saveModel(model){
promise = promise.then(function(){
return new Promise(function(resolve,reject){
model.save(function(err,data){
if(err){
console.log(err);
reject(err);
}else{
resolve();
}
});
});
});
}
gulp.task('db', ['load-all-models'], function (cb) {
// 连接测试数据库
var db = mongoose.connect(config.db, function (err) {
console.log('连接测试数据库',err);
// 清空测试数据库
db.connection.db.dropDatabase(function (err, result) {
if (err) {
throw err;
}
console.log('清空测试数据库');
console.log('加载测试数据');
for(var model in datas){
console.log('加载'+ model);
var Model = mongoose.model(model);
for(var data in datas[model]){
try{
var d = new Model(datas[model][data]);
saveModel(d);
}
catch(e){
console.log(e);
}
}
}
});
});
});

数据代码示例

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
var ObjectId = require('mongodb').ObjectID;
var md5 = require('md5');
var password = md5('123123');
var adminId = new ObjectId();
function time(){
return (new Date()).getTime();
}
exports.User = {
admin: {
_id: adminId,
email: 'admin@baidu.com',
password: password,
nickname: 'admin',
group: 'admin'
},
marry: {
_id: new ObjectId(),
email: 'marry@123.com',
password: password,
nickname: 'marry'
},
james: {
_id: new ObjectId(),
email: 'james@123.com',
password: password,
nickname: 'james'
}
};