LinkedIn Reddit icon

简单其实不简单

Actually, simplicity is not simple.

黑群晖安装

使用到的工具及软件 1.由nas2x论坛大神Ardentwheel修改的1.04b引导。原帖地址: https://www.nas2x.com/threads/asrock-j3455-itx-ds918-1-04b-loader.615/ ;引导下载链接:https://mega.nz/#!keAhECwC!9NwuIsJ_ZacjUdcSxBC508V6fa_VYH8Qbypv_K9iZKA;下载后解压得到synoboot.img镜像文件 2.群晖DSM6.22。下载地址:https://archive.synology.com/download/DSM/release/6.2.2/24922/DSM_DS918+_24922.pat 3.DiskGenius。下载地址:https://www.nas2x.com/downloads/diskgenius-4-9-6-564.17/ 4.芯片无忧。下载地址:https://www.nas2x.com/downloads/chipeasy-en-chs.10/ 5.Win32 Disk Imager 1.0.0 简体中文 。下载地址:https://www.nas2x.com/downloads/win32-disk-imager-1-0-0.2/ 6.优盘一个。8G就够了,大于8G也行,只不过剩余空间也是浪费。 引导盘制作 1.使用DiskGenius打开synoboot.img。打开方式:启动软件后点击“硬盘”—“打开虚拟硬盘文件”。 2.依次展开虚拟磁盘的“ESP”—“grub”,在右边找到grub.cfg,右键—复制到“桌面”。 3.使用写字板或者其他文本编辑工具打开桌面上的grub.cfg文件,找到”set vid=0x1908″和”set pid=0x0226″。 4.插入优盘,打开“芯片无忧”,稍等片刻找到vid和pid,将此处的vid和pid后面的四位数分别填写到上一步写字板中的set vid和set pid处替换原来的值,注意:原来的值前面的0x表示16进制,不要删除。替换后保存文件。 我的优盘的vid和pid就是0000,不要好奇 5.复制桌面上修改后的grub.cfg文件,回到上面第1部打开的界面安键盘上的”Ctrl”+”V”,提示是否粘贴选是,询问是否覆盖选覆盖。 将自己优盘的vid和pid填到这里 6.安装下载好的 Win32 Disk Imager 1.0.0 简体中文 。启动软件,选择刚才修改好的synoboot.img,确认优盘盘符是否正确,点击写入,等待完成。 7.至此,启动盘制作完成。拔下优盘,插入暴风酷播云上 安装黑群晖 1.显示器接上暴风酷播云,开机不停按键盘的F11,(是不停的按,不是按着不放)。弹出选项后按上下键选择你的优盘(优盘一般带有USB字样),选带有UEFI字样的。按回车启动 2.暴风酷播云接入网络,并保证和家里的计算机在同一个路由器下。 3.在计算机上打开浏览器,输入网址http://find.synology.com进入搜索群晖界面。 4.搜到群晖后根据提示设置,但在选择安装DSM是点击”手动安装”,选择我们下载好的pat格式的系统文件进行安装。根据提示一路安装即可。 这里选择手动安装

企业信息化账号中台实施

