小编All*_*len的帖子

从数据存储区查询大量ndb实体的最佳实践

我在App Engine数据存储区遇到了一个有趣的限制.我正在创建一个处理程序来帮助我们分析一个生产服务器上的一些使用数据.为了执行分析,我需要查询和汇总从数据存储中提取的10,000多个实体.计算并不难,它只是通过使用样本的特定过滤器的项目的直方图.我遇到的问题是,在达到查询截止日期之前,我无法快速从数据存储区中获取数据以进行任何处理.

我已经尝试了所有我能想到的将查询分块到并行RPC调用以提高性能,但根据appstats我似乎无法让查询实际并行执行.无论我尝试什么方法(见下文),似乎RPC总是回到顺序下一个查询的瀑布.

注意:查询和分析代码确实有效,它只是运行缓慢,因为我无法从数据存储中快速获取数据.

背景

我没有可以分享的实时版本,但这里是我正在谈论的系统部分的基本模型:

class Session(ndb.Model):
   """ A tracked user session. (customer account (company), version, OS, etc) """
   data = ndb.JsonProperty(required = False, indexed = False)

class Sample(ndb.Model):
   name      = ndb.StringProperty  (required = True,  indexed = True)
   session   = ndb.KeyProperty     (required = True,  kind = Session)
   timestamp = ndb.DateTimeProperty(required = True,  indexed = True)
   tags      = ndb.StringProperty  (repeated = True,  indexed = True)
Run Code Online (Sandbox Code Playgroud)

您可以将样本视为用户使用给定名称功能的时间.(例如:'systemA.feature_x').标签基于客户详细信息,系统信息和功能.例如:['winxp','2.5.1','systemA','feature_x','premium_account']).因此,标签形成一组非规范化的标记,可用于查找感兴趣的样本.

我试图做的分析包括获取一个日期范围,并询问每个客户帐户(公司,而不是每个用户)每天(或每小时)使用的功能集(可能是所有功能)的特征次数.

因此处理程序的输入类似于:

  • 开始日期
  • 结束日期
  • 标签(S)

输出将是:

