小编nat*_*evw的帖子

使用Xcode和SDK 4+构建胖静态库(设备+模拟器)

从理论上讲,我们可以构建一个包含模拟器,iPhone和iPad的静态库.

但是,Apple没有关于此的文档,我可以找到,并且Xcode的默认模板未配置为执行此操作.

我正在寻找一种可以在Xcode中完成的简单,可移植,可重用的技术.

一些历史:

  • 在2008年,我们曾经能够制作包含sim和设备的单个静态库.Apple禁用了那个.
  • 在整个2009年,我们制作了一对静态库 - 一个用于sim,一个用于设备.Apple现在也禁用了它.

参考文献:

  1. 这是一个好主意,它是一种很好的方法,但它不起作用:http://www.drobnik.com/touch/2010/04/universal-static-libraries/

    • 他的脚本中有一些错误意味着它只适用于他的机器 - 他应该使用BUILT_PRODUCTS_DIR和/或BUILD_DIR而不是"猜测"它们)
    • Apple的最新Xcode阻止你做他做的事情 - 由于Xcode处理目标的方式(记录)改变,它根本不起作用)
  2. 另一个提问者询问如何在不使用xcode的情况下执行此操作,以及专注于arm6与arm7部分的响应 - 但忽略了i386部分:如何为armv6,armv7和i386编译静态库(fat)

    • 由于Apple的最新变化,模拟器部分与arm6/arm7的区别不再相同 - 这是一个不同的问题,见上文)

iphone xcode

279
推荐指数
6
解决办法
13万
查看次数

为什么node.js v4.4.5推荐超过v6.2.0"大多数用户"?

几年前我使用node.js作为开发项目,这个应用程序暂时有点"封存" - 它需要保持在线状态,它需要保持安全,但它不需要太多关注.它目前正在node.js v0.10.32上运行,但我现在想投资到"最终"迁移到长期支持(LTS)版本,以便在可预见的未来更容易维护.

乍一看,node.js主页看起来像v4.4.5显然是唯一可用的LTS版本:

在此输入图像描述

但是,如果我单击该LTS计划链接,它会讲述一个不同的故事.据我所知,node.js的第6版也将被定为LTS版本,其支持比版本4晚一年结束.

鉴于:

  • v6.2.0是版本化版本
  • 据称v6将在2019-04-01之前接受LTS维护
  • 从理论上讲,v6.x中的任何更改都不应该破坏向后兼容性

为什么我要打扰升级到v4而不是v6?看起来像v4给我少了一年的安全补丁,但没有额外的兼容性保证?

version node.js

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

如何在Amazon S3中更改对象的元数据

如果您已将对象上传到Amazon S3存储桶,那么如何使用API​​更改元数据?可以在AWS管理控制台中执行此操作,但不清楚如何以编程方式完成此操作.具体来说,我在Python中使用boto API并且从阅读源代码可以清楚地看出,使用key.set_metadata只能在创建对象之前工作,因为它只会影响本地字典.

python amazon-s3 boto

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

Python dict文字是否会按照它编写的顺序进行评估?

假设我在Python中遇到过这样的情况:

_avg = {'total':0.0, 'count':0}    # HACK: side-effects stored here

def procedure(n):
  _avg['count'] += 1
  _avg['total'] += n
  return n

def get_average():
  return _avg['total'] / _avg['count']

my_dict = {
  'key0': procedure(0),
  'key2': procedure(2),
  'key1': get_average()
}
assert(my_dict['key1'] == 1.0)
Run Code Online (Sandbox Code Playgroud)

我知道顺序my_dict.keys()是未定义的,但我想知道的是,通过像这样的文字的初始化是否保证以特定的顺序发生.总值是否my_dict['key1']会被1.0断言?

python dictionary

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

什么是"非弱归零参考"

在OS X v10.11 beta发行说明中,我发现以下内容:

NSNotificationCenter和NSDistributedNotificationCenter不再向可能已解除分配的已注册观察者发送通知.如果观察者能够存储为归零弱引用,则底层存储将观察者存储为归零弱引用.或者,如果对象不能被弱存储(因为它具有会阻止运行时能够弱存储对象的自定义保留/释放机制),则该对象被存储为非弱的归零引用.这意味着观察者不需要在他们的释放方法中取消注册.[强调我的]

这对我来说没有意义.如果它是一个非弱参考,那么它不是一个强大的参考吗?因此,NSNotificationCenter仍然是所有者,因此该对象不会解除分配(直到手动取消注册),因此在此上下文中说它是"归零"是没有意义的.

如果这是指某种__unsafe_unretained参考,那么问题是......那么NSNotificationCenter如何避免传播僵尸?

cocoa memory-management objective-c nsnotificationcenter osx-elcapitan

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

将Google Cloud功能验证为其他Google API上的服务帐户

我有一个在Google Cloud Functions上运行的HTTP触发功能,require('googleapis').sheets('v4')用于将数据写入文档电子表格.

对于本地开发,我通过其开发人员控制台的" 服务帐户"部分添加了一个帐户 我下载了令牌文件(下面的dev-key.json)并用它来验证我对Sheets API的请求,如下所示:

