作者归档:白宦成

关于白宦成

独立开发者, 自由职业者, 写作者

测试随笔

作为一个开发者,相信你或多或少都会接触过测试,小到”单元测试“,大到”特性测试“,团队人少的开发自己测试,团队人多的专门招个人测试,甚至是有自己专门的测试团队、测试部门。

当我们从简简单单的关注功能到了关注代码质量、关注产品性能、关注软件工程的时候,我们就不可避免的要与测试打交道,可是,你又是否真正关注过测试?

在我看来,测试真正的价值是将软件工程中的一些变量,变成了不变的量。对于一个项目来说,变量越多,我们要处理的问题就越复杂。而测试可以确保我们需要的东西从变量,转变为常量。当他成为常量时,我们在后续的处理相对就更加简单了。

如果用线性代数的话来说,测试其实就是将维度降低了,你每写下一个测试,都将代表着你的软件复杂度的维度降低一维,你解决问题的难度也就越低。

Micro:bit 中隐藏的 TypeScript

Micro:Bit 目前提供的可视化编程是基于 JavaScript 实现的,如果你将你的界面从 Block 块编辑器切换为 JavaScript 编辑器,就可以看到对应的代码了。

jwb4j
micro:bit 中的 JavaScript

除了 JavaScript 以外,你还可以在 Micro:Bit 中找到 TypeScript 代码。

点击右上方的小齿轮,选择项目设定

tld1n
进入项目设定

在页面的左侧可以看到一个资源管理器,点击资源管理器,就可以看到你的项目中的所有文件。

ugecr
资源管理器

在这些 typescript 中,你可以看到一些我们在使用块时的定义

vqk8a
定义

借助这些 Typescript 文件,相信可以帮助你更好的使用 micro:bit 的编辑器。

Micro:Bit 如何升级固件

在 Micro:Bit 的官方编辑器上,有一个功能:设备配对,这个是依赖于 Chrome 的 Web USB 接口实现的,通过浏览器烧写你的 Micro:Bit 。

设备配对的入口
在线编辑的说明

点击设备配对时,你会看到一个设备,点击就可以配对了。

pllb5
配对界面

不过,并不是每次都可以完成配对的,很多时候,你可能没有办法搜索到。这是因为你的 Micro:Bit 设备依然运行的是旧版的固件,你需要升级一下固件。

升级固件

检测你的固件版本

在升级固件版本之前,你需要先去检测当前的固件版本。你可以使用 USB 数据线,将 Micro:Bit 与你的电脑相连。

连接成功后,你可以在 USB 驱动器中看到 Details.txt 文件

3azja
Details.txt 文件路径

打开这个文件后,你可以看到硬件的版本。

硬件版本

比如,我手上的这个硬件版本为 250 ,是可以使用 WebUSB 的。如果你的版本是0234, 0241, 0243之一,你就需要升级你的版本到最新(此文写于 2018 年 2 月 2日,当日最新版本是 250)。如果你的版本是 249 ,可以不需要升级。

进入维护模式

进入维护模式和进入配对模式一样,也需要按下特殊的键位。你需要在按下 Reset 按钮的同时,插上数据线,这样,你就可以看到在磁盘中多了一个 MAINTENANCE 的驱动器。

006tKfTcgy1g0l8vloftcg30ci08iqv8
进入维护模式

下载最新固件

接下来,你需要去下载最新的固件。你可以在官网的 Firmware 页面找到下载。

006tKfTcgy1g0l8yjnpowj31nm0gejvw
下载最新固件

点击下载,将固件下载到本地,并将其拖入到 MAINTENANCE 驱动器即可。

Micro:Bit 会自动开始刷新固件,等待其重启以后,你就可以在浏览器中下载固件,并进行固件的刷写了。非常的方便。

mb online
在线下载
按钮重新恢复为绿色的时候,就说明下载成功了。

Micro:Bit 蓝牙如何在开机状态进行连接?

如果你使用了 Micro:Bit 的话,你就知道,Micro:Bit 的蓝牙模块有一个默认的 Paring Mode。但是在 Paring Mode 就切换到了另外的模式,并非我们自己写的代码。

0v4z9
micro:bit 结构说明

如何进入 Paring Mode?

首先,需要为你的 Micro:Bit 通电,确保其可以正常运行。

接下来,按下Micro:Bit正面(有 LED 阵列的一面)的 A 键和 B 键,并保持按下的状态。在按下状态的同时,按一下背面的 Reset 按钮,并放开。此时需要确保没有松开 A 键和 B 键。

稍等片刻后,正面的 LED 阵列就会显示 “PAIRING MODE!” 的字样,说明你进入了 Paring Mode。此时,你就可以通过你的 Android/iPhone 手机进行连接了。

