windows-mongodb-install
windows下mongodb安装
下载mongodb
http://www.mongodb.org/downloads
选择自定义安装
本机路径为:d:\tools\mongodb
建立如下文件目录
数据库路径:d:\tools\mongodb\db
日志路径:d:\tools\mongodb\log
配置文件目录d:\tools\mongodb\etc
建立配置文件d:\tools\mongodb\etc\mongodb.conf
1 | dbpath=d:\tools\mongodb\db #数据库路径 |
启动服务
切换到d:\tools\mongodb\bin
目录下:
- 普通启动
mongod --config d:\tools\mongodb\etc\mongodb.conf
- 注册为windows服务
mongod --config d:\tools\mongodb\etc\mongodb.conf --install
补充
- windows服务卸载
mongod --remove --serviceName "MongoDB"
- 启动服务
net start mongodb
启动成功后,通过浏览器访问 http://localhost:27017
,看到下面的文字,证明启动服务成功!
It looks like you are trying to access MongoDB over HTTP on the native driver port.
- 关闭服务
net stop mongodb
图形化工具
官方提供的很全:https://docs.mongodb.org/ecosystem/tools/administration-interfaces/
mongo express –Nodejs
MongoVUE –.NET
maven3-jdk1.7-problem-fixed
maven3下jdk1.7编译错误解决
环境
1 |
|
使用maven
命令行创建java项目
1 | mvn archetype:generate -DgroupId=org.linfeng -DartifactId=mavendemo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false |
- 创建成功
1 | $ cd mavendemo && ls |
- pom.xml
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
- 执行maven命令
mvn test
- 错误信息
1 | [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project mavendemo: Compilation failure |
解决方案
- 修改
settings.xml
,添加jdk1.7相关内容
1 | <profile> |
缺点:修改所有项目的jre环境
- 修改当前项目的
pom.xml
1 | <build> |
重新执行mvn build
成功!
问题分析
Maven官方文档有如下描述:
编译器插件用来编译项目的源文件.从3.0版本开始, 用来编译Java源文件的默认编译器是javax.tools.JavaCompiler (如果你是用的是java 1.6) . 如果你想强制性的让插件使用javac,你必须配置插件选项 forceJavacCompilerUse.
同时需要注意的是目前source选项和target 选项的默认设置都是1.5, 与运行Maven时的JDK版本无关.如果你想要改变这些默认设置, 可以参考 Setting the -source and -target of the Java Compiler中的描述来设置 source 和target 选项.
#参考资料
how make cygwin multi-color
打开.bashrc
1 | # Default to human readable figures |
而我们要做的只是去掉#,启动即可:
1 | # Default to human readable figures |
然后保存一下,再重启cygwin(或者直接用:source ~/.bashrc
)
how to build a private docker registry
如何搭建docker私服
环境准备
软件包:
centos6.5_x86_64
docker-engine-1.7.0-1.el6.x86_64.rpm
docker环境搭建,请参照官方说明,本文采用的是官方的rpm包
何谓私服
官方的image镜像站位dockerhub,因为伟大的墙的缘故,所以下载镜像是很痛苦的一件事。当然你可以采用其他科学上网或者镜像加速的方法来获取image。
docker官方也提供了一个私服镜像,大家可以通过docker search registry
来查找该镜像。
1 | NAME DESCRIPTION STARS OFFICIAL AUTOMATED |
下载官方registry镜像
- 下载镜像
使用命令docker pull registry
执行下载镜像。
- 查看镜像
下载完毕后,通过docker images
查看该镜像。
- 给镜像打标签
执行这个命令
1 | docker tag registry:latest localhost:5000/registry:latest |
启动镜像
1 | docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry |
这里有几个参数说明下:
- 1.
-e STORAGE_PATH=/tmp/registry
:强制使用存储路径 - 2.
-v /opt/data/registry:/tmp/registry
:绑定本地镜像存储路径 - 3.
-p 5000:5000
:映射容器5000端口到本地5000端口
查看镜像状态
docker ps
查看私服状态
curl http://localhost:5000
显示如下信息,证明registry启动成功:
"\"docker-registry server\""
推送本地镜像库到registry私服
1. 第一步 给本地镜像 打tag
例如给官方的nginx镜像打tag,执行下面的命令行
docker pull nginx
docker tag nginx:latest localhost:5000/nginx:latest
查看镜像库,发现localhost:5000/nginx
的镜像已经有了。
2. 第二步 推送tag到registry私服
docker push localhost:5000/nginx:latest
3. 第三步 查看私服镜像列表
curl http://localhost:5000/V1/search
看到类似这样的信息
1 |
|
拉取私服镜像
1 | docker pull 192.168.20.85:5000/library/centos:7 |
结论
这只是演示如何搭建一个简单的registry私服。因为只有通过命令行方式才能查看私服信息,所以不是很便于操作。下面的博文将演示如何给registry添加web界面。
how to build a private docker registry
如何搭建docker私服
##环境准备
软件包:
centos6.5_x86_64
docker-engine-1.7.0-1.el6.x86_64.rpm
docker环境搭建,请参照官方说明,本文采用的是官方的rpm包
##何谓私服
官方的image镜像站位dockerhub,因为伟大的墙的缘故,所以下载镜像是很痛苦的一件事。当然你可以采用其他科学上网或者镜像加速的方法来获取image。
docker官方也提供了一个私服镜像,大家可以通过docker search registry
来查找该镜像。
1 | NAME DESCRIPTION STARS OFFICIAL AUTOMATED |
##下载官方registry镜像
- 下载镜像
使用命令docker pull registry
执行下载镜像。
- 查看镜像
下载完毕后,通过docker images
查看该镜像。
- 给镜像打标签
执行这个命令docker tag registry:latest localhost:5000/registry:latest
##启动镜像
docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry
这里有几个参数说明下:
- 1.
-e STORAGE_PATH=/tmp/registry
:强制使用存储路径 - 2.
-v /opt/data/registry:/tmp/registry
:绑定本地镜像存储路径 - 3.
-p 5000:5000
:映射容器5000端口到本地5000端口
##查看镜像状态
docker ps
##查看私服状态
curl http://localhost:5000
显示如下信息,证明registry启动成功:
"\"docker-registry server\""
##推送本地镜像库到registry私服
###1. 第一步 给本地镜像 打tag
例如给官方的nginx镜像打tag,执行下面的命令行docker pull nginx
docker tag nginx:latest localhost:5000/nginx:latest
查看镜像库,发现localhost:5000/nginx
的镜像已经有了。
###2. 第二步 推送tag到registry私服
docker push localhost:5000/nginx:latest
###3. 第三步 查看私服镜像列表
curl http://localhost:5000/V1/search
看到类似这样的信息
1 |
|
##拉取私服镜像
docker pull 192.168.20.85:5000/library/centos:7
##结论
这只是演示如何搭建一个简单的registry私服。因为只有通过命令行方式才能查看私服信息,所以不是很便于操作。下面的博文将演示如何给registry添加web界面。
how git version rollback
Git如何进行远程版本回退……
引言
一切都要从一个蛋疼的需求开始,老板说,能给远程仓库的版本回退吗?我说为毛?他说我就是试试看git好使不,我……
咋搞
- 背景
gitcafe 国内知名的源码托管平台
- 分析
1 |
|
- 删除远程分支
首先,任何一个git源码托管平台都会告诉你,别删除远程master分支,因为它是默认的分支……,请移步这里
- 操作步骤
如果远程只有一个master分支,请你创建一个非master分支,然后推送到远程。
有人会问我为什么?打个比方,你见过上旱厕的时候,给自己脚下站着的板子抽走吗?
脚本类似下面这样
1 |
|
此时你查看远程分支应该有两个:master和the_master_backup
设置默认的分支为 the_master_backup
1 |
|
然后你在the_master_backup分支上 回滚到你要回滚的commit_id,然后重建master分支并推送到远程,顺便删除the_master_backup分支(包括远程the_master_backup分支)。
1 |
|
遇到的问题
- 忘记设置默认分支为非master分支
1 |
|
总结
如果你遇到的是所有提交只有master分支,那么希望我这个博文能帮到你。当然git强大的分支功能你基本也用不到了。
javascript oop 15 min programming
javascript的面向对象15分钟教程
第一种面向对象的写法
创建空对象
1 |
|
给对象添加属性和方法
1 |
|
一步完成上面的两件事
1 |
|
访问对象和属性
1 |
|
方法重写
1 |
|
通过this关键字访问内部属性
1 |
|
对象引用
1 |
|
另一个方式引用
1 |
|
有意思的地方 :全局属性
1 |
|
发现此时输出的是bill's name is Global
另一种面向对象的写法
定义对象及属性
1 |
|
创建对象
1 | var DF = new Game(); |
对象属性
1 | DF.title = "星际争霸2"; |
构造方法
1 |
|
this.title = typeof title !== 'undifined' ? title :"";
相当于
1 |
|
创建一个方法来访问这个属性
1 |
|
更好的写法
1 |
|
下次详解javascript的原生对象模型
to be continued~~~~
talk about software engineering
关于软件工程的讨论–质量篇
那为什么软件系统的质量不容易高呢?我觉得主要原因是流程不完善。那为什么不完善?需求容易变。为什么容易变?是因为不论程序员自己,还是需求方,其实潜意识都认为自己做的东西是变更成本较低的。
试想一下,为什么没人在盖高楼盖一半变更需求?为什么没人修大桥修一半变更需求?甚至做衣服做一半的时候变更需求,理发到一半变更需求,都会被人认为是不讲理。但是在软件领域,好像这倒成了普遍现象。
因为整个软件系统的实现,都是虚拟的,看不见摸不着,并不消耗什么物料,所以从这个角度想,变起来当然是容易的。但软件系统的架构,其实也跟实体的没本质区别,变更时候要考虑很多关联因素,并不是就那么孤立的看一小块地方,当然,也会有一些不影响全局的变更。打个比方说,如果你在盖房子盖到一半,那变更外墙颜色肯定是要比变更窗户大小容易的。要是想变得太多,估计只好拆了重来。
下面的讨论更加精彩:
A:其实不是流程问题,老板和甲方问题
A:甲方尤其关键
A:尼玛,要8层楼房,付2层费用
……
javascript asynchronous programming learning :event
javascript异步编程读书笔记之事件机制
事件的调度
- 异步执行
setTimeout
函数的解释:给定一个回调及n毫秒的延迟,setTimeout会在n毫秒后运行该回调。
代码清单1:1
2
3
4
5for (var i = 1; i <= 3; i++) {
setTimeout(function(){
console.log(i); },
0);
};
输出结果:
1 | 4 |
线程阻塞
代码清单2:1
2
3
4
5
6var start = new Date;
setTimeout(function(){
var end = new Date;
console.log('Time elapsed:', end - start, 'ms');
}, 500);
while (new Date - start < 1000) {};队列
javascript使用队列的方式来循环处理请求,这种机制被称为事件循环。