小编dav*_*ung的帖子

Ruby Net::HTTP 执行已过期

使用 Net::HTTP,我定期发现下面的代码从 StandardError 中拯救了一条“执行已过期”的消息,尽管来自访问的 URL 的 Web 服务器日志显示相应的响应被快速发送。当 Web 服务器日志显示响应时间超过 5 秒时,我通常会看到 Timeout::Error 中的代码救援。

什么情况会导致下面的代码从 StandardError 中拯救出“执行已过期”而不是从 Timeout::Error拯救出来?

此代码在一个相对古老的 Ruby 1.9.3 上的多线程程序中运行,该平台不支持较新版本的 Ruby。尽管该程序是多线程的,但显示的代码仅在单线程上运行。

begin
  connection = Net::HTTP.new(uri.host, uri.port)
  connection.open_timeout = 5
  connection.read_timeout = 5
  connection.start do |http|
    request = Net::HTTP::Post.new("/reader_events")
    request.body = body
    response = http.request(request)
  end
rescue StandardError => std_error
  log "error sending event to server: #{std_error}"
rescue Timeout::Error => error
  log "timeout sending event to server"
end
Run Code Online (Sandbox Code Playgroud)

ruby net-http

3
推荐指数
1
解决办法
1万
查看次数

React onClick 不会阻止浏览器设置锚标记

我是 React 新手,遇到了使用链接标签的分页控件问题。我的基本分页控件呈现如下:

<a href="#page2">Next</a>
Run Code Online (Sandbox Code Playgroud)

呈现它的 JSX 定义如下所示:

<a href={"#page"+(this.props.pageIndex+1)} onClick={this.handleClick}>
  {this.props.name}
</a>
Run Code Online (Sandbox Code Playgroud)

问题是,当您单击 Next 链接转到第 2 页时,浏览器最终会在 URL 栏中显示 #page3,即使代码正确呈现第 2 页。(该代码不会修改 URL。)跟踪在调试器中执行 JavaScript 之后,我看到它window.location.href停留在 #page1,然后跳转到 #page3。

我相信正在发生的事情是 React 正在拦截点击事件,并正确地重新呈现页面,然后浏览器的默认链接处理Next 链接更改为指向 #page3 而不是 #page2触发。

我的分析正确吗?如果是这样,使此工作正常运行以便浏览器在 URL 栏中显示 #page2 的正确方法是什么?

编辑:这是上下文中的简化代码:

class RecordList extends React.Component {
  changePage(pageIndex) {
    console.log("change page selected: "+pageIndex);
    this.props.changePage(pageIndex);
    return false;
  }

  render() {
    ...
    nextLink = (<PagingLink name=" Next> "pageIndex={this.props.pageIndex+1} handleClick={() => 
    this.changePage(this.props.pageIndex+1)}/>)

    return …
Run Code Online (Sandbox Code Playgroud)

jsx reactjs

3
推荐指数
1
解决办法
1395
查看次数

Swift 与 Objective C 的 Xcode 缩进设​​置

我有一个包含大型代码库的项目,其中在 Swift 3 中添加了较新的模块,但大部分代码使用 Objective C。与许多项目一样,我们的 Swift 风格使用 2 个空格进行缩进。然而,遗留的 Objective C 代码库使用 4 个空格。

Xcode 8+ 中是否有任何方法可以根据文件类型配置缩进?如果没有,是否有更好的替代方案:

  1. 将所有 Objective C 文件转换为使用两个空格。
  2. 由于 Xcode 的限制,在 Swift 代码上强加 Objective C 4 空间样式。

以上两个似乎都是坏主意,但是如果没有 Xcode 对每个文件类型配置的支持,似乎没有其他方法。

xcode swift

2
推荐指数
1
解决办法
1319
查看次数

使用 SwiftUI 确定后台状态

当在 iOS 13+ 中使用 SwiftUI 时,确定后台状态的传统方法不再起作用。例如:

  • AppDelegate 方法applicationDidEnterBackground(_ application: UIApplication)不会applicationDidBecomeActive(_ application: UIApplication)被调用。

  • 不会发送通知didEnterBackgroundNotificationwillEnterForegroundNotificationdidBecomeActiveNotificationwillResignActiveNotification

作为替代方案,有UIWindowSceneDelegate回调:sceneDidBecomeActive(_ scene: UIScene), sceneWillResignActive(_ scene: UIScene), sceneWillEnterForeground(_ scene: UIScene),sceneDidEnterBackground(_ scene: UIScene)

这些替换的问题在于它们特定于进入和离开前台的多个场景之一。它们没有提供一种简单干净的方法来确定整个应用程序是在前台还是后台。

确定应用程序前台/后台状态很重要,其原因与用户界面无关。 当应用程序不在前台时,某些 iOS 功能会默默地失败(通配符蓝牙扫描和 iBeacon 传输是两个例子。)我经常开发没有任何用户界面的 iOS 框架,因此我需要一种方法来确定应用程序后台/前台状态不依赖于在中粘贴一堆样板代码UIWindowSceneDelegate——对我来说,要求某人使用我的框架来做到这一点是不合理的。

是否有任何简单的方法可以使用 SwiftUI 确定 iOS 13 上应用程序的前台/后台状态?

nsnotificationcenter appdelegate ios13 swiftui uiscenedelegate

2
推荐指数
2
解决办法
2190
查看次数

我可以使用Libsodium进行AES-128-ECB加密吗?

我需要使用AES-128-ECB加密数据块,并希望使用libsodium和Ruby.我使用OpenSSL API在Ruby中构建了一个解决方案原型,如下所示:

aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
aes.encrypt
aes.key = key
aes.update(data) + aes.final 
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我需要来自libsodium的其他功能,所以我想用它来摆脱我对OpenSSL的依赖.不幸的是,我没有看到任何用于ECB模式的API.我也使用ruby包装器RbNaCl,但我甚至没有看到任何使用基本libsodium API的方法.我确实看到了AES-128-CTR.

是否可以使用libsodium加密AES-128-ECB?

ruby aes libsodium

1
推荐指数
1
解决办法
966
查看次数