MOZI是什么 MOZI是你的企业级应用信息化架构的基础设施,是政府/企业、应用、员工、用户/客户的连接器。 MOZI整合了身份治理、账号登录、权限管控、租户管理、组织管理、目录服务、API管理等基础而又必须的能力,能帮助应用快速实现产品化和商业化。 MOZI是由开发和运营过集团BUC&ACL原班人马精心打造,稳定可靠。 MOZI产品能力 1.租户是一种组织形式,可以是企业,也可以是一个项目组,也可以是一家门店,你自由定义租户范畴; 2.同一个账号可以加入多个租户内,账号ID保持不变,账号必须加入租户才可以访问目标应用,我们支持你事先把账号添加到租户内,再来访问你的应用,也支持该账号首次登录你的应用成功后自动加入到指定租户内; 3.一个租户可以加入多种不同的账号体系,比如你的租户可以加入BUC小二做运营,也加入合作伙伴的淘宝账号来使用你的产品; 4.你可以自由定制自己的登录页面,保持和你的应用风格一致; 5.可以通过配置让你的应用支持多种登录方式,比如希望你的应用支持淘宝账号和BUC账号登录,只需要配置即可; MOZI账号产品能力 MOZI登录产品能力 MOZI权限产品能力 MOZI租户和目录服务能力 MOZI应用中心产品能力 MOZI发展历程 MOZI当前已服务对象 MOZI典型应用场景 场景 说明 集团员工和生态员工基于不同账号体系协同办公 生态企业部分用户进了集团,但是还有一部分没有进入,MOZI可以支持进了集团的员工用BUC账号登录,然后没有进入集团的员工继续使用你原有账号体系登录。 集团员工和外部商家&合作伙伴基于不同账号体系使用同一个系统来协作 我的产品不仅要给阿里集团使用,也想提供给外部的人来使用,比如猎头,供应商,合作商等。他们没有BUC账号,但是他们有淘宝、钉钉等账号体系,MOZI可以支持各类常见的账号体系,支持不同账号加入不同租户。 直接使用MOZI来自建一套账号体系 我的产品不太适合用市面上的已有账号体系来使用,想自己构建一套,比如手机登录、邮箱登录或者自定义账户名的模式,MOZI也是完全支持的。 我的产品想去阿里云售卖 MOZI是可以支持阿里云账号和RAM账号的,也可以支持阿里云上面的应用来调用我们的服务 我的客户全部是钉钉企业客户 MOZI已经和钉钉深度集成,支持钉钉通讯录实时同步,扫码登录,免登等场面。 我想精确控制我的应用权限,让不同类型的组织&人员有不同的权限 比如我要服务大型的连锁门店,门店分为省市区县等复杂的结构,我想控制不同地区的不同门店的不同身份的人的权限,这个如何做,MOZI可以通过数据权限+授权范围来帮你实现。 我需要人员管理和组织架构管理 MOZI可以支持组织架构无限扩展,人员属性自由扩展,我们还具备标签定义,用户组,多汇报线等能力。 应用对接MOZI能获得什么 价值 说明 降低成本 1.集团已有应用切换到MOZI只需要切换一套SDK。2. 新应用接入MOZI让你省去大量的时间去自建账号&权限体系,更加专注于自身业务 安全保障 MOZI的整体安全能力经过异常严格的检查,具备了集团安全部认可的公网可见应用级安全能力和数据安全能力。 个性定制 MOZI提供了个性化登录、权限组件样式的能力。应用和租户都可以基于扩展点来定制自己的个性样式。 业务拓展 MOZI提供多租户&多账号的支持能力,让应用的目标用户从单一企业和账号拓展到其它多样化的企业和账号平台。 数据价值 登录行为、鉴权行为、服务调用日志等数据经过数据清洗实现离线化数据存储,便于应对各种内审、合规等审计要求。 稳定性 MOZI团队经历数次双十一的大考,对稳定性&可用性非常有经验,让你没有后顾之忧。 持续性 MOZI团队会一直打磨这个产品,无论是体验还是功能,绝不会半途而废,跟随业务一起成长。现在MOZI开始为政府提供账号&权限&通讯录服务,无疑是对我们产品能力的一次重大提升的机会。 MOZI部分功能展示 租户管理员视角首页 租户管理员视角的主页面 MOZI登录 登录后选择租户 自定义登录配置 MOZI数据权限

HTML转换为DOM对象

将String转换为HTML DOM对象 方法一: 使用Range.createContextualFragment() /** * createContextualFragment ie9不支持,所以需要加fixed * Range对象从IE9+支持,所以IE8不可用 */ function create(html){ document.createRange().createContextualFragment(html) } // shim ie9 createContextualFragment var RP = Range.prototype; var RPdoc = document.implementation.createHTMLDocument(''); var RPrange = RPdoc.createRange(); var RPbody = RPdoc.body; if (!RP.createContextualFragment) { RP.createContextualFragment = function (html) { RPbody.innerHTML = html; RPrange.selectNodeContents(RPbody); return RPrange.extractContents(); }; }

H5页面viewport适配

