计算器功能键详解

从小到大一直跟计算器打交道,但是更多的人只是使用到了加减乘除这些功能,但计算器上往往会有其他功能按键,那些功能按键都用过、了解过么,我也是今天无意间看到一张照片才了解到计算器上的功能键的意义和使用方法。

标准型计算器

清除键

ON / AC / CA 键:全部清除键,也叫总清除键,作用是将显示屏所显示的数字全部清除。如果是太阳能计算器,在计算器关闭状态下,按此键则开启电源,显示屏显示出“0”。

CE / C 键:部分清除键,也叫更正键。其功能是清除当前输入的数字,而不是清除以前输入的数。如刚输入的数字有误,立即按此键可清除,待输入正确的数字后,原运算继续进行。如 5 + 13,这时发现“13”输入错了,则按“CE”键就可以清除刚才的“13”,但还保留“5”这个数。值得注意的是,在输入数字后,按“+”、“-”、“/”、“*”键的,再按“CE”键,数字不能清除。

MC 键:累计清除键,也叫记忆式清除键。其功能是清除储存数据,清除存储器内容,只清除存储器中的数字,内存数据清除,而不是清除显示器上的数字。

累计显示键

M+ 键:记忆加法键,也叫累加键。是计算结果并加上已经储存的数;用作记忆功能,它可以连续追加,把目前显示的值放在存储器中(也就是将显示的数字与内存中已有的任何数字相加,结果存入存储器,但不显示这些数字的和)。如:去和小商贩买几种冰淇凌,买 5 筒五羊牌雪糕,每 2 筒 1.6 元;买 10 筒绿色心情,每筒 0.8 元;买 15 筒蒙牛布丁,每筒 0.4 元。共多少元?

如先输入“5×1.6”→按“M+”键(把“5×1.6”的结果计算出来并储存起来)→然后输入“10×0.8”→按“M+”键(把“10×0.8”的结果计算出来并和前面储存的数相加)→接着输入“15×0.4”→按“M+”键(把“15×0.4”的结果计算出来并和前面储存的数相加)→最后按“MR”键(把储存的数全部取出来)→则出结果“22”

M- 键:记忆减法键,也叫累减键。是计算结果并用已储存的数字减去目前的结果;从存储器内容中减去当前显示值(也就是将显示的数字与内存中已有的任何数字相减,结果存入存储器,但不显示这些数字的差).

计算“50-(23+4)”时→先输入“50”→按“M+”(把“50”储存起来)→再输入“23+4”→按“M-”键(计算结果是“27”)→再按“MR”(用储存的“50”减去目前的结果“27”)→则出结果“23”

存储读出键

MR 键:存储读出键。表示用存储器中数值取代显示值。按下此键后,可使存储在“M+”或“M-”中的数字显示出来或同时参加运算,数字仍保存在存储器中,在未按“MC”键以前有效。MR调用存储器内容,读取储存的数据。 如有三组数字不连续在一起相加的时候,则用这个“MR”键。举例:如输入“3+2”时,按“M+”键,再输入“6+7”时,按“M+”键,再输入“8+9”时按“M+”键,然后再按“MR”,则三组数字的总和“35”就出来了。

MRC 键:MR 和 MC 功能的组合,即存储读出和清除键。按一次为 MR 功能,即显示存储数,按第二次为 MC 功能,即清除存储数。

GT 键:GT = Grand Total 意思是总数之和,是用来计算总和的。即你按了等号后得到的数字全部被累计,按 GT 后显示累计数,再按一次清空。

MU 键:损益运算键,即标离功能,进行价格的标离。 例:成本为 100 元的商品,如以售价计算,想获得 30% 利润,售价应是多少?利润又是多少?

计算过程如下:

100÷(1-30%)=142.86(售价)

142.86-100=42.86(利润)

100 ÷ (100) 30 MU 即:100÷(1-30%)=142.86(售价)

MU 即:142.86-100=42.86(利润)42.86÷142.86=30%

显示屏

