Root


  • Home

  • About

  • Tags

  • Categories

  • Archives

mac更改ruby版本

Posted on 2018-06-30 | In Ruby

mac更改ruby版本

rvm –default use 2.2.2
rvm install ruby -2.2.2
rvm current //返回当前版本

查看版本 rvm list

rvm list known列出已知的版本
rvm remove 1.9.2

opensearch后端调试

Posted on 2018-06-30 | In Ruby

开发后端

  1. 下载Postman
  2. http://localhost:7979/v1/search/location?q=水果
    v1/search/location?q=水果:后端terminal返回框里内容

调试

  1. 在opensearch.rb中添加(p ‘qqqq’)等用以调试
  2. rescue standardError => e
    添加=> e来进行错误调试,(p e)
  3. bundle exec rake opensearch:locations (迁移opensearch数据)
    –> 在tmp下生成locations.json(需要上传的文件)
    –> 在阿里云网站的地方添加文件

    阿里云:开放搜索
    –> 阿里云地区
    –> 分为线上,测试,开发当前环境(文档总数,需要清楚后再上传文件locations.json)
    –> 在阿里云网站的地方添加文件
    –> 添加3个环境变量(Notes)里

react-redux三个基础原则

Posted on 2018-06-30 | In 前端

一.三个基础原则

  1. Single source of truth
    撤销/重做会很容易实现(状态存在同一棵树下)
  2. state is read only
    view和network callbacks不会直接写入state
    按序执行state改变
    store.dispaich({
    type: ‘COMPLETE_TODO’,
    index:1
    })
  3. Changes are made with pure function
    pure function:可设置顺序,传输额外数据,reducer可复用(编页码)
    1
    2
    import {combineReducers,createStore} from 'redux'
    //createStore:通过传入reducer形成一个全局唯一的store

store对象有3种方法:store.dispatch(),store.subscribe,store.getState()

connect函数具体工作:把Store上的状态转化为内层傻瓜函数的prop(mapStateToProps);把内层傻瓜组件中的用户动作转化为派送给Store的动作(mapDispatchToProps)
Provider:store必须包含三个函数的object,即subscribe、dispatch、getState

redux基础

Posted on 2018-06-30 | In 前端

一. Basics

  1. Actions(纯js对象):从application中发送数据到内存使用store.dispatch(),是信息的payloads,必须有type属性(string常量),所有Action存储在Array中,建议使用
  2. ActionCreators:返回一个action(Todo),需要调用
    执行生成action:dispatch(addTodo(text))才执行,并非自动初始化
    —> 执行action:(bound action creator)const boundAddTodo = text => dispatch(addTodo(…))
    —> bound AddTodo(text):使用React-redux的connect();bindActionCreators():捆绑action creators到dispatch()函数
  3. SourceCode

二.Reducers:action未定义state如何改变,用以改变state

  1. Designing the State Shape
    所有的state都作为一个单独的对象:(1)the currently selected visibility filter;(2)the actual list of todos
    状态树:数据和UI状态分开
  2. Handling Actions
    (1)(previousState,action) => newState
    pure function:同样参数值,函数输出相同的结果,结果的求值不会促使任何可语义上的可观察的副作用或输出
    (2)redux会调用reducer,为未定义的initialState,首次不赋值 e.g todo:[]
    (3)不改变state,创建父本Object.assign()
    Object.assign({必须为空},state,…)
    1
    2
    3
    4
    function todoApp(state = initial(state,action){
    -> newState
    -> default: 原state
    })

(4)使用对象扩展语法的优点在组成复杂对象时会更明显

1
2
3
return getAddIds(state.cart.map(id => ({
_____,______
})))

this用法

Posted on 2018-06-29 | In 前端

一.

(1)javascript的宿主环境是web浏览器,浏览器环境需要提供一些接口
javascript引擎才是真正执行代码的地方,e.g V8,Javascript core
(2)Javascript的宿主环境是nodejs,对应引擎是V8

二.global this

this == window对象
(1)声明变量没有var/let -> 给全局的this添加或改改变属性值
(2)node环境中 REPL:交互的编程环境

  1. 执行js脚本,全局范围内this以一个空对象开始作为最高级的命名空间,this不等同于global
  2. 执行js脚本,用REPL执行一个脚本,用var声明一个变量不会将变量添加给this
    执行js脚本,不用REPL执行一个脚本,用var声明一个变量会将变量添加给this
    (和浏览器中一样)
  3. 声明变量无var和let
    ||global对象|this|
    |-|–|–|
    |用REPL执行|有|无|
    |直接执行|有|有|
  4. 浏览器 this == window,this最大
    node
    执行写好的:声明的变量不会自动添加到this,会自动添加global
    一行行执行:global最大,global=this,声明的变量自动添加到this和global

