我对Objectify很新,我有一个快速的问题,要求做最好的方法:
假设我有一个允许人们发送和接收消息的应用程序(为简单起见,请考虑发送电子邮件).当我的应用加载时,我不想从每个发送消息给给定用户的联系人加载每条消息.那将是一种浪费.相反,我想加载用户有消息的所有联系人(读取或未读取),以便我可以在我的应用程序上显示联系人列表,当用户点击给定联系人时我想加载所有来自该联系人的消息显示给用户.
如果不加载帐户的所有消息,我找不到一个好方法.我在多对一关系中阅读了Objectify wiki,我仍然想不出一个不是非常低效的好方法.客观化网站推荐的方式似乎是,我必须为给定用户加载所有消息,然后解析它们以寻找唯一的联系人.
我正在尝试使用尽可能少的App Engine读取和写入,并尽可能地尝试使用Smalls而不是Reads(运行我的应用程序的总体成本是我的一个大问题,而我正在制作这个) .
在Objectify,我该怎么做?
Android 4.4 KitKat中提供的新Android Transition框架是迄今为止我见过的最长时间用于Android的最酷的东西之一.作为开发人员,我最近转而开发sdk 14(ICS),这意味着我还有几年没有使用这些令人敬畏的新功能.
是否有任何人的消息,甚至谷歌自己为这些令人敬畏的功能创建了一个后端口?
几年前,当我第一次采用Gradle for Android(在Gradle 2.0之前)时,我发现使用并依赖于模块有一些开销,所以我没有将我的项目分成更小的模块,而是创建了非常大的模块.在尝试了一些其他构建系统(例如Buck)之后,通过将代码分成多个小模块来获得性能.像Kotlin这样的一些现代编程语言甚至还具有可见性修饰符,这些修饰符专门围绕将代码分割为模块的概念而构建.
我们目前处于Gradle 2.14.1(差不多3.0),在过去的几个版本中,他们引用了大量的性能提升.随着过去几年对Gradle/Android插件的更改,现在它是否会生成更快的构建,以将代码拆分为更小的模块,或者使用更少的大型模块?
我的团队使用github和sourcetree来管理我们的工作流程.我们最近开始尝试使用github的壁球融合功能.我们真的很喜欢它如何保持我们的工作历史整洁,并且每个PR基本上只有一次提交.
使用squash提交的意外缺点之一是很难判断何时可以删除本地分支.我的整个团队似乎管理他们的本地分支,因为他们能够在提交图中直观地看到它已被合并,并且每隔几天我们将逐一查看我们的本地分支,看看他们是否已经合并,然后如果它有本地删除它.启用压缩合并会消除此可视化,并使我们很难判断分支是否已合并.
我们真的想使用壁球提交功能,但我们需要一种可靠的方法来确定分支是否已合并,并且可以安全地在本地删除.我们有没有想过要实现这个目标的好方法?
安装 jpackage 应用程序后,如何允许我的用户升级应用程序而不需要他们重新运行安装程序?我有哪些选项可以让用户升级?
一个理想的场景是底层 jar 将在运行时换出,并且应用程序将在同一进程中重新启动。我想这可能是不可能的吗?
所以我本周末花了很多时间在Mortar和Flow上,我想我终于完成了大部分工作.我发现它比我原先想象的要复杂一点,主要是因为我还没有完全理解Dagger的ObjectGraph Scoping,Mortar非常依赖它.我在Dagger的网站上已经阅读了尽可能多的内容,但是我发现这个主题的信息在与Dagger特别相关时缺乏.
所以我有几个问题:1.我看到他们对@ Singleton的范围的例子:
@Layout(R.layout.screen_friend)
public class FriendScreen implements Blueprint {
@Override public String getMortarScopeName() {
return getClass().getName();
}
@Override public Object getDaggerModule() {
return new Module();
}
@dagger.Module(
injects = FriendView.class
)
static class Module {
}
@Singleton
public static class Presenter extends ViewPresenter<TestView> {
@Inject
public Presenter() {
Log.d("FriendScreen", "Friend Presenter Created");
}
@Override protected void onLoad(Bundle savedInstanceState) {
super.onLoad(savedInstanceState);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Presenter是否专门针对此模块,因为它是一个内部类?2.如何确保仅在此对象图中创建它的实例而不是全局应用程序对象图?2.如果演示者太大了,我想把它移到它自己的独立课程怎么办?我如何将其范围仅限于此模块?3.我注意到他们示例中的某些Module类是静态的,而其他类则不是.这对范围界定有什么影响吗?4.我在哪里可以阅读更多内容以更好地理解Dagger的对象图.我需要更好地理解includes,inject,addsTo以及如何在ObjectGraph创建中使用它们等:
@dagger.Module( //
includes = ActionBarModule.class,
injects = MainView.class,
addsTo = ApplicationModule.class, //
library …Run Code Online (Sandbox Code Playgroud) 从play的文档:
由于Play 2.0的工作方式,动作代码必须尽可能快(即非阻塞).那么如果我们还不能生成它,我们应该返回什么呢?回应是对结果的承诺!
所以我不应该直接在动作内部进行数据库调用.当我查看Plays JPA文档时,这让我感到困惑:
每个JPA调用都必须在事务中完成,因此,要为特定操作启用JPA,请使用@ play.db.jpa.Transactional对其进行注释.这将使用JPA Action组成您的操作方法,该操作为您管理事务
这让我有点困惑.如果我遵循文档,我不应该使用数据库调用阻止操作线程.但是,如果操作是创建和管理数据库事务的,那么我是不是通过将工作发送给actor或者以某种方式将工作卸载到另一个线程来丢失该事务?我的意思是,我是scala和play的新手,但我只是看不到事务如何跟随单独的线程.有没有人有解释,或者我应该这样做的方式?我很困惑.
我是XCode和Objective C/Swift的新手.我正在尝试制作一个不依赖于可可或任何东西的Swift库项目.所以它只是Swift文件.我应该创建什么类型的项目(我假设有多种方法可以执行此操作?我如何配置项目以便将其构建为.so文件?最后,如何将其构建为.so文件?那文件?
我正在使用Xcode6-beta.
使用Gradle管理Android的依赖关系是以一种奇怪的方式完成的.它们必须以不同方式下载到本地仓库中.设置CI构建时很难,因为可以运行多个节点.因此我使用sdk-manager-plugin在构建时下载Android依赖项.似乎有一个旧的错误,我正在使用sdk-manager-plugin,但它会在构建时下载依赖项,但它们将无法在该命令上使用.
下次运行该命令时一切正常(因为所有内容都已下载),但是我需要找到一种方法来忽略第一个gradle命令的构建失败,以便下载所有内容并且第二个好.我意识到这很糟糕,但我已经搞砸了这个.
理想情况下这样的事情会起作用:
./gradlew clean --ignoreBuildFailures
./gradlew distributeCIBuild
Run Code Online (Sandbox Code Playgroud)
我在Gradle文档中找到的最接近的东西是--quite,但看起来它不起作用.
任何创意解决方案欢迎
我正在使用libgdx和box2d作为我的物理引擎.现在我只需要在一个平面上控制一个非常简单的盒子:
一切似乎都运作良好.我用箭头键控制盒子.如果我按向右箭头,框会加速到右边.当我按向上箭头时,框会跳跃.出乎意料的是,当盒子跳跃时,它的x速度会减慢.任何人都可以告诉我为什么会这样,以及如何解决它?
只有一些Box2d设置的播放器对象:
public class Player extends Entity {
private static BodyDef createBodyDef() {
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.fixedRotation = true;
bodyDef.position.set(100, 200);
return bodyDef;
}
public Player(World world) {
super(world, createBodyDef(), Textures.rectangle(Units.m2P(0.7f), Units.m2P(2f), Color.RED));
FixtureDef fixtureDef = new FixtureDef();
PolygonShape shape = new PolygonShape();
shape.setAsBox(50, 50, new Vector2(50, 50), 0f);
fixtureDef.shape = shape;
fixtureDef.friction = 0.1f;
getBody().createFixture(fixtureDef);
MassData massData = new MassData();
massData.mass = 90f;
getBody().setMassData(massData);
}
}
Run Code Online (Sandbox Code Playgroud)
游戏画面:
public class GameScreen extends BaseScreen …Run Code Online (Sandbox Code Playgroud)