wangjinlong's blog


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

通过vagrant构建开发环境

发表于 2015-11-18

通过vagrant构建开发环境

之前学习saltstack时,minion端实在服务器上,没有在自己的本机。使用起来非常不爽,如果想测试两台的情况就傻逼了。同事推荐了vagrant
马上用了起来,很快就搭建起了个虚拟环境并把salt安装了上去。爽歪歪。

vagrant

Vagrant 是一款用来构建虚拟开发环境的工具。

我的开始的理解认为和docker类似。但实际用上才知道要比docker重,封装的是VirtualBox的虚拟机。

安装

  1. 安装VirtualBox
  2. 安装 Vagrant
  3. 选择下载自己的镜像(我用的是网上找的centos6.4)
  4. 添加自己的镜像到 Vagrant
  5. 启动 Vagrant

简单几步, 一个虚拟环境就搞定了。

问题

  • Vagrantfile的理解(文档还没有细看)
  • 在虚拟环境中,如何连接宿主机? (现在我直接把宿主机局域网ip写入minion,没有问题)

后记

这样,用自己的mac就完全能模拟saltstack环境

下一步要加快对salt的学习了。一些基本的概念在脑中已经有了理解,需要仔细看文档并实践掌握

参考

  • 使用 Vagrant 打造跨平台开发环境

  • https://docs.vagrantup.com/v2/getting-started/boxes.html

自动化运维工具saltstack[二]

发表于 2015-11-13

自动化运维工具saltstack[二]

基本配置

建立state树

  • 所谓state只是salt的一种概念,用来保存各种配置yaml的文件。

  • 在Salt中启动一个中心state系统,需要首先确保已经建立了Salt文件服务. 编辑master配置文件(file_roots) 取消如下行的注释

    file_roots:
          base:
            - /srv/salt
    
  • 创建/srv/salt文件夹, 在里面创建top.sls 写入

    base:
        '*':
         - webserver
    
  • 在同一位置穿件webserver.sls 写入

    redis:
        pkg:
         - installed
    

    这里我们仅仅测试一个简单的安装redis命令

  • 执行 sudo salt '*' state.highstate
    这个命令相当于把配置推到minion上去!

自动化运维工具saltstack[一]

发表于 2015-11-06

自动化运维工具saltstack[一]

今年的工作已经转向了运维开发, 这是一个全新的领域,也是一个对自己的心得挑战。之前都是东搞西搞,一直也没有专注过某一块东西,总感觉这个下去对自己并不有利。希望通过1-2年时间,在这个运维开发的领域能够沉淀一些自己东西。处理自己工作的时间, 空余时间也要多研究一些之前没有接触过的东西

saltstack简介

saltstack是一个自动化运维工具, 文档见这里或者见中文文档。

对我来说为什么选择学习saltstack?

  • saltstack是一个比较先进的自动化运维工具,要比puppet,chef等工具晚出来,觉得以后肯定要比puppet等使用更加广泛。同样的工具还有ansible,如果以后有可能我也要看一下。

  • saltstack 使用python语言编写, 自己本身对python比较熟悉,而且也是从工作以来一直使用的语言。以后研究 salt源码或是拓展第三方模块的时候应该会更顺手

saltstack起步

环境介绍

  • master使用自己的mac

  • minion使用一台测试服务器centos

安装

####master

python, pip这些都很熟悉了,直接就可以安装好。在我mac上安装的时候没有遇到问题,如果有根据报错google一下,应该没什么问题

pip install salt

安装完成之后需要在 /etc/salt/ 下新建一个 master 文件
并把配置文件copy进来

之后

sudo salt-master --log-level=all

成功启动master

image

####mininon

minion在centos上, 使用yum安装, 需要先添加epel源

wget -c http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

然后直接yum安装

yum -y install salt-minion

接着在vim /etc/salt/minion编辑配置文件,暂时先打开

master: 10.0.2.2
id: 'minion1'
file_client: remote

这三项配置。master 指向mac的IP

/etc/init.d/salt-minion start

成功启动minion

iamge

####授信minion

sudo salt-key -a minion1

sudo salt-key -L

image

####测试是否联通

在master上执行

sudo salt '*' test.ping

显示

image

表示联通

###后记

万里长征第一步, 已经把环境搭好, 然后一点点吃透!

###参考

http://warcraft3.blog.51cto.com/6514883/1362831

https://docs.saltstack.com/en/latest/topics/tutorials/walkthrough_macosx.html

https://docs.saltstack.com/en/latest/ref/configuration/examples.html#configuration-examples-master

http://rfyiamcool.blog.51cto.com/1030776/1262537

一些管理后台页面

发表于 2015-11-03

一些管理后台页面

  • 有赞商城

image

image

image

  • 孔明社交

image

image

  • 微信公众平台

image

image

image

image

image

image

image

image

image

image

image

分治法

发表于 2015-08-04

昨天做leetcode的一道题,用到了分治法。感觉和快速排序一个
意思,把这两个题目放在一起看一下。

只要在了解一下递归的执行逻辑。

Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.

Example 1
Input: “2-1-1”.