三.function this

  1. 指代全局范围内this
  2. 严格 –> this变成undefined
  3. 调用函数前有new,this变成一个新值,this不等于global
  4. 绑定事件处理程序,this指代事件处理程序对应的对象 e.g button

四.prototype this

prototype:每一个函数都是函数对象,会自动获得一个特殊属性prototype;用new方法调用函数,可以用this访问给prototype赋的值

  1. 1
    2
    3
    Thing.prototype.foo = "bar"
    var thing = new Thing
    console.log(thing.foo) //"bar"
  2. 实例中this是一个特殊对象,new之后会隐藏同名属性

  3. 从一个function中new的实例,会共享所有的prototype赋值
  4. 可形成原型链,this会一层一层寻值
    Thing1.prototype.foo = “bar”
    Thing2.prototype = new Thing1
    原型链中重新赋值,就会隐藏本身的值
  5. 嵌套函数 中的this没有继承 –> undefined
    把一个实例的方法当成一个值,把值当成函数参数传给另一个函数,但不把实例传给这个函数
    –> 环境变为全局global
  6. 把this捕捉到变量里 self (改变undefined)

    1
    2
    3
    4
    Thing.prototype.logFoo = function(){
    var self = this
    //可调用self.foo
    }
  7. 把一个方法作为一个值传递给一个函数无效

    1
    2
    3
    4
    function doItIndirectly(method) {
    method()
    }
    doItIndirectly(thing.logFoo) //logs undefined
  8. 使用bind解决

    1
    doItIndirectly(thing.logFoo.bind(thing)) //logs bar
  9. 使用apply和call解决

    1
    2
    3
    Thing.prototype.logFoo = function () {
    doIt.apply(this)
    }
  10. 用Object.create(Thing.prototype)替换new

五.object this

  1. 用apply将function绑定到var obj上
  2. 只有有相同直接父元素的属性才能通过this共享变量,即元素嵌套不可以
  3. 嵌套后可以直接用obj.foo调用

六.DOM event this

HTML DOM事件处理程序里,this始终指向DOM节点

七.HTML this

八.重写this

不可override

九.with this

with 将this添加到当前环境
Thing.prototype.logFoo = function () {
with(this) {
}
}

十.jQuery this

this指向HTML元素节点
e.g $( ).each

十一.thisArg this

基础命令

Posted on 2018-06-29 | In 服务器

一.rm语句:rm为删除文件或者文件夹

  1. rm 后面必须跟一个文件名,如果文件不存在,会提示文件不存在。(也可以 -f 不提示信息)。(这里test.text只是表明他是文件,其实只要 rm test 就可以了)。
    avatar
    2.在ubuntu里面删除文件夹必须带 -r 因为删除文件夹和删除文件不同,删除文件夹还要删除子文件,子文件夹。
    avatar
    二.cp(copy)命令:该命令的功能是将给出的文件或目录拷贝到另一文件或目录中。
    avatar
    将/home/home中的内容复制到/root/xy文件夹下
    语法: cp [选项] 源文件或目录 目标文件或目录
    该命令的各选项含义如下:
  • a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
  • d 拷贝时保留链接。
  • f 删除已经存在的目标文件而不提示。
  • i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
  • p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。

  • r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。

  • l 不作拷贝,只是链接文件。
    需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

三.用户语句

1.su root:进入root用户
2.生成普通用户:生成普通用户:sudo adduser bike
avatar
avatar
下面的内容若无要求,直接Enter即可

四.Vi/vim/gedit/nano语句(都是开启文本编辑器)

  1. vi和vim区别在于:vim更高级
    (1)打开之后:点击《i》才可以编辑
    (2)退出:(有些含有说明的按照说明退出)
    点击Esc键,退出编辑模式(不再编辑模式也退出),点击w键后点击:键进而就可以输入退出命令了
    点击:键之后界面就会出现:
    然后输入w或者q或者wq或者w!或者q!或者wq!
    (3)异常退出之后怎么办:异常退出之后会出现同名文件后面多.swp,所以进不去
    avatar
  2. gedit需要安装
  3. Nano
    nano是一个小巧自由,并且友好的编辑器,在大部分linux上都有nano命令。相对vi,不熟悉linux的我感觉nano要简单许多:
    打开后直接编辑,命令如下:
    sudo nano /etc/hosts
    完成后按ctrl+x退出,按y保存,回车

