干货 | 携程机票Sketch插件开发实践

携程网页版国内机票数据 概述 携程网页版机票查询的网址是https://flights.ctrip.com/ 本篇使用北京到成都的数据。 请求分析 查看network,可以很容易找到请求地址是https://flights.ctrip.com/international/search/api/search/batchSearch 其中,headers里面有两个略微复杂的请求参数,transactionid 和 sign,这两个参数拿到后即可直接post请求。 transactionid获取 这个可以通过网络请求直接获取到,比如北京 阅读详情

作者简介

尹正波,携程机票研发部前端工程师,专注设计和开发的交叉领域,用系统和工具改进设计体验和交付。


Sketch 是伴随移动应用程序崛起而流行的 UI 设计工具。2014年 Sketch V3 增加 Symbols 功能,在 UI 设计工具领域的优势越来越大。它持续改进和增强功能,不断加强对插件社区的建设,吸引越来越多的开发者进入。


640?wx_fmt=png

640?wx_fmt=png


随着 Design System 的普及和流行,许多大公司都在设计插件领域有所投入,如 Google,Airbnb 等,同时诞生了一系列提供设计管理的初创企业,如 Abstract,UXPIN 等。中国很多大中型互联网企业也开始研制自己的设计系统和插件工具,例如 Dapllo,Kitchen,Fusion,Anto。


2016年,携程机票UED团队主力生产工具完全切换到 Sketch。与此同时,机票前端研发技术团队也关注到设计系统和插件工具规范化自动化对业务交付工作流程的加速作用。于是设计团队与前端技术团队开始携手探索设计语言升级,从业务需求项目实践中提炼通用规范,落地插件工具系统,并输出一整套设计资源管理规范和流程。


一、设计资源管理


产品的设计语言是一家公司留给消费者最直观的形象,通常包含品牌 Logo,颜色,文字,符号,插画,动画和文案话术等。而 Design System 是为了让设计语言落地执行而构建的解决方案,包括设计指导文档,设计资源,组件代码和工具等。


设计资源的共享和版本管理一直困扰着设计师们。Sketch 通过引入 Symbols,Library 等功能解决了共享组件问题,但在颜色,文字排版,图标管理等问题上依然缺少足够好的解决方案,需要各家公司针对自身的特点开发插件和服务去解决这些问题。


640?wx_fmt=png


二、Kirby - Sketch Plugin


Kirby 是携程机票前端团队的 Sketch Plugin 系统代号,故事源于一次 Sketch 版本升级引起的标注导出功能失效问题。


Sketch 社区著名插件 Sketch Measure,它将设计稿和数据参数导出 HTML 网页,供技术人员查看,节省从设计到开发过程的沟通成本。但 Sketch 的版本升级经常致其无法正常使用,维护者也无暇快速修复问题,设计师们若继续使用,将被迫使用一个低版本 Sketch。


为了让设计师能够使用 Sketch 最新版本,并修复 Sketch Measure 缺陷功能,Kirby 诞生。


之后我们陆续添加更多功能,从 Design Token,到 Icon System,再到 Component,以及 Template,一步步接近成熟和完整。


Kirby 目前已交付若干重要特性:


2.1设计语言规范约束


Color Pallete


640?wx_fmt=png


Typography


640?wx_fmt=png


Shadow


640?wx_fmt=png


2.2 设计稿静态扫描检查


方便设计师查找和修正问题。


640?wx_fmt=png


字体与图标系统


640?wx_fmt=png


在线版设计资源模版库


640?wx_fmt=png


三、Sketch Plugin 开发技术


在插件开发实现过程中,我们遇到许多交叉技术领域的问题,也因此进行了多次技术重构。


3.1 基础知识


Sketch 官方技术文档提供了简单介绍:


1)Sketch 插件是按照特定方式管理的一个文件夹,包含一个或多个 scripts,每个 script 含有若干扩展 Sketch 用途的命令。


2)插件主要使用 Javascript 语言编写,支持 ES6 语法,但运行环境既不是浏览器也不是 Nodejs,而是 Hybrid SketchAPI for macOS Native 运行环境。


从最简单的部分看起:


