`
frank1998819
  • 浏览: 777644 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

七行JSON代码将你的网站变成移动应用(转)

 
阅读更多
引用
作者|Ethan 
译者|大愚若智 
编辑|覃云


本文介绍了借助 Jasonette 将 Web 视图和原生组件融合构建真正“混合”应用的做法。 


如果我告诉你,只需要 上述 7 行橙色的 JSON 代码 就可以将一个网站变成移动应用,你相信吗?完全不需要使用某种框架 API 重写网站,就可以获得与移动应用相同的行为。如果你已经有一个现成的网站,只需要简单地引用 URL 就可以将其“打包”为原生应用。 

而如果在此基础上,只需要略微调整 JSON 代码内容,就可以直接访问所有原生 API、原生 UI 组件以及原生视图切换(View Transition)。 

最简化的范例效果如下图所示: 


从中可以看出,我嵌入了一个 GitHub.com 的 Web 页面,但界面上其余布局均为原生 UI 组件,例如 导航条 以及 底部的标签栏。而我们并不需要使用任何 API 重写网站,就可以自动获得原生的切换效果。 

在介绍具体做法前你可能会问:“看着挺酷,但除了在原生应用框架内展示 Web 页面之外,这种技术还有什么意义?” 

问得好!这也是本文要讲的重点。我们只需要创建一个无缝的 Web 视图与应用间双向通信,借此,父应用就可以触发 Web 视图内的任何 JavaScript 函数,随后 Web 视图即可从外部调用原生 API。 

例如: 


请注意,这个视图包含: 

  • 原生导航条,以及内置的切换功能
  • 一个 Web 视图,其中嵌入了一个可以生成二维码的 Web 应用
  • 在底部包含一个原生的文字输入组件

上述所有这一切只需要略微调整 JSON 代码的属性即可实现。 

最后请注意,随着在文字输入区输入不同内容,二维码也会产生相应变化。输入的文字可触发二维码生成器 Web 应用内部的 JavaScript 函数重新生成二维码图像。 

目前还没有任何一个开发框架曾试图从根本上解决“Web 视图与原生应用无缝集成”的问题,因为这些框架都专注于完全原生,或完全 HTML5 的做法。 

无论什么时候当我们听到有人讨论移动应用的未来时,很可能会听到类似“到底是 HTML5 还是原生方法会最终胜出呢?”这样的说法。 

似乎没人觉得native和html可以共存,而且二者的协同和最终实现似乎也并不容易。 

本文我将要介绍: 

  • 为何 Web 引擎与原生组件的融合通常是一种更好的做法。
  • 为何 HTML 与原生的无缝集成那么难,具体又该如何实现。
  • 更重要的是,该如何使用这样的技术快速构建自己的应用。

为何要在原生应用中使用 HTML? 

在进一步介绍前,首先一起看看这样做是好是坏,以及什么时候适合使用这种方法。这种做法的一些潜在用例如下: 

1. 使用 Web 原生功能 

应用中的部分内容使用 Web 引擎来实现也许是一种更适合的做法。例如 WebSocket 是一种原生的 Web 功能,主要面向 Web 环境而设计。这种情况下就更适合使用内建的 Web 引擎(iOS 的 WKWebView 以及 Android 的 WebView),而非安装某些只能“模拟”WebSocket 的第三方库。 

无需额外安装任何代码,使用免费工具即可实现目标,这样岂不是更好。同时这也催生了下一个原因。 

2. 避免二进制文件体积过大 

有些功能也许需要借助庞大的第三方库,而你可能希望能快速用上这样的功能。 

例如,为了以原生方式包含二维码图像生成器,可能需要安装某些第三方库,这会导致二进制文件体积增大。但如果使用 Web 视图引擎并通过一个简单的<script src>调用 JavaScript 库,就可以免费实现这一切,并且避免了使用第三方原生库。 

3. 缺乏可靠的移动库 

对于一些前沿技术,可能暂时并不具备稳定可靠的移动端实现。 

好在大部分此类技术都具备 Web 实现,因此最高效的集成方法就是使用 JavaScript 库。 

4. 构建部分原生,部分基于 Web 的应用 

很多新手开发者想要将自己的网站移植为移动应用,但在发现自己现有网站的部分功能过于复杂,无法面向每种移动平台快速重写时,往往会感到沮丧或受挫。 

例如你可能有一个非常复杂的 Web 页面无法快速转换为移动应用,但网站的其他内容可以很容易地转换。 

面对这种情况,如果通过某种方法将应用的大部分内容以原生方式构建,对于特别复杂的页面直接将其以 HTML 的形式无缝集成到应用中,是不是很棒啊。 

这是如何实现的? 

A. Jasonette 

Jasonette 是一种基于标记语言,构建跨平台原生应用的开源方法。 

该技术看似 Web 浏览器,但并不会将 HTML 标记语言解释为 Web 页面,而是会将 JSON 标记解释为 iOS 和 Android 上的原生应用。 

正如所有 Web 浏览器都有完全相同的代码,但只要按需解释不同类型的 HTML 标记,即可为用户提供所有不同类型的 Web 应用,所有 Jasonette 应用也有着完全相同的库,可按需解释不同类型的 JSON 标记并创建出你的应用。开发者完全无需触及代码本身,只需要编写标记,将代码实时“翻译”为原生应用,即可开发出自己的应用来。 

虽然 Jasonette 的核心作用在于构建原生应用,但本文的重点在于介绍如何将 HTML 集成到核心原生引擎中,接下来就一起了解一下吧。 

B. Jasonette Web 容器 

原生应用很棒,但有时候我们依然需要使用 Web 功能。 

但 Web 视图与原生应用的集成是个麻烦的过程。无缝的集成要求: 

  • Web 视图应作为原生布局的一部分进行集成:Web 视图应作为原生布局的一部分纳入应用中,并且操作方式应与其他任何原生 UI 组件保持一致。否则会让用户感觉很笨拙,并且感觉上就像自己实际上是在访问网站那样。
  • 父应用可以控制子 Web 容器:父应用应能随意控制子 Web 视图。
  • 子 Web 容器可触发父应用的原生事件:子应用应该能触发父应用的事件以运行原生 API。

这是一个非常繁重的工作,因此先从第一个环节着手介绍:直接将 Web 容器嵌入原生布局 —并将其作为第 1 版发布: 

JSON Web 容器,JSON 中的 HTML 将变为原生应用组件。 

仅这一点就已经很实用了,但由于无法交互,依然存在一定的局限。 

父应用无法控制子 Web 容器,子容器无法向父应用发送任何事件通知,这 导致 Web 容器与外界完全隔离。 

C. Jasonette Web 容器 2.0:使其可交互 

发布第 1 版之后,我们开始处理第二个问题:为 Web 容器添加交互能力。 

下文将介绍如何为之前创建的静态 Web 容器添加交互能力,让它变得更强大。 

实现:交互式 Web 容器 

1. 通过 URL 加载 

问题 

之前在第 1 版中,为了使用 Web 容器作为后台视图组件,我们首先需要将$jason.body.background.type设置为"html",随后在$jason.body.background.text属性下添加硬编码的 HTML 文本,例如这样: 


一般来说,人们往往更希望直接使用 Web URL 对容器进行实例化,而不希望将整个 HTML 代码以硬编码的方式作为一行代码加入。 

解决方案 

Web 容器 2.0 增加了url属性,我们可以嵌入file://形式的本地 HTML,例如这样(可以从伴随应用发布的本地 HTML 文件加载): 


或者也可以嵌入远程的http[s]:// URL,例如这样(可以从远程 HTML 加载): 


2. 父应用与 Web 容器的双向通信 

问题 

之前,Web 容器只能用于展示内容,无法交互。这意味着 下列做法全部无法实现: 

  • Jasonette 到 Web 容器的通信:从 Jasonette 中调用 Web 容器内部的 JavaScript 函数。
  • Web 容器到 Jasonette 的通信:从 Web 容器代码中调用原生 API。

此时我们只能展示 Web 容器的内容。这就像网页中嵌入的 iframe 框架,主页面完全无法访问 iframe 框架中的内容。 

解决方案 

Jasonette 最大的目标在于设计一种可以描述跨平台移动应用的标准化标记语言。因此我们需要这个标记语言能够全面地描述父应用和子 Web 容器之间的双向通信。 

为此我在父应用和子 Web 容器之间使用了一种基于 JSON-RPC 的通信管道。由于 Jasonette 中的一切都是通过 JSON 对象表达的,因此使用 JSON-RPC 标准格式作为通信协议就成了一种非常自然合理的方式。 


为了让 JavaScript 函数能够调用 Web 容器,需要声明一个名为$agent.request的操作: 


$agent.request 是一种原生 API,可触发 JSON-RPC 请求并发送给 Web 容器。为了使用该 API,必须将options对象作为参数传递。 

options对象实际上是发送给 Web 容器的 JSON-RPC 请求。每个属性的含义如下: 

  • id:Web 容器构建在一种名为 Agent 的底层架构基础上,通常来说,我们可以为一个视图使用多个 Agent,每个 Agent 可以有自己的唯一 ID。但 Web 容器是一种特殊类型的 Agent,只能使用 $webcontainer 作为 ID,因此这里需要使用 ID。
  • method:要调用的 JavaScript 函数名称。
  • params:传递给 JavaScript 函数的参数数组。

因此完整来看,所用的标记应该是类似这样的: 


这串标记实际上是在说: 

当视图加载($jason.head.actions.$load)时,向 Web 容器 Agent 发送一个 JSON-RPC 请求($agent.request),而具体的请求是通过options指定的。 

Web 容器在 $jason.body.background 下定义,本例中将会加载一个名为file://index.html的本地文件。 

随后会查找一个名为 login 的 JavaScript 函数并传递params下的两个参数("alice"和"1234")。 


上文介绍了父应用如何触发子 Web 容器的 JavaScript 函数调用,我们还可以反着来,让 Web 容器触发父应用的原生 API。 

详情请参阅 Agent 文档。 

Agent 文档: https://docs.jasonette.com/agents/ 

范 例   

继续回到上文介绍的二维码生成器范例: 

 

  • 其中 底部的文字输入组件是 100% 原生的。
  • 二维码由 作为 Web 应用运行 的 Web 容器生成。
  • 当用户输入内容并按下“生成”,将调用 Web 容器 Agent 中的$agent.request操作,进而调用 JavaScript 函数“qr”。

具体示例可以参阅: 
https://github.com/Jasonette/Jasonpedia/blob/gh-pages/webcontainer/agent/fn/index.json 

3. 脚本注入 

问题 

有时候我们可能需要在 Web 容器完成初始 HTML 加载后,动态地将 JavaScript 代码注入 Web 容器。 

假设要构建一个自定义的 Web 浏览器应用,我们可能希望将自己的自定义 JavaScript 注入到每个 Web 视图,借此定制 Web 视图的行为,这有点类似于 Web 浏览器的扩展。 

就算不需要构建 Web 浏览器,当希望为所包含的内容不由我们控制的 URL 实现自定义行为时,同样需要使用脚本注入的方法。原生应用和 Web 容器只能通过$agent API 通信,但如果无法更改 HTML 内容,只能通过动态注入的方式将$agent接口加入 Web 容器。 

解决方案 

正如上文所述,$jason.body.background这个 Web 容器也是一个agent,这意味着我们可以使用与普通 Agent 完全相同的 $agent.inject 方法。 


4. 对 URL 点击的处理 

以往,Web 容器只能通过两种方式处理链接点击操作: 

  • 只读:将 Web 容器视作只读的,忽略所有诸如触控或滚动等事件。此时所有 Web 容器都是只读的,除非明确令其表现得像是普通浏览器,具体做法见下文。
  • 普通浏览器行为:像是普通浏览器那样,允许用户与页面交互。为此需要进行声明,将"type": "$default"设置为action属性。

问题 

两者均为 “全无或全有(All or nothing)”解决方案。 

  • 对于“只读”,Web 容器会忽略用户的所有交互操作。
  • 对于“普通浏览器行为”,Web 容器的表现将与浏览器一致。点击链接后,将像普通网页那样刷新页面展示链接内容,但无法劫持该点击并调用其他原生 API。

解决方案 

通过使用新的 Web 容器,可以将任何action附加到$jason.body.background这个 Web 容器,进而处理链接点击之类的事件。 


一起看一个例子: 


在这里我们为 Web 容器附加了"trigger": "displayBanner",这意味着当用户点击 Web 容器内的任何链接后,将触发displayBanner操作,而非直接交由 Web 视图处理。 

此外如果查看displayBanner操作会发现,这里出现了变量$jason。在本例中,点击的链接将通过$jason变量传递。例如,如果点击一个名为"https://google.com"的 URL,$jason将获得下列值: 


这意味着我们可以 检查 $jason.url 的值 进而选择性地触发不同操作。 

用自定义 Web 浏览器的实现作为另一个例子一起来看看: 


我们会检查 URL 是否包含字符串signin,并根据结果执行两个不同操作。 

  • 如果包含signin,打开一个新视图并以原生方式完成登录操作。
  • 如果不包含signin,则直接运行"type": "$default"操作,实现类似普通浏览器的行为。

用法示范 

构建自定义 Web 浏览器 

利用新版 Web 容器的下列特性,可以实现很多有趣的操作: 

  • 通过url属性实现自我加载,并充当一个功能齐备的浏览器。
  • 根据 URL 的不同,选择性地处理链接点击操作。

我们甚至可以通过几十行 JSON 代码构建一个自定义的 Web 浏览器。由于现在可以劫持每个链接点击,因此可以检查$jason.url,并根据结果运行我们需要的任何操作。 

例如下面的例子: 

 


从上图可以看到,点击链接后的行为与普通浏览器无异("type": "$default")。 

从下图可以看到,点击链接后可以用原生方式转换至另一个 JASON 视图。 

这一切都可以根据$jason.url的值选择性地触发实现。 

第 1 步:向 Web 容器附加一个名为visit的操作: 


第 2 步:根据$jason.url的值运行visit内部的相关操作 

在下列代码中,我们会检查$jason.url是否与newest、show、ask等内容(均为顶级菜单项链接)相符。如果相符,设置"type": "$default"即可让 Web 容器做出与普通浏览器一样的行为。 

如果模式不符,则可通过原生的$href转换打开一个新视图,并将点击的链接作为参数传递过去。 


该 Web 浏览器的完整 JSON 标记请参阅(仅 48 行!): 

https://github.com/Jasonette/Jasonpedia/blob/gh-pages/webcontainer/agent/hijack.json 
瞬间构建“混合”应用 

人们通常在说“混合”应用时,主要是指封装在原生应用框架内部的 HTML Web 应用。 

但此处说的并不是这种应用。这里所谓的“混合”是指真正的混合应用,也就是可以同时包含多个原生视图以及多个基于 Web 的视图的应用。在这种应用中,一个视图可以有多个原生 UI 组件,以及一个用相同原生布局渲染的 Web 容器。 

Web 视图与原生视图的交织应当尽可能无缝,使得用户完全无法分辨。 


在这个例子中,我创建了一个可以在 Web 容器中显示 jasonbase.com 的内容,并将其作为主页视图的应用。 

Jasonbase 是我开发的免费 JSON 托管服务,该服务可以很简单地用于托管 Jasonette 应用所用到的 JSON 标记。 

当然,这本身是个网站,但我将其嵌入到 Jasonette 中,因此在点击链接后并不会打开网页,而是会通过原生的$href转换展示原生的 JASON 视图。 

完全无需触及 Jasonbase.com 的代码就可以构建出这个应用。 

只需要将网站作为 Web 容器嵌入 Jasonette,随后劫持链接点击操作的原生处理方式,这样就可以实现原生应用所具备的各类功能,例如触发原生 API 以及进行原生转换。 

完整代码可参阅这里:https://github.com/Jasonette/Jasonpedia/blob/gh-pages/webcontainer/agent/hybrid.json 

结 论 

在我看来,让这一切如此令人赞叹的原因在于,在框架层面上即可妥善处理好一切。所有最困难的工作都是在后台完成的。 

应用开发者并不需要自行费时费力从零开始实现下列这一切: 

  • 将 Web 视图嵌入原生布局
  • 创建 JavaScript 桥,以便让应用能够调用 Web 视图中的函数
  • 创建原生事件处理架构,以便让 Web 视图能够触发父应用的原生事件

整个解决方案创建了下列内容组成的抽象: 

  • 声明式标记语言:用于描述如何将 Web 视图嵌入原生应用。
  • 通信协议(JSON-RPC):用于在应用及其子 Web 视图之间实现极为简单的通信。

我并不觉得这种方法可以解决所有问题,但从自己的用例来看,至少可以说这是个不错的解决方案。 

我试着以非常前沿的技术来构建应用,而这些技术已经前沿到在移动端还没有任何稳定可靠的实现(由于协议的一些本质,甚至不清楚最终是否会有移动端的实现)。好在这些技术都有 JavaScript 实现,因此不费什么事就可以轻松地将其与应用相集成。 

总的来说,这种技术很棒,我对目前的效果非常满意。最新版文档 已经包含了所有新功能,欢迎大家深入研究并尝试。 

声明:能力越大,需要担负的责任也就越大 

最后我想说:虽然这种新技术确实很强大,但我觉得大家在开发应用时都应该在用户体验方面进行更全面的权衡。 

有些人可能会借助这种技术构建完全由 Web 视图组成的应用,但说到底这样的做法,你的应用实际上就只是一个网站,已经与开发专属应用的本意背道而驰了。 

需要强调的是,我并不认为你的每个应用都应同时包含 HTML 和原生组件。我只是认为,这样的做法对很多面临某些具体状况的人会显得较为有用,只不过别过火就好。 

相关链接 

最新版文档:https://docs.jasonette.com/web/ 
原文链接:https://medium.freecodecamp.org/how-to-turn-your-website-into-a-mobile-app-with-7-lines-of-json-631c9c9895f5

 

分享到:
评论

相关推荐

    WPF框架在MES系统中的应用:涵盖AGV调度、多线程、数据库及工业组态技术

    内容概要:本文详细介绍了基于WPF框架构建MES(制造执行系统)的经验和技术要点。主要内容包括:使用C#和WPF进行AGV(自动导引车)调度的多线程编程,采用Entity Framework和Dapper进行数据库操作,以及通过TCP/IP Socket和OPC UA协议实现工业组态和数据通信。此外,还探讨了Excel数据导出、PLC通信、路径规划、缓存机制等具体应用场景的技术实现。 适合人群:对WPF框架、MES系统开发感兴趣的软件工程师,尤其是那些希望深入了解工业自动化领域的开发者。 使用场景及目标:适用于需要快速开发高效稳定的MES系统的团队。主要目标是提高生产效率,优化资源配置,增强系统的实时性和稳定性。文中提供的代码片段和实践经验可以帮助开发者更好地理解和解决实际开发中遇到的问题。 其他说明:文章不仅提供了详细的代码示例,还分享了许多实用的开发技巧和优化建议,如多线程处理、异步编程、内存管理和UI更新等。对于想要深入研究WPF框架及其在工业自动化领域应用的人来说,是一份宝贵的参考资料。

    3dmax插件020-一键橱柜.ms

    3dmax插件

    西门子Smart200 PLC与威伦触摸屏三轴螺丝机控制系统解析及应用

    内容概要:本文详细介绍了基于西门子Smart200 PLC和威伦触摸屏的三轴螺丝机控制系统。首先,阐述了系统的硬件配置,包括PLC型号、步进驱动器和触摸屏的选择。接着,深入讲解了核心控制流程,如原点回归、点动控制和任意坐标定位的具体实现方法。文中还展示了如何利用PLC自带的高速脉冲输出进行精确的运动控制,以及如何通过触摸屏实现坐标管理和实时监控。此外,文章分享了一些实用技巧,如状态机架构的应用、运动控制框架的设计思路和常见问题的解决方案。 适合人群:自动化控制领域的工程师和技术人员,尤其是对PLC编程和运动控制感兴趣的初学者和有一定经验的研发人员。 使用场景及目标:适用于工业自动化生产线中需要精密定位和控制的设备开发,如螺丝机、贴标机、点胶机等。目标是帮助读者掌握PLC编程技巧,提高运动控制系统的稳定性和效率。 其他说明:文中提供了详细的代码示例和调试建议,有助于读者快速理解和应用相关技术。同时,强调了系统设计中的注意事项,如脉冲当量计算、机械结构优化等,确保系统的可靠运行。

    宣宇-美团万亿级对象存储挑战和实践探索.pdf

    Con北京站聚焦技术落地与前沿趋势,核心方向包括: ​​AI工程化​​:端侧推理、RAG增强、多模态生成成为主流; ​​云原生深水区​​:混合云治理、湖仓一体架构、可观测性技术持续迭代; ​​安全与效能​​:大模型安全防御、研发流程标准化、平台工程价值凸显; ​​行业融合​​:物流、金融、社交等领域的技术跨界创新案例丰富。 大会为开发者提供了从理论到实践的全景视角,推动技术向生产力转化。

    电动汽车内置式永磁同步电机(MTPA/MTPV)查表控制算法及自动生成程序

    内容概要:本文详细介绍了用于电动汽车内置式永磁同步电机(IPMSM)的基于查询表的矢量控制算法及其自动生成程序。文章首先解释了IPMSM的凸极特性和MTPA(最大转矩每安培)、MTPV(最大功率每伏特)之间的关系,强调了电流分配表在两者间平滑切换的重要性。随后展示了核心代码结构,包括遍历转速-转矩工作点、求解最优dq轴电流、电压电流约束检查以及弱磁补偿策略。此外,文章还讨论了数据输出方式,提供了C语言二维数组和Excel两种格式,并分享了一些实战经验和常见问题解决方法。最后提到了弱磁仿真的重要性,特别是在应对电池电压波动时的表现。 适合人群:从事电动汽车电机控制系统开发的技术人员,尤其是熟悉MATLAB编程并有一定电机控制背景的研发人员。 使用场景及目标:适用于需要高效生成IPMSM电流参考值表的工程项目,旨在提高电机控制系统的性能和稳定性,减少手动计算带来的错误和时间成本。 其他说明:文中提供的MATLAB源码已开源,可在GitHub上获取。同时,作者提醒使用者根据实际情况调整电机参数,以确保生成的查表能够正确应用于具体项目。

    信号处理领域中小波降噪、小波包降噪与滤波降噪的Python实现及应用场景

    内容概要:本文详细介绍了三种常用的信号降噪方法:滤波降噪、小波降噪和小波包降噪。滤波降噪通过设计滤波器来分离信号和噪声,适用于频率特性明确的噪声。小波降噪基于小波变换,能够自适应地捕捉信号的局部特征,尤其适合非平稳信号。小波包降噪则进一步细化了信号的频率分解,提供了更好的降噪效果,尤其在处理复杂信号时表现出色。文中通过Python代码展示了每种方法的具体实现,并进行了效果对比。 适用人群:从事信号处理领域的研究人员和技术人员,以及对信号降噪感兴趣的开发者。 使用场景及目标:① 对于频率特性明确的噪声,可以选择滤波降噪;② 处理非平稳信号时,推荐使用小波降噪;③ 在追求极致降噪效果,特别是面对复杂信号时,优先考虑小波包降噪。 其他说明:文中提供的Python代码可以帮助读者更好地理解和实践这三种降噪方法。同时,强调了在实际应用中需要根据具体的信号特点和需求选择最适合的降噪方法。

    李志伟-端侧大模型的安全建设:如何在算力与保障之间找到平衡.pdf

    Con北京站聚焦技术落地与前沿趋势,核心方向包括: ​​AI工程化​​:端侧推理、RAG增强、多模态生成成为主流; ​​云原生深水区​​:混合云治理、湖仓一体架构、可观测性技术持续迭代; ​​安全与效能​​:大模型安全防御、研发流程标准化、平台工程价值凸显; ​​行业融合​​:物流、金融、社交等领域的技术跨界创新案例丰富。 大会为开发者提供了从理论到实践的全景视角,推动技术向生产力转化。

    三菱FX系列PLC模拟量输入输出转换FB功能块设计与应用

    内容概要:本文详细介绍了三菱FX系列PLC的模拟量输入输出转换功能块(FB)的设计与应用。作者将常见的模拟量处理逻辑封装成即插即用的功能块,极大提高了开发效率。文中详细解释了功能块的接口设计、核心转换逻辑、量程适配方法以及抗干扰措施。同时,提供了多个实际项目的应用案例,如注塑机温度控制、真空炉控制等,展示了功能块的稳定性和易用性。 适合人群:从事工业自动化控制系统的工程师和技术人员,特别是对三菱PLC有一定了解的从业者。 使用场景及目标:适用于需要快速实现模拟量处理的工程项目,如温度、压力、流量等物理量的测量与控制。主要目标是提高开发效率,减少重复劳动,确保系统稳定可靠。 其他说明:文中提到的功能块不仅简化了编程流程,还增加了错误检测和抗干扰能力,使得即使是新手也能轻松应对复杂的模拟量处理任务。此外,功能块支持多种量程和硬件版本,适应性强。

    基于深度学习的口罩佩戴检测,Keras-YOLOv3 实现.zip

    基于深度学习的系统

    前端开发_浏览器扩展_Vite框架_Vue3_模板_适配_M_1744167663.zip

    前端开发_浏览器扩展_Vite框架_Vue3_模板_适配_M_1744167663.zip

    【计算机专业】求职面试全流程解析:技术题型、系统设计与行为面试技巧及资源推荐

    内容概要:本文详细介绍了计算机专业求职面试的内容与技巧,旨在帮助求职者高效准备。面经内容涵盖技术面试、系统设计面试、行为面试和其他类型面试。技术面试包括算法与数据结构、计算机基础、编程语言与框架等高频考点;系统设计面试强调高并发、高可用等设计目标,涉及短链系统、分布式缓存等典型题目;行为面试关注项目中的挑战解决、团队协作等问题,提倡使用STAR法则作答。技巧分享方面,技术面试准备建议刷题、复习基础知识;系统设计采用分层设计法,推荐相关书籍和资源;行为面试注重项目包装,强调量化成果和技术术语的使用;面试实战技巧包括良好沟通、拆解难题等。此外,文章还提供了资源与工具推荐、避坑指南以及不同公司面试侧重点分析,并指出短期冲刺和长期积累对提升面试通过率的重要性。; 适合人群:计算机专业学生和从业者,尤其是有求职需求的人员。; 使用场景及目标:①帮助求职者了解面试常见题型与考察点,进行有针对性的准备;②提供有效的面试技巧,提高求职成功率;③根据不同公司特点调整准备方向,增强竞争力。; 其他说明:通过系统化准备和反复练习,求职者能显著提升面试通过率。技术能力决定下限,而沟通表达与思维逻辑决定上限。

    西门子博图时间加密程序块解析:1212C PLC & KTP700触摸屏应用

    内容概要:本文详细介绍了西门子博图时间加密程序块的应用,特别是在1212C DC/DC/DC PLC和KTP700 Basic PN触摸屏中的实现。文章分为加密算法块和解密算法块两大部分,通过具体的代码示例展示了加密和解密的具体过程。加密算法采用了循环右移和异或运算,确保了加密的高效性和安全性。解密则通过逆向操作恢复原始时间数据。此外,文中还讨论了密钥更新策略、时间戳精度、硬件时钟同步等问题,并提供了实际应用中的注意事项和优化建议。 适合人群:从事工业自动化控制系统的工程师和技术人员,尤其是熟悉西门子PLC和触摸屏编程的人员。 使用场景及目标:① 提供一种可靠的时间加密方法,保护关键时间数据和逻辑不被轻易破解;② 增强项目的保密性和安全性;③ 提供实际项目中的应用案例和优化建议,便于快速移植到其他项目中。 其他说明:文章强调了加密和解密过程的透明度,使得维护人员能够直观理解加密逻辑,有助于快速定位和解决问题。同时,文中提到的一些技巧如动态密钥生成、时间戳精度调整等,也为实际应用提供了宝贵的实践经验。

    三相步进电机开环矢量控制与SVPWM实现的技术解析及应用场景

    内容概要:本文详细介绍了三相步进电机的开环矢量控制方案及其源码实现,尤其是坐标变换(Clarke变换和Park变换)和空间矢量脉宽调制(SVPWM)的具体实现方法。文中不仅解释了理论背景,还提供了具体的代码片段,展示了如何通过坐标变换将三相电流映射到旋转坐标系,并通过SVPWM生成合适的PWM信号来控制电机。此外,文章还讨论了一些实际应用中的技巧和注意事项,如角度生成策略、扇区判断优化以及启动时的斜坡函数设置。 适合人群:从事电机控制领域的工程师和技术爱好者,尤其是对步进电机矢量控制感兴趣的初学者和有一定基础的研发人员。 使用场景及目标:适用于需要提高步进电机控制精度和响应速度的场合,如工业自动化设备、搬运机械手等。目标是通过理解和应用开环矢量控制技术,使步进电机表现出接近伺服电机的性能,同时降低成本和复杂度。 其他说明:文章强调了在资源有限的嵌入式系统中进行优化的重要性,如使用查表法替代实时计算、利用位运算提高效率等。此外,还提到了一些调试技巧,如通过示波器观察波形、调整角度积分环节等,有助于解决实际应用中的常见问题。

    基于STM32F031的FOC有感电机控制代码解析与应用

    内容概要:本文详细介绍了基于STM32F031的FOC有感电机控制代码的功能特点及其应用场景。代码不仅涵盖了原理图、PCB设计,还包括详细的程序代码和注释。主要功能包括转把控制、刹车、助力、欠压检测、巡航、铁塔王通讯、一键通、隐形限速、霍尔修复和故障显示等。文中还展示了多个关键代码片段,如ADC采样、PWM生成、霍尔信号处理、故障检测和通讯协议处理等,强调了代码的稳定性和实用性。 适合人群:从事电机控制领域的工程师和技术爱好者,尤其是对FOC算法感兴趣的开发者。 使用场景及目标:适用于电动自行车、滑板车等需要高效电机控制的应用场景。目标是帮助开发者理解和应用成熟的FOC控制代码,提升产品的稳定性和功能性。 其他说明:代码经过量产验证,具有较高的可靠性和灵活性,能够适配多种国产芯片平台。文中还提供了丰富的实战经验和优化技巧,有助于解决实际开发中的常见问题。

    浅析电子商务环境下物流的特点.docx

    浅析电子商务环境下物流的特点.docx

    曾臻-Al+Vision+Shape+the+Future.pdf

    Con北京站聚焦技术落地与前沿趋势,核心方向包括: ​​AI工程化​​:端侧推理、RAG增强、多模态生成成为主流; ​​云原生深水区​​:混合云治理、湖仓一体架构、可观测性技术持续迭代; ​​安全与效能​​:大模型安全防御、研发流程标准化、平台工程价值凸显; ​​行业融合​​:物流、金融、社交等领域的技术跨界创新案例丰富。 大会为开发者提供了从理论到实践的全景视角,推动技术向生产力转化。

    欧姆龙FH系列机器视觉系统的高效开发与应用:加速工业自动化检测项目落地

    内容概要:本文详细介绍了欧姆龙FH系列机器视觉系统的独特优势及其应用场景。FH系列通过提供强大的仿真软件、优化的PLC通信接口以及先进的深度学习模块,显著提高了工业视觉项目的开发效率和准确性。具体而言,FH系列的仿真环境允许开发者在虚拟环境中调试算法,减少了现场调试的时间;其PLC通信接口支持多种工业协议并实现了自动寄存器映射,降低了设备工程师的沟通成本;深度学习模块则提供了预训练模型和自动ROI聚焦等功能,大幅提升了缺陷检测的精度和速度。此外,FH系列还集成了智能标定向导和动态标定功能,使得尺寸测量更加精确和便捷。 适用人群:从事工业自动化、机器视觉、智能制造等领域的一线工程师和技术管理人员。 使用场景及目标:适用于需要快速开发和部署视觉检测系统的工业生产线,尤其是汽车制造、电子产品、制药等行业。主要目标是缩短项目周期、提高检测精度、降低开发难度。 其他说明:相比于传统的视觉检测工具如Halcon,FH系列以其易用性和高效性脱颖而出,成为现代工业视觉项目的首选解决方案。文中提到的具体案例展示了FH系列在实际生产中的卓越表现,证明了其在提升工作效率方面的巨大潜力。

    高效机房控制系统:基于先进算法的多维节能优化方案

    内容概要:本文详细介绍了高效机房控制系统的先进控制算法及其多维节能优化方案。系统通过predictive_optimizer模块进行智能决策,优化冷水机组的组合和负荷分配,采用预测负荷、设备损耗和切换成本等多因素评估,实现最优能耗管理。此外,系统还利用三维建模和可视化工具,如PyQt和Three.js,提供直观的设备管理和故障排查。系统不仅能在常规情况下节省大量能源,还能在异常工况下迅速响应,确保稳定运行。文中提到的具体应用案例展示了该系统在多个项目的显著节能效果,如深圳项目中实现8%的能耗降低,以及某数据中心年能耗减少23%。 适合人群:从事机房管理、暖通空调系统设计与维护的技术人员,对工业自动化和节能优化感兴趣的工程师。 使用场景及目标:适用于新建或改造的大型数据中心、医院、工厂等场所,旨在提高能源利用效率,降低运营成本,增强系统的可靠性和灵活性。 其他说明:系统的核心优势在于其强大的自适应能力和丰富的实战经验,能够根据不同应用场景灵活调整控制策略,实现持续节能。

    基于Matlab的分位数长短期记忆网络(QRLSTM)用于时序数据预测与不确定性评估

    内容概要:本文详细介绍了如何利用Matlab实现分位数长短期记忆网络(QRLSTM)进行时序数据分析与预测。相较于传统LSTM仅提供单点预测,QRLSTM能够同时输出多个分位数的预测结果,从而提供预测不确定性的量化评估。文中首先展示了如何生成带有噪声的正弦波数据作为示例,并进行了数据预处理步骤,包括标准化和滑窗处理。接着,文章深入探讨了QRLSTM的网络架构设计,特别是自定义分位数损失层的实现细节。训练过程中采用了Adam优化器,并设置了学习率衰减机制以提高收敛速度。为了确保预测的有效性和稳定性,作者还分享了一些实用技巧,如GPU加速、梯度裁剪以及早停策略的应用。最终,通过对比实验验证了QRLSTM在处理具有异方差性的时序数据(如风速预测)方面的优越性能。 适合人群:对机器学习尤其是深度学习感兴趣的科研工作者和技术开发者,熟悉Matlab编程环境,希望深入了解时序数据预测及其不确定性估计的人群。 使用场景及目标:适用于需要对时序数据进行精准预测并且关心预测结果可靠性的应用场景,例如金融市场的价格走势预测、气象预报、能源消耗量预测等领域。主要目标是帮助用户掌握QRLSTM的工作原理及其优势,能够在实际项目中应用这一先进技术。 其他说明:文章提供了完整的代码片段供读者参考实践,同时也指出了在实现过程中可能会遇到的问题及相应的解决方案。此外,还提到了一些潜在的研究方向,如将QRLSTM与其他模型组合使用以进一步提升预测精度。

    【智能车竞赛】智能车竞赛技术综述与创新项目设想:关键技术及应用领域探索

    内容概要:本文全面介绍了智能车竞赛的背景、意义、发展历程、竞赛规则与组别设置。通过多个竞赛案例,展示了智能车竞赛的技术水平,深入探讨了智能车开发的关键技术,包括传感器技术、控制算法、路径规划、电机驱动等,并分析了这些技术在智能车竞赛中的应用。最后,提出了基于智能车开发技术的几个创新项目设想,旨在推动智能车技术的进一步发展与应用。; 适合人群:对智能车竞赛感兴趣的学生、教师、科研人员及智能车技术爱好者。; 使用场景及目标:①了解智能车竞赛的历史、规则和发展趋势;②掌握智能车开发的关键技术和应用实例;③探索智能车技术在未来物流配送、环境监测、农业作业等领域的创新应用。; 其他说明:本文不仅详细介绍了智能车竞赛的相关知识,还通过具体案例和技术探讨,为读者提供了深入了解智能车技术的机会。对于希望参与智能车竞赛或从事相关技术研发的人员来说,本文是一份宝贵的参考资料。阅读时应重点关注各个技术环节的具体实现方法及其在实际竞赛中的应用效果。

Global site tag (gtag.js) - Google Analytics