五.Cat语句

bike@iZbp10meg70e4zgyus0e57Z:/root$ cat /root/.ssh/songlian.pub > /home/bike/.ssh/authorized_keys
avatar
六.L语句
1.ls查看文件夹中子目录
2.ll -h查看

七.cd语句

  1. cd ..退出到上一级

八.dd语句

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
http://blog.csdn.net/demo_deng/article/details/9428491

九.基础知识

/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0

十.Chmod语句

  1. linux下chmod -x //去除执行权限
  2. chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为只读,只写和可执行三种
  3. 该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
    • rw- r– r–
      表示log2012.log是一个普通文件;log2012.log的属主有读写权限;与log2012.log属主同组的用户只有读权限;其他用户也只有读权限。

Docker-compile

Posted on 2018-06-29 | In Docker
  1. Dockerfile 记录单个镜像的构建过程, docker-compse.yml 记录一个项目(project, 一般是多个镜像)的构建过程。
  2. 更常见的是, nginx, mysql, smtp 都分别是个镜像,然后这些镜像合作,共同服务一个项目。
    docker-compose 就是解决这个问题的。你的项目需要哪些镜像,每个镜像怎么配置,要挂载哪些 volume, 等等信息都包含在 docker-compose.yml 里。
  3. Dockerfile 记录单个镜像的构建过程, docker-compse.yml 记录一个项目(project, 一般是多个镜像)的构建过程。
  4. docker-compose.yml - 为 docker-compose 准备的脚本,可以同时管理多个 container ,包括他们之间的关系、用官方 image 还是自己 build 、各种网络端口定义、储存空间定义等
  5. dockerfile是自己定义自己的镜像作用。 docker-compose是指定镜像的启动文件,挂载目录,环境变量等等。

ssh生成

Posted on 2018-06-29 | In 服务器

Ubuntu开发日记(一):SSH登录

一.ssh生成

Ssh有公钥和密钥,可要求生成passphrase,也可以没有。.pub为公钥。密钥保存在自己的Linux系统上。然后公钥上传到Linux服务器,之后我们就能无密码SSH登录了.SSH密钥就好比是你的身份证明。就是一种加密算法,有很多类型的,默认的RSA长度是2048位.

  1. 阿里云生成:阿里云默认生成2048位的rsa类型加密:https://helpcdn.aliyun.com/document_detail/51793.html
    Ssh-keygen
  2. 生成自己生成的密钥为id_rsa,存储在C:>Users>lenovo>.ssh文件夹中
    生成方式:制造密钥对,在Git Bash中使用root来生成rsa公约和密钥,命令:ssh-keygen -t rsa(若在系统中生成http://blog.csdn.net/spring292713/article/details/14000737)
    avatar
    http://blog.csdn.net/permike/article/details/52386868

[root@host] ssh-keygen <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory ‘/root/.ssh’
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:

0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

二.使用Xshell登录登录用户

http://blog.csdn.net/kangshihang1998/article/details/60465724?locationNum=2&fps=1

三.生成普通用户:sudo adduser bike

avatar
avatar
下面的内容若无要求,直接Enter即可

四.

更换bash和dash(sh):两种状态下的语句不同
相互切换:sudo dpkg-reconfigure dash
查看:/bin/sh
avatar

五.复制公钥(不确定,有待考究)

avatar

六.设置root密码

avatar

  1. 修改普通用户权限,允许root
  2. chmod u+w /etc/sudoers//添加文件的写权限
  3. vi /etc/sudoers//添加普通用户的root权限
  4. chmod u-w /etc/sudoers//关闭文件的写权限
  5. 编辑/etc/sudoers文件。也就是输入命令”vim /etc/sudoers”,进入编辑模式,找到这一 行:”root ALL=(ALL) ALL”(这一句不同系统可能不同)在起下面添加”xxx ALL=(ALL) ALL”(这里的xxx是你的用户名),然后保存退出。
    所以自行添加时需要关注root用户的格式,xxx用户应该要写成一样的

  6. root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)

  7. 欲切换的身份与执行者的身份相同,不需要输入密码
  8. /etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令
    如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
    ( %wheel ALL=(ALL) NOPASSWD: ALL)

ps:这里说下你可以sudoers添加下面四行中任意一条
youuser ALL=(ALL) ALL
%youuser ALL=(ALL) ALL
youuser ALL=(ALL) NOPASSWD: ALL
%youuser ALL=(ALL) NOPASSWD: ALL
第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.