打开一个 Sketch 文件,control + shift + k 快捷键开启 Run Script 面板,输入:



 
const sketch = require('sketch')	
sketch.UI.message('Hello, world!')


运行以上代码,将在 Sketch 文件下方区域显示Toast:Hello, world,该 Script 面板常用于快速测试脚本API。


3.2 API 概述


The plugin system in Sketch gives you full access to the app’s internals and the core frameworks in macOS. So you have an immense power to build almost anything.


Sketch 插件系统开放了几乎所有权限,让许多天马行空的想法可以实现。但是插件开发者需要及时关注 Sketch 版本升级,其向下兼容性较差,或者说官方团队并不重视这部分。典型案例例如,著名插件 Paddy,在开发V2.0版本过程中,因 Sktech API 大量变更,原插件无法兼容,作者最终无力修复而放弃开发,非常可惜。


官方 API 有两个: Actions API, Javascript API。


3.3 Actions API


用于监听用户操作行为和触发的事件。据社区消息,该API未来会被新的 Events API 替代。它代表了 Sketch App 内部触发的事件,例如 CloseDocument, TogglePresentationMode 等, 细节详见官网:

https://developer.sketch.com/reference/action/


1)订阅 Actions


manifest.json 文件,配置相应 handlers。


示例:当 OpenDocument 事件被触发时调用 onOpenDocument handler 。



 
"commands" : [	
  ...	
  {	
    "script" : "my-action-listener.js",	
    "name" : "My Action Listener",	
    "handlers" : {	
      "actions": {	
        "OpenDocument": "onOpenDocument"	
      }	
    },	
    "identifier" : "my-action-listener-identifier"	
  }	
  ...	
],


my-action-listener.js



 
export function onOpenDocument(context) {	
  context.actionContext.document.showMessage('Document Opened')	
}


2)Action Context


Action事件会将 context.actionContext 传递给handler。有些 Action 包含两个状态,begin 和 finished,例如 SelectionChanged 。需分别订阅 SelectionChanged.begin 和 SelectionChanged.finished,否则会触发两次事件。


当我们不知道应该订阅哪个 Action 时,可以使用通配符。但运行时性能开销很大,建议仅在开发阶段使用。


示例:Terminal 打开通配符支持。



 
defaults write com.bohemiancoding.sketch3 actionWildcardsAllowed -bool YES


manifest.json 文件配置通配符。



 
{	
  ...	
  "handlers": {	
    "actions": {	
      "*": "onActionHandler"	
    }	
  }	
  ...	
}


3.4 Javascript API


它是针对 Native API 的封装,目前还未涵盖所有场景,官方承诺未来将覆盖90%。细节详见官网和GitHub:

https://developer.sketch.com/reference/api/

https://github.com/BohemianCoding/SketchAPI/blob/develop/CHANGELOG.json


640?wx_fmt=png


3.5 开发环境


官方提供了一个打包工具 skpm, 用于快速上手插件开发。它基于 webpack,项目根目录下存放 webpack.skpm.config.js, 用于工程配置修改。


安装示例



 
npm install -g skpm	
skpm create my-plugin	
cd my-plugin	
npm run build	
# 然后在 Plugins -> my-plugin -> MyCommand 中运行插件命令


典型的插件开发工程的目录结构示例

.


 
├── .gitignore	
├── README.md	
├── src                         // sources	
│   ├── manifest.json           // plugin's manifest	
│   └── my-command.js           // source code of the command	
├── node_modules	
│   └── skpm                    // the sketch plugin developer toolchain	
├── my-plugin.sketchplugin      // compilation output, the actual plugin	
│   └── Contents	
│       ├── Resources	
│       └── Sketch	
│           ├── manifest.json	
│           └── my-command.js	
└── package.json


3.6 崩溃保护


当 Sketch 运行发生崩溃,它会停用所有插件以避免循环崩溃。对于使用者,每次崩溃重启后手动在菜单栏启用所需插件非常繁琐。因此可以通过如下命令禁用该特性。



 
defaults write com.bohemiancoding.sketch3 disableAutomaticSafeMode true


3.7 插件缓存


通过配置启用或禁用缓存机制:



 
defaults write com.bohemiancoding.sketch3 AlwaysReloadScript -bool YES


