由于业务需要,在上个月做了一个关于qt的设计,在设计中主要需要解决的问题就是接收单片机采集到的数据并在上位机将数字实时的通过波形显示出来,然后上位机要有保存下数据文件的功能,便于后续的软件读取数据做进一步的分析处理
QT第一步:安装软件环境
安装qt5.14,可以在这个网站下载安装包。 下载版本: qt-opensource-windows-x86-5.14.2.exe
安装时需要勾选MinGW 相关选项
安装教程不在重复赘述,网上有很多的例子
第二步:初始QT
qt作为一种开源的UI程序设计框架可以便捷的通过qt提供的各种组件以低代码的方式组件自己需要的ui界面,这对于初步入门的设计人员十分的友好,同时qt官方对每个类、方法、变量的文档说明都非常详细并且提供了实例代码入门非常简单。 安装好qt后直接使用qt官方的Qt Creator程序进行开发,当然你可以使用MSVS进行开发,这还需要在MSVC中安装一下qt的官方插件。我使用的是VS2019+qt5.14.2,在UI设计界面上VS和qt还存在一定的兼容性问题,有好多次出现闪退的问题。所以工程不是特别大的时候还是建议老老实实就用Qt Creator进行开发。 安装好后可以看到qt提供很多的模板程序,当然也可以都不使用,直接从空白模板开始我们的工程
第三步:了解信号与槽机制
Qt利用信号与槽(signals/slots)机制取代传统的callback来进行对象之间的沟通。当操作事件发生的时候,对象会发提交一个信号(signal);而槽(slot)则是一个函数接受特定信号并且执行槽本身设置的动作。信号与槽之间,则透过QObject的静态方法connect来链接。 信号在任何执行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号。 以往的callback缺乏类型安全,在调用处理函数时,无法确定是传递正确类型的参数。但信号和其接受的槽之间传递的资料类型必须要相符合,否则编译器会提出警告。信号和槽可接受任何数量、任何类型的参数,所以信号与槽机制是完全类型安全。
信号与槽机制也确保了低耦合性,发送信号的类别并不知道是哪个槽会接受,也就是说一个信号可以调用所有可用的槽。此机制会确保当在"连接"信号和槽时,槽会接受信号的参数并且正确执行。
上面的解释来自维基百科,说的简单点呢就是说:当你在qt界面中放置了一个按钮,当你运行程序并移动鼠标点击这个按钮的时候。点击按钮这个动作就是一个信号,当然有了信号我们就要执行命令,我们通过软件定义将这个信号连接上一个槽,这个槽函数执行点击动作所需要的对行功能。信号与槽可以是一一对应也可以是一对多、多对一。 在这里我们可以看到:
QObject::connect(ui->button, SIGNAL(clicked()), this, SLOT(senddata()));
上面这个函数就是一个槽函数,他把button按钮的点击信号链接到了发送数据的响应函数上,只要鼠标点击一次就会发送一次。
在qt中每一个对象都有对应的属性,这些属性的值就对应了这个对象的大小,相对位置,名称等等。
在使用qt时也可以选择pyqt,其中也同样拥有界面设计的功能,但以下的程序默认针对c++版本的qt
开始串口助手
这里默认你已经了解了基本的qt操作和c++语法 首先我们需要一个串口类,用来发送和接收数据; 然后我们需要 两个文本框和几个按钮来实现数据的接收和发送,并且设置串口通信的参数; 实现之后我们就需要设置针对串口数据的解析了:
定时接收串口数据
由于对电脑端接收数据很难做到硬件级的收中断,收到1bit数据就中断处理一次所以我们设置一个定时器,让程序检测当有数据来时就打开定时器开始定时,定时一段时间后关闭中断并接收保存这段时间内的所有数据。 这一段时间根据串口发送一帧数据的时间做合理设置,一般来时这个时候收到的数据里包含着好几帧完整的数据,整段数据的头和尾可能并不是我们设置的帧头和帧尾,所以我们需要从中解析出需要的数据: 这里我使用了关键字索引,从接收到的字符串中查找到第一个我设置的帧头数据,然后从这个位置开始向后继续检索第一个我设置的帧尾,如果帧长度满足要求则把这一段字符串从中提取出来做单独处理:
//串口接收数据帧格式为:帧头'*' 帧尾'#' 数字间间隔符号',' 符号全为英文格式
void Widget::Read_Date()
{
int bufferlens = 0; //帧长
QString str = ui->Receive_text_window->toPlainText();
timerserial->stop();//停止定时器,
qDebug()<Receive_text_window->clear();
ui->Receive_text_window->append(str);
}
else
{
str+="error! ";
str+=tr(buffercashe);
str += " ";
ui->Receive_text_window->clear();
ui->Receive_text_window->append(str);
}
buffer.clear();
}
void Widget::serial_timerstart()
{
timerserial->start(4);
buffer.append(serialport->readAll());
}
在上面的程序中,当串口发现有数据进来则引用Widget::serial_timerstart()
开始定时接收。当定时到之后开始处理接收到的数据。如果数据正常后则把数据保存到缓冲区并更新当前的波形数据。
波形显示
这里显示模型数据使用了很简单的QChart()实例,定义QSplineSeries()对象,然后不断的更新QSplineSeries对象的数据列表,做好坐标轴的处理后就可以实现出动态曲线的效果了。
//曲线设置初始化
void Widget::Chart_Init()
{
//初始化QChart的实例
chart = new QChart();
//初始化QSplineSeries的实例
lineSeries = new QSplineSeries();
//设置曲线的名称
lineSeries->setName("曲线1");
//把曲线添加到QChart的实例chart中
chart->addSeries(lineSeries);
//声明并初始化X轴、两个Y轴
QValueAxis *axisX = new QValueAxis();
QValueAxis *axisY = new QValueAxis();
//设置坐标轴显示的范围
axisX->setMin(0);
axisX->setMax(MAX_X);
axisY->setMin(0);
axisY->setMax(MAX_Y);
//设置坐标轴上的格点
axisX->setTickCount(10);
axisY->setTickCount(10);
//设置坐标轴显示的名称
QFont font("Microsoft YaHei",8,QFont::Normal);//微软雅黑。字体大小8
axisX->setTitleFont(font);
axisY->setTitleFont(font);
axisX->setTitleText("X-时间");
axisY->setTitleText("Y-角度");
//设置网格不显示
axisY->setGridLineVisible(false);
//下方:Qt::AlignBottom,左边:Qt::AlignLeft
//右边:Qt::AlignRight,上方:Qt::AlignTop
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
//把曲线关联到坐标轴
lineSeries->attachAxis(axisX);
lineSeries->attachAxis(axisY);
//把chart显示到窗口上
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing); // 设置渲染:抗锯齿,如果不设置那么曲线就显得不平滑
}
//更新曲线函数
void Widget::DrawLine()
{
if(count > MAX_X)
{
//当曲线上最早的点超出X轴的范围时,剔除最早的点,
lineSeries->removePoints(0,lineSeries->count() - MAX_X);
// 更新X轴的范围
chart->axisX()->setMin(count - MAX_X);
chart->axisX()->setMax(count);
}
else{
chart->axisX()->setMin(0);
chart->axisX()->setMax(MAX_X);
}
//增加新的点到曲线末端
lineSeries->append(count, (int)Data.Sensor_1);
count ++;
}
文件保存
首先是说明下csv文件的写入格式:以逗号作为分隔符,\n
作为换行符。
那么就可以先写入一个表头,然后根据格式从缓存好的数据容器中逐条加载后逐行写入并打上时间戳。 下面的代码举例我们要保存的数据是五通道的。
/*
函 数:SaveRecvDataFile
描 述:保存数据按钮点击槽函数
输 入:无
输 出:无
*/
void Widget::SaveRecvDataFile()
{
if(m_data.size()<1)
{
QMessageBox::information(this, "提示","当前数据为空");
return;
}
serialport->clear(); //清空缓存区
serialport->close(); //关闭串口
timerDrawLine->stop(); //关闭波形刷新
ui->send_button->setEnabled(false); //禁用部分按键
ui->open_port->setEnabled(true);
ui->close_port->setEnabled(false);
ui->save_data->setEnabled(false);
QString csvFile = QFileDialog::getExistingDirectory(this); //获取文件保存路径
if(csvFile.isEmpty())
return;
QDateTime current_date_time =QDateTime::currentDateTime(); //获取系统时间
QString current_date =current_date_time.toString("MM_dd_hh_mm"); //获取时间字符串
csvFile += tr("/%1.csv").arg(current_date);
qDebug()<< csvFile;
QFile file(csvFile);
if ( file.exists())
{
//如果文件存在执行的操作,此处为空,因为文件不可能存在
}
file.open( QIODevice::ReadWrite | QIODevice::Text ); //以读写模式读取文件
QTextStream out(&file);
out<().swap(m_data); //清空缓存区数据
QMessageBox::information(this, "提示","数据保存成功");
}
好的,那我们基本实现了最初的三个功能,下面附上一张完整效果的演示截图:
完整源码将在项目结束后公开在博客里,有需要的话可以点个关注哦
下次离开还是先见一面吧,即使什么也不说
你可能感兴趣的:(奇怪的知识增加了,嵌入式,qt,开发语言,学习)
广州短视频代运营公司有哪些
红匣子实力推荐
随着短视频行业的蓬勃发展,越来越多的企业和个人开始关注并投入到这个领域。然而,短视频的制作、推广和运营并非易事,需要专业的技术和丰富的经验。为了帮助企业和个人更好地开展短视频业务,广州涌现出了一批专业的短视频代运营公司。下面就为大家介绍几家广州短视频代运营公司。联系专业拍摄公司:13642679953(微信同号)1.广州红匣子传媒有限公司广州红匣子传媒有限公司是一家专注于短视频制作、推广和运营的综
618京东家电能便宜多少 618京东家电怎么选
高省APP珊珊
京东平台中有个活动非常的重要,那就是京东618活动,这个活动的优惠力度还是不错的哦,很多的京东用户们都在期待此次活动的来临,那么2022京东618买家电便宜吗?下面进行介绍。大家好,我是【高省】最大团队创始人珊珊,至于我为何用高省APP领取优惠券呢,当然是高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,也期待你的加入。珊珊导师,
你知道愤怒的背后是什么吗
AR娟娟
请问你是在什么时候会愤怒呢?是孩子不会写作业,调皮捣蛋时的抓狂?是家人做错事时的歇斯底里?是被上级批评时的一忍再忍?还是开车时前方的人不按规则的行驶时的怒不可遏?我想,都会有的吧!我生气啦我们为什么会愤怒,我们这是怎么了?为啥不能冷静下来,好好沟通呢?我们有想过吗?其实,愤怒的背后是爱!没错,是爱!是那种对孩子,对家人朋友,对陌生人的爱。可是由于我们不能够好好的表达,不能够正确的说出自己需求,不懂
学习日志14 python
im_AMBER
学习 python 开发语言
1divmod(a,b)divmod(a,b)是Python内置函数,用于返回两个数相除的商和余数,返回值是一个元组(tuple)。divmod(a,b)是Python的内置函数,用于同时计算两个数值的商和余数,返回一个包含这两个结果的元组(商,余数)。该函数在处理需要同时获取整除结果和余数的场景(如时间单位转换、分页计算)时非常高效。基本用法python运行result=divmod(a,b)#
Web开发 03
今天在学习JavaScript,我其实需要很多练习才可以巩固一点!需要更多!1const用于声明常量的规则在JavaScript中,const用于声明常量,其核心规则是:声明时【必须】同时初始化(赋值),且后续无法重新赋值。关键知识点拆解const声明规则用const声明变量时,必须直接赋初始值,否则会触发SyntaxError:Missinginitializerinconstdeclarati
离线部署视觉模型Qwen2.5-VL方案【企业应用级】
LensonYuan
机器视觉 自然语言处理 qwenvl 视觉模型 大模型部署 qwen2.5 qwen2.5环境 qwen2.5-vl镜像包
离线多卡部署视觉模型Qwen2.5-VL企业级服务方案一、背景公司网络是有严格限制,所有涉及境外服务器的网站都无法访问,包括docker等镜像源。本教程,是在提前下载或构建好资源,通过上传到服务器后,做离线部署。二、参考环境大模型服务发布工具:VLLM=0.7.2。大模型版本:qwen2.5-vl-7b,其他版本也可。python版本:python==3.12。环境可选:docker或直接pyth
Web开发 02
im_AMBER
前端 学习
今天梳理出的HTML+CSS核心知识点,涵盖基础结构、布局、样式优化等实用技巧:总结1一、HTML核心知识1.基础结构文档声明:定义文档为HTML5标准。基本标签::根元素,包裹整个页面。:元数据(标题、样式、脚本等),不显示在页面。:设置网页标题(浏览器标签显示)。:页面内容容器,所有可见内容写在这里。2.常用标签文本与标题:~:标题标签,自动加粗且有默认层级样式。:段落标签,默认有上下边距。图
今日头条上怎么发布文章会有收益?今日头条发文章获取收益的方法
高省APP大九
今日头条作为自媒体平台,它的发展挺不错的,大家都可以在这个自媒体平台发布文章。那么在这个平台上面如何去发布文章呢?相信很多的网友们都存在疑问,下面进行相关的介绍。大家好,我是高省APP联合创始人蓓蓓导师,高省APP是2021年推出的电商导购平台,0投资,0风险、高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个可省钱佣金高,能赚钱有收益的平台,百度有几百万篇报道,也期待你的加入。高省邀请
Ubuntu 系统的 Docker 容器使用入门
操作系统内核探秘
操作系统内核揭秘 OS ubuntu docker eureka ai
Ubuntu系统的Docker容器使用入门关键词:Ubuntu、Docker容器、容器使用入门、容器部署、容器管理摘要:本文旨在为初学者提供在Ubuntu系统上使用Docker容器的全面入门指南。从Docker的基本概念入手,逐步介绍如何在Ubuntu系统中安装Docker,详细讲解Docker容器的核心操作,包括创建、启动、停止和删除等。还会涉及到镜像的管理以及实际项目实战案例,最后探讨Dock
Java BPM量子引擎:用代码折叠时空,让企业流程快到违反物理定律!
墨夶
Java学习资料4 java 开发语言
企业流程的"薛定谔困境"与破局之道老张的茶话会:“企业流程像薛定谔的猫——你永远不知道下一秒是卡在审批还是烂在沟通!但Java能用代码让它’量子坍缩’到最优路径!”数据说话:传统流程平均耗时:72小时→优化后仅需18分钟流程执行成功率:优化前68%→优化后99.9%并发处理能力:单实例支持1000+流程实例核心矛盾:“企业流程像’薛定谔的审批’——测不准路径,调不好节点?Java用代码让它’量子化
关于注册登录功能制作的步骤(文件IO存储+LVGL弹窗提示)
DIY机器人工房
DIY机器人工房 嵌入式硬件 单片机
按你的需求(文件IO存储+LVGL弹窗提示),工程需创建以下文件,代码按功能模块化存放,清晰明了:一、需要创建的文件清单文件名作用存放内容main.c程序入口主函数、硬件初始化、LVGL初始化、启动界面ui.h界面函数声明声明登录/注册界面创建、页面跳转等函数ui.c界面实现用LVGL创建登录/注册界面、按钮回调、lv_msgbox弹窗提示user_file.h文件操作函数声明声明注册写入、登录查
今天是我的生日
如风_自由
今天是我的生日,嘿嘿!不知从什么时候开始,不喜欢过生日。只想就如平凡的一天一样安安静静的度过。去年自我觉察:一是自卑在作祟,不想成为事件的中心人物;二是怕孩子花钱,怕家人花钱,自己的不配得感冒了出来。归根结底还是自卑在作祟。今年自我觉察:不想过生日,也是怕自己老去,不愿意面对现实。这大概也是一种死亡焦虑。昨晚女儿打电话,说今晚要回来陪她娘过生日,在我婉言谢绝了一会儿时,突然想到,孩子要尽心,还是不
曼城“非常热衷于”签下皇家马德里目标,财务计划已到位,来挑战西甲巨人的明星前锋
无影小优
几个月来,英超冠军一直与这位21岁的射手的转会联系在一起,因为他们试图获得一名顶级中锋的服务,以取代塞尔吉奥·阿奎罗,后者于6月签约巴塞罗那。在未能确保托特纳姆热刺护身符哈里·凯恩在夏天的到来之后,瓜迪奥拉的球队正在寻求捍卫他们的联赛冠军,并可能在冠军联赛中更进一步,而他们的队伍中没有一名不折不扣的前锋。最近有报道称,曼城计划在未来几周和几个月与哈兰德的代表举行会议,讨论夏季转会阿提哈德球场的可能
卡罗猫:女生的哪些行为最容易让男人反感
卡罗猫
有一些朋友经常说,为什么她和一个男生在微信上聊得好好的,但是第一次约会之后,男生就再也不主动联系她了呢?其实很有可能是因为你和男生在现场互动过程中,你的行为习惯让男生给你减了不少分,下面我们举出3个很容易让你被减分的行为习惯来详细说一下。1、不懂得给男生面子很多女生可能因为情商不是很高,导致了她们在和男生相处的时候,没有照顾到男生的面子,特别是在一些公众场合,我的一个男性朋友就和我抱怨过。他说,有
生活百般滋味,你也要笑着面对
我看到自己都上火
上小学的时候,外公外婆去世,愚钝的我,并不知道什么叫做伤悲。事后,看着老妈一个人在角落里黯然神伤,突然间发现,生活原来并不是书上写的那样美好。当我再一次目睹了生命的短暂与脆弱时,泪,竟不知道该怎么流了,似乎心早已碎满了胸口,痛彻心扉。前不久,身边有个好朋友突然跟我聊天说:“没意思,不想工作了”。似乎这是憋在每个人心里的一句话,平时我也会和朋友抱怨两句,但没想到的是她认真了。不太熟悉她的人肯定会觉得
遗落的光阴
古诗风光
第七篇,小明的学生时代。可能是因为每一个五金店老板都是一个技术控,当然所谓的技术也只是限于敲,打,点,焊,没有书本上的理论完全靠个人的经验积累。小明他们把想做的东西和老板描述了一下,小涛怕说的不够明白,还专门解释了一下,当然,老板根本就不在意,也没有听,他几十年的工作经验告诉他,这东西太简单没有什么好考虑的和思考的,只要材料用的还行,稍微修一下,焊一下就可以了,关键是几个初中拿它主要是娱乐为主,所
2018-10-10
wangkj
姓名:王康军公司:常州新日催化剂有限公司【日精进打卡第146天】【知-学习】【经典名句】知行合一,知道了不等于做到了!中间还隔着实践【行-实践】1.测试中心热电偶百度沸水校正2.与同事真心交流3.确认测试试剂到货时间4.快乐会议,快乐活动积善:发愿从2018年4月15日起三年内行善1000件,今日1善,共计167善省~悟部门管理中的破棉烂絮,正是自己个人问题的真实写照,为了同事幸福唯有自己努力提高
出自《道德经》的52个成语
樂伊李_李昂梁
1、玄之又玄【解释】:形容非常奥妙,不易理解。【出自】:第一章:“玄之又玄,众妙之门。”2、有无相生【解释】:有和无是可以相互转化的。也指矛盾双方的对立与转化,阴阳相生的关系。【出自】:第二章:“有无相生,难易相成,长短相形,高下相盈,音声相和,前后相随,恒也。”3、功成不居【解释】:任其自然存在,不去占为己有。后形容立了功而不把功劳归于自己。【出自】:第二章:“为而弗恃,功成而弗居也。”4、和光
到底应该怎么抓语文成绩
山东董纯
上学期期末考试,全区统一采用网上阅卷的形式。在这个大数据时代,在这个极为透明的数据时代,一旦采用这样网络统一阅卷的形式。那丑媳妇就要真的见公婆了。再这样一个要生源没生源。要学习积极性没有学习积极性的氛围里。想取得好的成绩是真的难上加难。尽管已经预料到跟其他兄弟学校有一定的差距。但是没有想到差距如此之大。领导们坐不住了,反复约谈备课组长。理由是其他科目差距不大,甚至有优势。为什么语文学科会有如此大的
谢谢你,小罗!
南希_c83c
这次回乡下过年,个人表现还算满意。在乡下的日子里做到了很勤劳。听到不中听的话,虽然心里不舒服,但却没有怼回去。这也算是一种进步吧。对孩子没有做完的作业,眼看着开学一天天的到来,心里替他们焦急得要命。说到学习,最想感谢的应该是年前给女儿补习的李老师吧!一个年轻又帅气的小伙子。在我最无奈迷茫的时候,接住了我的焦虑。给了我很大的勇气和信心。也给女儿带来了很多的理解与支持。对她也很关爱,是个非常有耐心的一
深入了解 find_element 方法:Web 自动化定位元素的核心
山烛
前端 javascript python selenium find_element
在Web自动化测试领域,元素定位是实现各类操作的基础,而find_element方法正是Selenium等自动化工具中用于定位单个元素的核心方法。掌握它的使用技巧,能让我们更精准、高效地操控网页元素,为自动化测试脚本的编写打下坚实基础。find_element方法的主要作用是在当前网页的DOM结构中,根据指定的定位策略和定位表达式,查找并返回第一个匹配的元素。如果未找到匹配元素,该方法会抛出NoS
小白学Python,压缩和解压文件
目录前言一、判断文件是否为Zip文件二、打开压缩文件三、解压文件四、获取Zip文件中文件的属性信息前言Python标准库中的zipfile库可用于处理压缩文件,.zip是一种常用的压缩文件格式。zipfile库中包含用于查看Zip文件、解压Zip文件、将文件压缩为Zip文件等的方法。需要注意的是,在使用zipfile库前需要使用import导入zipfile库。一、判断文件是否为Zip文件zipf
智慧后厨检测算法构建智能厨房防护网
智驱力人工智能
人工智能 算法 高温预警 行为识别 口罩识别 食品安全 手套识别
智慧后厨检测:构建安全洁净厨房的智能解决方案背景:传统后厨管理的痛点与智慧化需求餐饮行业后厨管理长期面临操作规范难落实、安全隐患难察觉、卫生状况难追溯等痛点。传统人工巡检效率低、覆盖面有限,难以实现24小时无死角监管。例如,厨师未佩戴口罩或手套、违规使用手机、动火离人等行为,可能引发食品安全事故或火灾风险。随着人工智能技术的成熟,智慧后厨检测系统通过集成多种算法,实现了对后厨人员行为、环境卫生、设
遗落的光阴
古诗风光
第七篇,小明的学生时代。小明就这样穿过街头,穿过公园,穿过博物馆、图书馆,还有他同学的学校。他很自觉的没有进去参观,为了奖励自己,他在老街的街头的一个烧饼摊那里买个一个烧饼,他原本想着五块钱买三个的,后来想了想还是算了吧,毕竟还是要细水长流的,一个星期的伙食在等着他呢。他说拿一个的时候,老板急忙劝说他买三个,这样划算。小明很坚决的,只要了一个,他觉得还是解解馋就够了,吃饱喝足有点过于奢侈。小明拿了
2023-7-29晨间日记
雪花飞舞肉丝香
今天是什么日子起床:就寝:天气:心情:纪念日:任务清单昨日完成的任务,最重要的三件事:改进:习惯养成:周目标·完成进度学习·信息·阅读健康·饮食·锻炼人际·家人·朋友工作·思考最美好的三件事1.2.3.思考·创意·未来
Leetcode 04 java
im_AMBER
leetcode java 算法
坚持坚持坚持!!!!呵呵额呵呵不想学了,坚持坚持坚持坚持坚持!!!!题目234.回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出:false提示:链表中节点数目在范围[1,105]内0vals=newArrayList();//将链表的值复
关于字符编辑器vi、vim版本的安装过程及其常用命令:
DIY机器人工房
编辑器 vim linux 嵌入式硬件 DIY机器人工房 stm32 单片机
1.编辑器1.1图形编辑器平时常见的编辑器都是图形编辑器,比如记事本、notepad、office、wps等,图形编辑器的意思就是这些编辑器带有图形界面,有菜单选项。比如最简单的Windows的记事本:记事本当然,编程时不可能使用记事本来写代码,常用的专业编程IDE有vsCode、qtCreator等,常用的专业编辑器有sumlime、notepad++、vim等,它们各有所长。其中,在嵌入式开发
Python 魔术方法
坚定的小辣鸡在努力
Python python 开发语言
Python魔术方法Python中的魔术方法(MagicMethods),又叫“双下方法(dundermethods)”,像__init__、__str__、__eq__这样的名字,是Python面向对象非常强大的特性。阅读原文https://www.xiaozaoshu.top/articles/python/maigc-method常用魔术方法详解最常见也最有用的几个魔术方法:1.__init
北京-4年功能测试2年空窗-报培训班学测开-第五十四天
amazinging
python 学习 面试
今天交付的成果是,初版简历虽然只写了项目部分,但用了一整天,期间联系了前司组长,拿到了性能测试报告。然后再看压测脚本,突然能看懂了,对服务端日志也能看懂些了,还找到了客户端日志怎么说呢,现在就是各种拼凑的阶段。我需要回忆几年前工作中可能听过的那些内容,还有结合各种搜集到的信息(从前同事那或其提供的文件),同时通过问ai来拼凑要写的项目的技术栈、架构、接口、数据库、开发逻辑等真的是要命了,以前根本对
回顾一下Docker的基本操作
William一直在路上
职业重启计划 工作心得 docker eureka 容器
基本操作Docker是一个开源的应用容器引擎,使用Docker可以更轻松地创建、部署和运行应用程序。下面介绍Docker的一些基本操作,主要包括镜像操作、容器操作、仓库操作这几个方面:镜像操作搜索镜像:使用dockersearch命令可以搜索DockerHub上的镜像。例如,搜索Nginx镜像:dockersearchnginx该命令会列出与Nginx相关的镜像,包含镜像的名称、描述、星级评价等信
数据采集高并发的架构应用
3golden
.net
问题的出发点:
最近公司为了发展需要,要扩大对用户的信息采集,每个用户的采集量估计约2W。如果用户量增加的话,将会大量照成采集量成3W倍的增长,但是又要满足日常业务需要,特别是指令要及时得到响应的频率次数远大于预期。
&n
不停止 MySQL 服务增加从库的两种方式
brotherlamp
linux linux视频 linux资料 linux教程 linux自学
现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作。
一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabacku
Quartz——SimpleTrigger触发器
eksliang
SimpleTrigger TriggerUtils quartz
转载请出自出处:http://eksliang.iteye.com/blog/2208166 一.概述
SimpleTrigger触发器,当且仅需触发一次或者以固定时间间隔周期触发执行;
二.SimpleTrigger的构造函数
SimpleTrigger(String name, String group):通过该构造函数指定Trigger所属组和名称;
Simpl
Informatica应用(1)
18289753290
sql workflow lookup 组件 Informatica
1.如果要在workflow中调用shell脚本有一个command组件,在里面设置shell的路径;调度wf可以右键出现schedule,现在用的是HP的tidal调度wf的执行。
2.designer里面的router类似于SSIS中的broadcast(多播组件);Reset_Workflow_Var:参数重置 (比如说我这个参数初始是1在workflow跑得过程中变成了3我要在结束时还要
python 获取图片验证码中文字
酷的飞上天空
python
根据现成的开源项目 http://code.google.com/p/pytesser/改写
在window上用easy_install安装不上 看了下源码发现代码很少 于是就想自己改写一下
添加支持网络图片的直接解析
#coding:utf-8
#import sys
#reload(sys)
#sys.s
AJAX
永夜-极光
Ajax
1.AJAX功能:动态更新页面,减少流量消耗,减轻服务器负担
2.代码结构:
<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
.... AJAX script goes here ...
创业OR读研
随便小屋
创业
现在研一,有种想创业的想法,不知道该不该去实施。因为对于的我情况这两者是矛盾的,可能就是鱼与熊掌不能兼得。
研一的生活刚刚过去两个月,我们学校主要的是
需求做得好与坏直接关系着程序员生活质量
aijuans
IT 生活
这个故事还得从去年换工作的事情说起,由于自己不太喜欢第一家公司的环境我选择了换一份工作。去年九月份我入职现在的这家公司,专门从事金融业内软件的开发。十一月份我们整个项目组前往北京做现场开发,从此苦逼的日子开始了。
系统背景:五月份就有同事前往甲方了解需求一直到6月份,后续几个月也完
如何定义和区分高级软件开发工程师
aoyouzi
在软件开发领域,高级开发工程师通常是指那些编写代码超过 3 年的人。这些人可能会被放到领导的位置,但经常会产生非常糟糕的结果。Matt Briggs 是一名高级开发工程师兼 Scrum 管理员。他认为,单纯使用年限来划分开发人员存在问题,两个同样具有 10 年开发经验的开发人员可能大不相同。近日,他发表了一篇博文,根据开发者所能发挥的作用划分软件开发工程师的成长阶段。
初
Servlet的请求与响应
百合不是茶
servlet get提交 java处理post提交
Servlet是tomcat中的一个重要组成,也是负责客户端和服务端的中介
1,Http的请求方式(get ,post);
客户端的请求一般都会都是Servlet来接受的,在接收之前怎么来确定是那种方式提交的,以及如何反馈,Servlet中有相应的方法, http的get方式 servlet就是都doGet(
web.xml配置详解之listener
bijian1013
java web.xml listener
一.定义
<listener>
<listen-class>com.myapp.MyListener</listen-class>
</listener>
二.作用 该元素用来注册一个监听器类。可以收到事件什么时候发生以及用什么作为响
Web页面性能优化(yahoo技术)
Bill_chen
JavaScript Ajax Web css Yahoo
1.尽可能的减少HTTP请求数 content
2.使用CDN server
3.添加Expires头(或者 Cache-control) server
4.Gzip 组件 server
5.把CSS样式放在页面的上方。 css
6.将脚本放在底部(包括内联的) javascript
7.避免在CSS中使用Expressions css
8.将javascript和css独立成外部文
【MongoDB学习笔记八】MongoDB游标、分页查询、查询结果排序
bit1129
mongodb
游标
游标,简单的说就是一个查询结果的指针。游标作为数据库的一个对象,使用它是包括
声明
打开
循环抓去一定数目的文档直到结果集中的所有文档已经抓取完
关闭游标
游标的基本用法,类似于JDBC的ResultSet(hasNext判断是否抓去完,next移动游标到下一条文档),在获取一个文档集时,可以提供一个类似JDBC的FetchSize
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
白糖_
ORA-12514
今天通过Oracle SQL*Plus连接远端服务器的时候提示“监听程序当前无法识别连接描述符中请求服务”,遂在网上找到了解决方案:
①打开Oracle服务器安装目录\NETWORK\ADMIN\listener.ora文件,你会看到如下信息:
# listener.ora Network Configuration File: D:\database\Oracle\net
Eclipse 问题 A resource exists with a different case
bozch
eclipse
在使用Eclipse进行开发的时候,出现了如下的问题:
Description Resource Path Location TypeThe project was not built due to "A resource exists with a different case: '/SeenTaoImp_zhV2/bin/seentao'.&
编程之美-小飞的电梯调度算法
bylijinnan
编程之美
public class AptElevator {
/**
* 编程之美 小飞 电梯调度算法
* 在繁忙的时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。
* 所有乘客都从一楼上电梯,到达某层楼后,电梯听下来,所有乘客再从这里爬楼梯到自己的目的层。
* 在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
* 问:电梯停在哪
SQL注入相关概念
chenbowen00
sql Web 安全
SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
首先让我们了解什么时候可能发生SQ
[光与电]光子信号战防御原理
comsci
原理
无论是在战场上,还是在后方,敌人都有可能用光子信号对人体进行控制和攻击,那么采取什么样的防御方法,最简单,最有效呢?
我们这里有几个山寨的办法,可能有些作用,大家如果有兴趣可以去实验一下
根据光
oracle 11g新特性:Pending Statistics
daizj
oracle dbms_stats
oracle 11g新特性:Pending Statistics 转
从11g开始,表与索引的统计信息收集完毕后,可以选择收集的统信息立即发布,也可以选择使新收集的统计信息处于pending状态,待确定处于pending状态的统计信息是安全的,再使处于pending状态的统计信息发布,这样就会避免一些因为收集统计信息立即发布而导致SQL执行计划走错的灾难。
在 11g 之前的版本中,D
快速理解RequireJs
dengkane
jquery requirejs
RequireJs已经流行很久了,我们在项目中也打算使用它。它提供了以下功能:
声明不同js文件之间的依赖
可以按需、并行、延时载入js库
可以让我们的代码以模块化的方式组织
初看起来并不复杂。 在html中引入requirejs
在HTML中,添加这样的 <script> 标签:
<script src="/path/to
C语言学习四流程控制if条件选择、for循环和强制类型转换
dcj3sjt126com
c
# include <stdio.h>
int main(void)
{
int i, j;
scanf("%d %d", &i, &j);
if (i > j)
printf("i大于j\n");
else
printf("i小于j\n");
retu
dictionary的使用要注意
dcj3sjt126com
IO
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
user.user_id , @"id",
user.username , @"username",
Android 中的资源访问(Resource)
finally_m
xml android String drawable color
简单的说,Android中的资源是指非代码部分。例如,在我们的Android程序中要使用一些图片来设置界面,要使用一些音频文件来设置铃声,要使用一些动画来显示特效,要使用一些字符串来显示提示信息。那么,这些图片、音频、动画和字符串等叫做Android中的资源文件。
在Eclipse创建的工程中,我们可以看到res和assets两个文件夹,是用来保存资源文件的,在assets中保存的一般是原生
Spring使用Cache、整合Ehcache
234390216
spring cache ehcache @Cacheable
Spring使用Cache
从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的
当druid遇上oracle blob(clob)
jackyrong
oracle
http://blog.csdn.net/renfufei/article/details/44887371
众所周知,Oracle有很多坑, 所以才有了去IOE。
在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的。【如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑】
用Druid连接池,通过JDBC往Oracle数据库的
easyui datagrid pagination获得分页页码、总页数等信息
ldzyz007
var grid = $('#datagrid');
var options = grid.datagrid('getPager').data("pagination").options;
var curr = options.pageNumber;
var total = options.total;
var max =
浅析awk里的数组
nigelzeng
二维数组 array 数组 awk
awk绝对是文本处理中的神器,它本身也是一门编程语言,还有许多功能本人没有使用到。这篇文章就单单针对awk里的数组来进行讨论,如何利用数组来帮助完成文本分析。
有这么一组数据:
abcd,91#31#2012-12-31 11:24:00
case_a,136#19#2012-12-31 11:24:00
case_a,136#23#2012-12-31 1
搭建 CentOS 6 服务器(6) - TigerVNC
rensanning
centos
安装GNOME桌面环境
# yum groupinstall "X Window System" "Desktop"
安装TigerVNC
# yum -y install tigervnc-server tigervnc
启动VNC服务
# /etc/init.d/vncserver restart
# vncser
Spring 数据库连接整理
tomcat_oracle
spring bean jdbc
1、数据库连接jdbc.properties配置详解 jdbc.url=jdbc:hsqldb:hsql://localhost/xdb jdbc.username=sa jdbc.password= jdbc.driver=不同的数据库厂商驱动,此处不一一列举 接下来,详细配置代码如下:
Spring连接池  
Dom4J解析使用xpath java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常
xp9802
用Dom4J解析xml,以前没注意,今天使用dom4j包解析xml时在xpath使用处报错
异常栈:java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常
导入包 jaxen-1.1-beta-6.jar 解决;
&nb