天道酬勤,学无止境

技术分享

在 Erlang 中使用 mochijson2 解码 JSON(Decode JSON with mochijson2 in Erlang)

问题 我有一个包含一些 JSON 数据的 var: A = <<"{\"job\": {\"id\": \"1\"}}">>. 使用 mochijson2,我解码数据: Struct = mochijson2:decode(A). 现在我有这个: {struct,[{<<"job">>,{struct,[{<<"id">>,<<"1">>}]}}]} 我正在尝试阅读(例如)“工作”或“身份证”。 我尝试使用 struct.get_value 但它似乎不起作用。 有任何想法吗? 回答1 The data is in {struct, proplist()} format, so here's what you do: {struct, JsonData} = Struct, {struct, Job} = proplists:get_value(<<"job">>, JsonData), Id = proplists:get_value(<<"id">>, Job), You can read more about proplists at: http://www.erlang.org/doc/man/proplists.html 回答2 另一个访问 json 结构的辅助函数: jsonobj({struct,List}) -> fun({contains,Key}) ->

2021-06-13 06:51:18   json   erlang   mochiweb   mochijson2

How to send a message to a TThread from main thread in Delphi?(How to send a message to a TThread from main thread in Delphi?)

问题 我想向线程发送消息并在线程中处理它。 我怎样才能在德尔福做到这一点? 我想PostMessage是要走的路,但到目前为止我看到的例子是描述另一种方式,即从线程到主线程。 回答1 我什至不会尝试解释或编写任何代码。 看看这个教程。 它有点旧,但非常好 imho。 多线程——Delphi 方式 回答2 您可以在您的线程中有一个消息循环(可能带有一个隐藏的通知窗口)并向它发送一条 Windows 消息,或者您可以使用更原生(较少 GUI)的方式来执行此操作,例如受保护的队列临界区与线程等待的手动重置事件和发送线程信号相结合。 一个更通用的解决方案是生产者-消费者队列,它在经典实现中使用几个信号量来跟踪消费者和生产者,并使用第三个信号量来互斥地访问队列; 然而,网络上有更优化的生产者-消费者队列。 回答3 为什么你需要这样做? 我不得不在辅助线程中创建消息循环只是出于一个原因,那就是因为该线程使用了 COM 对象。 对OleInitialize()和OleUnitialize()的调用表明您需要一个标准的GetMessage()循环。 在这种情况下,还需要使用PostThreadMessage()将消息发布到该线程,因为正常的阻塞同步调用会干扰消息循环。 否则,就不要这样做。 如果您使用的是 Delphi 2007 或 2009,请务必查看 Primož Gabrijelčič 的

2021-06-13 06:51:15   multithreading   delphi

将数据从 UITableViewCell 推送到 UINavigationController(Pushing data from a UITableViewCell to a UINavigationController)