但是该方法对于某些场景不适用。例如当正在使用一个 long-running 脚本时,即 Javascript Context 不变,并存储在内存中,那么则需要重启 Sketch 或通过 coscript.setShouldKeepAround(false) 使改动生效。


3.8 WebView 调试


如果插件实现方案使用 WebView 做界面,可通过以下配置开启调试功能。



 
defaults write com.bohemiancoding.sketch3 WebKitDeveloperExtras -bool true


3.9 打印输出日志


Sketch 运行环境 JavascriptCore 的日志输出方式:


1)macOS console.app 中搜索 与 sketch 相关的 Filter。

2)查看 ~/Library/Logs/com.bohemiancoding.sketch3/Plugin Output.log。

3)运行 skpm log 查看上述文件,-f 参数使用 stream 方式查看。

4)使用 skpm 开发的插件,可以使用 console.log 语法,需安装 sketch-dev-tools。


3.10 代码调试


Safari 浏览器开发工具可用于插件的 Javascript 代码调试。


Developer > name of your machine > Automatically Show Web Inspector for JSContexts

同时启用选项 Automatically Pause Connecting to JSContext


3.11 Objective-C Classes


Sketch 对外暴露了全部内部方法的调用权限,其 Objective-C 类 通过 Bridge 提供 Javascript API 调用。


3.12 插件 GUI 的实现


用户(设计师)可以通过以下几种方式使用插件:


1)菜单 -> 插件 -> 选择插件已定义的 Handler

2)Handler 预定义的快捷键

3)插件提供的其他 GUI 方案


其他 GUI 方案有 Native(Appkit) 和 WebView ,以 Kirby 为例,目前大部分 UI 由 WebView 实现。这种方案对于 Web 前端技术人员上手学习成本较低。 skpm 提供了已封装好的基于 WKWebView 的 sketch-module-web-view,其 API 设计接近 Electron,细节详见 GitHub。

https://github.com/skpm/sketch-module-web-view/blob/master/docs/browser-window.md


除此之外,skpm 还提供了一些供 JavaScript 调用的 Native 控件,例如 Dialog:



 
import dialog from '@skpm/dialog'	
console.log(	
  dialog.showOpenDialog({	
    properties: ['openFile', 'openDirectory', 'multiSelections']	
  })	
)


3.13 CocoaScript GUI


CocoaScript is built on top of Apple’s JavaScriptCore, the same JavaScript engine that powers Safari. So when you write in CocoaScript, you are really writing JavaScript.


CocoaScript also includes a bridge which lets you access Apple’s Cocoa frameworks from JavaScript. This means you have a ton wonderful classes and functions you can use in addition to the standard JavaScript library.


Sketch 插件通过 Mohca / CocoaScript 连接到 Objective-C / Cocoa。Javascript 调用 Objective-C 方法,需要将方法名的冒号改为下划线(最后一个可选),所有 selector 连接成一个连续的字符串。例如 executeOperation:withObject:error: 将转为 executeOperation_withObject_error()。


示例:



 
/*	
打开文件对话框,使用 Appkit NSOpenPanel。	
https://developer.apple.com/documentation/appkit/nsopenpanel?language=objc	
*/	
var openPanel = NSOpenPanel.openPanel()	
openPanel.setCanChooseDirectories(false)	
openPanel.setCanChooseFiles(true)	
openPanel.setCanCreateDirectories(false)	
openPanel.setDirectoryURL(NSURL.fileURLWithPath('~/Documents/'))	
openPanel.setTitle('Choose a file')	
openPanel.setPrompt('Choose')	
openPanel.runModal()	
	
	
//设置异步操作不被 Sketch GC回收	
COScript.currentCOScript().shouldKeepAround = true	
//异步执行完成后,释放	
COScript.currentCOScript().shouldKeepAround = false


3.14 Native GUI


实现 Native GUI 的难点在于“合适的时机”找到“正确的实例”。Actions API 用于解决“合适的时机”问题。而寻找“正确的实例”相对复杂一些。首先从 Sketch-Headers 入手,搜索与事件有关的方法。