前端圈真乱,这话一点不假。但乱也乱的好处,乱则生变,有变化才有进步。今天还是老调重谈,聊聊移动端页面的适配。因为对于一枚前端而言,天天和页面打交道(H5页面),那么布局的活总是少不了,这也将面临不同终端的适配问题。不知道你是否和我一样,页面布局总是或多或少会有一些蛋疼的事情发生。如果是的话,建议你花点时间阅读完下面我扯蛋的东东。 Flexible承载的使命 Flexible到今天也有几年的历史了,解救了很多同学针对于H5页面布局的适配问题。而这套方案也相对而言是一个较为成熟的方案。简单的回忆一下,当初为了能让页面更好的适配各种不同的终端,通过Hack手段来根据设备的dpr值相应改变<meta>标签中viewport的值: <!-- dpr = 1--> <meta name="viewport" content="initial-scale=scale,maximum-scale=scale,minimum-scale=scale,user-scalable=no"> <!-- dpr = 2--> <meta name="viewport" content="initial-scale=0.5,maximum-scale=0.5,minimum-scale=0.5,user-scalable=no"> <!-- dpr = 3--> <meta name="viewport" content="initial-scale=0.3333333333,maximum-scale=0.3333333333,minimum-scale=0.3333333333,user-scalable=no"> 从而让页面达么缩放的效果,也变相的实现页面的适配功能。而其主要的思想有三点: 根据dpr的值来修改viewport实现1px的线 根据dpr的值来修改html的font-size,从而使用rem实现等比缩放 使用Hack手段用rem模拟vw特性 有关于Flexible方案实现适配,在2015年双十一之后做过这方面的技术文档分享,感兴趣的同学可以移步阅读《使用Flexible实现手淘H5页面的终端适配》一文。虽然Flexible解决了适配终端很多问题,但它并不是万能的,也不是最优秀的,他还是存在一些问题的,比如iframe的引用,有时候就把我们自己给埋进去了。针对其中的一些不足之处,有些同学对其进行过相关的改造,在网上搜索能找到相关的方案。 那么时代在变化,前端技术在不断的变化,试问:Flexible还是最佳方案?Flexible还有存在的必要吗? 最近一直在探讨这方面,这里先告诉大家Flexible已经完成了他自身的历史使命,我们可以放下Flexible,拥抱新的变化。接下来的内容,我将分享一下我最近自己探讨的新的适配方案,或许很多团队同学已经开始使用了,如果有不对之处,希望能得到大婶们的指正;如果您有更好的方案,希望能一起分享一起探讨。 先上菜,再唠嗑 先上个二维码: 你可以使用手淘App、优酷APP、各终端自带的浏览器、UC浏览器、QQ浏览器、Safari浏览器和Chrome浏览器扫描上面的二维码,您看到相应的效果: iPhone系列效果 部分Android效果 **注:**如果扫上面的二维码没有任何效果,你可以点击这里,打开在线页面,重新生成你的设备能识别的二维码号 。 上面的Demo,测试了Top30的机型。目前未得到支持的: 品牌 型号 系统版本 分辨率 屏幕尺寸 手淘APP 优酷APP 原生浏览器 QQ浏览器 UC浏览器 Chrome浏览器 华为 Mate9 Android7.0 1080 x 1920 5英寸 Yes Yes No Yes Yes Yes 华为 Mate7 Android4.

H5页面viewport单位自适应

本文复制于:https://github.com/RaySnow/vw-polyfill/blob/master/other.md 这两年小程序开发火爆,小程序推荐使用的rpx单位,即:750的设计稿,1rpx=1px,750rpx=100vw=100%,这个方案最大的好处在于,设计稿标记的尺寸可以直接用来写css,不需要任何工具计算,开发者无需考虑兼容问题,都由小程序自己去兼容。 这给了我们团队一个启发:为什么我们不把rpx单位或者说这种思想推广开来呢,于是我们提出一个方案:把rpx用于整个前端开发,包括小程序、h5以及其他,打包时把rpx转换为vw,不支持vw的浏览器做降级,开发者无需考虑单位转换。 这里简单介绍下我们建议的方案: 使用rpx书写css,1rpx=1px(设计稿原始单位) 根据应用环境区分打包的时候要不要把rpx转为vw(小程序就不需要转换了),转换方法建议用postss插件:postcss-rpx-to-viewport 判断自己的应用是否需要做vw降级,需要的话,只需在html文件中body标签最前面或最后面引入(或直接插入源代码)vw-polyfill 非常简单2-3步,搞定移动端多屏适配 上代码: .foo { width: 750rpx; height: 150rpx; margin: 10rpx; padding: 1px 1rpx 1px 1rpx; /* all rpx will be converted */ border: 4px solid gray; /* px will not be converted */ font-size: 15rpx; line-height: 14rpx; } .foo { width: 100vw; height: 20vw; margin: 1.33333vw; padding: 6px 0.8vw 6px 0.8vw; /* all rpx will be converted */ border: 4px solid gray; /* px will not be converted */ font-size: 2vw; line-height: 1.

