`
netcome
  • 浏览: 487295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ruboto:Android 之上的 Ruby

 
阅读更多

简介

今天,软件开发中的大部分有趣工作都出现在两个极端上:巨型云服务器和微型移动设备。这些领域解决完全不同的问题,相应地,也就拥有不同的工具支持。服务器开发往往使用脚本语言将不同的组件捆绑在一起并完成复杂的自动化任务,而移动开发主要关注某个特殊设备和用户的特定功能和需求。

但是,这两个极端共享一种常用语言:Java™。无论 Android 还是 Spring 框架,当今许多最流行的技术都采用一种全世界广泛理解和支持的语言。这种常用语言可能会导致一些您原以为存在天壤之别的领域之间出现令人惊讶的交集。Java 编程打开了许多跨平台选项的大门,比如将服务器代码轻松移植到 Android 设备上,或从现有组件绑定原生平台功能。

本文将探索 Ruboto 项目,该项目致力于在脚本语言和 Android 之间搭建一座桥梁。您将了解到 Ruby 和 Android 相关信息,它们如何在 Dalvik 虚拟机中协同工作,如何构建和部署您的脚本,以及这种技术提高程序员生产力和应用程序灵活性的潜力。


Ruby 背景知识

许多脚本语言都想获得程序员的青睐,但 Ruby 目前处于有利位置。最著名的是,它支持 Rails web 框架,但很多开发人员还喜欢 Ruby 的简洁性和优雅。作为一种拥有 duck typing 和元编程(metaprogramming)等现代功能的面向对象脚本语言,Ruby 不仅很强大,足以支持各种复杂架构;而且还很简单,能执行各种特殊任务。

Ruby 有几种衍生版本,包括流行的 JRuby。JRuby 是一个功能齐备的 Ruby 解释器,用 Java 语言编写,可以在 Java Virtual Machine (JVM) 中运行。与官方 Ruby 不同,JRuby 支持从 Java 代码中调用 Ruby 脚本和从 Ruby 脚本中调用 Java API。


Android 背景知识

Android 由 Open Handset Alliance 开发,但经常被视为一个 Google 项目。今天,Android 几乎驱动所有新智能手机的四分之一,它的市场份额持续增长。

在内部,Android 在一个经过修改的 Linux 内核上运行。大多数应用程序都在 Dalvik 虚拟机上运行,这个虚拟机完全由 Google 设计开发,旨在优化移动设备上的性能。要了解更多 Dalvik 信息,请参见 参考资料

许多新 Android 开发人员忽略的一点是他们编写的 Java 源代码并不作为 Java 字节码运行。相反,Android 工具包将 Java 字节码转换为 Dalvik 字节码。这些经过转换的文件(扩展名为 .dex)被打包到部署到设备上的应用程序中。等到设备运行您的程序时,将不会留下任何 Java 字节码。


Android + Ruby = Ruboto

JRuby 团队成员 Charles Nutter 有一天突然意识到:既然 Android 工具包能将编译后的 Java 代码转换为 Dalvik 文件,而且由于 JRuby 在编译后的 Java 字节码中有一个 Ruby 解释器,那么应该能够在 Android 上运行 Ruby。在极短的时间内,他执行了这个任务,Ruboto 随之诞生了。 在其他几位开发人员的共同努力下,Ruboto 成为了一个活跃的项目,Android 和 Ruby 开发人员对该项目的兴趣与日俱增。

今天,Ruboto 具有两种版本:ruboto-irb 和 ruboto-core。ruboto-irb 是在 Android 上运行的一个交互式 Ruby shell。这个项目允许运行任何能访问 Android API 的 Ruby 脚本。这个工具对于想在他们的设备上运行测试或执行任务的开发人员而言非常有用,但可能不适合编写今后用于分发的应用程序。

相比之下,ruboto-core 提供一个允许创建 Ruboto 项目的框架。使用 ruboto-core,可以向您的项目添加强大灵活的脚本支持,同时保留对 Android API 的访问能力。图 1 展示 ruboto-core 构建过程:自动生成的 Java 源文件和定制编写的 Ruby 脚本打包到一个将在设备上运行的 Android APK 中。


图 1. 构造一个 Ruboto 应用程序

本文余下部分主要关注创建一个基于 Ruboto 的自定义项目。Ruboto 还是一个早期软件,在本文撰写之时,它的版本编号是 0.0.2。该项目发展很快,等到您阅读本文之时,它可能已经发生了轻微的变化。如果您在运行下面的命令时遇到问题,请参见 参考资料 获取关于 Ruboto 和 Android 的最新信息。


编写 SMS

将 Ruby 和 Android 结合起来,就能创建能访问 Android 的强大功能的简单脚本。我们将编写一个 Ruboto 脚本,允许用户从一家快递服务公司预订海鲜。这个简单的应用程序将利用每个平台的优点。在 Android 端,您拥有一种简单的方法来创建一个包含您的订单的 SMS 消息,应用程序甚至无需请求服务器就可以下订单。在 Ruby 端,您将重用一个现有的语言处理库,该库将您的订单规范化为一种可阅读格式。


开始

要构建 Ruby 脚本并将其部署到 Android 上,需要几个组件。您可能已经安装了部分组件,如果是这样,您可以继续使用它们。

由于 Android 和 Ruby 是多平台的,因此可以在 Linux®、Mac OS X 或 Windows® 上运行 Ruboto。本文完全使用命令行。

如果您在 Windows 上使用 cygwin ,则可能会在运行某些 JRuby 命令时遇到问题。为安全起见,如果您在运行 Windows,请务必严格遵守标准 Windows CMD shell。

Java

您的开发机器上需要一个 Java Development Kit (JDK)。要检查该工具包是否已安装,请输入以下命令:

$ javac -version


如果此命令发现一个 JDK 版本,那么可以继续使用。否则,请参见 参考资料 中的链接安装最新版 JDK。安装完成后,将 JDK 的 bin 文件夹添加到您的 PATH 并重复上述命令。

Ant

Android 附带了自己的 Ant 版本,但 Ruboto 还需要从它自己的脚本访问 Ant。如果您没有安装独立版 Ant,请通过 参考资料 中的链接下载,并将其解压缩到任何文件夹。同样,将它的 bin 文件夹添加到您的 PATH。确保能够运行 Ant 命令。


Android

访问 Android Developer Site,安装适用于您的操作系统的 Android SDK(参见 参考资料 )。安装完成后,运行 Android 的 tools 文件夹中的 android 命令。这将启动 SDK 管理器,如图 2 所示。您可能想安装以下包,它们列示在 Available packages 下方。

    1. SDK Platform Android 2.2, API 8
    2. Android SDK Tools(修订版 8)
    3. Android SDK Platform-tools(修订版 1)




图 2. Android SDK and AVD Manager

打开 Android SDK and AVD Manager 的 Virtual devices 部分,创建一个用于开发的 Android 映像。如图 3 所示,创建一个针对 Android 2.2 - API Level 8 的虚拟设备 Froyo。如果愿意,也可以创建一个虚拟 SD Card。


图 3. 创建一个模拟器

Ruboto 将在您的设备上运行,但是,如果您拥有对任何文件夹的写权限,那么开发工作将会轻松得多,这就需要使用模拟器或 root 设备。本文余下部分将讨论如何使用模拟器。这个项目完成后,它在运行软件版本 2.2 或更高版本的 Android 设备上的效果一样好。

将 Android 的 platform-tools 和 tools 目录添加到您的 PATH。现在,您应该能在命令提示中运行清单 1 中的命令。


清单 1. 从您的命令提示运行命令

$ aapt version $ adb --version
JRuby

JRuby 提供一个非常简单的安装方法:只需访问 http://jruby.org/getting-started 并遵循安装说明即可。通过运行以下命令验证安装是否成功:

$ jruby -v


由于 Ruboto 被托管在一个安全服务器上,因此需要安装 jruby-openssl gem 以下载它。为此,执行以下命令:

$ gem install jruby-openssl


您可能还想安装 rake,这是 make 或 ant 的 Ruby 对等物。输入以下命令:

$ gem install rake


最后,是时候安装 Ruboto 本身了。Ruboto 被打包为一个 gem,因此安装很容易。输入以下命令:

$ gem install ruboto-core

创建 Ruboto 项目

Ruboto 将为您从头创建一个 Android 项目,这将确保您的清单文件(manifest)正确设置,脚本被放置到正确的集合中,且您能访问必要的库。您应该采用这种方法,而不是试图自己创建或修改一个现有 Android 项目。

要创建项目,切换到 project 文件夹,输入以下命令:

$ ruboto gen app --package us.cirion.ruboto.demo --path fishmonger --name Fishmonger --target android-8 --activity Fishmonger

这条命令将执行以下操作:

    • gen app 告知 Ruboto 从头开始创建一个新 Android 项目。
    • --package 提供唯一的 Android 包名。
    • --path 告知 Ruboto 将项目存储在哪里;这必须是一个新文件夹名。
    • --name 定义用户可见的应用程序名;这不需要是唯一的。
    • --target 指定针对哪个 Android 版本编译项目。对于本文,您必须使用 android-8 。一个可选参数 --min_sdk 声明您的应用程序可以在较早的 Android 版本上运行,这里省略此参数。
    • --activity 是一个可选参数,它告知 Ruboto 生成一个新的 Android Activity 并初始化它。



您可以探索 fishmonger 目录的内容。Ruboto 已经自动生成了构建和运行一个基本 Activity 所需的所有 Android 文件。由于此应用程序将发送 SMS 消息,您需要在 AndroidManifest.xml 文件中进行一个更改。在该文件中,将下面这个标记插入为  元素的第一个子元素:




如果您省略这个权限,您仍然能够构建并加载您的脚本,当您的应用程序试图发送一条 SMS 消息时,您将遇到一个运行时错误。


运行默认项目

Ruboto 以开箱即用的方式生成了一个 Activity 和脚本,它们将在设备或模拟器上安装和运行。如果您的模拟器还没有运行,可以使用以下命令启动它:

$ emulator -avd Froyo


等待模拟器启动到主屏幕。要确保所有 Ruboto 文件正确构建并部署,cd 到 fishmonger 目录并运行以下命令:

$ rake install


如果遇到错误,尝试再次运行此命令;有时连接在构建过程中会超时。最初构建需要一些时间,但后续更新速度就快得多。安装完成后,在您的模拟器中查找标签为 Fishmonger 的图标。启动它并等待一会儿。在本文撰写之时,Ruboto 引擎加载需要一点时间。最终,您将看到与图 4 类似的屏幕。


图 4. 模板 Ruboto 活动


定制项目

现在我们设置 Fishmonger 应用程序。首先,您将添加自然语言支持。Ruby 拥有一个名为 linguistics 的优秀 gem,提供许多英语语言功能。在本文撰写之时,Ruboto 还不能处理 linguistics 库的嵌套目录结构,因此,请您下载本文的 linguistics zip 文件,将其内容解压到 fishmonger\assets\scripts 中(参见 下载 部分的链接)。这是一个库存 linguistics gem,被修改来扁平化目录结构。将来,您应该能够只绑定这个 gem 和您的 Ruboto 脚本。

编写脚本

现在您准备好处理项目核心部分了。Ruboto 框架负责处理所有 Java 代码和 Android 基础架构,因此,您的所有工作都可以在 fishmonger.rb 中完成。清除该文件的默认内容。首先添加清单 2 中的文本。


清单 2. 脚本依赖项

require 'ruboto.rb' require 'linguistics' include Linguistics::EN import "android.telephony.SmsManager" ruboto_import_widgets :Button, :EditText, :LinearLayout, \ :RadioGroup, :RadioButton, :TextView


前两行加载 ruboto 和 linguisitics 库。include 命令将使英语语法在您的模块中可用。

第一个导入对于 JRuby 用户比较眼熟:您正在添加对另一个库的支持。注意,在本例中,您实际上正在使用一个 Android Dalvik 库,而不是标准 Java 库的一部分。Ruboto 将在运行时使用反射(reflection)来加载这个类并使其对您可用。

ruboto_import_widgets 的功能与 import 相似。在本例中,您正在添加一些 Android 特有 UI 小部件。这些小部件通常用于 Android 活动中,Ruboto 添加一些方便的方法,便于您轻松配置 UI。

下面,定义脚本的 handle_create 方法,如清单 3 所示。


清单 3. 配置屏幕

$activity.handle_create do |bundle| setTitle 'Freddy\'s Fresh Fish' setup_content do linear_layoutrientation => LinearLayout::VERTICAL do text_view :text => "What would you like to order?" @group = radio_group do radio_button :text => "Tuna", :id => 0 radio_button :text => "Trout", :id=> 1 radio_button :text => "Salmon", :id => 2 radio_button :text => "Crab", :id => 3 radio_button :text => "Lobster", :id => 4 end @quantity = edit_text :hint => "Quantity" button :text => "Place Order" end end
handle_create 在用户启动应用程序时调用。在 Android 中,这是您处理必要设置的地方。标准 Android 应用程序通常使用 XML 定义布局,但在 Ruboto 中,需要通过脚本定义布局。

Ruboto 的功能在您的脚本和 Android 之间架起一座桥梁。无论您拥有 Ruby 背景还是 Android 背景,您都应该能够明白 setup_content 中发生的事。您正在创建一个垂直布局,将几个小部件堆叠在一起。这些小部件包括文本,几个用于选择要预订的鱼类种类的单选按钮,一个用于输入数量的可编辑文本字段,以及一个用于下订单的按钮。可以使用 Ruby 语法来配置您的小部件,而不是 Android 中通常使用的更繁琐的 Java 语法。

设置每个 radio_button 上的 id 属性有好处,它向您提供一种简单方法,以便稍后查看选中了哪个按钮。

Android 将自动处理与单选按钮和可编辑文本字段之间的所有用户交互。唯一剩下的工作是定义如何处理 Place Order 按钮,如清单 4 所示。


清单 4. 下订单

handle_click do |view| if view.text == "Place Order" count = @quantity.text food = @group.child_at(@group.checked_radio_button_id).\ text.downcase order = Linguistics::EN::plural(food,count) SmsManager.default.send_text_message("4155551234", \ nil, "Please send #{count} #{order}", nil, nil) finish end end end


如果您以前编写过 Android 应用程序,您可能会注意到,您正在使用一种不同的范式来处理选择。Android 开发人员倾向于为每个可选项目编写一些独特的单击处理程序。但是,在 Ruboto 中,更简单的方法是为您的 Activity 创建一个全局单击处理程序,在那里测试用户单击了哪个项目。

您提取用户选择的鱼的数量和种类。如果用户没有选中一个单选按钮,Ruboto 将在内部优雅地处理这个运行时错误。否则,您将把文本传递到 linguistics 库并请求它为您创建适当的名词形式。这个库能处理不同的复数规则,因此它将生成 1 salmon 、2 salmon 、1 crab 、2 crabs 之类的值。它甚至能识别手写的数字,因此它还将生成 one lobster 和three lobsters 之类的词组。对于一行代码来说,这是令人非常印象深刻的行为,展示了它利用现有脚本向您的应用程序轻松添加功能的能力。

类似地,发送一条 SMS 消息只需一行调用,调用一个方便的 Android 方法。Ruboto 允许您使用 Ruby 式语法调用这个方法;对等的 Java 代码将是 SmsManager.getDefault().sendTextMessage() 。您提供接收者的电话号码和要发送的消息,并为可选参数传递 nil 。如果您 正在一个设备上运行并想实际发送一条 SMS 消息,可以替换为一个实际电话号码。如果您想在模拟器中测试,则可以替换为模拟器的端口号,比如 “5554”。

运行脚本

Ruboto 最强大的一个方面是允许通过简单地加载一个已更新脚本来更改功能。即使您已经完全更改了这个应用程序的功能,也不需要重新构建应用程序或重新加载 APK。相反,只需在命令行输入以下命令:

$ rake update_scripts


这条命令将把 linguistics 脚本和您的新 fishmonger 脚本复制到模拟器或一个已连接设备。当您重新启动应用程序时,将看到您的新屏幕,如图 5 所示。


图 5. Android 预订页面

如果您正在运行一个非根设备(non-rooted device)或正在更改 Java 文件或 Android 清单文件,可以通过再次输入 rake 安装命令来加载更新。注意,即使是非根设备也可以实时更新它们的脚本;例如,您可以从 Internet 下载新脚本并在运行时生成它们。固件限制仅适用于通过您的 USB 连接推送文件。

继续试验这个应用程序。当您进行了一个有效选择并按下预订按钮后,屏幕将自动关闭。如果您使用一个有效的接收者地址,他们将很快收到您的消息。图 6 显示了一个非常繁忙的海鲜店的最新订单列表。


图 6. 来自 Ruboto 脚本的标准化订单


结束语

Ruboto 仍然是一个早期项目,但即使处于现在的状态,它已经能提供一种非常灵活有用的方法来编写和分发 Android 软件。Ruboto 的成功归功于 JRuby 和 Android 的优势:JRuby 已经完成了以 Java 语言编写一个功能齐备的 Ruby 解释器的艰巨工作,Android 的 Dalvik 工具集提供了一种令人印象深刻的从标准 Java 字节码到它的自定义 Dalvik 字节码的转换。

如您所见,Ruboto 脚本可能会非常短,但提供来自 Ruby 和 Android 的强大功能。混合和匹配 Ruby 脚本、Ruby 和 Java 语法以及 Android API 的能力向您提供了许多提高生产力的选项。

Ruboto 是位于客户端和服务器两端的开发人员之间的一个有用桥梁。Android 开发人员将欣赏它的反射功能,该功能向他们提供实时大幅更新应用程序功能的能力。Ruby 开发人员将拥有一种相当便捷的方法来结合他们的脚本技术和移动平台,利用现有 Ruby 代码来创建新应用程序。这两类开发人员都将怀着极大兴趣,密切关注这个项目的进展。



下载

描述名字大小下载方法本文源代码
fishmonger.zip
65KB
HTTP
本文源代码
linguistics-rb.zip
34KB
HTTP
关于下载方法的信息


本文转载于developerWorks,原文在这里

 

分享到:
评论

相关推荐

    java版app源码安装-ruboto:在Android上使用JRuby开发应用程序的平台

    Ruboto(Android 上的 JRuby)是一个使用 Ruby 语言和库为 Android 开发完整独立应用程序的平台。 它包括用于创建项目、类、测试等的支持库和生成器。 您可以使用 Ruby 语言使用 Android、Java 和 Ruby 的完整 API。...

    sblim-gather-provider-2.2.8-9.el7.x64-86.rpm.tar.gz

    1、文件内容:sblim-gather-provider-2.2.8-9.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sblim-gather-provider-2.2.8-9.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    基于pringboot框架的图书进销存管理系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip

    本图书进销存管理系统管理员功能有个人中心,用户管理,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理,我的收藏管理。 用户功能有个人中心,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得图书进销存管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高图书进销存管理系统管理效率。 关键词:图书进销存管理系统;Spring Boot框架;MYSQL数据库

    2024中国在人工智能领域的创新能力如何研究报告.pdf

    2024中国在人工智能领域的创新能力如何研究报告.pdf

    安全生产_人脸识别_移动目标跟踪_智能管控平台技术实现与应用_1741777778.zip

    人脸识别项目实战

    人脸识别_TF2_Facenet_训练预测应用仓库_1741778670.zip

    人脸识别项目实战

    安全人脸识别_对抗攻击_多模型集成_减少扰动_竞赛方案_Ne_1741779504.zip

    人脸识别项目实战

    Python实现基于CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了基于CEEMDAN(完全自适应噪声集合经验模态分解)的方法实现时间序列信号分解的具体项目。文中涵盖项目背景介绍、主要目标、面临的挑战及解决方案、技术创新点、应用领域等多方面内容。项目通过多阶段流程(数据准备、模型设计与构建、性能评估、UI设计),并融入多项关键技术手段(自适应噪声引入、并行计算、机器学习优化等)以提高非线性非平稳信号的分析质量。同时,该文档包含详细的模型架构描述和丰富的代码样例(Python代码),有助于开发者直接参考与复用。 适合人群:具有时间序列分析基础的科研工作者、高校教师与研究生,从事信号处理工作的工程技术人员,或致力于数据科学研究的从业人员。 使用场景及目标:此项目可供那些面临时间序列数据中噪声问题的人群使用,尤其适用于需从含有随机噪音的真实世界信号里提取有意义成分的研究者。具体场景包括但不限于金融市场趋势预测、设备故障预警、医疗健康监控以及环境质量变动跟踪等,旨在提供一种高效的信号分离和分析工具,辅助专业人士进行精准判断和支持决策。 其他说明:本文档不仅限于理论讲解和技术演示,更着眼于实际工程项目落地应用,强调软硬件资源配置、系统稳定性测试等方面的细节考量。通过完善的代码实现说明以及GUI界面设计指南,使读者能够全面理解整个项目的开发流程,同时也鼓励后续研究者基于已有成果继续创新拓展,探索更多的改进空间与发展机遇。此外,针对未来可能遇到的各种情况,提出了诸如模型自我调整、多模态数据融合等发展方向,为长期发展提供了思路指导。

    监护人,小孩和玩具数据集 4647张原始图片 监护人 食物 孩子 玩具 精确率可达85.4% pasical voc xml格式

    监护人,小孩和玩具数据集 4647张原始图片 监护人 食物 孩子 玩具 精确率可达85.4% pasical voc xml格式

    根据提供的内容可以构建以下_1741777949.zip

    人脸识别项目实战

    `计算机视觉_人脸识别_Python_OpenCV_树莓派毕业设计`.zip

    人脸识别项目实战

    智慧生产企业园区解决方案PPT(54页).pptx

    在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。

    第八届全国大学生创新创业年会-创新创业展示项目集

    本届年会的主题是“青春梦想创新创业”。通过学术论文报告、创新创业项目展示、创业项目推介、工作研讨、联谊活动、大会报告等活动,全面展示大学生最新的创新创业成果。年会共收到491所高校推荐的学术论文756篇、创新创业展示项目721项、创业推介项目156项,合计1633项,为历届年会数量最高。经过36所“985”高校相关学科专家的初评以及国家级大学生创新创业训练计划专家组的复选,最终遴选出可参加本次年会的学术论文180篇,创新创业展示项目150个,创业推介项目45项,共计375项,涉及30个省市的236所高校。年会还收到了来自澳门特别行政区、俄罗斯的13项学术论文及参展项目。这些材料集中反映了各高校最新的创新创业教育成果,也直接体现了当代大学生的创新思维和实践能力。

    人脸识别_实时_ArcFace_多路识别技术_JavaScr_1741771263.zip

    人脸识别项目实战

    6ES7215-1AG40-0XB0-V04.04.01固件4.5

    6ES7215-1AG40-0XB0_V04.04.01固件4.5

    在无人机上部署SchurVins的yaml配置文件

    在无人机上部署SchurVins的yaml配置文件

    uniapp实战商城类app和小程序源码​​​​​​.rar

    uniapp实战商城类app和小程序源码,包含后端API源码和交互完整源码。

    基于MobileNet轻量级网络实现的常见30多种食物分类

    基于MobileNet轻量级网络实现的常见30多种食物分类,包含数据集、训练脚本、验证脚本、推理脚本等等。 数据集总共20k左右,推理的形式是本地的网页推理

    2024年央国企RPA市场研究报.pdf

    2024年央国企RPA市场研究报.pdf

    VSCodeSetup-x64-1.98.0.rar

    VSCodeSetup-x64-1.98.0.rar vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管理之类的开发操作。它的目标是提供一种快速的编码编译调试工具。然后将其余部分留给IDE。vscode集成了所有一款现代编辑器所应该具备的特性,包括语法高亮、可定制的热键绑定、括号匹配、以及代码片段收集等。 Visual Studio Code(简称VSCode)是Microsoft开发的代码编辑器,它支持Windows,Linux和macOS等操作系统以及开源代码。它支持测试,并具有内置的Git版本控制功能以及开发环境功能,例如代码完成(类似于IntelliSense),代码段和代码重构等。编辑器支持用户定制的配置,例如仍在编辑器中时,可以更改各种属性和参数,例如主题颜色,键盘快捷键等,内置的扩展程序管理功能。

Global site tag (gtag.js) - Google Analytics