var API_ACCT = require("./dev-key.json");
let apiClient = new google.auth.JWT(
  API_ACCT.client_email, null, API_ACCT.private_key,
  ['https://www.googleapis.com/auth/spreadsheets']
);

exports.myFunc = function (req, res) {
  var newRows = extract_rows_from_my_client_app_request(req);
  sheets.spreadsheets.values.append({
    auth: apiClient,
    // ...
    resource: { values:newRows }
  }, function (e) {
    if (e) res.status(500).json({err:"Sheets API is unhappy"});
    else res.status(201).json({ok:true})
  });
};
Run Code Online (Sandbox Code Playgroud)

用我的服务帐户的"电子邮件地址"分享我的电子表格后,例如local-devserver@foobar-bazbuzz-123456.iam.gserviceaccount.com- 它有效!

但是,当我将其部署到Google Cloud Functions服务时,我想知道是否有更好的方法来处理凭据?我的代码可以自动验证自身,而无需将JWT密钥文件与部署捆绑在一起吗?

我注意到FUNCTION_IDENTITY=foobar-bazbuzz-123456@appspot.gserviceaccount.com我的函数运行时设置了一个环境变量,但我不知道如何在auth我的googleapis调用的值中使用它.该代码google.auth.getApplicationDefault不使用.

将私有JWT令牌与我的GCF代码一起上传是否可行?或者我应该以某种方式使用元数据服务器?或者云端功能是否已经可以通过内置方式对其他Google API进行身份验证?

authentication node.js google-cloud-functions

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

如何将@数组分配给bash中的另一个变量?

在如何在 Bash 中复制数组的答案中?,将数组从一个变量复制到另一个变量的解决方案是arrayClone=("${oldArray[@]}")。

但是,如果我需要复制的数组是参数列表怎么办@?

一个简单的测试脚本,例如:

#! /bin/bash

argsCopy=("${@[@]}")
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

第 3 行:${@[@]}:错误替换

arrays variables bash

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

C 是否提供了运算符来检查类型的符号性?

如果我使用的库当前使用特定的数字类型别名,例如

\n\n
typedef uint32_t library_type;\n\nvoid library_function(library_type x);\n
Run Code Online (Sandbox Code Playgroud)\n\n

即使库更改了其 typedef,我如何确保需要传入不同类型的值的代码保持正确?

\n\n
uint64_t x = get_some_number();\n\n// \xe2\x80\xa6need checks here\xe2\x80\xa6\n\nlibrary_function((library_type)x);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以添加以下检查:

\n\n
assert(sizeof library_type >= sizeof uint32_t);\nassert(x <= UINT32_MAX);\n
Run Code Online (Sandbox Code Playgroud)\n\n

第二次检查将确保我得到的值符合当前 的范围library_type。库作者没有提供LIBRARY_TYPE_MAX定义,因此第一个检查试图保护第二个,以防万一library_type将来编译代码时因任何原因发生更改。

\n\n

第一次检查会捕获 if library_typewere 更改为 eg int8_t,但如果 thelibrary_type更改为 anint32_t该怎么办?它仍然是正确的“尺寸”,但范围仍然小于我正在检查的范围!

\n\n

C 语言是否提供了一个运算符来内省类型的符号性,就像sizeof让我知道宽度一样?有没有其他方法可以确保library_type只有在正确的情况下才能达到我的演员表?

\n

c unsigned signed casting typedef

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

获取一段时间间隔的内存高水位线

我正在尝试获取长时间运行的 Linux 进程在短时间内使用的最大内存量。例如,类似:

resetmaxrss(); // hypothetical new command
void* foo = malloc(4096);
free(foo);
getrusage(...); // 'ru_maxrss' reports 4096 plus whatever else is alive

resetmaxrss();
void* bar = malloc(2048);
free(bar);
getrusage(...); // 'ru_maxrss' reports 2048 + whatever, *not* 4096
Run Code Online (Sandbox Code Playgroud)

我发现并排除的选项:

  • getrusage的最大 RSS 无法重置。
  • cgmemtimewait4似乎在幕后使用,因此在进程运行时查询进程是不可行的。
  • tstime报告退出进程,因此在进程运行时查询进程也是不可行的。

其他选项,但都不好:

  • 轮询。很容易错过我们的简短分配。
  • 检测我们的代码。我们无法访问所有正在使用的内存分配器,因此这不会非常优雅或简单。为了准确性,我还宁愿使用操作系统报告的值。

除了提出 Linux 内核补丁之外,有没有办法做到这一点?

linux memory memory-management

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

何时"等待"同时解决?

异步功能的MDN文档目前提供了以下两种使用方法的组合示例await.我重新安排了它的重点:

function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}


async function add1(x) {
  const a = await resolveAfter2Seconds(20);
  const b = await resolveAfter2Seconds(30);
  return x + a + b;
}

async function add2(x) {
  const p_a = resolveAfter2Seconds(20);
  const p_b = resolveAfter2Seconds(30);
  return x + await p_a + await p_b;
}


add1(10).then(v => {
  console.log(v);  // prints 60 after 4 seconds.
});

add2(10).then(v => {
  console.log(v);  // prints 60 …
Run Code Online (Sandbox Code Playgroud)

javascript async-await es2017

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