未找到

【示例教程】如何用LEADTOOLS 实现一个简单的STORE SCU存储客户端
by Harriet666 keys 分享 1519722017492
leadtools提供了封装后的dicom插件,可以非常方便的开发出dicom通讯部分的组件,本篇教程讲解如何使用相关的接口进行代码编写,实现Dicom协议中的CStore存储操作。
 
1.用vs2015创建一个winform项目,引用下面的dll,并在代码里引用
using Leadtools;
using Leadtools.Dicom;
using Leadtools.Dicom.Scu.Common;
using Leadtools.Dicom.Scu;
using Leadtools.MedicalViewer;
using System.Net;
using System.IO;
 
2.创建下面的对象
// CStore highlevel 客户端和服务端对象
        private StoreScu _cstore;
        private DicomScp _server = new DicomScp();
 
3.初始化服务器和客户端参数,
本次用的服务器即是开发包中运行pacs服务器设置程序后,创建的L19_PACS_SCP64
private void initServer() {
            _server = new DicomScp();
            _server.AETitle = "L19_PACS_SCP64";
            _server.PeerAddress = IPAddress.Parse("10.32.1.75");
            _server.Port = 534;
            _server.Timeout = 30;
        }
private void initCstore() {
            _cstore = new StoreScu();
            _cstore.AETitle = "L19_CLIENT64";
            _cstore.HostPort = 1030;
            //存储成功后
            _cstore.AfterCStore += _cstore_AfterCStore;
        }
 
4.执行存储命令
private void 存储ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string filename ="D:\\Xa.dcm";
            _cstore.Store(_server, filename);

        }

保存成功后即可在服务器管理器中,或者使用客户端查询已经存储的图像。
未发布 Google开源了Abseil,为C++和Python开发提供支持
by Harriet666 keys 分享 1507530171137
Google公开了其项目内部使用的一系列C++库,随后还会公开其Python库。

Abseil已在Google历经十多年的开发,它的目的是为Google编程人员在各种项目上的工作需求提供支持,这些项目包括Protocol Buffers、gRPC和TensorFlow等。Google评价Abseil为:
  • 它是从Google内部代码块中抽取出来的一系列最基础的软件库。作为基本的组成部分,这些软件库支撑了几乎全部Google在运行的项目。以前这些API是零零散散地嵌入在Google的大部分开源项目中,现在我们将它们规整在一起,形成这样一个全面的项目。
  • Abseil是Google代码库的最基本构建模块,其代码经过了生产环节测试,此后还会继续得到完全的维护。

最初,Abseil提供的抽象并非C++ 14或C++ 17的组成部分,但最终它们已被添加到C++标准中。例如,Google提供一个称为StringPiece的类型,随后C++ 17也添加了一个称为std::string_view的相近类型。为了与新的C++ 17类型具有一致的API,Google将StringPiece重构为absl::string_view。从底层机制上看,如果开发人员正在使用的是C++ 17,那么Abseil的string_view默认为标准实现;如果开发人员正在使用的是C++ 17以前的版本,那么string_view默认为Google的实现。
 
使用Abseil的优点在于可以访问一些目前依然尚未添加到标准中的C++特性,并且一旦这些特性被添加到C++标准中,Google保证会重构这些特性为默认使用标准实现。Google鼓励开发人员使用Abseil,并提及已有超过两亿五千万行的C++代码使用它,并且几乎所有从头开始构建的项目都使用了它。这意味着,Abseil已被Google广为使用,并出于与项目需求同步的考虑而得以频繁维护。
 
Abseil中包括如下的库:
  • base:初始化,以及其它的基础代码。 
  • algorithm:对C++的库的补充,并为原算法提供了基于容器的版本。 
  • container:提供了更多的STL类型容器。 
  • debugging:用于检查泄漏的调试库。 
  • memory:包括兼容C++ 11版本的std::make_unique()和内存管理。 
  • meta:包括兼容C++ 11版本的类型检查,在C++ 14和C++ 17版本的C++ 库中可用。 
  • numeric:兼容C++ 11的128位整数。 
  • strings:各种字符串工具。 
  • synchronization:并发原语和同步抽象。 
  • time:抽象了绝对时间点操作和时区操作。 
  • types:非容器工具的类型。 