((2-1)-1) = 0
(2-(1-1)) = 2
Output: [0, 2]

Example 2
Input: “23-45”

(2(3-(45))) = -34
((23)-(45)) = -14
((2(3-4))5) = -10
(2((3-4)5)) = -10
(((23)-4)5) = 10
Output: [-34, -14, -10, -10, 10]

解法:

class Solution:
# @param {string} input
# @return {integer[]}
def diffWaysToCompute(self, input):
  res = []
  for i,val in enumerate(input):
      if val=="*" or val == "-" or val == "+":
          left = self.diffWaysToCompute(input[0:i])
          right = self.diffWaysToCompute(input[i+1:])
          for j, jv in enumerate(left):
              for k, kv in enumerate(right):
                  if val == "+":
                      res.append(jv+kv)
                  if val == "-":
                      res.append(jv-kv)
                  if val == "*":
                      res.append(jv*kv)
  if not res:
      res.append(int(input))
  return res

惨不忍睹

发表于 2015-07-15

被虐

优酷面试,也不算被虐吧,还是表现不够好,基本功不够扎实。
算法真特么让人头疼,项目聊得再好也没用。平时的东西研究的不够深入。
但是今天的聊天让我知道了:
热爱技术就要深入研究,做不了大项目也要往大项目的架构上去考虑,平时还是想的东西太少了。
比如工业级的rabbitmq的设计好考虑那些问题等等。算了,再出发吧,我就不信了。

今天遇到的技术问题总结:

  • ip转int
  • python 修饰器传参数
  • 二叉树任意两点最短路径
  • 按库存比例返回商品
  • 找到K个最小数

写一个用来去掉知乎样式的chrome插件

发表于 2015-07-06

最简单的chrome插件

###manifest.json
最主要的配置文件

{
"name": "clearZhihuCss",
"version": "1.0",
"description": "nobody can see what i'm look for",
"permissions": [
"tabs", "http://*/*", "https://*/*"
],
"browser_action": {
  "default_title": "clear css",
  "default_icon": "icon.png",
  "default_popup": "popup.html"
},
"content_scripts": [
{
  "matches": ["http://*/*", "https://*/*"],
  "js": ["jquery-1.11.2.js","content.js"]
}
],
"manifest_version": 2
}

content_scripts中的脚本可以用于操作页面的dom

'一键下班' or '水滴下拉刷新'?

发表于 2015-07-03

##参考文章

  • 转载自AlloyTeam:使用web模拟手Q水滴下拉刷新效果
  • 手机 QQ 的一键消除红点功能是怎么想出来的?

##思路

####静态实现

image
按照参考文章1中所述, 准备使用canvas实现。
画两个圆加上两条贝塞尔曲线,来实现图中效果。

#####两个圆形

canvas画圆形:

context.arc(x,y,r,sAngle,eAngle,counterclockwise);
  1. x: 圆的中心的 x 坐标。
  2. y: 圆的中心的 y 坐标。
  3. r: 圆的半径。
  4. sAngle:起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)。
  5. eAngle:结束角,以弧度计。
  6. counterclockwise: 可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。

    image

#####弧线

画贝塞尔曲线:

context.quadraticCurveTo(cpx,cpy,x,y);

其实就三个主要要素:

  1. 开始点
  2. 控制点
  3. 结束点

#####坑

遇到的最大的坑没想到居然是如何填充画完之后的图。
最后的解决办法,一定要保证起始点和结束点重合,这样,
closepath之后,在fill()就能出现我想要的!

#####代码和效果

function draw(){
  var canvas=document.getElementById('canvas');
  var context=canvas.getContext('2d');
  context.fillStyle="#FF0000";
  context.strokeStyle = "red";
  //开始画图
  context.beginPath();

  //画第一条曲线
  context.moveTo(40,40);
  context.quadraticCurveTo(60,60,50,80);

  //底下的半圆
  context.arc(60,80,10, Math.PI, 0,true);

  //第二条曲线
  context.moveTo(70,80);
  context.quadraticCurveTo(60,60,80,40);
  //上圆
  context.arc(60,40,20, 0,Math.PI, true); //Math.PI*2是JS计算方法,是圆

  //填充
  context.closePath();
  context.stroke();
  context.fill();
}

image
image

####Please 动起来!!
今天有点晚,明天再搞!!!

腾讯的一道面试题

发表于 2015-06-24

###题目
腾讯面试题:根据上排给出十个数,在其下排填出对应的十个数,要求下排每个数都是先前上排那十个数.

###思路
遍历穷举。(还有别的思路没想出来)

####代码
def getCountArray():
success = 0
a = [0,1,2,3,4,5,6,7,8,9]
b = [0]*10
while success == 0:
success = 1
for i, val in enumerate(a):
print i,val
c = b.count(val)
if b[i] != c:
b[i] = c
success = 0
print b

我理解的HTTP

发表于 2015-06-24

1234
jinlong

jinlong

Simple is better than complex

36 日志
1 分类
15 标签
GitHub E-Mail
Links
  • Title
© 2021 jinlong
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4