问题 我有一个 UISearchDisplaycontroller,我必须将信息推送到文本字段并需要将其链接到导航视图控制器。 这是我的代码- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"showRecipeDetail"]) { NSIndexPath *indexPath = nil; Recipe *recipe = nil; if (self.searchDisplayController.active) { indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; recipe = [searchResults objectAtIndex:indexPath.row]; } else { indexPath = [self.tableView indexPathForSelectedRow]; recipe = [recipes objectAtIndex:indexPath.row]; } RecipeDetailViewController

2021-06-13 06:51:10   ios   xcode   hyperlink   push

In the dev tools timeline, what are the empty green rectangles?(In the dev tools timeline, what are the empty green rectangles?)

问题 在 Chrome 开发工具时间线中,填充的绿色矩形(代表绘画操作)和空的绿色矩形(显然也代表绘画操作......)之间有什么区别? 回答1 绘画实际上是两个任务:绘制调用和光栅化。 绘制调用。 这是您想要绘制的事物列表,它源自应用于您元素的 CSS。 最终有一个与 Canvas 元素没有不同的绘制调用列表:moveTo、lineTo、fillRect(尽管它们在 Skia、Chrome 的绘画后端的名称略有不同,但这是一个相似的概念。) 光栅化。 单步执行这些绘制调用并将实际像素填充到可以上传到 GPU 进行合成的缓冲区的过程。 所以,有了这个背景,我们开始: 实心绿色块是 Chrome 正在记录的绘制调用。 这些是在主线程上与 JavaScript、样式计算和布局一起完成的。 这些绘制调用被组合为一个数据结构并传递给合成器线程。 空的绿色块是光栅化。 这些由合成器产生的工作线程处理。 从本质上讲,两者都是油漆,它们只是代表整个工作的不同子任务。 如果您遇到性能问题(并且从您提供的抓斗来看,您似乎被油漆绑定了),那么您可能需要检查您正在通过 CSS 或 JavaScript 更改的属性,并查看是否有仅使用合成器的方法来实现同样的结束。 CSS 触发器在这里可能会有所帮助。

2021-06-13 06:51:07   google-chrome-devtools   repaint

瓷砖地图移动中的白色垂直线和抖动的水平线(White vertical lines and jittery horizontal lines in tile map movement)

问题 我很难找到答案,为什么我为我们的瓷砖地图制作的瓷砖表在使用 libGDX 在屏幕上移动时会创建垂直的白线和抖动的水平线。 这是一个显示白色垂直线的视频:https://www.youtube.com/watch?v=34V64WacMo4 这是一个显示水平抖动线的视频:https://www.youtube.com/watch?v=LiozBZzxmy0 为了比较,这是我今年早些时候在没有 GDX 的情况下工作的一个项目。 您可以看到瓷砖地图平滑移动,没有任何明显的外观:https://www.youtube.com/watch?v=VvdPdA_253k 当我将这个非常小的图块集引入我们的引擎时,您可以看到各个图块周围的外观。 即使我在当前引擎中使用与该项目完全相同的 tilesheet,也是如此。 我和我的搭档一直在调查导致这种情况的原因,尽管我们找到了几个可能的答案,但没有任何效果。 我们目前的解决方案感觉非常错误。 我使用 Photoshop 创建我的平铺表。 我把它保持得井井有条,所以当它被导入到 Tiled 时,它可以有效地使用。 这是我一直在使用的测试表,用于创建上述示例的测试表: 作为实验,我的朋友创建了一些简单的 32x32 瓷砖,并使用 TexturePacker 将它们打包,然后在 Tiled 中使用它们。 最终结果是这个文件:

2021-06-13 06:51:03   graphics   libgdx   sprite   tiling

How can I use OCMock to verify that a method is never called?(How can I use OCMock to verify that a method is never called?)

问题 在我的日常工作中,我被 Mockito 的 never() 验证所宠坏,它可以确认从未调用过模拟方法。 有什么方法可以使用 Objective-C 和 OCMock 来完成同样的事情吗? 我一直在使用下面的代码,它有效,但感觉就像一个黑客。 我希望有更好的方法... - (void)testSomeMethodIsNeverCalled { id mock = [OCMockObject mockForClass:[MyObject class]]; [[[mock stub] andCall:@selector(fail) onObject:self] forbiddenMethod]; // more test things here, which hopefully // never call [mock forbiddenMethod]... } - (void)fail { STFail(@"This method is forbidden!"); } 回答1 由于 OCMock 的 r69,可以拒绝方法调用 http://svn.mulle-kybernetik.com/OCMock/trunk/Source/Changes.txt 很好的模拟/快速失败当在尚未使用 expect 或 stub 设置的模拟对象上调用方法时,模拟对象将引发异常。 可以通过创建一个

2021-06-13 06:50:59   objective-c   cocoa   mocking   mockito   ocmock

带有自定义初始值设定项的 Swift 枚举丢失了 rawValue 初始值设定项(Swift enum with custom initializer loses rawValue initializer)

问题 我试图用以下内容将这个问题归结为最简单的形式。 设置 Xcode 版本 6.1.1 (6A2008a) 在MyEnum.swift定义的枚举: internal enum MyEnum: Int { case Zero = 0, One, Two } extension MyEnum { init?(string: String) { switch string.lowercaseString { case "zero": self = .Zero case "one": self = .One case "two": self = .Two default: return nil } } } 以及在另一个文件MyClass.swift中初始化枚举的代码: internal class MyClass { let foo = MyEnum(rawValue: 0) // Error let fooStr = MyEnum(string: "zero") func testFunc() { let bar = MyEnum(rawValue: 1) // Error let barStr = MyEnum(string: "one") } } 错误 Xcode 在尝试使用其原始值初始值设定项初始化MyEnum时出现以下错误: Cannot convert the

2021-06-13 06:50:54   swift   enums

如何使用 rustc 生成可执行文件?(How to produce executable with rustc?)

问题 如果我编译这个简单的程序fn main() { println!("Hello"); } fn main() { println!("Hello"); }与rustc test.rs -o test ,然后我可以运行它./test ,但双击它在文件管理器给出了这样的错误: Could not display "test". There is no application installed for "shared library" file. Could not display "test". There is no application installed for "shared library" file. 运行file test似乎同意: test: ELF 64-bit LSB shared object... 。 我如何获得 rustc 以及使用它的工具(例如货物)来生成可执行文件而不是共享对象? 我使用的是 64 位 Linux(Ubuntu 14.10)。 编辑:我已经在 Rust 论坛上发布了有关此内容的信息。 编辑@:所以事实证明这是file可执行file的问题。 回答1 我没有 rust 编译器,也无法在互联网上找到它的文档,但我知道如何在 C 中执行共享对象与可执行文件,所以也许这些信息可以帮助您解决它。 不同之处在于链接器的 -pie 选项。 使用

2021-06-13 06:50:51   rust

如何在 Apple 的 TestFlight 服务上重新发送外部测试人员邀请 [关闭](How to re-send external tester invitations on Apple's TestFlight service [closed])

问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 4年前关闭。 锁定。 此问题及其答案已锁定,因为该问题偏离主题但具有历史意义。 它目前不接受新的答案或互动。 有没有办法在 Apple 的 TestFlight Beta 测试服务上向外部测试人员重新发送邀请? (我指的是通过 iTunes Connect 访问的外部 Beta 测试工具,而不是自 Apple 收购之前提供的独立 TestFlight 服务。) 在 iTunes Connect 中,在我的应用程序/预发行版/外部测试员下,测试员的状态仅显示为“已邀请”。 不幸的是,这个测试者有一个过度活跃的垃圾邮件过滤器,可以简单地删除所有垃圾邮件,所以他无法访问原始邀请。 而且我在 TestFlight UI 上找不到任何控件来重新发送它。 我试过关闭和打开测试,但这似乎没有帮助。 回答1 尝试删除测试仪并重新添加它们: 单击测试人员表右上角的“编辑”按钮,然后删除测试人员: 然后将它们添加回来。 这应该重新发送邀请电子邮件。 // 更新:界面有所改变,但过程保持不变。 现在删除外部用户后,您必须点击“保存”。 然后添加它们,并再次点击“保存”。 回答2 它的查询有点旧,但问题仍然存在。

2021-06-13 06:50:47   ios   app-store-connect   testflight

How to convert a date in Excel to ISO 8601 format(How to convert a date in Excel to ISO 8601 format)

问题 我正在尝试将日期格式保存为 YYYY-MM-DD,例如 2014-09-01 作为 CSV 文件,但是当我这样做时格式会恢复为 M/D/YYYY 格式。 我尝试在 Excel 中将日期转换为字符串,但是每次打开 CSV 文件时,它都会返回 M/D/YYYY 格式。 我需要将 ISO 8601 日期格式保存在 CSV 文件中。 我该怎么做? 回答1 基本功能是: =TEXT(A1,"yyyy-mm-ddThh:MM:ss") 使用它可以将 Excel 日期列转换为单独的 ISO 8601 日期列。 接下来,将 ISO 8601 列复制到原件上(特殊粘贴:仅粘贴值)。 删除计算的 ISO 8601 列,这些列现在包含垃圾,因为 Excel 在 ISO 8601 日期上很糟糕。 您现在拥有转换后的 CSV 或 TSV 或诸如此类的东西。 只需另存为原始格式,并忽略愚蠢的 Excel 抱怨它不是其原生文件格式以及您将如何通过另存为 CSV 文件以某种方式“失败”,并尽量不要考虑 Microsoft 窃取了您的生活时间与那个愚蠢的对话。 回答2 您可以设置一个单元格,例如: 右键单击单元格 > 单元格格式 > 类别 > 自定义 > 类型 > 写这个: aaaa-mm-jjThh:mm:ss (french format here) yyyy-mm-ddThh:MM:ss

2021-06-13 06:50:44   excel   date   csv