Abseil的代码采用Apache许可,已发布在GitHub上。其Python版本的软件库将随后发布。
更多资讯>>>

未发布 UI组件库jQWidgets更新至v5.2.0,新增Angular枢轴网格丨附下载
by Harriet666 keys 分享 1504691512134
jQWidgets是一个基于jQuery JavaScript的综合性和创新性的HTML5 UI组件库,旨在帮助开发者创建专业、跨平台的Web应用程序,并最大限度的节省开发时间。jQWidgets包含30多种UI组件,是最快的JavaScript UI框架之一。

【最新版jQWidgets v5.2.0点击下载>>>】

jQWidgets v5.2.0更新内容:
新增:
  • Angular枢轴网格
  • React枢轴网格
  • 枢轴网格自定义元素
 
改进:
  • jqxTabs和jqxRibbon light主题。
 
修复:
  • 修复jqxListBox和jqxDropDownList中关于enableSelection属性动态设置时的问题。
  • 修复jqxCheckBox和jqxRadioButton中事件发生时关于event.args.type成员的问题。
  • 修复jqxPivotGrid中当鼠标在滚动条上释放时鼠标选择的问题。
  • 修复jqxPivotGrid中关于命中测试功能的问题。
  • 修复jqxTabs中关于Tabs在IFrame内删除事件侦听器的问题。
  • 修复jqxGrid中当点击垂直和水平滚动条之间的区域时鼠标选择的问题。
未发布 【示例教程】LEADTOOLS中如何使PACS服务器管理器支持H264
by Harriet666 keys 分享 1510818869321
LEADTOOLS可帮您开发出功能强大的文档图像应用程序。其主要功能包括综合图像注释,专业的黑白图像显示(例如灰度级和偏黑),以及专业的黑白图像处理。其它功能包括对黑白图像的性能和内存进行优化,文档图像清理(包括倒置文本,去边界,去打孔机和去线)以及使用LEADTOOLS Fast TWAIN和WIA进行扫描。
 
上一篇文章讲述了如何使用H.264压缩数据创建DICOM文件(参见:如何使用H.264压缩视频创建DICOM文件)。创建文件是一个比较困难的点,但是如何利用并使这些文件存储在PACS服务器中也是很重要的。默认情况下,H.264压缩不能由LEADTOOLS PACS服务器管理器支持,但它很容易可以通过添加几行代码来实现。本篇文章将讲解如何将H.264支持添加到PACS服务器管理器。
 
为支持IODs我们需要更新开发包。这个项目可以在这里的SDK安装中找到:
\Examples\DotNet\PACSFramework\CS\Sample AddIns\Leadtools.AddIn.Store
 
我们需要更新StoreAddin.cs中的StoreAddin类。在前面的示例中,我使用的SOP类是视频摄影图像存储。所以需要寻找这样的代码,并添加DICOM UID类型MPEG-4 AVC/H.264 Blu Ray兼容和MPEG-4 AVC/H.264 High Profile Level 4.1.。最终变成这样:
[PresentationContext(DicomUidType.VideoPhotographicImageStorage, DicomUidType.ImplicitVRLittleEndian,
                                                         DicomUidType.JPEG2000,
                                                         DicomUidType.JPEG2000LosslessOnly,
                                                         DicomUidType.JPEGBaseline1,
                                                         DicomUidType.JPEGExtended2_4,
                                                         DicomUidType.ExplicitVRBigEndian,
                                                         DicomUidType.ExplicitVRLittleEndian,
                                                         DicomUidType.JPEGLosslessNonhier14,
                                                         DicomUidType.JPEGLosslessNonhier14B,
                                                         DicomUidType.Mpeg4AvcH264BdCompatibleHighProfileLevel_4_1,
                                                         DicomUidType.Mpeg4AvcH264HighProfileLevel4_1)]