[{
   'company_account': <string>,
   'counts': [
      {'timeperiod': <iso8601 date>, …
Run Code Online (Sandbox Code Playgroud)

google-app-engine app-engine-ndb google-cloud-datastore

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

ng2:如何在ngFor循环中创建变量

我试图找出如何在ngFor循环中创建变量.

我有一个像这样的循环:

<td *ngFor="#prod of products">
  <a href="{{getBuild(branch,prod)?.url}}">
    {{getBuild(branch,prod)?.status}}
   </a>
</td>
Run Code Online (Sandbox Code Playgroud)

您可以看到"getBuild"调用必须多次重复.(在我的实际例子中多次).我想在循环中一次在模板中创建这个变量并简单地重用它.有没有办法做到这一点?

ngfor angular

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

在github上的fork中跟踪上游的最佳实践

简介:在您希望维护一组本地更改的情况下,处理上游存储库的长时间跟踪的最佳实践是什么?

我想在github上保持与上游最新的分支,但仍然允许清楚地跟踪fork的特有变化.(对于此讨论,假设upstream指向主项目存储库并且origin指向我的存储库的fork)

想象一下,我有类似这样的东西,当上游/主人在E时我分叉了一个存储库.

Upstream:
A-B-C-D-E-F


Fork:    
A-B-C-D-E ----- P ------T
         \-L-M-/ \-Q-R-/
Run Code Online (Sandbox Code Playgroud)

在分配存储库后,我创建了两个功能分支(LM和QR)来添加我需要的新功能,并将它们合并回我的origin/master.所以现在我的分支机构有了上游不存在的改进.

我发现上游有一些有趣的修复,所以我想重新与上游同步.基于我发现的大多数引用(git hub fork),推荐的方法是将upstream/master合并到你的origin/master中并继续前进.所以我会发出如下命令:

git checkout master
git fetch upstream
git git merge upstream/master
git push
Run Code Online (Sandbox Code Playgroud)

然后我最终会得到如下所示的存储库:

Upstream:
A-B-C-D-E-F


Fork:    
A-B-C-D-E ----- P ------T-F'
         \-L-M-/ \-Q-R-/
Run Code Online (Sandbox Code Playgroud)

虽然我看到了一些问题.

  1. 我实际上并没有在我的仓库中提交F,我有F',它具有相同的内容,但是有一个不同的哈希.所以我不能轻易引用两个存储库之间的提交,并知道我有一个更改.(当考虑到上游可能有多个更改并且拥有已经合并的自己的一组功能分支时,它会变得更加复杂)

  2. 当我继续前进并继续这样做时,我越来越难以知道我的存储库中的更改超出了上游的更改.例如,我可以向上游提交一些这些更改,同时继续添加我自己的改进.经过几次迭代后,任何查看我的存储库的人如何知道它与上游的区别?(是否有一个git命令来查找这些更改?)

  3. 与#2类似,有人会如何在上游找到修复程序并检查我的fork是否包含修复程序?

我想问题的根源是我无法保证我的存储库在任何给定点与上游"同步",因为代码和散列不一样.那么我该如何准确地跟踪变化并避免疯狂地试图让事情保持同步?

注意:我曾考虑使用rebase来保持我的存储库在上游的重新定位,但这有一组完全不同的问题.例如,如果有人通过子模块,分支等引用我的存储库,那么历史记录重写将破坏它们的引用.另外,我不认为我的分支历史可以在rebase中存活,所以我不会完整地查看我所做的所有功能分支以及相关的历史记录.

别人怎么处理这个?我应该研究哪些最佳实践?


更新:

根据Seth的反馈,我创建了一组测试存储库,以显示我所谈论的内容以及它如何按照他说的方式工作.

存储库是:

当局部变化时,他们应该更清楚地显示出来自上游的合并情况.

git github git-merge

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

有没有HTML5/Canvas窗口系统库(ala Qt,WxWidgets等)?

随着广泛的HTML5支持和Canvas支持的开始,似乎有人可以为RIA创建桌面式窗口系统库.类似于Qt或WxWidgets的东西.所有必需的部分似乎都在那里(运行时语言:javascript,像素绘图:画布,甚至是带有SVG的矢量绘图).

无论如何,对我来说这似乎是RIA易于开发的巨大飞跃.忘记经典的HTML和样式,只需像在桌面应用程序中一样创建小部件.

我已经在网上搜索了很长一段时间,并且找不到任何可以跳出来的符合此描述的内容.我错过了什么或者那里没有这样的东西吗?

javascript html5 qt canvas

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

Git功能分支和次要代码改进

我们刚刚开始使用git作为我们的生产代码,我们在工作流程中遇到了一个小问题.我们需要弄清楚如何处理在处理功能时出现的一般代码改进/技术债务修复.

我们采用的工作流程是使用"develop"作为主要的集成分支,并在"develop"之外的特征分支上开发所有功能.当一个功能完成后,开发人员会创建一个拉取请求,每个人都会检查它以在合并回到开发之前提供注释.这看起来效果很好.

我们遇到的问题是,在一个功能的例行开发过程中,开发人员可能最终想要修改/重构一些通用代码来改进系统或清理一些技术债务.此更改很有价值,但与开发中的功能没有直接关系.

根据我们的工作流程,它应该真正在不同的分支上完成,在开发之前通过它自己的pull请求和代码审查.如果我们让他们这样做,他们如何在他们等待完整的代码审查发生并将代码合并到开发中的同时将更改重新转换到他们的功能分支.

我们的想法是:

1)樱桃挑选从'refactorX'分支到我们的特征分支的变化.继续开发并让git(希望)弄清楚当我们合并回来开发它已经从重构分支的变化.

2)将'refactorX'分支合并到我们的功能分支中并继续开发.(注意:'refactorX'的分支开发可能是在开发历史的后期,所以我们认为这可能有问题)

3)我们还不知道其他一些更聪明的选择.:)

我们正在寻找的是关于如何处理这部分工作流程的最佳实践指南.在谈论它之后,我们知道它会频繁出现,我们希望在我们的工作流程中找到一种平稳有效的方法来处理它.

有什么建议?

git workflow refactoring branch git-flow

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

是否可以为单个车把模板注册帮助器?

我想创建一个把手模板,并使用本地助手只为该单个模板.我知道如何使用Handlebars.registerHelper为所有模板注册帮助器,但我只需要本地模板.(类似于ExtJS支持的XTemplates)

例如基于handlebars.js文档的这样的东西:

var context = { posts: [{url: "/hello-world", body: "Hello World!"}] };
var source = "<ul>{{#posts}}<li>{{{link_to this}}}</li>{{/posts}}</ul>"