Git用法记录

Git 用法 创建平台访问密钥 创建平台访问密钥后,使用者在 git 平台中的操作的身份验证都通过密钥完成,不会打断正常操作。 # 1. 先生成密钥 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 2. 一路回车生成的密钥 (~/.ssh/id_rsa.pub) 内容添加到 git 平台的 SSH Keys 中就完成了 修改 Git 配置 # windows 操作系统换行配置 git config --global core.autocrlf input # 用户名、邮箱配置 git config user.name yourname --local git config user.email yourname@xx.com --local 克隆代码库 git clone git@xx.com:aa/bb.git 查看分支 # 列出本地所有的分支 git branch # 列出远程所有的分支 git branch -r 创建分支 # 基于本地分支创建 git branch [BRANCH_NAME] git push origin [BRANCH_NAME] # 基于远程分支创建 git branch [BRANCH_NAME] origin/master 绑定分支 # 绑定后操作就能省略` origin [branch]`,使用起来更加方便高效,当然如果有多个远程需要操作就不能省略了 git push -u origin [branch] 切换分支 # 切换到本地分支,如果本地分支不存在自动寻找远程分支 git checkout [BRANCH_NAME] 更新分支 更新 master git pull --rebase origin master 解决 rebase 冲突。 git status # 根据提示打开对应文件,搜索"<<<<<<<"字符,解决冲突后执行 git add -u git rebase --continue # 停止 pull 操作,回 pull rebase 之前的状态 git rebase --abort 提交代码 # 提交到本地版本库 git commit -m "commit message" # 提交到远程 master git push origin master 合并分支 切换到 master。 git checkout master 合并分支。 git merge --no-ff [BRANCH_NAME] 解决 src 目录下的冲突。手动解决教程,使用第三方工具解决冲突 # 解决本次合并的所有冲突 git mergetool # 解决特定文件的冲突 git mergetool src/js/g.

Date操作

