github 的代码管理 无疑是最棒的, 但有时候,我们需要同时提交到 自己公司的 git 代码管理平台

下面我们就来 给自己的 git 项目 添加 多个 远程 仓库

add

给自己的项目 添加 一个仓库

1
git remote add panli http://github.panli.com/React/React.git

push

1
git push panli

git pull error

1
2
Your local changes to the following files would be overwritten by merge
error: Your local changes to the following files would be overwritten by merge:

保存更改

1
2
3
git stash
git pull
git stash pop

然后可以使用git diff -w +文件名 来确认代码自动合并的情况.

完全覆盖本地工作

1
2
git reset --hard
git pull

其中git reset是针对版本

修改 root 密码

1
sudo passwd root

修改ssh 配置文件

以其他账户登录,通过 sudo vi 修改 /etc/ssh/sshd_config

1
2
3
z@zans:~$ su
密码:
root@zans:/home/z# vi /etc/ssh/sshd_config

找到以下内容区域

1
2
3
4
5
# Authentication:
LoginGraceTime 120
#PermitRootLogin prohibit-password
PermitRootLogin yes
StrictModes yes

注释掉 #PermitRootLogin prohibit-password

添加 PermitRootLogin yes

重启 ssh 服务

1
2
root@zans:/home/z# /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.

问题 不能访问