var template = Handlebars.compile(source, {
   link_to: function(context) {
       return "<a href='" + context.url + "'>" + context.body + "</a>";
   }
);
template(context);
Run Code Online (Sandbox Code Playgroud)

这是可能的还是所有帮助者都必须在全球注册?

handlebars.js

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

Gulp任务管道只有在源文件发生变化时才会连接

我有一个生成连接的JS文件的gulp任务.我使用手表来检测项目中所有文件的更改,并希望concat任务只在源文件自上次执行后发生更改时才重新连接文件.

注意:我可以使用更具体的监视命令,但在我的实际生产情况下,我们从多个源JS文件组合生成多个连接的JS文件,因此为每个组件创建监视和任务要复杂得多

像这样的东西:

gulp.task('scripts', function() {
   return gulp.src('src/**/*.js')
      .pipe(cache('scripts'))
      // If no changed files in pipeline, exit pipeline, 
      // else add in all src files again
      .pipe(concat('app.js'))
      .pipe(gulp.dest('build/'));
});
Run Code Online (Sandbox Code Playgroud)

我考虑过最后两个步骤使用lazypipe所以我只运行concat和dest如果有文件,但我不知道如何:

  • 根据管道中是否还有任何文件运行条件(缓存()之后
  • 带回所有源文件(基本上重新发布gulp.src()再次重新编译流)

我知道我可以使用gulp-remember用于第二部分,但在我的生产情况下,如果可能的话,重建流将更加清晰.

以前做过这个的人还是有任何关于从哪里开始的提示?

gulp gulp-watch

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

Jenkins节点可以优先用于构建作业

我在jenkins中有一组构建作业,可以在3个构建节点中的任何一个中运行.它们都标有"ubuntu_build"的通用标签.每个节点都有许多执行程序,因此允许一些构建在一台机器上并行执行.设置运行正常并按预期进行,但我想改进它.

3个构建节点具有不同的性能.第一个是第二个的两倍,速度是第三个的两倍.(称之为fast_node,regular_node,slow_node)

据我了解调度策略,下一次使用最后用于给定构建作业的机器.当有很多构建进行并且作业最后构建在slow_node上时,这有时会导致问题,因此即使fast_node有一些可以工作的执行器,它也会继续存在.

我想要的是一种说法,对于通过队列的任何工作,我希望它尝试在fast_node上找到空间,然后是regular_node,最后是slow_node.(即尝试继续使用可用的最快执行程序)

无论如何设置这样的东西?

jenkins

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

如何在HAProxy中查看tcp连接调试信息

我目前正在重构我们在生产服务器上使用的haproxy配置,以转发来自中央服务器的TCP流量.目标是让所有东西都使用docker容器来帮助提高部署可靠性.

到目前为止一切都进展顺利,但现在我有一些"监听"代理使用"模式tcp"似乎没有转发他们的流量.我认为问题出在SSL证书验证或转发到辅助服务器本身.

为了调试这个问题,我打开了所有syslog调试('debug'级别),并使用-d标志在调试模式下运行haproxy.这为所有传入的http流量提供了广泛的调试信息,但似乎没有给我任何TCP的东西.

缺少TCP转发的调试输出是我过去遇到过的,并没有找到任何方法来获取更多细节.

是否有一些魔术标志,配置或编译选项可用于查看TCP连接处理的完整细节?(例如:接受,握手,SSL证书验证,转发,超时等)

haproxy

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

是否可以使用python连接到Mobile Safari远程调试器协议?

我有一个在iOS上运行的基于HTML5的应用程序,我想使用iOS5 2中现在支持的webkit远程调试器协议1连接到它.

我试图找出我的javascript应用程序很难崩溃浏览器(SEG_FAULT)的问题.我希望在执行时获得应用程序的跟踪,以便我可以看到可能导致问题的线路或网络操作.我目前的想法是编写一个python应用程序,它将连接到远程调试器,并在我与应用程序交互时继续逐步执行代码并将信息收集到日志文件中.

我遇到了一个初步障碍,但我找不到任何关于如何连接调试器和进行通信的示例或文档,或者即使有可能.

有谁知道这是否可行,如果是这样,你能指出我的一些文档和/或示例代码吗?


基于下面的代码,我在github上创建了一个项目来测试一些想法.你可以在这里找到它:abierbaum:/ python_webkit-remote_debugger

webkit remote-debugging mobile-safari uiwebview

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