JS Date操作 格式化Date对象为String /** * 格式化日期 * @method format * @static * @param {Date} date 日期对象 * @param {string} pattern 日期格式(y年M月d天h时m分s秒),默认为'yyyy-MM-dd' * @return {string} 返回format后的字符串 * @example var d = new Date(2017, 8, 27, 15, 9, 12, 345); console.log(format(d, 'yyyy-MM-d/q hh:mm:ss.S, e')); // 2017-09-27/No.3 15:09:12.345, 3 console.log(format(d, 'M/d/yy')); // 9/27/17 console.log(format(d, 'yyyy-MM-dd hh:mm:ss.S')); // 2017-09-27 15:09:12.345 var t = format(d, 'yyyy年M月dd日 e (第q季)', { e: (val, pattern) => {return (pattern.length > 1 ?

curl基于cookie自动登录签到

在 iamtxt.com 网站上下载电子书需要积分,只好做每日签到这种事。在服务器上写了个 qiandao_iamtxt.com.sh 文件: #!/bin/bash BASEDIR=$(pwd) USERNAME=ooo PASSWORD=xxx LOGFILE="$BASEDIR/iamtxt.com.log" # cookie temp file COOKIEFILE="$BASEDIR/cookie_iamtxt_tmp.txt" # login # -d 登录参数 # -c 保存 cookie 到临时文件中 # -s silence mode LOGINURL=https://www.iamtxt.com/e/member/doaction.php LOGINPARAM="username=$USERNAME&password=$PASSWORD&enews=login&tobind=0&lifetime=315360000&ecmsfrom=https://www.iamtxt.com/" RESPONSE=`curl $LOGINURL -d$LOGINPARAM -c $COOKIEFILE -s | grep "<strong>"` TIME=`date +'%Y-%m-%d %H:%M:%S'` echo "$TIME| $RESPONSE" >> $LOGFILE # update # -b use the cookie file UPDATEURL=https://www.iamtxt.com/e/extend/signin.php RESPONSE=`curl $UPDATEURL -d"userid=310975" -s -b $COOKIEFILE` TIME=`date +'%Y-%m-%d %H:%M:%S'` # write the response to log file echo "$TIME| $RESPONSE" >> $LOGFILE # delete cookie temp file if [ -d $COOKIEFILE ]; then rm $COOKIEFILE fi 添加可执行权限

CSS实例强制换行

强制不换行 div{ white-space:nowrap; } 自动换行 div{ word-wrap: break-word; word-break: normal; } 强制英文单词断行 div{ word-break:break-all; }

CSS优先级

CSS优先级 不如到 W3C 的网站上看一个究竟。相关的标准在 这个页面 可以看到,目前为止的 CSS 标准有三个: CSS1, CSS2, 以及 CSS3。 CSS1 是最早的标准,其中关于层叠顺序的描述在 这里,还提供了一个简单的示例进行说明。 LI {...} /* a=0 b=0 c=1 -> specificity = 1 */ UL LI {...} /* a=0 b=0 c=2 -> specificity = 2 */ UL OL LI {...} /* a=0 b=0 c=3 -> specificity = 3 */ LI.red {...} /* a=0 b=1 c=1 -> specificity = 11 */ UL OL LI.red {...} /* a=0 b=1 c=3 -> specificity = 13 */ #x34y {.

CSS 多行文本溢出显示省略号

现在的浏览器都支持text-overflow:ellipsis属性,用来实现单行文本的溢出显示省略号,但是这个属性并不支持多行文本。那么有没有方法在多行文本上实现同样的效果呢? -webkit-line-clamp Webkit支持一个名为-webkit-line-clamp的属性,他其实是一个WebKit-Specific Unsupported Property,也就是说这个属性并不是标准的一部分,可能是Webkit内部使用的,或者被弃用的属性。但是既然被人发现了,而且能用,为什么不试试呢~o(∩_∩)o p { overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } Demo: http://jsfiddle.net/Cople/maB8f/ -o-ellipsis-lastline 从 Opera 10.60 开始,text-overflow属性有了一个名为-o-ellipsis-lastline的值。应用后的效果就像名字一样,在文本的最后一行加上省略号。这个方法比楼上的方法简单多了,可惜也不在标准之内//(ㄒoㄒ)// p { overflow: hidden; white-space: normal; height: 3em; text-overflow: -o-ellipsis-lastline; } Demo: http://jsfiddle.net/Cople/ash5v/ jQuery 除了各个浏览器私有的属性,有没有跨浏览器的解决方法呢?当然是通过js实现啦!(通过从后向前逐个删除末尾字符,直至元素的高度小于父元素高度) $(".figcaption").each(function(i){ var divH = $(this).height(); var $p = $("p", $(this)).eq(0); while ($p.outerHeight() > divH) { $p.text($p.text().replace(/(\s)*([a-zA-Z0-9]+|\W)(\.\.\.)?$/, "...")); }; }); Demo: http://jsfiddle.net/Cople/DrML4/5/ 单行溢出显示省略号方法 也放下单行显示的方法,这个比较通用了。 p { overflow : hidden; text-overflow: ellipsis; white-space: nowrap; }

CSS Flex弹性布局

一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局”,用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为 Flex 布局。 .box{ display: flex; } 行内元素也可以使用 Flex 布局。 .box{ display: inline-flex; } Webkit 内核的浏览器,必须加上-webkit前缀。 .box{ display: -webkit-flex; /* Safari */ display: flex; } 注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。 二、基本概念 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器”。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目”。 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。 项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。 三、容器的属性 以下6个属性设置在容器上。 flex-direction flex-wrap flex-flow justify-content align-items align-content 3.1 flex-direction属性 flex-direction属性决定主轴的方向(即项目的排列方向)。 .box { flex-direction: row | row-reverse | column | column-reverse; } 它可能有4个值。

