分类目录归档:技术

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 了。

在 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 的内容。

在 Vue 中使用 alias 来简化引用路径

在写 Vue 代码时,我们经常会用到组件化的思想,因此,我们的文件也被拆分的七零八落,如果每次都使用完整的路径来写引用,未免有些太长了,因此,我们可以考虑使用一些工具来帮助我们解决这个问题。

这一步,我们可以通过 Webpack 的 resolve 模块的 alias 功能来实现

比如说,可以将一个较长的路径 src/components/admin-components/login/login.vue 简化为 @admin_com/login/login.vue,这样你就少写了很多代码,可以让你的代码可读性更高。

m0kgq
简化示意图

如何实现

首先,在你的项目根目录创建一个 vue.config.js 文件。如果有了就不需要再创建了。

然后,在其中加入如下代码

const path = require("path");
function resolve(dir) {
  return path.join(__dirname, dir);
}
Code language: JavaScript (javascript)

这个函数用来让你免于在每一次设置 alias 时都写前面的 path.join

然后,添加如下代码

module.exports = {
  chainWebpack: config => {
   // 设置项目
  }
};

Code language: JavaScript (javascript)

然后,导出一个对象,我们稍后将在这个对象中设置 alias。

接下来,我们需要在 chainWebpack 的函数中添加我们的 alias。将代码修改如下

module.exports = {
  chainWebpack: config => {
    config.resolve.alias
      .set("@admin_com", resolve("src/components/admin_components/"));
  }
};
Code language: JavaScript (javascript)

我们添加的这一行代码 config.resolve.alias.set("@admin_com", resolve("src/components/admin_components/")); 就是在 Webpack 中添加解析的 alias,在渲染页面时,会自动将 @admin_com 替换为 src/components/admin_components

这样,你就可以根据自己的需要,去设置各种各样的 alias, 来简化你自己的代码了。

需要注意的是,@默认被 alias 到了 src 目录,所以你最好不要修改 @,以免出错。

以及,如果你担心后续在其他地方使用你要设置的 alias,可以和我一样,前面加一个符号。

Debug 你的 alias

如何看你的 alias 呢?也很简单,只需要在项目根目录执行 vue inspect resolve.alias,就可以看到所有你自己定义的 alias 了。

76sjr

Rust 学习资料推荐

首推

《The Rust Programming Language》:https://doc.rust-lang.org/stable/book/foreword.html 这本书虽然是纯英文写就,但是浅显易懂。非常不错。中文版

嵌入式相关

《Micro Rust》:https://droogmic.github.io/microrust/index.html 这本书是基于 MicroBit 这个硬件来写的课程,可以去淘宝上买个 Micro::Bit Go,一百多一点,然后自己实践一下。

《The Discovery Book》:https://docs.rust-embedded.org/discovery/index.html

《The Embedded Rust Book》:https://docs.rust-embedded.org/book/index.html

Rust Crates 使用国内镜像

我在使用 Rust 安装 rls 时,出现了下载报错,具体如下

info: caused by: error during download
info: caused by: [56] Failure when receiving data from the peer

一看到 from the peer ,我就明白了,大概率被墙了。所以,就要切换为国内镜像源。

目前只有 USTC 提供了 Rust Crates 的镜像源,接下来,我们就开始配置 Rust Crates 源。

https://servers.ustclug.org/2016/01/mirrors-add-rust-crates/
USTC Lug 的公告

配置 Mirror

使用 VSCode 打开配置文件 $HOME/.cargo/config

在其中加入如下代码

[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
Code language: JavaScript (javascript)

然后重新在命令行中执行安装代码,可以看到非常高效的完成了安装.

s2ym7

macOS 安装 Rust 开发环境

安装 Rust

Rust 在 macOS 上的安装非常的简单,只需要在终端执行如下代码

curl https://sh.rustup.rs -sSf | sh
Code language: JavaScript (javascript)

会自动进入到安装的状态,脚本会检测你的操作系统,然后提示你是否安装,作为初学者,直接用默认的安装吧。

zsh4o
提示

稍等片刻,就安装完成了。

e4po0
安装完成的提示

你可以重启终端来应用 Rust 的环境变量,或者直接执行如下命令来使环境变量生效。

source $HOME/.cargo/env
Code language: PHP (php)

执行命令 rustc --version 可以看到版本号信息:

wrl6o

这时,就说明你的安装完成了。

创建测试项目

接下来,在终端里执行如下命令,来创建一个测试项目。

cargo new hello-world
Code language: JavaScript (javascript)

并使用 cd 命令进入该目录,编译,并运行代码

cd hello-world
cargo run

你可以看到这样的输出,就说明你的 Rust 环境已经配置好了。

jkivy

Rust With VSCode

安装 Rust 代码支持

我一般习惯用 VSCode 写代码,所以依然这次继续使用 VSCode 来写 Rust。

在 VSCode 中的拓展管理器中搜索 Rust,可以看到一个名为 Rust(rls) 的拓展,安装这个拓展。

raqc5
Rust(rls)

此时使用 VSCode 打开刚刚创建的 Hello World 项目,就可以看到如下的效果。

84029

然后,打开终端,执行如下命令,来安装 Rust 拓展所需的一些 Rust 组件

rustup component add rls rust-analysis rust-src

安装 crates.io 的拓展支持

Crates.io 类似于我们在 Node.js 世界的 NPM,PHP 世界的 Composer。crates.io 的拓展可以帮助我们更好的管理我们的项目拓展。

在 VSCode 的拓展界面搜索 crates ,就可以看到由 Seray Uzgur 提交的 crates 插件,安装这个插件。

u2ru4

安装完成后,打开项目根目录的 cargo.toml 文件,然后你可以看到,在你的依赖项目后会提示你最新的版本。

a56cs

把你的鼠标放在"0.2.0"的后面,还会提示你所有的更新的版本,你可以通过一下点击,来升级依赖的版本。


或者执行命令来升级所有的依赖

7raj1

安装 TOML 的高亮

Toml 是 cargo 用来存储项目信息的文件格式,VSCode 本身不提供高亮,不过我们可以通过安装一些拓展来实现。

在 VSCode 的拓展管理器搜索 TOML,并安装由 bungcip 开发的 Better TOML,即可实现 toml 文件的高亮。

fqr13

安装完成后,重新打开 cargo.toml 文件,你就会发现其内容被语法高亮了。

ig8h9

这样,我们就完成了 Rust 开发环境的基本配置。后续可以根据你自己的需要,去配置其他拓展和依赖。