“,”:分节号,表示3位数分离符,只对整数部分有效。

“GT”:总和记忆指示符。

“M”:独立记忆指示符(表示计算器内储存了一些数字)。

“-”:负值指示符。

“E”:错误指示符。当答案容量超过荧幕位数时,荧幕会出现ERROR记号,可按清零键或退位键后重新输入数据。

免费获取 5 年 AnyViewer 专业版会员

安装 AnyViewer 远程软件 Windows 客户端(目前网页 /iOS/ 安卓平台没有该入口),注册登录后,点击账户名称右侧的箭头,有个“输入激活码”的选项,依次输入下方激活码,可获取 5 年会员。

3 年:8033-8826-8278-E404
1 年:BA24-E088-CABA-654C
1 年:AC02-9EDC-D47E-11D1

WebStorm 配置 TypeScript

WebStorm 可以开发 TypeScript,同时支持自动编译为 JavaScript 文件,具体操作如下:

1. 前往 Node.js 官网下载安装 Node.js

2. 下载安装新版本的 WebStorm

3. 使用 node 的 npm 命令安装 TypeScript 编译器

npm install typescript -g

安装好,在命令行可以查看编译器的版本:

tsc --version

4. 打开 WebStorm,新建一个空白项目

5. 在 WebStorm 中右击项目名,选择 new -> tsconfig.json File,创建 tsconfig.json 文件

6. 打开 WebStorm,为 TypeScript 文件更改编译设置,File -> Settings -> File Watchers -> TypeScript,这里我们需要选择 TypeScript,但是 File Watchers 下默认是不存在的。需要点击右侧“ + ”号,选择 <custom>

7. 在弹出的 New File Watcher 中,填写 Name,在 Wached Files 中的 File type 选择 TypeScriptWatcher Settings 中填写如下内容:

Program(程序):tsc 的路径

Arguments(参数):--sourcemap --target "ES6"

Output paths to refresh(要刷新的输出路径):$FileNameWithoutExtension$.js:$FileNameWithoutExtension$.js.map

Working directory(工作目录):$FileDir$

8. 同时,需要设置 TypeScript 自动编译,在 Setting -> Language & Frameworks 中的 TypeScript 勾选 Compiler 中的 Recomplie on changes

9. 之后修改 TypeScript 文件时,WebStorm 就会自动编译

CSS 中的长度单位

CSS 中的长度有很多种,有很多没接触过,这次就来记录一次各单位的介绍。

px

1px 表示屏幕上一个像素的大小,该长度是绝对的。这是最传统的长度表示方法,用 px 表示长度的好处就是准确而直接。但是由于现在屏幕的尺寸越来越多,各种尺寸差别很大,使用 px 表示长度很难获得统一的视觉效果,在排版上也经常需要去肉眼估,一些宽度需要手动不断调整。

em

em 这个单位稍微有点绕,1em 的大小等于当前元素上 font-size 的大小。该长度是相对的。在 body 上默认的 font-size 是 16px,而子元素默认继承父元素的 font-size。也就是说在整个页面都没有规定 font-size 时,全局 1em = 16px。

有时为简化 font-size 的换算,需要在 css 中的 body 选择器中声明 font-size = 62.5%,此时 1em = 16px * 62.5% = 10px,这样 12px = 1.2em,10px = 1em,也就是说换算时只需将原有 px 数值除以 10,然后换上 em 作为单位即可。

这里需要注意的是当你在不同的地方设定了不同的 font-size 的话 1em 的值也会变得不同,尤其是 font-size 属性会从父元素继承,当你用 em 来设置 font-size 的值时,还需考虑父元素 font-size 的大小。

以下这种情况在 html 上 font-size 为 10px,div 内 font-size 首先从父元素继承 10px 然后再 1.2 = 12px,于是在 div 内的当前元素的其他地方如设置宽度高度时 1em = 12px,同理在 p 里面 font-size 为 12p * 1.2 = 14.4px,于是在 div 内的当前元素的其他地方设置长度时1em = 14.4px。