crontab 定时任务

安装 yum install crontabs 说明: # 启动/关闭/重启服务 /sbin/service crond start /sbin/service crond stop /sbin/service crond restart # 重新载入配置 /sbin/service crond reload # 查看crontab服务状态 service crond status # 手动启动crontab服务 service crond start sudo systemctl restart crond.service # 加入开机自动启动 chkconfig –level 35 crond on 基本格式 * * * * * command 分 时 日 月 周 命令 1列表示分钟0~59 每分钟用*或者 */1表示 2列表示小时0~23(0表示0点) 3列表示日期1~31 4列 表示月份1~12 5列标识号星期0~6(0表示星期天) 6列要运行的命令 crontab命令用于设置计时器 语法 crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr] 补充说明 cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下: Minute Hour Day Month DayOFWeek Command

Cookie操作

一、读 始终是字符操作比正则匹配快。 function getCookie(name, cookie) { if (!cookie) cookie = document.cookie; const startIndex = cookie.indexOf(name + '='); const endIndex = cookie.indexOf(';', startIndex); return startIndex < 0 ? null : decodeURIComponent( cookie.substring(startIndex, endIndex > -1 ? endIndex : undefined).split('=')[1], ); } 测试可看:https://jsperf.com/cookie-parsing/17 二、写 function setCookie(name, value, opt) { if (!opt) opt = {}; let expires = opt.expires !== undefined ? opt.expires : ''; const expiresType = typeof expires; const path = opt.

Charles代理

使用背景 怎样查看完整的小程序请求信息,快速排查和定位问题? 目前的现状,IDE 中虽然有 network 面板,但是使用了代理,所以看到的 request、response、headers 等信息都做了处理,无法追踪到更多的信息。 解决方案,通过模拟器或者真机中模拟请求,借助 Charles 抓包工具,可以详细看到小程序请求的核心信息。注意,Charles 是收费软件,试用版本每隔半小时需要 restart,启动存在延时,最好在阿里郎上申请正式版本使用,方便后续调试。 详细设置步骤 安装 Charles 证书 charles 在抓取 https 请求时,可能会出现乱码现象,导致有些 https 页面打不开,所以需要安装三个证书,详细如下图所示。 证书一:安装 Charles 的信任证书 证书二:模拟器的信任证书 证书三:手机和远程连接的信任证书 手机抓包配置 第一步:添加手机的 HTTP 代理 1、查看 PC 的 IP 地址 2、设置手机 HTTP 代理 设置 Charles 代理 1、Proxy-Proxy Setting 2、Proxy->SSL Proxying Setting->add 一个代理 手机证书安装 使用手机浏览器打开 chls.pro/ssl,会跳转到证书安装,完成手机证书安装。 注:需要使用手机自带浏览器:IOS 手机是 Safari,安卓手机也有自带的浏览器 关闭支付宝安全代理 使用支付宝扫描链接:https://ds.alipay.com/fd-ipddfamm/index.html,点击“关闭安全代理“按钮,关闭安全代理。 RPC 抓包调试 由于 RPC 使用的是自己定义的 spdy 协议,charles 无法抓包,但是可以在开发及测试环境关闭 mmtp 开关将 spdy 进行降级为 http 协议。具体操作如下:

Centos安装Nginx PHP MySql

# ls -alZ 可以查看到目录的状态 drwxrwxrwx. ec2-user root system_u:object_r:httpd_sys_content_t:s0 www # 需要将上面的`httpd_sys_content_t` 更换为 `httpd_rw_content_t` drwxrwxrwx. ec2-user root system_u:object_r:httpd_sys_rw_content_t:s0 www # 可以使用下面的命令操作: chcon -R -t httpd_sys_rw_content_t /www 为Nginx配置一级缓存 http { ... proxy_cache_path /tmp/ngx_cache levels=1:2 keys_zone=ngx_cache:100m max_size=40g inactive=1440m; server { ... proxy_cache ngx_cache; proxy_cache_key $host$uri$is_args$args; proxy_cache_background_update on; proxy_cache_lock on; proxy_cache_use_stale updating; proxy_cache_min_uses 1; proxy_cache_valid 200 304 5s; # 对状态为200和304的缓存文件缓存5秒 proxy_ignore_headers Cache-Control; proxy_cache_bypass $cookie_nocache $arg_nocache $http_nocache; add_header X-Cache-Status $upstream_cache_status; } } 请求头大小配置 nginx默认的header长度上限是4k,如果header头信息请求超过了,nginx会直接返回400错误 可以通过以下2个参数来调整nginx的header上限