如果你还想支持MPEG-2压缩,这也可以这样做:
[PresentationContext(DicomUidType.VideoPhotographicImageStorage, DicomUidType.ImplicitVRLittleEndian,
                                                         DicomUidType.JPEG2000,
                                                         DicomUidType.JPEG2000LosslessOnly,
                                                         DicomUidType.JPEGBaseline1,
                                                         DicomUidType.JPEGExtended2_4,
                                                         DicomUidType.ExplicitVRBigEndian,
                                                         DicomUidType.ExplicitVRLittleEndian,
                                                         DicomUidType.JPEGLosslessNonhier14,
                                                         DicomUidType.JPEGLosslessNonhier14B,
                                                         DicomUidType.Mpeg4AvcH264BdCompatibleHighProfileLevel_4_1,
                                                         DicomUidType.Mpeg4AvcH264HighProfileLevel4_1,
                                                         DicomUidType.MPEG2MainProfileHighLevel,
                                                         DicomUidType.MPEG2MainProfileMainLevel)]
代码修改完成后,进行编译。DLL将输出到PACSAddins目录:
\Bin\DotNet4\x64\PACSAddIns\
 
dll文件需要复制到插件目录的PACS服务器管理器。我的配置和运行的是64位服务器,文件夹位置:
C:\LEADTOOLS 19\Bin\Dotnet4\x64\L19_SERVER64\AddIns
 
您需要停止并重新启动服务器以便生效。
 
注:一定要停止所有已经运行的x64 PACS服务,然后重新启动。这是为了确保leadtools.dicom.server.exe完全删除,然后重新加载。

试用、下载、了解更多产品信息请点击"咨询在线客服"  

未发布 矢量图形引擎库VectorDraw Developer Framework发布v7.7014.0.5
by Harriet666 keys 分享 1517214900113
VectorDraw Developer Framework(VDF)是一款构建2D、3D图形并用于应用程序可视化的矢量图形引擎库。有了VDF提供的功能,您可以轻松地创建、编辑、管理、输出、输入和打印2D和3D图形文件。该库还支持许多矢量和栅格输入和输出格式,包括本地PDF和SVG导出。
 
VectorDraw Developer Framework试用版下载>>>
 
VectorDraw Developer Framework(VDF)v7.7014.0.5更新内容:

WebJS

新增需求(7.7014.0.1)
  • 70001215 MergeDocument方法支持使用mergeFlags  
新增需求(7.7014.0.5)        
  • 70001249 处理AddBlockFromFile加载
漏洞(7.7014.0.1)
  • 70001204 线路对象捕捉无法运作
  • 70001206 导出到vds脚本时出现异常
  • 70001210 WebGl渲染中的实体影线问题  
漏洞(7.7014.0.5)
  • 70001250 vdConst CloneEntity出现意外
 

Converter

新增需求(7.7014.0.1)
  • 70001217 DGN中unsuported对象的类型
漏洞(7.7014.0.1)
  • 70001212 Textstyle未使用正确的TTF字体导入
漏洞(7.7014.0.5)
  • 70001248 折线的宽度问题
   

Engine

新增需求(7.7014.0.3)
  • 70001231 改进触摸控制
  • 70001234 使用Wrapper检查鼠标是否位于ViewCube内部
  • 70001239 是否可以在OnFilterOsnap事件中获取交集对象
  • 70001241 用webGl 3d模式绘制线条和文本
漏洞(7.7014.0.3)
  • 70001235 版本2000中的DXF导出问题
  • 70001236 在Wire2D模式下,线路抗锯齿功能无法正常工作
  • 70001237 鼠标没有正确渲染
  • 70001238 vdLayout调整大小将引发异常
  • 70001240 AlignToView对象在PDF输出中缩放
  • 70001242 导出多边形为dwg dxf文件格式时出错
漏洞(7.7014.0.4)
  • 70001243 不完整的纸张模型刷新
  • 70001245 当VectorDrawBaseControl WndProc被调用时,出现间歇性崩溃
