Jenkins初探
随着技术的进步,我切入了越来越多的技术栈,但有一个问题却一直困扰我,就是编写代码后,本地环境和服务器环境不一致,像 Java 程序要打成 Jar 包,通过 ftp 传到服务器,数据库这类配置,服务器和本地环境不一样,也非常恼火。后来,接触到了持续集成(CI)。便学习了 Jenkins
Jenkins 是个啥Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。Jenkins 提供了一个平台,能够将恼人且耗时的编译部署环节自动完成,让程序员专心聚焦于代码,通过工作流的集成,也能提高工作效率。对于团队项目,能够降低工作成本。
Jenkins 安装https://www.jenkins.io/
Jenkins 官网如上
下载Jenkins 可以通过多种方式下载安装,如 Docker,war 包等,因为我们已经有了 Tomcat 做容器。所以选择了下载 War 包。Jenkins 也有许多版本可选,建议选择 LTS 版本,更稳定。
安装环境前提
Linux(本文是阿里的龙蜥 OS ...
NB-IOT(一)BC26与AT命令
BC26 除了与 STM32 或其他单片机对接外,还可通过 USB 转 TTL 串口芯片与电脑相连。本篇将演示通过 CH340 芯片,将 BC26 与计算机相连,并通过串口调试软件,实践 AT 命令
硬件连接芯片图
杜邦线连接
CH340 的 5V 输出端接 BC26 的 vin
CH340 的 TXD 接 BC26 的 RXD
CH340 的 RXD 接 BC26 的 TXD
CH340 的 GND 接 BC26 的 GND
使用跳线帽将 BC26 的 PWR 与 3.3V 相接
软件调试打开串口调试助手,设置波特率 115200发送 AT 命令,将会得到 OK 的响应
常用 AT 命令AT+CGSN=1查询模组序列号 IMEI。
AT+CEREG=1查询网络注册状态
AT+CSQ查询信号。若注册网络成功,会有信号产生,最大 31,若信号小于 10,说明当前网络信号不佳。
AT+CGPADDR=1查询设备的 PDP 地址,返回格式:+CGPADDR: 1,21.176.194.17,0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1 后 ...
NB-IOT(三)STM32驱动BC26通过MQTT协议与电信IOT平台通信
通过之前的实验,我们,能够通过串口调试助手,向 BC26 模块发送 AT 命令,并完成 MQTT 的连接和发布订阅的实现,本次,我们将采用 STM32 驱动 BC26,并发送 AT 命令,并通过 MQTT 协议与电信 IOT 平台的连接。
STM32 相关初始化
测试结果
NB-IOT(二)BC26通过MQTT与电信物联网平台连接
在之前的实验中,实现了通过串口 1 发送 AT 命令,由 STM32 透传到串口 2,并传输到 BC26 模块,之前使用他进行了 NBIOT 协议的实验,这里我们用这个来实现 BC26 通过 MQTT 协议与电信物联网平台的连接,并实践 发布订阅模型.
电信 IOT 平台配置
平台地址:https://dm.ctwing.cn/
创建产品如图配置
属性及服务定义
添加设备
BC26 入网状态检查AT+CIMI //检查SIM卡是否读卡成功。
AT+CESQ //查看信号强度 终端将提供 0 到 99 的信号强度指示。通常,数值越大,强度越高。
测试命令返回支持的参数值。
AT+CGATT? //查看入网状态:
+CGATT:1 //返回0为入网失败,返回1为入网成功。
AT+CGSN=1// 请求 IMEI
配置 BC26 的 MQTT 协议版本配置模组 MQTT 协议版本(BC28/26 支持 MQTT V3.1 和 V3.1.1 ...
Android Service实战之音乐播放器
音乐播放器是 Android 常见的实验,也是用户常用的软件,更是实践 Service 常用的练手项目,本文将展示我的音乐播放器练手过程。
构建 Activityxml 文件<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg1"
tools:context=".MusicPlayer"
android:gravity="center"
android:orientation="vertical">
<ImageView
...
Android之Service
Service 是 Android 四大组件之一,用来执行不需要前台或者耗时长的任务
Service 是什么Service 是 Android 四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件。
服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果你的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该在 Service 中再创建一个子线程.
Service 的启动startService()
启动 Service
显式启动通过类名称来启动,需要在 Intent 中指明 Service 所在的类,并调用 startService (lntent)启动 service
final Intent intentStart = new Intent(ServiceActivity.this, StartService.class);
startService(intentStart);
在上面的代码中,Intent 指明了启动的 Service 所在类为 StartService。通过该方式启动 Service, ...
Android|Intent组件使用
之前学习 ListView,RecyclerView 时己经多次使用了 Intent,当一个 Activity 需要启动另一个 Activity 时, 程序并没有直接告诉系统要启动哪个 Activity,而是通过 Intent 来表达自己的意图:需要启动哪个 Activity。
Intent不仅是封装Android应用程序需要启动某个组件的“意图”,还是应用程序组件之间通信的重要媒介。
Intent 介绍Intent 的作用
启动 Activity
Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity(),可以启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任何必要的数据。
如果希望在 Activity 完成后收到结果,则可以调用 startActivityForResult()。在 Activity 的 onActivityResult() 回调中,Activity 将结果作为单独的 Intent 对象接收。
启动服务
Service 是一个不使用用户界面而在后台执行操作的组件。通过将 I ...
RecyclerView的使用
RecyclerView 是 Android L 新增的控件,被称为 ListView 的继任者
RecyclerView 概述在开发 RecyclerView 时充分考虑了扩展性,因此用它可以创建想到的任何种类的的布局。但在使用上也稍微有些不便,比如使用步骤更加复杂,特别是一些控制点击、长压事件需要自己完成。使用 RecyclerView 开发的项目结构大致如下图所示:从上图可以看到,要使用 RecyclerView,需要先了解清楚 LayoutManager 和 Adapter 元素,分别如下:
LayoutManager:用来确定每一个 item 如何进行排列摆放,何时展示和隐藏。回收或重用一个 View 的时候,LayoutManager 会向适配器请求新的数据来替换旧的数据,这种机制避免了创建过多的 View 和频繁的调用 findViewById 方法。目前 RecyclerView 库提供了如下三种子 Manager:
LinearLayoutManager:展示了水平或者垂直的滚动列表,相当于 ListView,但是没有页眉和页尾。
GridLayoutManag ...
ListView的使用
ListView 作为常见的 Android 高级控件
ListView 是什么ListView 作为常见的 Android 高级控件
ListView 使用布局在 acitivity 中添加 ListView 的控件<ListView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/list_item1"/>
后台代码构造适配器可使用 Android 自带的,也可自定义
适配器传入 ListviewlistView=(ListView) findViewById(R.id.list_item1);
listView.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, strs));
通过指定 android.R.layout.simple_list_ite ...
Hexo折腾(二)怎么在主题更新时保留自己代码
博客主题会一直更新,但是很多人定制了自己的代码,我也不例外,但是更新就会丢失自己的代码,还得重新调整,本文将会解释如何在主题更新时保留自己的代码。
保留自己已改动的代码进入主题目录
cd 进入 node_modules/hexo-theme-xxx
cp 你要的文件到 hexo 根目录的 source 里
检查主题更新
在 hexo 根目录,运行 npm outdated,检查有哪些依赖有更新,若发现自己主题有更新,则记下 Latest 的版本号,修改 package.json
运行 npm install
完成更新
重启 hexo 服务即可