七.格式化并挂载磁盘

格式化次磁盘
http://blog.chinaunix.net/uid-25829053-id-3067619.html
(Linux下添加新硬盘,分区及挂载)
1.查看磁盘和系统盘sudo fdisk -lu
avatar
2.查看格式化的类型sudo mkfs.
avatar
3.查看磁盘具体内容sudo fdisk -l /dev/vdb
avatar
4.格式化磁盘mkfs -t ext4 /dev/vdb
avatar

挂载磁盘

1.挂载磁盘到/mnt: mount /dev/vdb /mnt
2.查看挂载情况:df -TH
avatar
挂载:mount /dev/vdb /mnt
取消挂载:umount /dev/vdb /home

ssh 所选的用户密钥未在远程主机上注册
错误原因:硬盘本来挂载点为/mnt,修改为/home后用户没有修改权限,导致结果
错误修改方法:先把磁盘恢复挂载到/mnt 下面,然后把整个/home 文件夹内的内容在根目录下面复制一份,随便叫另外一个名字。然后再把磁盘挂载到/home 下面,然后再把之前copy出来的文件再copy进新的home文件夹下面。需要注意的是拷贝的只是/home中的内容,刚开始我就将/home中本来有的内容,拷贝成了/home/home,这样的话是没用的,必须和原来一样才可以

八.虚拟内存

虚拟内存:free -m可查看虚拟内存大小(swap大小,951为951MB大小)
https://wenku.baidu.com/view/0e23f9f9a6c30c2258019e3d.html
http://www.educity.cn/os/1577257.html
1.首先用命令free查看系统内 Swap 分区大小。 free -m
total used free shared buffers cached Mem: 1002 964 38 0 21 410 -/+ buffers/cache: 532 470 Swap: 951 32 929
可以看到 Swap 只有951M,不符合 Oracle-xe-client 的安装要求。
3.创建一个 Swap 文件。 mkdir swap
cd swap
sudo dd if=/dev/zero bs=1024 count=100000 of=swapfile
avatar
出现下列提示,上面命令中的 count 即代表swap文件大小。
记录了 100000+0 的读入 记录了 100000+0 的写出
102400000 字节 (102 MB) 已复制,0.74704 秒,137 MB/秒
(count=2100000时大小为2G)
3.把生成的文件转换成 Swap 文件 (sudo) mkswap swapfile
Setting up swapspace version 1, size = 102395 kB
no label, UUID=09fde987-5567-498a-a60b-477e302a988b
出错记录:sudo dd if=/dev/zero of=swapfile bs=1024
count=100000
(dd语句从/dev/zero输入,系统不能识别bs和count的参数)
错误显示为:系统生成了一个名称为《swapfile bs=1024
count=100000 》的文件
avatar
所以应该正确语句为sudo dd if=/dev/zero bs=1024 count=100000 of=swapfile
4.激活 Swap 文件: sudo swapon swapfile
再次查看 free -m 的结果。
total used free shared buffers cached Mem: 1002 967 34 0 22 410 -/+ buffers/cache: 534 467
5.若是临时生成swap
需要将swapfile删除: 如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令。 sudo swapoff swapfile
如果需要一直保持这个 swap ,换到root 然后把它写入 /etc/fstab 文件,设置自动挂载。
swapfile path(修改) swap swap defaults 0 0
(需要再查一下)

九.保证普通用户一定可以登录,关闭ssh的root登录权限

vim /etc/ssh/sshd_config
关闭root权限
禁止root用户的登陆,修改/etc/ssh/sshd_config
permitrootlogin yes 改为
permitrootlogin no

Ajax基础

Posted on 2018-06-29 | In 前端

Ajax

Ajax从服务器获取,用componentDidMount(调用数据)设置Ajax
请求成功,再用setState重新渲染
(1)$(this)获取组件
(2)$(e.target)获取数据
jQuery:
(1)ajax-get()方法
(2)远程HTTP GET请求载入信息
(3)请求成功时可调用回调函数
(4)$ajax较复杂,出错时也会执行

React-mixin

Posted on 2018-06-29 | In 前端

一个mixin对象上的方法都混合到了另一个组件
无render,不需渲染DOM,无state(setState)
抽离公共功能
只提供接口

1…567…9

Root

87 posts
20 categories
23 tags
© 2018 Root
Powered by Hexo
|
Theme — NexT.Mist v5.1.4
本站总访问量 次 | 有人看过我的博客啦