未发布 【百厂年货节】Dynamsoft热销产品7.5折超级特惠,仅此一次!
by Harriet666 keys 分享 1517476439385
 
Dynamsoft公司是版本控制和事件跟踪软件应用程序领域的领先开发商。 如今,大部分世界500强企业,包括 HP,IBM, Intel, 以及 Siemens 等都信赖 Dynamsoft 的解决方案,用它来处理版本控制和事件跟踪应用程序开发。于此新春佳节之际,慧都联合Dynamsoft公司针对中国客户进行百厂年货节促销活动,诚邀您的参与。
 
活动时间:2018年2月1日-2018年2月28日
活动内容:在活动期间内,购买 Dynamsoft 指定产品授权均可享受原价基础上7.5折的超值优惠。
活动授权:
活动产品授权折扣

Dynamic Web TWAIN

HTML5 browsers for Windows(Per Production Server)年货节特惠7.5折
HTML5 browsers for Windows(Per Non-Production Server)年货节特惠7.5折

Dynamic .NET TWAIN

Scanner Module(1-Developer License)年货节特惠7.5折
Scanner + Webcam Module(1-Developer License)年货节特惠7.5折

Dynamsoft Barcode Reader

1D Barcode(Per Production Server)年货节特惠7.5折
1D Barcode(Per Non-Production Server)年货节特惠7.5折
QRCode(Per Non-Production Server)年货节特惠7.5折

想要了解更多优惠信息?<咨询客服>可了解最新活动!

咨询热线:400-700-1020(免费) 023-66090381


6

未发布 多功能文件格式转换器VectorDraw File Converter v7.7010.1.0发布丨附下载
by Harriet666 keys 分享 1489477935745

VectorDraw File Converter是一个终端应用程序,使得用户能将常用的图像文件(DWG,DGN和DXF)转换为VectorDraw格式标准(VDF,VDI),反之亦然。该工具能将上述文件导出为SVG与DWF格式。VectorDraw File Converter还能进行多种文件的转换(比如*.dwg 到 *.vdf或者 *.dxf,反之亦然)。

VectorDraw File Converter更新至v7.7010.1.0,新版本针对提出的需求和bug做了调整和优化。

【VectorDraw File Converter v7.7010.1.0点击下载>>>】

未发布 TWAIN扫描组件Dynamic .NET TWAIN v7.1发布,将图像保存为多页TIFF
by Harriet666 keys 分享 1498807336769
Dynamic .NET TWAIN是为桌面应用程序设计的.NET控件,适用于C#和VB.NET。这是一个能让你从任何TWAIN设备中(如scanners, digital cameras,等)获取图像的托管代码SDK。拥有精心设计的用户界面以及内置向导模式,Dynamic .NET TWAIN易于使用,只需要几行代码即可完成TWAIN设备相关工作,并且兼容TWAIN Specification V1.9(比如:三图像传输模式等)。高级采样支持保证了Dynamic .NET TWAIN的易用性,低阶功能则使其在即使最为苛刻的应用程序中也能保持灵活性和可控性。
 
用于.NET应用程序的简单有效的TWAIN扫描组件——Dynamic .NET TWAIN v7.1版本现已可用。
c5851770a2fd4e6d8d9752aedf37113fojpg
 
新版本亮点:
  • 添加了SaveAsTIFF方法可以将图像保存为多页TIFF(以字节为单位)。
  • 优化了Webcam模块中视频流的内存管理。
  • 修正了PDF库中输出PDF的解析度固定为72 DPI的问题。
Dynamic .NET TWAIN 7.1点击下载>>>

Dynamic .NET TWAIN v7.1更新内容
新增
  • 添加了SaveAsTIFF方法可以将图像保存为多页TIFF(以字节为单位)。
改进
  • 删除未使用的命名空间和类。
  • 降低Webcam模块中视频流的内存消耗。
  • 改进了演示指南程序和示例的界面。