由于 em 这个单位跟字体是挂钩的,所以当我们在文字排版方面用 em 就会比较方便,比如:菜单、表格等。当我们知道一列表格最长显示 4 个字,那么我们就可以把宽度设置为 4em。此外只要改变字体的大小就能很轻易的调整所有元素的大小。

rem

理解了 em 之后,rem 就简单多了,rem 表示相当于根元素的 em 值,它避免像上面例子那样字体大小逐层复合的连锁反应导致长度计算的复杂性。确定了 body 的 font-size 值之后,rem 可以当做绝对长度一样使用。在不规定 body 的 font-size 的默认情况,1rem = 16px。目前除 IE 8 及更早版本外,所有浏览器均已支持 rem。

%

% 也是一个相对长度单位,100% 等于父元素的宽度或高度(不包括 padding )。对于当前元素的宽度、左右 100% 等于父元素的宽度,而对于高度、上下 100% 等于父元素的高度。

vm / vh

vw / vh 是一种视窗单位,也是相对单位。它相对的不是父节点或者页面的根节点。而是由视窗(Viewport)大小来决定的,1vw 等于视窗宽度的 1%,而 1vh 等于视窗高度的 1%。

视窗(Viewport)是你的浏览器实际显示内容的区域,换句话说是你的不包括工具栏和按钮的网页浏览器。

vw / vh 优势在于能够直接获取高度,而用 % 在没有设置 body 高度的情况下,是无法正确获得可视区域的高度的,所以这是挺不错的优势。

vmin / vmax

vmin 表示当前 vw 和 vh 中较小的一个值 vmax 表示当前 vw 和 vh 中较大的一个值。

做移动页面开发时,如果使用 vw / wh 设置字体大小(比如 5vw ),在竖屏和横屏状态下显示的字体大小是不一样的。

由于 vmin 和 vmax 是当前较小的 vw 和 vh 和当前较大的 vw 和 vh。这里就可以用到 vmin 和 vmax。使得文字大小在横竖屏下保持一致。

vw / vh,vmin / vmax:IE 9+ 局部支持,Google Chrome / Firefox / Safari / Opera 支持,iOS Safari 8+ 支持,Android Browser 4.4+ 支持,Google Chrome for android 39 支持。

其他

单位描述
in英寸
cm厘米
mm毫米
ex一个 ex 是一个字体的 x-height(x-height 通常是字体尺寸的一半)。
pt磅(1pt 等于 1/72 英寸)
pc12 点活字(1 pc 等于 12 点)


他们都是绝对长度单位有以下关系:

1 in = 2.54 cm = 25.4 mm = 101.6 q = 72 pt = 6 pc = 96 px

如何获取访问端 IP 地址的方法

如果使用 nginx 作为 web 代理服务器,则将添加 proxy_set_header X-Real-IP $remote_addr; 到站点的位置块。例如:

server {
    listen 443 ssl http2;
    server_name server_name; 

    client_max_body_size 1024m;

    location / {
        proxy_redirect off;
        proxy_set_header HOST $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass IP address;
    }
}

并且,如果采用 Express 作为后端开发框架,可以使用 req.headers["x-real-ip"] || req.connection.remoteAddress 获取 IP 地址。

此方法仅限简单使用,具体使用完善获取访问端 IP 地址可使用第三方中间件,如:express-iprequest-ip 等。

使用 Python 进行简单的人脸识别

通过使用 Python 进行简单的人脸识别非常简单,使用到了 OpenCV 库内的 haarcascade_frontalface_default.xml ,haarcascade 包含经过训练的用于检测对象的特定类型的分类器,例如:人脸,人眼,倾斜的人脸,鼻子,口嘴,微笑,上半身,下半身等。

代码

import cv2
import os


