迪迦打怪兽 发布的文章

Flash 和 Ajax 都是用于 Web 开发的技术,各自有一些优缺点。在使用中取舍需要根据具体的需求和情况来决定。

flash 的优点包括:
动画和多媒体效果丰富:Flash 可以创建非常丰富的动画和多媒体效果,适合制作交互式内容和游戏。
跨平台性好:Flash 可以在多个平台上运行,并且拥有相对统一的外观和行为。
较强的交互性:Flash 支持复杂的用户交互,可以实现丰富的用户体验
Flash 的缺点包括:
对 SEO 不友好:搜索引擎很难解析 Flash 内容,因此 Flash 页面的搜索引擎排名通常较低。
安全性问题:Flash 存在安全漏洞,容易成为恶意攻击的目标。
移动设备支持差:随着移动设备的普及,Flash 在移动设备上的支持逐渐减弱。
Ajax 的优点包括:
异步加载:Ajax 可以在不刷新整个页面的情况下向服务器请求数据,提高用户体验。
提升性能:通过减少页面刷新次数,减轻服务器压力,提高页面加载速度。
较好的 SEO:Ajax 技术可以被搜索引擎解析,有利于网站的搜索引擎优化
Ajax 的缺点包括:
对 JavaScript 依赖性强:Ajax 技术需要浏览器支持 JavaScript,对于禁用 JavaScript 的用户可能会造成问题。
跨域限制:由于安全策略,Ajax 请求受到同源策略的限制,跨域请求需要特殊处理。
状态管理复杂:由于页面局部刷新,状态管理可能变得复杂,需要更多的前端开发工作。
在使用中,应该根据具体的项目需求和情况进行取舍。如果需要丰富的动画和交互效果,并且对 SEO 要求不是很高,可以选择使用 Flash;如果需要提升性能和用户体验,并且对 SEO 要求较高,可以选择使用 Ajax 技术。同时,也可以考虑使用 HTML5 技术替代 Flash,以获得更好的性能和跨平台支持。

在使用 输入数值时,经常遇到限制其范围的需要,比如角太阳高度角范围为[-90,90],经度值范围[-180,180],方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围,如使用QIntValidator限制整数的数值范围:

1.只允许输入字母和汉字:

QRegExp regExp;
regExp.setPattern("[a-zA-Z0-9_\u4e00-\u9fa5\w]+$");
QValidator * editName = new QRegExpValidator(regExp,ui->lineEdit);
ui->lineEdit->setValidator(editName);
ui->lineEdit->setMaxLength(10);
2.正则表达式限制 只允许输入 浮点数

QRegExp rx("^(-?[0]|-?1-9{0,5})(?:\.\d{1,4})?$|(^\\t?$)");
3.使用正则表达式限制只能输入数字
QRegExp rx("[0-9.]+$");
QRegExpValidator *validator = new QRegExpValidator(rx, this);
ui->lineEdit->setValidator(validator);
4.使用正则表达式限制只能输入IP地址
QRegExp rx = QRegExp("((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){4}");
QRegExpValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator);
ui->lineEdit->setInputMask("000.000.000.000");

  1. 限制 输入 值范围,此类直接限制不接收数字以外的输入,setRange设置接收范围

QDoubleValidator * pDouVld = new QDoubleValidator(this);

pDouVld->setRange(0,1000000000000000000);
ui->lePort->setValidator(pDouVld);

6.只要字符数字

QRegExpValidator validator2 = new QRegExpValidator(QRegExp("[A-Za-z0-9]"), this);

ui->leId->setValidator(validator2);

7.整理常用 正则表达式

^(-?[0]|-?1-9{0,5})(?:.\d{1,4})?$|(^\t?$)

(^-?180$)|(^-?1[0-7]\d$)|(^-?[1-9]\d$)|(^-?[1-9]$)|^0$

^-?(180|1?[0-7]?\d(.\d+)?)$

^-?(180|1?[0-7]?\d(.\d{1,4})?)$

^-?(90|[1-8]?\d(.\d{1,4})?)$

  1. 式子中开头的^和结尾的$限定字符串的开始和结尾;
  2. "-?" 表示一个或0个负号,这里面的问号表示其前面的字符重复0次或1次;
  3. 管道符“|”表示平行分组,比如后三个,表示180或其它形式;
  4. [1-9] 表示限定数字范围为1到9,其余类似,如果是有限几个值,还可以用枚举的方式,比如限定-255到255时,第一个数字2的限定,应该表达为[1,2],这表示这个位置只允许是1或者2;
  5. "\d"是一个转义字符,表示匹配一位数字;
  6. “.” 表示匹配小数点;
  7. "\d+",这里面的+表示其前面的\d重复一次或多次;
  8. "\d{1,4}",里面的{1,4}表示重复1到4次;