修复
  • 修复了在Webcam模块中设置“变焦值”引发错误的问题。
  • 修复了PDF库中输出PDF的分辨率固定为72 dpi的问题。
  • 修复了在Viewer模块中选择区域时鼠标闪烁的问题。
  • 其他小的修改和调整。
未发布 开源的跨平台移动开发利器Xamarin Studio v6.3发布丨附下载
by Harriet666 keys 分享 1492590701399

Xamarin Studio是跨平台移动开发(IDE)利器。Xamarin Studio是一个开发效率很高的移动开发工具,开发者可以轻松查看iOS、Android和OS X APIs,快速查询类型、方法和API功能,而且不会打乱你的思路。

【最新版Xamarin Studio点击下载>>>】

Xamarin Studio v6.3更新内容


苹果开发者帐户管理

此版本介绍了使用Xamarin Studio来管理Apple开发人员帐户和iOS / macOS代码签名权限的功能。新界面提供了查看与Apple ID相关联的所有开发团队的方法,并显示每个团队的签名身份和配置文件列表。
选择首选项>发布> Apple开发者帐户来添加一个Apple ID。 Apple ID验证需要在fastlane的命令行上执行。必须安装fastlane才能认证成功。有关fastlane以及安装方法的更多信息参见fastlane文档

已知的问题

