js代码报错应为表达式 ts(1109)
原因: vscode自身语法检查有问题
解决方案: 在设置里面加上 “javascript.validate.enable”: false 禁用默认的 js 验证,之后可用第三方工具比如 eslint 或者 tslint 来进行静态检查。
1.点击左下角的设置
2.搜索javascript,点击typescript
3.找到javascript.validate.enable将选项勾掉
3.重启vscode
今天没事看到家里有一款海康的网络摄像头,这个摄像头支持上下左右旋转,另外还可以镜头远近缩放。刚好家里又有一款摇杆和一个北通的手柄。想着写一个软件实现用手柄和摇杆控制摄像头运动,
还能将实时画面显示在软件上,最后做出来的效果还是不错的。大概介绍一下这个软件的开发情况,先附上资料。
资料下载:
开发软件:qt5.14.2
开发语言:c++
测试摇杆:图马斯特(其它xbox摇杆也可以) 链接:http://support.thrustmaster.cn/zh/product/t-flight-hotas-one-zh
测试手柄:北通阿修罗2-无线版
摄像头:海康网络摄像头
效果展示:
软件主界面 视频展示:
软件介绍:
1.软件右边是摇杆或手柄键位拨动时读出的数值。
2.中间部分是手动用鼠标控制摄像头运动,或登录参数设置。
3.左边实时画面。
部分代码:
手柄类:
class joystick:public QObject { public: joystick()=delete; joystick(QVector<QPushButton*>&btn,QTextEdit *edit,QProgressBar *rpos,QProgressBar *zpos); ~joystick(); void Joyinit(); void joyInfoUpdate(); void joyBtnStateClear(void); bool readJoyActInfo(JOYINFOEX &info); private: JOYINFOEX now_act; QVector<QPushButton*>joyBtnList; QTextEdit *textEdit; QProgressBar *joy_dwRpos; QProgressBar *joy_dwZpos; }; #endif // joystick void joystick::joyInfoUpdate() { QString str; now_act.dwSize = sizeof(typeof(joyinfoex_tag)); now_act.
/正则表达式:搜索命令
:s:替换命令
:s/正则表达式/替换字符串/选项
元字符:
* 匹配任意一个字符 [abc] 匹配方括号中的任意一个字符,可以用-表示范围如[a-z0-9]匹配小写字母和阿拉伯数字 [^abc] 在方括号内开头使用^号,表示匹配方括号中字符之外的任意字符 \d 匹配阿拉伯数字,等同于[0-9] \D 匹配阿拉伯数字外的任意字符,等同于[^0-9] \x 匹配十六进制数字,等同于[0-9A-Fa-f] \X 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f] \w 匹配单词字母,等同于[0-9A-Za-z] \W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z] \t 匹配<TAB>字符 \s 匹配空白字符,等同于[\t] \S 匹配非空白字符,等同于[^\t] 特殊字符:
\* 匹配*字符 \. 匹配.字符 \/ 匹配/字符 \\ 匹配\字符 \[ 匹配[字符 表示数量的元字符:
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #define N 80 void printText(int line, int col, char text[]); void printSpaces(int n); void printBlankLines(int n); int main()//随机在0~24中某行、0~79中某列开始输出字符串,共输出十次,每输出一次后停顿一秒。 { int line, col, i; char text[N] = hi,May~; srand(time(0)); for (i = 1; i <= 10; i++) { line = rand() % 25; col = rand() % 80; printText(line, col, text); Sleep(1000); } return 0; } void printSpaces(int n) { int i; for (i = 1; i <= n; i++) printf( ); } void printBlankLines(int n) { int i; for (i = 1; i <= n; i++) printf(\n); } void printText(int line, int col, char text[]) { printBlankLines(line - 1); printSpaces(col - 1); printf(%s, text); } #define _CRT_SECURE_NO_WARNINGS #include<stdio.
概述 我们使用前面《SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码分析(中)》的两个微服务示例,分别是库存微服务和订单微服务,基于Nacos注册中心和配置中心的使用,前面Nacos我们已基于dock-compose方式部署,我们增加配置数据,这里我们暂时也不把数据打包进去,各位可以直接将容器以dokcer export方式导入为镜像,微服务使用订单、库存MySQL数据库暂时也不单独做成镜像,各位可以做成SQL脚本执行导入方式。
整体工程结构 docker目录docker compose编排脚本目录 bin目录:包含初始化脚本、启动脚本、停止脚本、更新脚本 env目录:存在为微服务环境变量 yaml目录:存在全局环境脚本变量、微服务docker-compose脚本 库存微服务 bin目录:存在微服务启动脚本 conf目录:存在启动配置文件和日志配置文件 Dockerfile文件 订单微服务 bin目录:存在微服务启动脚本 conf目录:存在启动配置文件和日志配置文件 Dockerfile文件 库存微服务 编写配置文件 bootstrap.yml
spring: application: name: ecom-storage-service profiles: active: ${SPRING_PROFILES_ACTIVE:dev} main: allow-circular-references: true cloud: nacos: # 注册中心信息放在配置中心上,每个程序一般只配置配置中心的信息 server-addr: ${NACOS_CONFIG_SERVER:192.168.50.95:8848} config: server-addr: ${spring.cloud.nacos.server-addr} file-extension: yaml namespace: ${NACOS_CONFIG_NAMESPACE:a2b1a5b7-d0bc-48e8-ab65-04695e61db01} group: ${NACOS_CONFIG_GROUP:storage-group} extension-configs: - dataId: extension-priority-dev.yaml group: extension-group refresh: true - dataId: commons-dev.yaml group: commons-group refresh: true shared-configs: - dataId: shared-priority-dev.
递归函数,动态分配内存,
会堆栈溢出
在内存中再分配内存,内存会不够用
HttpRequestMDCFilter拦截器统一处理 import com.****.config.AuthManager; import com.****.constant.MDCConstants; import org.slf4j.MDC; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; /** * 在logback日志输出中增加MDC参数选项 * 注意,此Filter尽可能的放在其他Filter之前 * <p> * 我们可以在logback.xml文件的layout部分,通过%X{key}的方式使用MDC中的变量 */ @Order(1) @Component public class HttpRequestMDCFilter implements Filter { @Resource private AuthManager authManager; private String localIp;//本机IP @Override public void init(FilterConfig filterConfig) throws ServletException { //getLocalIp localIp = getLocalIp(); } private String getLocalIp() { try { //一个主机有多个网络接口 Enumeration<NetworkInterface> netInterfaces = NetworkInterface.
构造一个文本文件,文件中有100行数据,数据内容格式为: name, mailbox mmvk001,
[email protected] mmvk002,
[email protected] mmvk003,
[email protected] …… …… mmvk100,
[email protected] f=open('data.txt','a') f.write('name, mailbox\n') for i in range(1,101): str1='{:0>3}'.format(i) str2='mmvk'+str1+',mmvk'+str1+'@163.com\n' # print(str2) f.write(str2) f.close()
'''#hasattr()判断真假布尔值True Faster#delattr()删除#setattr()新增#getattr()#查看class Person(object): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = genderhuchangxi = Person(huchangxi, 22, 男)def check_attr(): attr = input(呼长喜的属性 ) # print(attr, type(attr)) is_exist = hasattr(huchangxi, attr) # 布尔值 if is_exist: print(getattr(huchangxi, attr)) else: print(呼长喜不存在属性, attr) choice = input(是否设置该属性?Y/N:) if choice.upper() == Y: value = input(f请输入属性{attr}的值:) print(value) setattr(huchangxi, attr, value) print(赋值成功)while 1: print( 1. 查看属性 2. 删除属性 3. 修改属性 4. 添加属性 ) choice = input(请输入选择的序号) if choice == 1: check_attr() elif choice == 2: chongxin = while 1: del_attr = input(f请{chongxin}输入删除属性:) if hasattr(huchangxi, del_attr): delattr(huchangxi, del_attr) print(删除成功!) break else: chongxin = 重新 print(不存在该属性, del_attr)'''
下文笔者将采用示例的方式讲述-将函数作为参数传递的方法分享,如下所示: 实现思路: 方式1:传送一个类对象,自然而然地将类中的方法也传送 方式2:使用Lambda表达式定义一个函数,然后传入 例:使用Lambda函数定义一个,然后传入 package com.java265.other; import java.util.function.Function; public class Test16 { /** * java265.com 示例程序 */ public static void main(String... args) { Function<Integer, Integer> increase = e -> e + 100; // lambda表达式 funTest(3, increase); } public static void funTest(int value, Function<Integer, Integer> func) { System.out.println(func.apply(value)); } } 转自:http://www.java265.com/JavaCourse/202204/2953.html