我正在实现我的第一个同步代码.在我的情况下,我将为每个用户提供两种类型的iOS客户端,它们将使用lastSyncTimestamp一个64位整数将记录同步到服务器,该整数表示上一次同步的毫秒时间内的Unix时期.可以随时在服务器或客户端上创建记录,并通过HTTP将记录作为JSON进行交换.
我并不担心冲突,因为很少有更新,并且总是来自同一个用户.但是,我想知道是否有一些我需要注意的常见问题,基于时间戳的方法可能会出错,例如在夏令时期间同步,同步冲突或其他陷阱.
我知道git和其他一些版本控制系统避免与基于内容的协商同步方法的时间戳同步.我可以想象我的应用程序的这种方法,使用uuid或hash对象,两个对手宣布他们拥有的对象,然后交换它们直到两个对手具有相同的集合.
如果有人知道基于内容的同步与基于时间戳的同步的任何优点或缺点,那么这也是有帮助的.
编辑 - 以下是我为时间戳和基于内容的同步提出的一些优点/缺点.请挑战/纠正.
注意 - 我将基于内容的同步定义为两组对象的简单协商,例如,如果你给两个孩子们交换卡片的每个部分,那两个相同的两组棒球卡,并告诉他们看起来像他们一样通过他们宣布并将他们找到的任何副本交给另一方,直到他们都有相同的集合.
基于时间戳的同步的优点
基于时间戳的同步的缺点
基于内容的同步的优点
基于内容的同步的缺点
我有一个简单的离线html5/javascript单html文件Web应用程序,我存储在我的Dropbox中.这是我编写的一种时间跟踪工具,它将应用程序数据保存到本地存储.由于它是我自己使用的,我喜欢离线应用程序的便利性.
但是我有几台计算机,我一直试图想出任何一种hacky方式来同步我的各种机器之间的这个应用程序的数据(目前正在使用本地存储).
Chrome似乎允许数据同步,但仅适用于chrome扩展.我还以为我可以让网页自动保存/加载来自Dropbox文件夹中文件的数据,但似乎没有办法在没有用户提示的情况下自动与特定文件同步.
我认为"明显"的解决方案是将页面放在服务器上并将数据存储在数据库中.但是假设我不想要一个需要我在服务器上维护应用程序的解决方案 - 是否有另一种方法,无论如何hacky,凑齐同步?
我甚至找了一段时间看看是否有供应商提供网络数据库服务 - 我可以说,按需要发布/获取一小撮json,然后以某种方式让我的离线应用程序与此服务同步,但同样-origin政策似乎使该计划无效(此外我找不到这样的服务).
使用chrome,谷歌驱动器,Dropbox或其他一些我不知道的工具,是否有一个棘手/偷偷摸摸的解决方案?或者我是否设置了自己的服务器?
我一直在尝试制作一个将视频与动画对象连接起来的概念验证(实际上,我是将用户选择的位图"旋转"到特定位置的固定视频上).在观看了有关Core Animation(WWDC10等)和AVSync..Layer(Apple WWDC10示例代码,doc示例代码)的所有可用Apple资料后,根本没有足够明确的隔离代码示例来推导如何实现此正确播放模式.
使用CA,我有一个加载到CALayer中的视频资源,以及一个附加到位图的动画,然后连接到另一个CALayer.我创建了一个AVSynchronizedLayer并将这两个对象添加为子层.
当这个树被添加到UIView的图层属性时,我期望动画的播放与视频同步运行.相反,我只看到视频播放,动画永远不会执行 - 这里是我的代码的相关部分,它们都位于一个View Controller中(在ViewDidLoad中调用).
Video101.m4v =简单的m4v视频,gerald.png =位图
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"Video101" withExtension:@"m4v"];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *player = [[AVPlayer playerWithPlayerItem:playerItem]retain];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = CGRectMake(0, 0, 1024, 768);
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
CALayer *gerald = [CALayer layer];
gerald.frame = CGRectMake(0, 0, 120, 120);
gerald.contents = (id) [UIImage imageNamed:@"gerald.png"].CGImage;
[self.view.layer addSublayer:playerLayer];
[self.view.layer insertSublayer:gerald above:playerLayer];
CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
anim.duration = 18.0;
anim.values = [NSArray …Run Code Online (Sandbox Code Playgroud) iCloud在哪里获取它在iCloud首选项中显示的应用程序名称?
Settings.app > iCloud > Storage & Backup > Manage Store > Documents & DataSystem Preferences > iCloud > Manage ...我知道iCloud会将应用程序列为"未知",最初会显示一个空白图标(这确实发生在我的情况下),但是我的应用程序现在通过其"内部"名称而不是"漂亮"名称出现在此列表中(包含iCloud的应用更新尚未提交,因此这更加奇怪).
我的直觉说该名称将被定义为我的应用程序中的部分CFBundleDocumentTypes或UTExportedTypeDeclarations部分,info.plist但iCloud使用的名称仅出现在那里的UTI值中.iCloud值也不匹配应用程序CFBundleDisplayName或配置门户中附加到App ID的描述.
我需要在我的Java应用程序中获取当前打开的Google Chrome用户标签(而不是在同一台计算机上).Chrome同步已启用,因此当前标签与Google服务器同步.
根据Chrome同步文档,它是通过XMPP完成的.所以我想应该可以连接到Google XMPP服务器(xmpp.google.com),例如通过Smack(XMPP的Java库),验证并监听指示标签会话更改的protobuf消息.当然,用户的登录凭据或Chrome用于标识客户端的"client_id"可用.
但是我很难掌握用于连接到XMPP服务器的身份验证方法 - 我无法弄清楚它是如何在Chromium 源代码中完成的,并且除了非常低级别的注释之外没有可用的文档.代码.谷歌使用的libjingle库基于XMPP的服务仅适用于C++,并且没有很好的维护/记录.
那么有没有人曾经做过类似的事情,谁可以提供有关身份验证过程如何工作的任何建议/提示?
我正在开发一个需要实现数据同步算法的应用程序.
我们将拥有一台主服务器和多个从属设备,这些设备需要同步在一起.
现在,我有三个算法,我想根据你们中的任何一个建议哪一个是最好的.我真的很感激你的意见.
这里可以找到算法的描述.这是韩国汉阳大学信息与通信部Sang-Wook Kim的科研论文.
2该算法涉及维护数据库的时间戳和版本号的记录
例如,如果一个人的移动设备和服务器上有版本v10,则v12是移动设备,假设移动设备上的当前时间戳与服务器上的时间戳相比较不新近,
如果我们用 - 表示删除,用+表示插入,用〜表示改变
以下更改日志与几个版本相关联:
v11:+ r(44),~r(45), - r(46)v12:-r(44),~r(45),+ r(47)
然后数据库的整体变化是,~r(45)(来自v12),+ r(47), - r(46)
因此可以看出,记录r(44),即使被添加,也随后被删除,不需要.因此,不需要传输冗余数据.
整个算法可以在这里找到(我把它放在pdf中)http://goo.gl/yPC7A
3这个算法有效 - 保留一个表,记录每条记录的最后一个更改时间戳.并保持行按时间戳排序.它只同步那些已经改变的行,这里唯一看到的是每次按表排序表到时间戳.
这是http://goo.gl/8enHO的链接
非常感谢您的意见!:d
我有两个git本地存储库.两者在不同的路径下以不同的名称共享相同的文件.目前,当我进行更改时,我必须将文件从一个目录复制到另一个目录.
是否有另一种方法可以保持同步而无需手动覆盖文件?我不想为此文件创建单独的存储库.我认为以下其中一项可行,但显然,它们不会:
那里还有什么?
在我的应用程序中,我使用的是联系人同步适配器,但它有很多与主应用程序共享的信息.有适配器需要工作的设置(如登录信息和用户更改任何同步设置),所以我目前在同一个进程中运行它,并与主ap通信使用getApplicationContext(),然后我有一些共享Application同步适配器在同步过程中使用的变量.
但是在培训文档和在线的一些教程中,示例适配器被设置为在其自己的进程中运行 - 它android:process=":sync"在清单中使用.这有必要吗?如果它确实在一个单独的进程中运行,我该如何与主应用程序进行通信?
我希望能够在我使用的所有机器上访问我的Greasemonkey脚本.我已经在Greasemonkey的设置对话框中启用了" 为用户脚本启用Firefox同步 "设置,但之后我读到它只同步外部托管的脚本.
然后我尝试使用以下方法设置同步:
%appdata%\Mozilla\Firefox\Profiles\<profile name>)移动到OneDrive文件夹.mklink /D gm_scripts "%userprofile%\SkyDrive\App Profile Synching\GreaseMonkey\gm_scripts"结果,我的脚本继续在原始机器中显示正常.但它们在第二台机器上根本没有显示出来.这似乎表明Greasemonkey在另一个位置有一些脚本列表.
如何解决此问题,或者有哪些其他方法可用于在多台计算机上同步我自己的Greasemonkey脚本?
我目前将Android应用设置为使用Android的AccountManager功能,使用SyncAdapter和经过身份验证的帐户自动执行同步.
我只有一个同步适配器运行,它同步所有内容,但我想将其分开,以不同的间隔执行不同内容的同步.
我如何拥有像Google这样的多个同步项?

sync ×10
ios ×3
android ×2
git ×2
algorithm ×1
animation ×1
cocoa ×1
contacts ×1
database ×1
firefox ×1
greasemonkey ×1
icloud ×1
info.plist ×1
javascript ×1
linux ×1
offlineapps ×1
unix ×1
uti ×1
video ×1
xmpp ×1