登录过程不支持打开两步身份验证的帐户。
[Bug#53906]团队详细信息对话框为空。在某些情况下,即使在用户计算机上安装并且有效也不会显示签名身份和配置文件。我们会尽快发布一个解决方案。

iOS

在设备上调试App Extensions

新版本的Xamarin Studio可以在设备上调试iOS App Extensions。为了实现这一点,首先你需要编辑你现有App Extension项目的项目选项,然后更改位于iOS调试器设置页面中的调试器端口设置。建议将端口更改为10000以上的值。
新的App Extension项目将自动被分配一个随机的调试器端口,以避免将来出现这个问题。

改进执行目标

iOS加载项正在使用Xamarin Studio 6.3中引入的主工具栏的新功能来改善用户体验,例如自定义图标、工具提示和执行目标标灰的功能。
我们还改进了我们的逻辑,可以为你显示连接到Mac的设备,并告诉你为什么它们不可用于部署。
这是非常好的,因为很多类型的设备不可用:错误的设备系列,错误的功能或不符合部署目标的操作系统版本。
现在,你的设备将显示在“不可用设备”中,并在名称旁边有简要说明。如果你将鼠标放在设备名称上,则会提示更多详细信息。
以下是所有更改的列表:
  • iOS、watchOS、tvOS和macOS的主要工具栏中的新设备图标。
  • 当无法显示模拟器或设备时,在“Build Only”菜单分隔符下有Generic Simulator / Device。
  • 总是在工具栏中显示“设备”菜单分隔符,就像对模拟器一样。
  • Mac项目现在使用iMac图标显示名为“MyMac”的实际执行目标,而不是使用iPhone图标显示“Default”。

音频单元向导

新的音频单元扩展向导添加了3个选项来自定义音频单元项目模板的plist。
  • 音频单元类型
    • 仪器
    • 发生器
    • 效果
    • 音乐效果
  • 子类型代码:必须是4个字符
  • 制造商代码:必须是4个字符

删除TLS Provider选项

iOS构建选项中不需要TLS Provider,因为:
  1. AppleTLS是自C7以来的默认值,支持TLS 1.2。
  2. MonoTLS仅限于SSLv3和TLSv1:两者都已被弃用。
注意:Xamarin.iOS 10.4发行说明已经提到MonoTLS已被弃用,将来会被删除。

其他改进和bug修复

  • 现在部署到设备时会显示一个进度条。这对于watchOS来说尤其有用(需要Xamarin.iOS 10.5.0.323+)。
  • 现在使用Xamarin.iOS的已知操作系统版本来填充部署目标下拉列表。这两个优点是可以为每个App Extensions类型提供精确的最低版本,并避免显示基于Xcode的Xamarin.iOS尚不支持的操作系统版本。
  • 存在于Images.xcassets(或Assets.xcassets)目录中的* .csproj文件未导入的任何图像资源都将被忽略。

调试器

  • 在异常情况下支持HelpLink。点击异常对话框顶部的更多信息将打开默认浏览器中的链接。

微软身份

  • Xamarin Studio不再需要启动外部进程,以便在登录到Microsoft帐户时获取登录详细信息。

一般

  • “新建项目”对话框现在显示最近使用的模板列表。
  • Xamarin.UITest项目模板已更新到最新的版本。
    • Xamarin.UITest 2.0.6
    • Xamarin.TestCloud.Agent 0.20.3
未发布 快速制作演示动画的工具TurboDemo常见问题合集(一)
by Harriet666 keys 分享 1505380495391
使用TurboDemo遇到了问题?我们的FAQ将帮助你找到答案。
TurboDemo

1、我的序列号和注册信息都无法使用?

注册信息包括三部分:“序列号”,“字段 #1”以及“字段 #2”-要成功注册你的软件这些信息都是必须。
为了确保你的注册没有任何问题,请从发送给你的邮件中复制注册信息,然后粘贴到相应的注册字段。
请参考以下截图。
 

2、运行TurboDemo的最低系统需求?

功能要求
主要功能Microsoft Windows 95或更新版本
至少50 MB可用磁盘空间
128 MB内存或更多(更大的内存能提高性能)
SVGA显卡或更好

3、怎样开始抓取我的屏幕截图?

可简单直接地生成一个演示示例或使用说明。以下例子的步骤教您如何制作演示示例或使用说明(我们将以450x500像素的截图大小来举例):
  • 开始运行TurboDemo然后点击工具条里的“文件|新工程”
  • 指定屏显大小为450(宽)x500(高)像素。TurboDemo将在您的屏幕上画一个450x500像素的红色矩形框
  • 打开红框中的应用程序。使用热键CTRL+SHIFT+P或CTRL+SHIFT+R将您的应用程序放入红色矩形框中
  • 您每次用鼠标点击红色的矩形区域,TurboDemo就会完成该过程的截图。也可通过按键盘上的“暂停”键完成截图
  • 在重复第四步后,您可以通过点击系统托盘上的TurboDemo图标结束截图。当该图标被隐藏后,按下键盘上的“打印”键
  • 编辑您的工程,您可以添加提示气球、动态对象等
  • 点击工具条中的“文件|生成演示/发布演示”,然后选择演示与使用说明的格式:Flash、Java/HTML、EXE或未压缩的AVI


4、怎样将演示示例发布到网站上?

如果您想将您的演示示例放到您的主页上或另一个网站上,那么您必须将演示文件上传到网站服务器上。


5、怎样更改幻灯或整个演示示例的时间?

使用“工程|选项”菜单中的参数统计幻灯显示时间。通过调整“最小读取时间”、“鼠标指针速度”等,您能改变幻灯与 演示示例的显示时间。


6、怎样生成与发布演示示例?

请按照以下步骤生成或发布您的演示示例或使用说明:
  • 开始运行TurboDemo,然后从工具条里点击“文件|打开工程”
  • 从工具条中选择“文件|生成演示/发布演示”,然后选择您想生成的演示和使用说明文件格式:Flash、Java/HTML、EXE、ASF等

7、怎样创建多个交互式区域或对象?

您可通过使用TurboDemo的绘制对象功能以创建多个交互式区域或对象。您可以轻易地为绘制的对象指定一个动作(如,跳转、打开url等)。

 近期热门 - 点击最多
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Node.js 打印vite react+go项目目录树
  3. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  4. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  5. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  6. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  7. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  8. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  9. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  10. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法

  全端社区 - 最新回复
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  3. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  4. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  5. Node.js 打印vite react+go项目目录树
  6. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  7. Windows与Mac通过git ssh和rsync实现文件共享互传
  8. Windows与Mac通过git ssh和scp实现文件共享互传
  9. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  10. 使用PubSub-JS时ReactNative在后台运行一段时间唤醒后,组件无法scribe到publish的事件,typescript实现一个事件订阅发布组件

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA