baidu120 - admin
type: channel
link: http://blog.baidu120.cc/tag/admin/
items: 编程单词缩写规则
items: markdown 语法
items: .stylelintrc
items: mysql utf8mb4支持
items: jetbrains http request
items: ESlint .eslintrc配置文件
items: js error log report
items: js 埋点统计数据
items: git-log-weekly-report 生成周报
items: 文件markdown生成

编程单词缩写规则
type: item
date: 2018-11-08T09:52:00+08:00
description: 1、大于2个单词则采用缩写规则，否则不用缩写。2、缩写的规则采用国际惯用方法：元音字母剔除法，首字母除外。使用单词的头一个或几个字母。组合单词使用如下规则：3、使用变量名中每个有典型意义的单词。如Count of Failure写成FailCnt。4、去掉无用的单词后缀 ing, ed等。如Paging Request写成PagReq。例如：ft=foot,jpn=japan,bld=build，您可以尝试读一下，发音几乎不变，辅音字母是发音的关键。依据此规则，则字母应该缩写如下：project_no=prjct_noapproval_status=apprvl_statuscontract_code=cntrct_codedepartment=department(无需缩写)常见编程命名缩写 通用 缩写 翻译 控件 缩写 翻译 address addr 地址 calendar cdr 日历 application app 应用程序 messageDialog msgdlg 消息框 asynchronization asyn 异步 drawer drw 抽屉 average avg 平均数 buttonGroup btngrp 按钮分组 bitmap bmp 位图 checkBox chk 复选框 buffer buf 缓冲区 container cntr 容器 character char 字符 button btn 按钮 color clr 颜色 comboBox cmb 下拉框 command cmd 命令 lable lbl 标签 delete del 删除 progressBar prg 进度条 destination dest/dst 目的地 pageIndicator pgindic Tab分页控件 decrease dec 减少 radioButton rdo 单选框 device dev 设备 rangeSlider rngsld 滑块 different diff 不同的 scrollView svw 视图滚动 directory dir 目录 scrollBar vsb(垂直)/hsb(水平) 滚动条 document doc 文档 slider sld 滑动器 dynamic dyna 动态的 spinBox spn 旋转框 environment env 环境 splitView spltvw 分割视图 error err 错误 stackView stackvw 堆栈视图 execute exec 执行 statusBar statbr 状态条 group grp 组 swipeView swpvw 滑动控件 image img 图像 switch sw 开关 information info 信息 tabBar tbbr tab栏 initialize init 初始化 textField txtfld 文本输入框 library lib 库 toolBar tlbr 工具栏 maximum max 最大值 toolTip tltp 提示框 minimum min 最小值 toolButton tlbtn 工具按钮 message msg 消息 treeView trvw 树形视图 number num 数字，数，数量 layout lyt 布局 object obj 对象 mainMenu mmnu 菜单栏 parameter Param 参数(形参) groupBox gbx 组合框 package pkg 打包 pictureBox pic 图片框 position pos 位置 listView lvw 列表视图 previous pre 前一个 window win(wnd) 窗口 process/Procedure proc 进程/过程 form frm 表单 pointer ptr 指针 textBox txt 文本框 password pwd 密码 linkLabel llbl 超链接标签框 public pub 公共的 dialog dlg 对话框 reference ref 引用 scrollIndicator scrlindic 滚动指示器 source src 源 string str 字符串 summation sum 和 synchronization sync 同步 system sys 系统 table tbl 表格 temporary tmp 临时 text txt 文本 variable var 变量 addition add 加法/添加 argument arg 实参 array arr 数组 calculate calc 计算 configuration c…