我在安装electron的时候,出现了超时等等各种问题:

(RequestError: connect ETIMEDOUT 20.205.243.166:443)

npm yarn:Request Error: connect ETIMEDOUT 20.205.243.166:443

RequestError: socket hang up

npm ERR! Cannot read properties of null (reading 'matches')
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\caiqi2\AppData\Local\npm-cache\_logs\2023-07-04T11_54_

出现问题的原因
1.可能是你的网速不好,或者访问github.com速度慢

2.可能是你没有清理npm缓存

3.可能是你的node版本太高导致的

解决办法
1.如果是你网速不好或者访问github.com超时等问题,可以通过修改hosts文件来解决,或者修改npm源来解决。

修改npm源:

npm config set registry https://registry.npm.taobao.org/
更改host文件:

找到\Windows\Systems32\divers\etc下面这个hosts文件,然后拷贝一份出来,修改拷贝后的文件里里面,添加一行:这一行的ip是从: 多个地点ping[https://github.com]服务器-网站测速-站长工具

这里获取的,看哪个速度快,就将ip考下来,然后贴进去,然后替换etc下面的那个hosts文件:

最后执行刷新host:然后重新安装试试。

ipconfig /flushdns
2.清除npm缓存,然后重新安装

删除node_modules,并执行命令:

npm cache clean --force
然后重新执行:

npm install
3.切换node版本

使用nvm可以很方便的管理node版本,我这次遇到的问题就是因为node版本太高导致的,所以这里我降级到16.18.0就好了

在普通的网页开发中,JavaScript由于安全性的考虑,通常是无法直接获取到客户端的磁盘路径的。浏览器出于隐私和安全原因对此类信息进行了限制。

在浏览器环境下,JavaScript主要通过Web APIs来与浏览器进行交互,而这些API通常受到浏览器的安全策略的限制。文件系统信息是被认为是敏感的信息,因此浏览器不提供直接访问客户端磁盘路径的API。所以要使用electron属性来获取。

第一步:
electron分为主进程和渲染进程,主进程就是使用electron的特性属性api,渲染进程就是我们的代码,比如vue页面代码这种。

首先我们要把项目用electron启动起来,具体怎么启动看我上一篇博客

启动完成后,找到项目文件中的backgroun.js文件,这是electron主进程的文件

把以下代码加进去

import { app, protocol, BrowserWindow ,ipcMain,ipcRenderer,dialog} from 'electron'
const fs = require('fs');
app.on('ready', async () => {
// if (isDevelopment && !process.env.IS_TEST) {
// // Install Vue Devtools
// try {
// await installExtension(VUEJS_DEVTOOLS)
// } catch (e) {
// console.error('Vue Devtools failed to install:', e.toString())
// }
// }
createWindow()
// 新增:在主进程中处理打开保存图片对话框的请求
ipcMain.handle('dialog:saveImage', async (event, dataURL) => {

return saveImage(dataURL);

});
})

// 将保存图片的逻辑封装成一个函数
async function saveImage(dataURL) {
let base64 = dataURL.replace(/^data:image/\w+;base64,/, '');
let dataBuffer = Buffer.from(base64, 'base64');
const options = {

title: 'Save Image',
buttonLabel: '保存', // 自定义保存按钮的文字
defaultPath: 'image.jpg', // 默认文件名
filters: [
  { name: 'Images', extensions: ['jpg', 'png', 'gif'] }
]

};
const { canceled, filePath } = await dialog.showSaveDialog(options);
if (canceled) {

return null; // 用户取消保存文件时返回 null

} else {

// 将 dataURL 保存到 filePath 的逻辑代码
fs.writeFile(filePath, dataBuffer, function (err) {
  if (err) {
    console.error(err, '保存失败');
  } else {
    console.log(filePath, '保存成功');
  }
});
return filePath; // 返回用户选择的文件路径

}
}

在 Electron 应用程序启动后,创建了窗口(createWindow函数应该是在代码中其他位置定义的)。
通过 ipcMain.handle 方法,为名为 'dialog:saveImage' 的事件注册了一个处理函数,用于处理保存图片对话框的请求。当渲染进程发送 'dialog:saveImage' 事件时,主进程将会执行 saveImage 函数。
saveImage 函数封装了保存图片的逻辑。首先将 Data URL 转换为 Buffer 格式,然后通过 dialog.showSaveDialog 方法展示保存对话框,用户选择保存路径后,将图片文件保存到指定路径。
在 saveImage 函数中:

首先通过 dataURL.replace 和 Buffer.from 将 Data URL 转换成了 Buffer 格式。
然后使用 dialog.showSaveDialog 方法展示保存对话框,用户选择保存路径后,通过 fs.writeFile 方法将 Buffer 写入文件。
最后根据保存成功或失败,返回相应的结果给渲染进程。
fs 是 Node.js 核心模块中的一个模块,全称为 File System(文件系统)。这个模块提供了一系列用于处理文件和文件系统的方法,可以用于读取文件、写入文件、创建目录、删除文件等操作。通过 fs 模块,你可以在 Node.js 程序中对文件和文件系统进行各种操作,包括读写文件、文件夹的操作等。

在 Electron 应用程序中,由于可以利用 Node.js 的能力,因此可以在主进程中使用 fs 模块来处理文件和文件系统相关的操作,比如在上面的代码中就使用了 fs.writeFile 方法来将图片保存到指定路径。

场景描述
相信很多人会有过这样的经历:计算机安装了两张网卡,两张网卡分别连接了不同的网络,计算机默认只能选择某一个网卡作为上网出口,那么是否可以调整让计算机使用指定的网卡作为出口,也就是设置计算机使用的网卡顺序呢?
下面我们就以Windows 10为例,来看看该怎样设置和调整网卡顺序,在多网卡时让Windows网络能按照自己希望的方式工作。

步骤/方法
1.查看路由表中的网卡活跃点数,打开计算机命令窗口cmd,输入“route print -4”,可以发现Windows默认对有线网络设置的跃点数是低于无线网络连接的,也就是说,Windows始终在以有线网络为优先网络,或者活跃点数底的网卡网络优先。命令中的“-4”参数表示,我们只希望输出IPv4的路由表信息。
————————————————
2.打开“控制面板”-“网络和Internet”-“网络和共享中心”,确保两张网卡的网络处于已识别状态,并且都可以正常连接。然后单击左侧菜单“更改适配器设置”。
3.在“网络连接”窗口,选中需要设置默认优先级第一访问的网卡,然后右键点击属性进入一下画面。
4.选中Internet协议版本 4(TCP/IPv4),点击属性进入高级设置,去除默认自动跃点,修改接口跃点数低于另一网卡跃点数即可。
5.修改完接口跃点数点击确定,保存。重新在cmd中输入“route print -4”查看修改是否生效,如以生效重启电脑即可出现想要的网卡为默认优先级第一。

如果你是一位细心的人,完全可以利用服务器的日志文件,来实现保护服务器安全的目的,毕竟任何对服务器的非法攻击都会在服务器日志文件中留下蛛丝马迹,只要你足够细心,能知道服务器当前是否受到了攻击,一旦发现有攻击痕迹的话,只要及时采取相应的应对措施能保证服务器的安全了。不过话又说回来,服务器的日志文件通常只能在服务器本地查看到,可是万一网络管理人员出远门,该如何保证服务器日志文件能被网络管理人员随时远程查看到呢?

要做到这一点,你只要利用Windows 2003服务器的远程维护功能,并通过IE浏览界面,能对服务器的日志文件进行远程查看了,当然在默认状态下,Windows 2003服务器的远程维护功能并没有开通,需要我们手工启动才可以。下面,是远程查看服务器日志文件的具体步骤:

首先检查一下Windows 2003服务器是否已经安装了II6.0组件及其相关组件,要是还没有安装的话,必须先要这些组件安装到服务器中去;

其次在服务器系统桌面的“开始”菜单中,依次单击“设置”、“控制面板”命令,在其后出现的窗口中,用鼠标双击一下“添加或删除程序”图标,接着单击其后界面中的“添加/删除Windows组件”按钮,并在弹出的组件安装向导窗口中,把“应用程序服务器”复选项选中,再单击一下对应窗口中的“详细信息”按钮;

随后的设置界面,选中“Internet信息服务(IIS)”复选项,然后继续单击对应窗口中的“详细信息”按钮;

在接着出现的向导设置窗口中,选中“万维网服务”项目,并继续单击一下对应窗口中的“详细信息”按钮,在弹出的向导界面中,再把“远程管理(html)”项目选中;完成上面的设置后,单击“确定”按钮,并把Windows 2003服务器系统的安装光盘放入到光驱中,然后系统会自动完成剩余的安装设置任务;

以后,网络管理人员无论走到哪里,只要能找到一台可以上网的计算机,并通过IE浏览器界面输入“http://aaa.aaa.aaa.aaa:8098”地址(其中aaa.aaa.aaa.aaa表示Windows 2003服务器的有效IP地址),在稍后打开的服务器帐号验证界面中,正确输入系统管理员帐号,能远程登录到服务器的管理维护页面中了,在该页面中网络管理人员能很方便地查看到服务器中的日志文件了。