如果你想要开发自己的应用程序,我们应该是要求设备不需要进入对应的模式来设置的,毕竟这样操作极为不方便。而且如果你是要做一些自己的硬件,比如小车、机器人的时候,应该是不需要进入特定的模式来进行连接的,毕竟板子会直接装在亚克力的壳子上,极为不方便。

如何解决呢?

很简单,其实在 micro:bit 的在线编辑器中,你可以找到项目设定,打开项目设定

3147u
项目设定

在项目设定中,你可以修改蓝牙的连接模式!

qff2a
三种不同的连接模式

你只需要将模式切换为 “No Paring Required: Anyone Can connect Via Bluetooth”,就可以无序进入到 Paring Mode 了。

Screeflow vs Camtasia

从极客学院录制课程开始,我就一直使用的是 ScreenFlow。Screenflow 界面美观,功能强大,渲染出的视频大小也不错,所以我就一直用了下来。

k9d7v
screenflow 8

最近因为工作需要,需要录制一个视频,视频需要能够被 Windows 系统编辑,所以改用了 Camtasia ,功能更加强大、界面也不像是使用 Qt 之类的跨平台框架开发的,十分的流畅。非常的爽。

pfbw8
Camtasia 2018

后续我应该会使用 Camtasia 来录制视频了。

为什么我们要了解一个产品的生命周期

作为一个开发者,我们经常要使用到各种各样的开发工具,比如你使用 Vue ,那么肯定要了解 Vue 的生命周期;如果你使用 WordPress ,就需要了解他的产品加载顺序。

如果你只关注如何使用,却不曾关注底层的逻辑到底是什么,那么有朝一日你也会提出这样的问题:

uiyqg
V2ex 的帖子

实际上,如果你曾先了解过一个应用的生命周期、加载顺序等这些比较基础的东西时,就不会问这些问题了。

从另外一个层面, 面试常问 HTTTP 的三次握手四次挥手也是这个原因,当你了解了整个流程,才能更好的在这个流程上进行研究、开发、Hack。

在 Vue 中使用 Render 函数来进行结果的格式化

在 Vue 中,想要对数据进行格式化有很多种方式,比如,使用 filter 并搭配上 管道符|来进行格式转化。或者使用 computed 方法进行数据格式的转化。

这篇文章分享一下我是如何使用 Render 函数来进行结果的格式化的。

目前的需求是这样的,我从服务器获取到的数据需要渲染到 Table 组件中,由于数据的渲染形式受到多组参数影响,因此,我决定使用 render 函数来进行处理。

根据 iView 文档的说明,我们可以在 data 中传入一个 render 函数,来进行 render 处理,因此,我们可以这样设定数据

let data = [{
          title: "生日",
          key: "birthday",
          render: (h, params) => {
            // here is my render function
          }
        },]
Code language: JavaScript (javascript)

在 render 函数中,我们需要返回一个 h 函数的实例,这个 h 函数其实是渲染函数,你只需要返回对应的数据即可。

我们在初始化时,传递了两个参数,其中第一个参数是渲染函数,第二个参数则是当前的数据。其中包括如下信息

8o2t7

index 是当前数据的顺序;row 是当前行的数据,column 则是当前列的数据。你可以通过 params.row.xxx 来获取其他字段的数据,来进行组合数据的判断。

比如(params.row.a + params.row.b)=== params.row.c

Vue 使用 Axios

在 Vue 1 时,我们使用的主要是 Vue-Resource,到了 Vue 2 时,推荐使用 axios。不过 Axios 并非为 Vue 设计,所以需要自己配置一些东西。

But,我是一个懒人,决定选择使用最简单的方法来实现——使用 vue-axios

首先,安装 axios 和 vue-axios

yarn add axios vue-axios

然后,在你的 main.js 中加入如下代码

import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)
Code language: JavaScript (javascript)

这样,就可以将 Axios 注册为全局可用了。

然后在你需要的地方调用即可。

Vue.axios.get(api).then((response) => {
  console.log(response.data)
})
Code language: JavaScript (javascript)

Vue Router 中的默认路由如何定义?

在使用 Vue 开发后台的时候,有些时候我们需要一个默认路由。

比如说,用户登陆以后,会看到一个界面,此时这个界面就需要一个默认路由。因为这个界面一般会放置一个 route-view,如果没有默认路由,就会导致首页的内容是空白的。因此,放置一个默认路由来显示内容即可。

想要实现也很简单,在对应的路由中添加 children 项目,并设置其 path"" 这样,就会将这个路由设置为默认路由。比如,这个样子:

let router = new Router({
    routes: [
     {
        path: "/dashboard",
        component: home,
        children: [
          {
            path:"",
            component: analytics,
          }
        ]
    ]
})
Code language: JavaScript (javascript)

这样就实现了点击 dashboard ,进入对应页面后,默认查看的是 analytics 的内容。