def load_img(path, name, mun=30, add_with=0):
    if not os.path.exists(path):
        os.mkdir(path)
    # 获取人脸识别模型
    classfier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml文件路径')
    # 创建一个窗口
    cv2.namedWindow('Face')
    # 使用内置摄像头
    cap = cv2.VideoCapture(0)
    # 使用视频进行识别
    # cap = cv2.VideoCapture('视频路径')
    # 根据摄像头设置IP及rtsp端口
    # url='rtsp://admin:admin@192.168.0.104:8554/live'
    # cap = cv2.VideoCapture(url)
    i = 0  # 计数
    if cap.isOpened():
        while i < mun:
            ok, frame = cap.read()  # 读取一帧图片
            if not ok:
                continue

            faces = classfier.detectMultiScale(frame, 1.3, 5, minSize=(32, 32))

            if len(faces) > 0:
                for face in faces:
                    x, y, w, h = face

                    img = frame[y - add_with:y + h + add_with, x - add_with:x + w + add_with]
                    # 显示人脸框
                    cv2.rectangle(frame, (x - add_with, y - add_with), (x + w + add_with, y + h + add_with),
                                  (0, 255, 0), 2)
                    save_path = path + '/' + name + '_' + str(i) + '.jpg'
                    print(save_path)
                    img2 = cv2.resize(img, (112, 112))
                    cv2.imwrite(save_path, img2)
                    i += 1

            cv2.imshow('face', frame)
            c = cv2.waitKey(10)
            if c & 0xFF == ord('q'):
                break

        cap.release()
        cv2.destroyAllWindows()


if __name__ == '__main__':
    # 第一个参数为保存图片的路径
    # 第二个参数为保存图片名字的开头
    # 第三个参数为图片的数量
    # 第四个参数可以调节图片的大小
    load_img('保存图片文件夹路径', 'lq', 500, 0)

Git 删除历史记录,清理仓库

当 commit 次数很多的时候,项目仓库会慢慢积攒很多无用的提交历史,这些历史记录会在项目 clone 的时候导致速度很慢。如果没有软件,一些 clone 过程体验会很不好,甚至频繁出错,所以删除提交历史可以作为一种清理仓库的手段。

Git 代码

git checkout --orphan latest_branch
git add -A
git commit -am "init commit"
git branch -D master
git branch -m master
git push -f origin master

以下是各条语句的解析

git checkout --orphan latest_branch
# 创建新分支 "latest_branch" 并转到该分支
# git checkout 命令为在当前分支上创建新分支(并转到该分支)
# git checkout --orphan 命令为从空白处创建新分支(并转到该分支)

git add -A
# 添加所有文件(当前最新状态)到暂存区

git commit -am "commit message"
# 将暂存区提交到新纪录(latest_branch分支)
# "commit message"为新纪录的名称

git branch -D master
# 删除主分支

git branch -m master
# 将 latest_branch(当前) 分支重命名为 master(主分支)

git push -f origin master
# 同步本地状态到服务器

# 此时,完成的效果为:
#   将master分支所有记录删除,并新建一个 "commit message" 记录,记录中内容为当前项目最新状态
#   此时远程服务器内所有垃圾都被清空
#   如果使用了 Github Desktop 等软件,本地垃圾可能未被清空,可删除项目并重新 clone

Element Plus Table(表格)点击获取对应 id

网上搜到的内容或许适用于 vue 2 或 Element UI,不适用 vue 3 和 Element Plus。

template:

<el-table-column label="配置" width="120" align="center">
  <template v-slot="scope">
    <el-button link type="primary" size="small">编辑</el-button>
    <el-button link type="primary" @click="deleteNavigation(scope.row.id)" size="small">删除
    </el-button>
  </template>
</el-table-column>

script:

function deleteNavigation(id) {
  console.log(id);
}

使用 vue 的 v-slot 指令,这个指令中是 vue 2.6 新增的,取代了以前的 slot 和 slot-scope,而我使用的是 vue 3,所以网上搜到的很多使用 slot-scope 的方法都失效了。

使用 插槽名.row 可以获取一行的内容,如果要获取行内的某一个字段的值,只需要再点出它的字段名,在我的代码里,就是 scope.row.id