例如,当我们需要扩展 “创建组件“ 对话框,该对话框在 “创建组件” 事件发生时才会出现,因此在 Actions API 中搜索与 symbol 有关的事件,找到名为 Create Symbol 的 Action。然后继续搜索关键字 CreateSymbol,可找到如下结果。


640?wx_fmt=png

code 能够以黑盒方式分析系统当前运行的应用程序界面,提取对于插件开发有用的信息。使用 Xcode 分析 Sketch 可知,MSCreateSymbolNamingSheet 继承自 NSWindowController,如下示例代码可获取其调用对象。



 
const doc = context.actionContext.document;	
const docData = doc.documentData();	
const window = doc.window();	
const sheetWindow = window.attachedSheet();	
const createSymbolNameingSheet = sheetWindow.windowController();


640?wx_fmt=png

3.15 Webview GUI


Webview 与 Plugin 之间需要实现双向通讯互操作。Webview 可通过 WKWebView delegates 向 Plugin 发送消息,Plugin 则通过webView.evaluateJavaScript_completionHandler() 触发 Webview 执行 Javascript 代码。



 
export function createPopoverWKHandler () {	
    return new MochaJSDelegate({	
        'userContentController:didReceiveScriptMessage:': (function (controller, message) {	
            let body = Utils.toJSON(message.body()),	
                { key, value } = body	
            switch (key) {	
                case 'setTypography':	
                    Utils.setTextStyle(value)	
                    break	
            }	
        })	
    })	
}


四、Milestone One


一个功能完整易用性佳的Sketch插件系统,除了上述技术实现细节,还有很多需要思考兼顾的方面。例如,设计文件版本管理,Sketch 版本兼容性,用户配置文件,云同步协作,用户(企业内网)鉴权认证接入。


Kirby 每一个新增功能都是围绕着从设计到研发再到交付的一致性和复用性,这也正是设计系统所要解决的核心问题。


我们 hack 的不仅是一个软件,而是完整的 DesignOps 工作流程。


【推荐阅读】



640?wx_fmt=jpeg


探索Sketch-Plugins:提升设计效率的Sketch插件集合 在数字设计领域,Sketch 插件是扩展这个矢量图形编辑器功能的小型软件包。它们可为 Sketch 添加新的工具、工作流程优化和自动化任务,从而提高设计师的工作效率。自动化工具插件是Sketch中极为重要的一类扩展应用,它们通过预设脚本或自动化流程来提高设计效率,减少重复性劳动。本章将深入分析自动化工具插件的常见工作流,以及一系列实用的插件案例,旨在展示自动化插件如何在实际工作中发挥其强大的作用。设计资源的高效管理是提高设计效率和保持设计一致性的重要因素。 阅读详情

相关推荐

携程机票代理商API接口开发文档

携程代理商API接口文档开发文档

Sketch装机必备!10款Sketch 插件使用率超高!

一起跟我来看看这些使用率超高的 10 款 Sketch 插件吧!学会使用好 Sketch 的插件,才能最大程度上的利用好 Sketch !

FourxiYuanzi的博客 8720

携程开源DAL代码生成器 2016-10-11

Code Gen的最新版本。 修改了C#模板相关的bug

Sketch(三)——插件

Runner 号称全世界最快的Sketch插件,可在Sketch内部搜索并执行操作,减少设计过程中操作菜单栏的查找和选择,男人就要快! 安装 官网下载:Runner 使用 快捷键Command+',有Run、Goto、Insert、Create、Apply、Install六个功能,按tab键可切换功能。 Run——运行 快速调用Sketch中已有的功能,包括面板、菜单的功能和插件的功...

薛增辉的博客 785

kirby-uniform, 一个通用的Kirby 2插件来处理web表单操作.zip

kirby-uniform, 一个通用的Kirby 2插件来处理web表单操作 Kirby通用的 Kirby 2插件插件,用于处理web表单操作。 这是统一的v3,用于统一v2.3头到 v2分支。内置操作:电子邮件: 通过电子邮件发送表单数据。EmailSelect: 从多个收件人中选择通过电

kirby-plugins:Kirby CMS插件

Kirby插件 这是我制作的一些插件。 我的目标是与Kirby代码库的代码质量相匹配。