安装完ubuntu后,不能访问win10里面的分区,
访问会提示不能访问XXX ,Error mounting /dev/sda8 at /media/my/XXX: Command-line `mount -t “ntfs” -o

解决办法

1、打开终端:如果没有安装ntfs-3g就要安装:sudo apt-get install ntfs-3g
2、修复挂载错误的相应的分区如提示中的/dev/sda5,输入:

1
sudo ntfsfix /dev/sda5

回车就可以了。

解决办法2

进入window系统设置——控制面板—–电源选项——–

左侧项目栏“选择电源按钮的功能”或者“选择关闭盖子的功能”—–

“更改当前不可用的设置”来 把下面的启动快速启动 去掉选择

安装MongoDB社区版

  1. 通过Ubuntu的包管理系统导入MongoDB的公共密钥
1
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
  1. 创建一个MongoDB软件源的列表文件

创建 /etc/apt/sources.list.d/mongodb-org-3.2.list 空文件.

例如:

1
vi /etc/apt/sources.list.d/mongodb-org-3.2.list

Ubuntu 12.04 在终端下执行:

1
echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

Ubuntu 14.04 在终端下执行:

1
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

将软件源加入到刚创建的空文件中。

  1. 重新加载本地软件包数据库
1
sudo apt-get update
  1. 安装MongoDB包

你可以安装最新的稳定版本的MongoDB,也可以安装指定版本的MongoDB

安装最新的稳定版本的MongoDB

终端下执行如下命令:

1
sudo apt-get install -y mongodb-org

安装指定版本的MongoDB发行包

为了安装指定的发行包,你需要指定要安装的每一个组件包的名称和版本。

例如:

1
sudo apt-get install -y mongodb-org=3.2.1 mongodb-org-server=3.2.1 mongodb-org-shell=3.2.1 mongodb-org-mongos=3.2.1 mongodb-org-tools=3.2.1

如果你只安装 mongodb-org=3.2.1 而没有指定组件包,MongoDB最新版本的每一个包都会被安装,不管你指定的版本是什么。

锁定MongoDB的版本

Ubuntu下会通过 apt-get 命令自动升级MongoDB的版本。为了阻止这样,需要锁定已安装MongoDB的版本。顺序执行如下命令即可:

1
2
3
4
5
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
  1. 启动MongoDB社区版

安装好MongoDB后,数据库服务应该会自动启动。

默认配置下,MongoDB 数据文件 存储在 /var/lib/mongodb,日志文件 存储在 /var/log/mongodb,使用 mongodb 账号运行。你可以通过修改

/etc/mongod.conf 指定日志和数据文件的存放位置。

5.1 启动MongoDB

终端下执行如下命令启动mongod

1
sudo service mongod start

5.2 验证MongoDB已经成功启动

查看 /var/log/mongodb/mongod.log日志文件来验证是否已正确启动,文件如果出现:

1
[initandlisten] waiting for connections on port <port>

表明启动成功。

1
<port>是mongoDB鉴定的端口号,在文件/etc/mongod.conf配置,27017 是默认值。

5.3 停止MongoDB

1
sudo service mongod stop

5.4 重启MongoDB

1
sudo service mongod restart
  1. 卸载MongoDB社区版

完整地从系统中卸载MongoDB,必须

- 通过MongoDB的卸载命令卸载应用程序 
- 删除MongoDB配置文件 
- 删除任何包含属于MongoDB的数据和日志
> 卸载是不可恢复的,请事先做好相关备份工作!

6.1 停止MongoDB

1
sudo service mongd stop

6.2 删除包

1
sudo apt-get purge mongodb-org*

6.3 删除数据文件夹

1
2
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
  1. 可能遇到的麻烦
1
在导入MongoDB软件源证书还有下载MongoDB时出现无法连接情况,那么换个网络环境 试试了!

git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id

本地代码库回滚

  • git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除

  • git reset --hard HEAD~3 :将最近3次的提交回滚

远程代码库回滚

这个是重点要说的内容,过程比本地回滚要复杂

应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布

原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支

操作步骤:

  1. git checkout dev

  2. git pull

  3. git branch dev_backup //备份一下这个分支当前的情况

  4. git reset --hard the_commit_id //把dev本地回滚到the_commit_id

  5. git push origin :dev //删除远程 dev

  6. git push origin dev //用回滚后的本地分支重新建立远程分支

  7. git push origin :dev_backup //如果前面都成功了,删除这个备份分支

如果使用了gerrit做远程代码中心库和code review平台,
需要确保操作git的用户具备分支的push权限,
并且选择了 Force Push选项(在push权限设置里有这个选项)

另外,gerrit中心库是个bare库,将HEAD默认指向了master,
因此master分支是不能进行删除操作的,最好不要选择删除master分支的策略,换用其他分支。
如果一定要这样做,可以考虑到gerrit服务器上修改HEAD指针。。。不建议这样搞

参考资料:https://review.typo3.org/Documentation/access-control.html#category_push

下载

官方下载地址

Windows 64-bit 2008 R2+

安装

  • 安装路径 E:\Program Files\MongoDB\Server\3.2\bin
  • 设置数据文件路径 E:\Program Files\MongoDB\Server\3.2\data\db
  • 设置数据日志文件 E:\Program Files\MongoDB\Server\3.2\data\db\logs.txt

配置Mongo服务端

1
2
E:\Program Files\MongoDB\Server\3.2\bin>
mongod --logpath "E:\Program Files\MongoDB\Server\3.2\data\db\logs.txt" --logappend --dbpath "E:\Program Files\MongoDB\Server\3.2\data\db" --directoryperdb --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install

然后到服务中启 mongodB 或者 命令行 net start MongoDB (服务名)

客户端连接

下载 Robomongo

停止服务

1
2
3
E:\Program Files\MongoDB\Server\3.2\bin>net stop MongoDB
MongoDB 服务正在停止.
MongoDB 服务已成功停止。

首页弹框广告图,从此由你来掌控

研发点起

每次修改会出现一系列的 Bug ,时间不对,图片没上传…等等
为了能够不做重复造轮子的生活
我们决定首页弹框广告由后台管理

弹框遵循一定规则

  • 就是一张广告图
  • 每天弹一次
  • 其他参数后台自定义设置

参数设置

1
2
3
4
5
6
7
8
9
10
{ 
startTime: "2016/2/15 00:00:00",
stopTime: "2016/3/18 00:00:00",
imgW: "470",
imgH: "522",
imgSrc: "http://sf.panli.com/Ued/Pc/index/images/layer20160315.png",
link: "http://www.panli.com/news/Topic.aspx?nid=363",
closeBtnLeft: "440",
closeBtnTop: "0"
}

下面的单位都是 像素(px);

不要填写单位,直接填写数字

  • startTime 开始时间
  • stopTime 结束时间
  • imgW 图片的宽度
  • imgH 图片的高度
  • imgSrc 图片的地址
  • link 点击跳转链接地址
  • closeBtnLeft 关闭按钮距离整个图片左边的距离
  • closeBtnTop 关闭按钮距离整个图片上边的距离

时间交叉

可以添加多个弹框广告, 但每个广告的 开始时间和 结束时间不要有交叉。

关于图片切出

做好广告图后, 一般是 PSD 文件

请直接把广告主图和关闭按钮一起合并导出,

并测量出 关闭按钮距离 合并后图片的左距离和上距离

在后台输入 关闭按钮的距离参数

广告切片后demo

中奖池

1
2
3
4
5
6
7
8
9
10
$prize_arr = array( 
'0' => array('id'=>1,'min'=>1,'max'=>29,'prize'=>'一等奖','v'=>1),
'1' => array('id'=>2,'min'=>302,'max'=>328,'prize'=>'二等奖','v'=>2),
'2' => array('id'=>3,'min'=>242,'max'=>268,'prize'=>'三等奖','v'=>5),
'3' => array('id'=>4,'min'=>182,'max'=>208,'prize'=>'四等奖','v'=>7),
'4' => array('id'=>5,'min'=>122,'max'=>148,'prize'=>'五等奖','v'=>10),
'5' => array('id'=>6,'min'=>62,'max'=>88,'prize'=>'六等奖','v'=>25),
'6' => array('id'=>7,'min'=>array(32,92,152,212,272,332),
'max'=>array(58,118,178,238,298,358),'prize'=>'七等奖','v'=>50)
);

定义一个数组$prize_arr,id用来标识不同的奖项,
min表示圆盘中各奖项区间对应的最小角度,max表示最大角度,
如一等奖对应的最小角度:0,最大角度30,这里我们设置max值为1、max值为29,
是为了避免抽奖后指针指向两个相邻奖项的中线。
由于圆盘中设置了多个七等奖,所以我们在数组中设置每个七等奖对应的角度范围。

prize表示奖项内容,v表示中奖几率,我们会发现,
数组中七个奖项的v的总和为100,如果v的值为1,则代表中奖几率为1%,依此类推。

中奖概率算法

先来看概率计算函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function getRand($proArr) { 
$result = '';

//概率数组的总概率精度
$proSum = array_sum($proArr);

//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);

return $result;
}

上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,
假设数组为:array(100,200,300,400),
开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内,
如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,
在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。
这样筛选到最终,总会有一个数满足要求。
就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。

这个算法简单,而且效率非常高,关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。

函数getRand()会根据数组中设置的几率计算出符合条件的id,我们可以接着调用getRand()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
foreach ($prize_arr as $key => $val) { 
$arr[$val['id']] = $val['v'];
}

$rid = getRand($arr); //根据概率获取奖项id

$res = $prize_arr[$rid-1]; //中奖项
$min = $res['min'];
$max = $res['max'];
if($res['id']==7){ //七等奖
$i = mt_rand(0,5);
$result['angle'] = mt_rand($min[$i],$max[$i]);
}else{
$result['angle'] = mt_rand($min,$max); //随机生成一个角度
}
$result['prize'] = $res['prize'];

echo json_encode($result);

代码中,我们调用getRand(),获得通过概率运算后得到的奖项,然后根据奖项中配置的角度范围,
在最小角度和最大角度间生成一个角度值,并构建数组,包含角度angle和奖项prize,最终以json格式输出。

为什么我抽不到大奖?

在很多类似的抽奖活动中,参与者往往抽不到大奖,笔者从程序的角度举个例给你看,
假如我是抽奖活动的主办方,我设置了6个奖项,每个奖项不同的中奖概率,假如一等奖是一台高级轿车,
可是我设置了其中奖概率为0,
这意味着什么?这意味着参与抽奖者无论怎么抽,
永远也得不到这台高级轿车。
而当主办方每次翻动剩下的方块时,参与者会发现一等奖也许就在刚刚抽奖的方块旁边的一个数字下,
都怪自己运气差。真的是运气差吗?其实在参与者翻动那个方块时程序已经决定了中奖项,
而翻动查看其他方块看到的奖项只是一个烟雾弹,迷惑了观众和参与者。
我想看完这篇文章后,您或许会知道电视节目中的翻板抽奖猫腻了,您也许大概再不会去机选双色球了。

介绍

凡是基于 chrome 内核的 浏览器 都可以使用本 扩展: 例如市面上 常见的 qq浏览器 、百度浏览器 、360极速浏览器 、猎豹浏览器等等

测试过的浏览器都会在下面留下下载地址 。

下载地址

更多历史版本下载

[x]请下载最新版本的浏览器,速度够快
[x]请不要使用360安全浏览器

版本更新 (当前最新版本 v0.1.5)

请定期访问本页面查看最近版本号及时下载 、移除旧的、 重新安装新版

v0.1.5

  • 订单号获取接口数据筛选
    • 订单号出现 不是16位过滤掉

v0.1.3

  • 天猫的页面数据结构 又改变了(reactjs 渲染取消了)

    • 修复抓取信息的结构算法
  • 修复 在网络错误的情况下,该网络错误的订单 未抓取到信息

    • 网络错误的订单重载抓取
  • 调节抓取的信息的时间点,

    • 由原来的 页面加载完成就抓取 改为 页面加载完成后, 等待抓取时间间隔后再抓取页面信息
  • 默认的抓取时间间隔 改为 7秒

  • 获取订单号接口的数据里面 ,会出现 一条数据里面存着多个订单号

    • 重新查封符合条件的订单号

v0.1.2

修复在 浏览器页面渲染慢的情况,
数据渲染太慢导致无法捕捉到信息

v0.1.1

修复 订单抓取失败 的 展现

增加 网络错误的 统计

增加更多时间选择

v0.1.0
天猫页面 react 重构

导致分解信息失败

v0.0.9

增加 1688 订单抓取

v0.0.8

优化加载引擎,执行效率更高

v0.0.7

修复页面出现 客官,现在网络繁忙,请稍候再试 后无法继续执行脚本

  • 新增需要注入脚本的页面 https://tradearchive.taobao.com/trade/detail/trade_item_detail.htm?biz_order_id=0

v0.0.6

  • 凡是有支付宝交易号的 ,都提交到后台
  • 目前好像每个订单都会有支付宝交易号,因此常规下不会出现 失败订单号

v0.0.5

  • 运单号 和 物流公司的值 如果为 “—“ 则转为 “” (空字符)

v0.0.4

  • 修复 天猫 页面订单号抓取错误, 改为url 参数 获取
  • 新增进度显示
  • 新增 显示 抓取失败订单号
  • 新增 最后一次通信时间
  • 新增 trade.tmall.hk 域名下的抓取

最后一次通信时间 可以知道 抓取是否正在工作

通常停止工作的原因如下:

  • 当前登录帐号的订单号已经全部抓取完毕
  • 抓取页面不在注入范围内
  • 程序报错

目前已经在以下页面注入脚本:

1
2
3
4
"*://buyertrade.taobao.com/trade/detail/trade_item_detail.htm*",
"*://tmtrade.yao.95095.com/detail/order_detail.htm*",
"*://trade.tmall.com/detail/orderDetail.htm?*",
"*://trade.tmall.hk/detail/order_detail.htm?*"

v0.0.3

  • 订单号数据存储重构-划分分片存储,索引表关联

  • 修复 订单 id 数量大的情况下 数据通信保存不了

  • 新增 账户类型切换 自动填写默认 提交地址

  • 增加 http://yao.95095.com/ 域名下的抓取

1
请在使用新版本之前 右击右上角的 红色图标 点击从 chrome 移除选择,在拖拽安装;

v0.0.2

  • init

安装说明

  • 安装 基于 chrome 内核的浏览器 (最好谷歌浏览器,以下操作全部基于 谷歌浏览器)

  • 打开浏览器在 地址栏 输入 chrome://extensions/ (注意,次地址是谷歌浏览器地址,其他浏览器请看下面安装信息)

  • 把得到的 PanCrawl.crx 文件拖拽到 浏览器里 稍等几秒既可以安装

抓取失败

抓取失败的订单 通常有以下几种错误

  • 订单号不属于当前登录的淘宝帐号
  • 订单号状态还没有发货
  • 网络加载失败
  • 淘宝元素页面改动

操作演示

点击右上角的 红色蜘蛛网的 LOGO ,然后点击 更多配置 ,进入后台操作界面。

在文本框内输入 帐号 , 订单号获取地址 ,和 订单号信息提交保存地址 ,选择合适的 抓取间隔时间,
(不建议设置5秒,容易出现机器验证码,时间间隔越长,越安全)
输入完信息后 点击保存设置 ,然后 点击 获取订单号 开始抓取

  • ? 如果提示没有订单,请确定输入的帐号是否正确或者输入帐号 要抓去的订单为空了
  • ? 订单号获取地址 和 提交订单地址 请 @管总
  • ? 如果还有其他问题,请在下方留言

提示信息帮助?

出现 保存数据出错 说明 本地存储的订单号 已经没有了 需要再次点击获取订单号
如果还出现 错误, 点击 清除数据 按钮 关闭浏览器重新启动 填写信息
如果发现订单详情页面 不动了 , F5 刷新一下页面 等等几秒 后观察是否正常可以抓取下一个
请定期清理数据,点击 清除数据 按钮

一台电脑同时抓取多个帐号

操作很简单 您只需要安装多个 浏览器即可

每个浏览器配置好 扩展、 启动抓取脚本,

就可以安心的把浏览器最小化,接着配置下一个浏览器抓取帐号,然后以此类推

如果您电脑安装了 谷歌浏览器 、360极速浏览器 、百度浏览器 、qq浏览器 、猎豹浏览器,

那么就可以同时抓取 5个帐号的订单了

1
2
3
为何一个浏览器不可以同时抓取 多个帐号的订单,原因很简单,一个浏览器你能同时登录多个淘宝帐号吗?

如果一个浏览器能同时登录多个淘宝帐号,那本脚本也可以同时抓取多个帐号订单! (*^__^*) 嘻嘻

360极速浏览器安装

找到浏览器的扩展程序页面 拖拽进去安装
或者打开360极速浏览器 在地址输入 chrome://myextensions/extensions/ 把扩展文件拖拽进去安装

猎豹浏览器安装

点击左上角大豹子头像,鼠标滑到 ->工具 -> 我的应用 拖拽进去安装
或者浏览器地址 输入 liebao://settings-frame/extensions 进入我的应用 把插件拖拽进去安装

记住一定要把 允许访问敏感页面 勾上 否则无法执行脚本

勾选后记得重启下

QQ浏览器安装

点击右上菜单按钮,然后进入 应用中心 把插件拖拽进去安装
或者浏览器地址 输入 qqbrowser://extensions/index 进入应用中心 把插件拖拽进去安装

百度浏览器安装

点击右上菜单按钮,然后进入 我的应用 把插件拖拽进去安装
或者浏览器地址 输入 bdbrowser://settings 进入我的应用 把插件拖拽 进去安装

UC浏览器安装

点击左上LOGO,然后进入 -> 插件 就进入 插件中心 把插件拖拽进去安装
或者浏览器地址 输入 http://extensions.uc.cn/newindex.htm#!hot/recommendation 进入我的应用 把插件拖拽 进去安装

搜狗浏览器安装

点击右上角 工具 -> 选项 -> 扩展管理 -> 显示更多扩展 就进入 插件中心 了 把插件拖拽进去安装
或者浏览器地址 输入 http://ie.sogou.com/app/ 进入插件中心 把插件拖拽 进去安装

搜狗浏览器会给予风险提醒 请勾选 我信任此扩展,仍要继续安装

目前搜索不稳定