markdown 语法
type: item
date: 2018-10-30T17:21:00+08:00
description: 主要内容Markdown是什么？谁创造了它？为什么要使用它？怎么使用？谁在用？尝试一下正文1. Markdown是什么？Markdown是一种轻量级标记语言，它以纯文本形式(易读、易写、易更改)编写文档，并最终以HTML格式发布。 Markdown也可以理解为将以MARKDOWN语法编写的语言转换成HTML内容的工具。2. 谁创造了它？它由Aaron Swartz和John Gruber共同设计，Aaron Swartz就是那位于去年（2013年1月11日）自杀,有着开挂一般人生经历的程序员。维基百科对他的介绍是：软件工程师、作家、政治组织者、互联网活动家、维基百科人。 他有着足以让你跪拜的人生经历：14岁参与RSS 1.0规格标准的制订。2004年入读斯坦福，之后退学。2005年创建Infogami，之后与Reddit合并成为其合伙人。2010年创立求进会（Demand Progress），积极参与禁止网络盗版法案（SOPA）活动，最终该提案被撤回。2011年7月19日，因被控从MIT和JSTOR下载480万篇学术论文并以免费形式上传于网络被捕。2013年1月自杀身亡。天才都有早逝的归途。3. 为什么要使用它？它是易读（看起来舒服）、易写（语法简单）、易更改纯文本。处处体现着极简主义的影子。兼容HTML，可以转换为HTML格式发布。跨平台使用。越来越多的网站支持Markdown。更方便清晰地组织你的电子邮件。（Markdown-here, Airmail）摆脱Word（我不是认真的）。4. 怎么使用？如果不算扩展，Markdown的语法绝对简单到让你爱不释手。Markdown语法主要分为如下几大部分：标题，段落，区块引用，代码区块，强调，列表，分割线，链接，图片，反斜杠 \，符号'`'。4.1 标题两种形式： 1）使用=和-标记一级和二级标题。一级标题 ========= 二级标题 ---------效果：一级标题二级标题2）使用#，可表示1-6级标题。# 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题效果：一级标题二级标题三级标题四级标题五级标题六级标题4.2 段落段落的前后要有空行，所谓的空行是指没有文字内容。若想在段内强制换行的方式是使用两个以上空格加上回车（引用中换行省略回车）。4.3 区块引用在段落的每行或者只在第一行使用符号>,还可使用多个嵌套引用，如：> 区块引用 >> 嵌套引用效果：区块引用嵌套引用4.4 代码区块代码区块的建立是在每行加上4个空格或者一个制表符（如同写代码一样）。如 普通段落：void main() {printf("Hello, Markdown."); } 代码区块：void main() { printf("Hello, Markdown."); } 注意:需要和普通段落之间存在空行。4.5 强调在强调内容两侧分别加上*或者_，如：*斜体*，_斜体_ **粗体**，__粗体__效果：斜体，_斜体_ 粗体，__粗体__4.6 列表使用·、+、或-标记无序列表，如：-（+*） 第一项-（+*） 第二项- （+*）第三项注意：标记后面最少有一个_空格_或_制表符_。若不在引用区块中，必须和前方段落之间存在空行。效果：第一项第二项第三项有序列表的标记方式是将上述的符号换成数字,并辅以.，如：1 . 第一项 2 . 第二项 3 . 第三项效果：第一项第二项第三项4.7 分割线分割线最常使用就是三个或以上*，还可以使用-和_。4.8 链接链接可以由两种形式生成：行内式和参考式。 行内式：[younghz的Markdown库](https:://github.com/younghz/Markdown "Markdown")。效果：younghz的Markdown库。参考式：[younghz的Markdown库1][1] [younghz的Markdown库2][2] [1]:https:://github.com/younghz/Markdown "Markdown" [2]:https:://github.com/younghz/Markdown "Markdown"效果：younghz的Markdown库1 younghz的Markdown库2注意：上述的[1]:https:://github.com/younghz/Markdown "Markdown"不出现在区块中。4.9 图片添加图片的形式和链接相似，只需在链接的基础上前方加一个！。4.10 反斜杠\相当于反转义作用。使符号成为普通符号。4.11 符号 `起到标记作用。如：`ctrl+a`效果：ctrl+a5. 谁在用？Markdown的使用者：GitHub简书Stack Ov…