10 款最常用的Sketch在线插件!

只需选中待转换的图层,调整插件面板中的参数,即可实时预览转换后的效果,让你的设计更加生动有趣。以下是 9 个 Sketch 汉化插件的介绍,通过这些插件的协作使用,你可以告别加班!Windows 也能用的「协作版 Sketch」即时设计的这个插件该插件可以快速生成不规则图形,用于装饰元素和画板背景等,无需手动绘制,大大提高设计效率。

FourxiYuanzi的博客 3199

sketch-copies:Sketch插件可自动从外部文档获取和更新副本

mktgoo数据 安装 最新版本的插件 解压缩 双击mktgoo-data.sketchplugin 开发指南 该插件是使用skpm创建的。 有关工作原理的详细说明,请。 用法 安装依赖项 npm install 安装完成后,您可以在项目文件夹中运行一些命令: npm run build 要注意更改: npm run watch 自定义配置 巴别塔 要自定义Babel,您有两个选择: 您可以在项目的根目录中创建一个文件。 您在此处定义的任何设置都将覆盖skpm预设中的匹配配置键。 例如,如果传递“预设”对象,它将替换并重置skpm默认设置的所有Babel预设。 如果您想修改或添加到现有的Babel配置中,则必须使用webpack.skpm.config.js文件。 访问部分以获取更多信息。 Webpack 要自定义webpack,请创建webpack.skpm.config.

插件的内部实现_Sketch插件开发实践

全文共11135字,阅读需要28分钟Sketch 是非常流行的 UI 设计工具,2014年随着 Sketch V43 版本增加 Symbols 功能、开放开发者权限,吸引了大批开发者的关注。目前 Sketch 开发有两大热门课题:① React 组件渲染成 sketch 由 airbnb 团队发起,② 使用 skpm 构建开发 Sketch 插件。Sketch 插件开发相关资料较少且不太...

weixin_36082346的博客 775

kirby-git:Kirby插件,用于通过Git更新面板中的内容

柯比·吉特(Kirby Git) 在“ Kirby”面板中显示Git更改,并允许您手动或自动添加/提交/推送它们。 安装 使用 : composer require oblik/kirby-git 注意:此插件需要Git 2.22.0或更高版本。 在检查如何在服务器上更新它。 用法 为了成功使用此插件(通常是Git),您需要单独的分支,以避免覆盖历史记录。 假设您的存储库托管在GitHub上。 这意味着您有一个名为origin的远程站点,它指向该GitHub存储库。 设置示例: live是在实时服务器上签出的分支。 内容更改通过此插件从面板推送到origin/live 。 你不应该推到origin/live通过其他手段。 这将使编辑者始终能够提交和推送新的更改。 dev是您在计算机上本地进行开发工作的分支。 您可以自由地进行站点更改和内容更改,并将它们推送到origin/dev以

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

mac最强矢量绘图软件Sketch多语言切换代码教程

Sketch Mac版是一款非常好用且功能强大的矢量绘图软件,Sketch Mac版以简约的设计是基于无限的规模和层次的绘图空间,调色板,面板,菜单,窗口和控件,虽然使用简单,它提供了功能强大的矢量绘图和文字工具。如完美的布尔运算,符号,和强大的标尺,参考线和网格.Sketch for Mac 破解版拥有创新和新鲜的外观, 其故意极简主义设计基于无限尺寸和图层的绘图空间,不含调色板,面板,菜单,窗口和控件。 切换语言: 终端执行以下命令: defaults write com.boh...

mac666999的博客 406

PostGIS 小白入门详细指南

PostGIS 是 PostgreSQL 的一个扩展,它将 PostgreSQL 转变为一个功能强大的空间数据库,使其能够存储、查询和分析地理空间数据。PostGIS 遵循开放地理空间联盟(OGC)的标准,支持各种空间数据类型和操作,如点、线、多边形、缓冲区、空间连接等。存储各种空间数据类型(如几何类型和地理类型)空间索引,提高查询性能丰富的空间函数和操作支持投影和坐标系统转换城市规划与管理环境监测与分析物流与运输优化地图制作与可视化位置服务与导航。

落魄书生的职业学习生涯 1万+