axios使用文档

随着 vuejs 作者尤雨溪发布消息,不再继续维护vue-resource,并推荐大家使用 axios 开始,axios 被越来越多的人所了解。本来想在网上找找详细攻略,突然发现,axios 的官方文档本身就非常详细!!有这个还要什么自行车!!所以推荐大家学习这种库,最好详细阅读其官方文档。大概翻译了一下 axios 的官方文档,相信大家只要吃透本文再加以实践,axios 就是小意思啦!! 如果您觉得本文对您有帮助,不妨点个赞或关注收藏一下,您的鼓励对我非常重要。 一、axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防止 CSRF/XSRF axios 依赖本机要支持ES6 Promise实现,如果您的环境不支持ES6 Promises,您可以使用polyfill。 二、引入方式: $ npm install axios $ cnpm install axios //taobao源 $ bower install axios # 或者使用cdn: <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 三、举个栗子: 3.1 执行 GET 请求 // 向具有指定ID的用户发出请求 axios.get('/user?ID=12345') .then(function (response) { console.

awk 指定规则显示内容

awk 简介 awk 以记录和字段的方式来查看文本文件 和其他编程语言一样, awk 包含变量、条件和循环 awk 能够进行运算和字符串操作 awk 能够生成格式化的报表数据 awk 概述 awk 程序 awk 命令、括在括号(或写在文件)中的程序指令以及输入文件的文件名几个部分组成。如果没有输入文件,输入则来自于标准输入。 awk 指令由模式、操作或者模式与操作的组合组成。模式是由某种类型的表达式组成的语句。如果某个表达式中没有出现关键在 if ,但实际在计算时却暗含 if 这个词,那么这个表达式就是模式。操作由括在大括号中的一条或多条语句组成,语句之间用分号或者换行符隔开。模式不能括在大括号中,模式由包括在两个正斜杠之间的正则表达式、一个或多个 awk 操作符组成的表达式组成。 格式: awk '/search pattern1/ {Actions}/search pattern2/ {Actions}' file 工作原理 awk 使用一行作为输入(通过文件或者管道),并将这一行赋给内部变量 $0 行被空格分解为字段(单词),每一个字段存储在已编号的变量中,从 $1 开始。( awk 的内部变量 FS 用来确定字段的分隔符。初始时,为空格,包含制表符和空格符) 对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的 Action ,如果没有匹配上则不执行任何动作 , Search Pattern 和 Action 是可选的,但是必须提供其中一个 。如果 Search Pattern 未提供,则对所有的输入行执行 Action 操作。如果 Action 未提供,则默认打印出该行的数据 。 {} 这种 Action 不做任何事情,和未提供的 Action 的工作方式不一样

ag 搜索工具

常用参数 -i 忽略大小写 -l 只列出文件名 -g 文件名匹配 —php 只搜索php文件 --ignore-dir 忽略目录 如:ag --ignore-dir sitedata --php hx /www/static 举例 显示在./app下文件内容有value_at字段的文件列表 ag value_at -l ./app

10进制与62进制相互转换

10 -> 62 // 10 -> 62 function string10to62(number) { var chars = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ'.split(''), radix = chars.length, qutient = +number, arr = []; do { mod = qutient % radix; qutient = (qutient - mod) / radix; arr.unshift(chars[mod]); } while (qutient); return arr.join(''); } 62 -> 10 // 62 -> 10 function string62to10(number_code) { var chars = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ', radix = chars.length, number_code = String(number_code), len = number_code.length, i = 0, origin_number = 0; while (i < len) { origin_number += Math.