.stylelintrc
type: item
date: 2018-10-29T08:58:00+08:00
description: { "extends": "stylelint-config-standard", "plugins": [ "stylelint-order" ], "rules": { "string-quotes": "single", "order/order": [ "declarations", "custom-properties", "dollar-variables", "rules", "at-rules" ], "order/properties-order": [ "position", "z-index", "top", "bottom", "left", "right", "float", "clear", "columns", "columns-width", "columns-count", "column-rule", "column-rule-width", "column-rule-style", "column-rule-color", "column-fill", "column-span", "column-gap", "display", "grid", "grid-template-rows", "grid-template-columns", "grid-template-areas", "grid-auto-rows", "grid-auto-columns", "grid-auto-flow", "grid-column-gap", "grid-row-gap", "grid-template", "grid-template-rows", "grid-template-columns", "grid-template-areas", "grid-gap", "grid-row-gap", "grid-column-gap", "grid-area", "grid-row-start", "grid-row-end", "grid-column-start", "grid-column-end", "grid-column", "grid-column-start", "grid-column-end", "grid-row", "grid-row-start", "grid-row-end", "flex", "flex-grow", "flex-shrink", "flex-basis", "flex-flow", "flex-direction", "flex-wrap", "justify-content", "align-content", "align-items", "align-self", "order", "table-layout", "empty-cells", "caption-side", "border-collapse", "border-spacing", "list-style", "list-style-type", "list-style-position", "list-style-image", "ruby-align", "ruby-merge", "ruby-position", "box-sizing", "width", "min-width", "max-width", "height", "min-height", "max-height", "padding", "padding-top", "padding-right", "padding-bottom", "padding-left", "margin", "margin-top", "margin-right", "margin-bottom", "margin-left", "border", "border-width", "border-top-width", "border-right-width", "border-bottom-width", "border-left-width", "border-style", "border-top-style", "border-right-style", "border-bottom-style", "border-left-style", "border-color", "border-top-color", "border-right-color", "border-bottom-color", "border-left-color", "border-image", "border-image-source", "border-image-slice", "border-image-width", "border-…

mysql utf8mb4支持
type: item
date: 2018-10-22T17:44:00+08:00
description: 1.改 Mysql 配置文件 my.cnf(默认位置/etc/my.cnf)[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' 2.改已有的 database、table 和 column 字符集msql> ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; msql> ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; msql> ALTER TABLE table_name modify column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 其中的 database_name、table_name、column_name 要替换成你对应的数据库名、表名、列名。VARCHAR 的长度值也是。3.重启 Mysql 并检查更改后的字符集设置service mysql restart 查看字符集设置: msql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'; +--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +--------------------------+--------------------+ rows in set (0.00 sec)

jetbrains http request
type: item
date: 2018-10-19T14:49:01+08:00
description: 环境变量配置http-client.env.json{ "development": { "host": "dev.mcake.admin", "id-value": 12345, "port": 80, "username": "", "password": "", "my-var": "my-dev-value" }, "production": { "host": "example.com", "id-value": 6789, "username": "", "password": "", "my-var": "my-prod-value" } }列子### 用户登录 POST http://{{host}}/admin/login Content-Type: application/x-www-form-urlencoded;charset=UTF-8 username=luobing.yin&password=mcake123 > {%client.global.set("token", response.headers.valueOf('Set-Cookie').match(/token=(.*?);/)[1]);client.log(client.global.get('token'));%} # ### 配送地图api GET http://{{host}}:{{port}} /api /area /search /?cityId=110 ?type=2 Referer: http://dev.mcake.admin/admin.html Accept: */* Cookie: token={{token}}; page-rows=10 X-Requested-With: XMLHttpRequest ### 配送地图api GET http://{{host}}:{{port}} /api /Region /search ?spm=m-46-74-77 Referer: http://dev.mcake.admin/admin.html Accept: */* Cookie: token={{token}}; page-rows=10 X-Requested-With: XMLHttpRequest level=1&pid=0

ESlint .eslintrc配置文件
type: item
date: 2018-10-17T15:54:00+08:00
description: .eslintrc{ // 环境定义了预定义的全局变量。 "env": { //环境定义了预定义的全局变量。更多在官网查看 "browser": true, "node": true, "commonjs": true, "amd": true, "es6": true, "mocha": true }, // JavaScript 语言选项 "parserOptions": { // ECMAScript 版本 "ecmaVersion": 6, "sourceType": "module", //设置为 "script" (默认) 或 "module"（如果你的代码是 ECMAScript 模块)。 //想使用的额外的语言特性: "ecmaFeatures": { // 允许在全局作用域下使用 return 语句 "globalReturn": true, // impliedStric "impliedStrict": true, // 启用 JSX "jsx": true, "modules": true } }, //-----让eslint支持 JSX start "plugins": [ ], "extends": [ ], //-----让eslint支持 JSX end /** * "off" 或 0 - 关闭规则 * "warn" 或 1 - 开启规则，使用警告级别的错误：warn (不会导致程序退出), * "error" 或 2 - 开启规则，使用错误级别的错误：error (当被触发的时候，程序会退出) */ "rules": { //////////////// // 可能的错误 // //////////////// // 禁止条件表达式中出现赋值操作符 "no-cond-assign": 2, // 禁用 console "no-console": 0, // 禁止在条件中使用常量表达式 // if (false) { // doSomethingUnfinished(); // } //cuowu "no-constant-condition": 2, // 禁止在正则表达式中使用控制字符 ：new RegExp("\x1f") "no-control-regex": 2, // 数组和对象键值对最后一个逗号， never参数：不能带末尾的逗号, always参数：必须带末尾的逗号， // always-multiline：多行模式必须带逗号，单行模式不能带逗号 "comma-dangle": [ 1, "never" ], // 禁用 debugger "no-debugger": 2, // 禁止 function 定义中出现重名参数 "no-dupe-args": 2, // 禁止对象字面量中出现重复的 key "no-dupe-keys": 2, // 禁止重复的 case 标签 "no-duplicate-case": 2, // 禁止空语句块 "no-empty": 2, // 禁止在正则表达式中使用空字符集 (/^abc[]/) "no-empty-character-class": 2, // 禁止对 catch 子句的参数重新赋值 "no-ex-assign": 2, // 禁止不必要的布尔转换 "no-extra-boolean-cast": 2, // 禁止不必要的括号 //(a * b) + c;//报错 "no-extra-parens": 0, // 禁止不必要的分号 "no-extra-semi": 2, // 禁止对 function 声明重新赋值 "no-func-assign": 2, // 禁止在嵌套的块中出现 function 或 var 声明 "no-inner-declarations": [ 2, "functions" ], // 禁止 RegExp 构造函数中无效的正则表达式字符串 "no-invalid-regexp": 2, // 禁止在字符串和注释之外不规则的空白 "no-irregular-whitespace": 2, // 禁止在 in 表达式中出现否定的左操作数 "no-negated-in-lhs": 2, // 禁止把全局对象 (Math 和 JSON) 作为函数调用 错误：var math = Math(); "no-obj-calls": 2, // 禁止直接使用 Object.prototypes 的内置属性 "no-prototype-builtins": 0, // 禁止正则表达式字面量中出现多个空格 "no-regex-spaces": 2, // 禁用稀疏数组 "no-sparse-arrays": 2, // …

js error log report
type: item
date: 2018-10-17T13:48:00+08:00
description: js error log report(function () { // 统计域名 && 1px base64 image data var analyticsDomain = (location.protocol || '') + '//acc.zhangmen.com'; var base64Iamge = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="; // 设置用户标示 var accId; var __accId = (+new Date) + '' + Math.random(); if (window.localStorage) { accId = localStorage.getItem('__accId__') || __accId; (accId == __accId) && localStorage.setItem('__accId__', accId); } else { accId = (document.cookie.match(/__accId__=([^;]*);?/) || [])[1] || __accId; accId == __accId && (document.cookie = "__accId__=" + escape(accId) + ";expires=" + (new Date('2580/01/01')).toGMTString()); } // 构造统计方法 var __acc__ = window.__acc__ = function (obj) { if (typeof obj !== 'object') return; var logerMessage; try { obj.accId = obj.accId || accId; // 追加访问标示 logerMessage = JSON.stringify(obj); } catch (e) { logerMessage = '{"accId": "' + accId + '", "action": "' + obj.action + '", "message": "' + obj.message + '", "ua": "' + navigator.userAgent + '", "error": "Parse JSON Error"}'; } var accUrl = analyticsDomain + '/acc?logInfo=' + encodeURIComponent(logerMessage); var imgDom = new Image; imgDom.src = accUrl; setTimeout(function () { imgDom.src = base64Iamge; // 放弃图片加载，防止出现请求无返回数据的情况 }, 500); }; // 默认错误统计，只监控 js 执行报错，只能用于 web 环境错误收集 var lastErrorInfos = {}; window.onerror = function (msg, url, line, col, error) { var nowDate = +new Date; var errorSign = msg + (url || '') + (line || '') + (col || ''); if (lastErrorInfos[errorSign]) return; // 增加报错限制，相同错误只提示一遍 __acc__({ action: 'window.onerror', message: { message: msg, url: url, line: line, col: col, error: error }, time: nowDate, project: location.host, path: location.pathname, url: location.href.replace(location.origin, ''), ua: navigator.userAgent }); lastErrorInfos[errorSign] = nowDate; return true; // 阻止控制台显示错误 }; })();

js 埋点统计数据
type: item
date: 2018-10-17T13:46:00+08:00
description: js 埋点统计数据/* * 埋点数据: { timestamp, actionName, actionValue, function1, function2, function3, * platform, * source, * userId, * userMobile, * userName } */ ;(function () { var dataPool = []; // 需上传数据池 var configOption = {}; // 配置信息 var uploadDataLimit = 20; // 条数限制 var uploadTimeLimit = 1 * 60 * 1000; // 时间限制 var uploadInited = false; var ua = navigator.userAgent; var dev = location.host !== "chat.zmlearn.com"; var uploadPath = '//log' + (dev && '-test' || '') + '.zmlearn.com/api/pcAnalytics'; window.zmClientAcc = zmClientAcc; window.uploadServer = uploadServer; window.initZmClientAcc = initZmClientAcc; // 绑定点击事件，记录点击操作 window.addEventListener('click', function (event) { var target = event.target; var actionName = target && target.getAttribute('data-accAction') || '点击事件'; var functions = target && target.getAttribute('data-accFunctions'); var clickId = target && target.getAttribute('data-clickId'); while (target && !functions) { target = target.parentElement; functions = target && target.getAttribute('data-accFunctions'); clickId = target && target.getAttribute('data-clickId'); } try { functions = eval("(" + functions + ")"); functions && zmClientAcc(actionName, functions, '', clickId); } catch(e) {} }, true); // 缓存有历史数据，获取并提交 try { var localData = localStorage.getItem('zmAccData'); var tempData = (JSON.parse(tempData) || {}).datas; if (tempData && tempData.length) { dataPool = tempData; uploadServer(); } } catch(e) {} // 记录埋点信息，暂存内存或本地或上传 /* * actionName 事件类型 * functions 功能点 * event_type 0表示统计事件次数，1表示统计事件时长 * actionValue event_type为0时，每点击1次，记录1次；event_type为1时，记录时长，按秒计算 * event_id 事件id * tracker_type 1表示设备信息，2表示事件信息 * eventPara 用来统计自定义分析维度 */ function zmClientAcc(actionName, functions, actionValue, event_id, event_type) { var newItem = { timestamp: +new Date, actionName: actionName || '点击次数', actionValue: actionValue || 1, event_id: event_id || '', tracker_type: 2, event_type: event_type || 0, eventPara: '', userAgent: ua, requestPath: location.href }; forEach(function…

git-log-weekly-report 生成周报
type: item
date: 2018-10-17T11:23:00+08:00
description: git-log-weekly-report 生成周报#!/bin/bash # Generates git changelog grouped by day and output it to file # # optional parameters # -a to filter by author # -s to select start date # -e to select end date # -o to save it to file # -r to specify the repository path NEXT=$(date +%F) SINCE="last.Monday" UNTIL=$NEXT AUTHOR=$(git config user.email) OUTPUT="$(date +%F).log" while getopts "a:s:e:o:r:" arg do case $arg in a) AUTHOR=$OPTARG ;; s) SINCE=$OPTARG ;; e) UNTIL=$OPTARG ;; o) OUTPUT=$OPTARG ;; r) REPO=$OPTARG ;; ?) echo "unknown argument" exit 1 ;; esac done ( git -C "${REPO}" log --author="${AUTHOR}" --since="${SINCE}" --until="${UNTIL}" --format="%cd" --date=short | sort -u | while read DATE ; do GIT_PAGER=$(git -C "${REPO}" log --no-merges --reverse --format="* %s" --since="${DATE} 00:00:00" --until="${DATE} 23:59:59" --author="${AUTHOR}") if [ ! -z "$GIT_PAGER" ] then echo "[${DATE}]" echo "${GIT_PAGER}" echo fi done ) > $OUTPUT echo "log is written to ${OUTPUT}"

文件markdown生成
type: item
date: 2018-10-08T23:36:00+08:00
description: <?php define('dir', __DIR__); $dirArr = explode('/', dir); $md = dir . '/' . $dirArr[count($dirArr) - 1] . '.md'; if (is_file($md)) unlink($md); // 生成md文件 // file_put_contents($md, listdir(dir, '', 0)); $notExt = ['.exe', '.doc', '.docx', '.pdf', '.sh~', '.rar', '.zip', '.tar','.gif','.jpg','.png','.mod']; $listArr = listdir(dir); ksort($listArr, SORT_STRING | SORT_FLAG_CASE | SORT_NATURAL); // 对键排序 // var_dump($listArr);die; // asort($listArr, SORT_STRING | SORT_FLAG_CASE | SORT_NATURAL); // 对值排序 $content = getContent($listArr); $tree = "###目录###" . PHP_EOL . "```package" . PHP_EOL . listTree($listArr) . PHP_EOL . '```'; file_put_contents($md, $content . PHP_EOL . $tree); function getContent($arr, $level = 0) { global $notExt; $content = ''; foreach ($arr as $k => $v) { if (is_array($v)) { $content .= '###' . getPlaceholder($level, '#') . $k . "###" . getPlaceholder($level, '#') . PHP_EOL; $content .= getContent($v, $level + 1); } else if(!in_array(getExt($v),$notExt)){ echo getExt($v); $fileArr = explode('/', str_replace('\\', '/', $v)); $file = $fileArr[count($fileArr) - 1]; $content .= '###' . getPlaceholder($level, '#') . $file . "###" . getPlaceholder($level, '#') . PHP_EOL; if (strtolower(getExt($v))==='.md') { $content .= str_replace('.', '', getExt($file)) . PHP_EOL .mb_convert_encoding( file_get_contents($v), 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' ). PHP_EOL ; }else{ $content .= '```' . str_replace('.', '', getExt($file)) . PHP_EOL .mb_convert_encoding( file_get_contents($v), 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' ). PHP_EOL . '```' . PHP_EOL; } } } return $content; } function listTree($arr, $level = 0) { $content = ''; $placeholder = getPlaceholder($level); foreach ($arr as $k => $v) { if (is_array($v)) { $content .= $placeholder . '└── ' . $k . PHP_EOL; $content .= listTree($v, $level + 1); } else { $fileArr = explode('/', str_replace('\\', '/', $v)); $file = $fileArr[count($fileArr) - 1]; $content .= $placeholder . '├── ' . $file . PHP_EOL; } } return $content; } f…