浅谈sketch插件开发(三)

sketch是什么? sketch是一款用来制作矢量绘图的软件,矢量绘图也是进行网页,图标以及界面设计的最好方式。但除了矢量编辑的功能之外,sketch同样添加了一些基本的位图工具,比如模糊和色彩校正。是Mac系统才有的软件,可以理解为精简版的PS ,比PS更适合UI设计。该软件的特点是容易理解,上手简单,对于有设计经验的设计师来说,入门门槛很低。 sketch是用Objective-C构建的,是一套原生Objective-C开发的软件。Objective-C类通过Bridge (CocoaScript.

weixin_37989623的博客 3217

同源策略与跨域

前言:最近业务上前端同学多次联系说访问腾讯云cos资源的时候因为跨域的问题访问不到。大致看了下腾讯云关于设置跨域访问的教程,按照前端同学给的域名等选项就给配了,而且测试下来也是好的。但是呢一直不知道什么是跨域这里就做一个简单的学习记录。 一、同源策略 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的javascrip脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制;关于这一点我们后面会举例说明。...

mijichui2153的博客 1万+

C# Log4Net不输出日志的解决方法

log4net是一个流行的 .NET 日志框架,用于记录应用程序的日志信息。如果你在使用log4net。

精通搬砖,资深技术砖家,在软件开发,人工智能,设备开发等领域都有研究。商业合作&交流学习可私信联系。 1263

Webpack 中 webpack.config.js 文件的一些常见配置

Webpack 中 webpack.config.js 文件的一些常见配置和解释 cnpm install style-loader css-loader less less-loader url-loader file-loader html-loader postcss-loader postcss-preset-env eslint eslint-loader eslint-plugin-import eslint-config-airbnb-base babel-loader @babel/core

YKenan的博客 1298

数学建模常用模型10 :数据包络(DEA)分析法(投入产出法)

数据包络分析是评价多输入指标和多输出指标的较为有效的方法,将投入与产出进行比较。它的结果包含的意思有: ①θ=1,DEA有效,表示投入与产出比达到最优 ②θ<1,非DEA有效,表示投入与产出比没有达到最优,一般来说,θ越大说明效果越好。 数据包络分析是通过对投入的指标和产出的指标做了一个线性规划,并且进行变换后,然后根据其线性规划的对偶问题(线性规划对偶问题具有经济学意义),求解这个对...

HaLosec_Wei 9万+

selenium java测试web客户端实例---携程机票预订

  基于selenium + java实现的携程机票预订功能:   import java.util.List; import junit.framework.Assert; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.Keys; import org.openqa.seleni...

空夜's Blog 2984

DAMMFND: Domain-Aware Multimodal Multi-view Fake News Detection

虚假新闻的泛滥不仅严重阻碍了互联网社交媒体的健康发展,还在政治、经济和社会层面造成了实际危害,凸显了自动化虚假新闻检测的重要性(Zhou 等,2015;Cui 等,2019;Zhu 等,2022a;Li 等,2024c,b,a)。现有的虚假新闻检测方法通常聚焦于特定领域的新闻,例如健康或政治领域。然而,在现实世界中,社交媒体上的新闻往往跨越多个领域,这就要求现有的虚假新闻检测方法必须考虑多域泛化(Nan 等,2021;Qi 等,2019;Zhu 等,2022b)。

qq_52053775的博客 337

Arduino ESP8266通过 RF433数据收发实验

Arduino ESP8266通过 RF433射频模块实现数据收发实验 写这篇文章,折腾了2天,在没有成功之前,一直在摸索和采坑当中,不要问我黑暗和黎明之间有多长。开发很多时候只问结果,不问过程的,在这里分享来之不易的结果,希望后面的人不要采坑,有成功的案例先河,后面与之相关的应用开发只需要套用模板修改即可实现。 实物搭建 RF433模块 我使用的是这个:nodemcu 本案例开发所使用到的库:RadioHead:http://www.airspayce.com/mikem/

perseverance51博客 3806
上一篇: 干货 | 强化学习在携程酒店推荐排序中的应用探索
下一篇: 干货 | 你们需要的PPT和视频@数据存储与微服务架构实践沙龙
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值