如果要获取行的索引,使用 插槽名.$index,注意$符号是必不可少的,否则将不起作用。

MySQL 子用户建库仅访问自身库

有若干个 MySQL 用户可以使用以下命令:CREATE DATABASE name; 但我希望这些用户中的每一个人都能够只查看和访问他们自己创建的数据库。

GRANT ALL PRIVILEGES ON user_%. * TO 'user'@'%';

问题是用户在命名数据库时必须非常小心。

例如:如果用户 admin 创建数据库 root_test,则用户 root 可以独占访问该数据库,而用户 admin 则不能。

趁现在为自己的亲人留份回忆

转眼间,2022 年就快要过去了,这一年对我来说算是过的最快的一年,去年就想写一些内容但是一直没有下得了笔,就一直拖到了现在。

去年九月末,我的祖母突然辞世,那时我刚到新学校,与自己的舍友刚刚熟悉,清楚的记得那天早上我跟同学买了早点,坐在食堂里吃早饭,正好那天第一节课需要交手机,我在食堂跟舍友聊天,父亲突然来电话让我临时转一下钱,仔细一问,祖母突然昏迷了,祖父把我父亲和母亲赶紧叫了过来,我父亲和母亲跟着救护车去了医院,当时我知道后脑袋突然一片空白,他俩安慰我没事,我才赶紧把钱转了过去,但那之后就一直担心,课都听不进去。

记不清什么时候可能是当天或者第二天,再给父亲打电话,医院说祖母是脑溢血,而且目前很危险,当时听完很难受,不知道为什么我来学校前祖母还健健康康,不到一个月突然就出事了,心情很难受,也很担心,自那之后的几天里我抽空就打电话,父亲总是安慰我没事,让我放心好好在学校学习,我也在心里一直期望祖母平安无事,就这样一直到了九月最后几天,那天正好是学校开运动会,早上的风吹的人双腿发凉,我跟舍友去操场的路上一人买了一个座垫,到了地方就坐下唠嗑,到了快十一点多的时候,母亲来电话了,让我跟班主任请假抓紧时间回来,祖母病危了,当时听到后突然有点难以相信,以至于我给班主任打电话的时候都已经不会说话了,我们班任安慰我让我不要着急,我先去复印社打印了离校申请表,每个地方签完字了,我就回到了宿舍收拾东西,这时候母亲又打来电话让我别着急,因为飞机和动车的时间都是固定的,收拾完以后我就背上包到学校外打车到火车站,一个人坐在火车站座椅上,抬头望着天花板想着以前跟祖母的点点滴滴,慢慢眼泪就流了出来,火车到站了,我又坐着地铁去飞机场,这一路上脑袋里已经记不起都想了些什么,在飞机上哭了不知道多少回,但都是哭哭停停抽泣,终于回来了,阿姨和我母亲接的我,我上了车母亲没说话,阿姨先说的,祖母已经离世了,当时再也没忍住大哭了起来,之后去了殡仪馆旁边的饭店,我父亲和我认识的一些叔叔都在饭桌前坐着,我坐到座位上边吃着饭边难过。

这件事过了快半个月我才缓过来,但每次晚上想起祖母还是很难受,很伤心,即便现在也是。当我想起来我之前最开始去外地上学前给祖母和祖父一起拍了张照片,但是我翻遍了手机和硬盘却始终找不到那两张照片了,可能是那会我觉得亲人离去对我来说还是件很遥远的事,没有放心上就清理掉了,到现在我却再也找不到了,虽然祖母的样貌在我的脑海里一直存在,但是缺少了物质上的记忆,我感觉没有一点把握,真的害怕以后忘掉祖母的样子,害怕想不起来。

写这篇文章的目的也是想告诉正在读这篇文章的你,趁现在自己的亲人都还健在,多用相机记录一些自己亲人的照片,它不仅是张张照片,更是一份回忆,不要觉得亲人离去这件事离自己很远,不要等到失去以后再想挽回,那样得到的只有悔恨。