以facebook的私人消息系统为例,您必须跟踪消息内容的发送方和接收方.如果我使用的是MySQL,我会有多个表,但是对于MongoDB,我会尽量避免这一切.我正在努力想出一个可以扩展并且易于维护的"好"模式.如果我使用的是mysql,我会有一个单独的表来引用用户和消息.见下文 ...
个人资料表
user_id
first_name
last_name
Run Code Online (Sandbox Code Playgroud)
消息表
message_id
message_body
time_stamp
Run Code Online (Sandbox Code Playgroud)
user_message_ref表
user_id (FK)
message_id (FK)
is_sender (boolean)
Run Code Online (Sandbox Code Playgroud)
使用上面列出的模式,我可以查询"Bob"可能拥有的任何消息,无论他是收件人还是发件人.
现在,如何将其转换为适用于MongoDB的模式.我想我会有一个单独的集合来保存消息.问题是,我如何区分发件人和收件人?如果Bob登录,我该查询什么?根据Bob是否发起了电子邮件,我不想查询"发件人"和"收件人"只是为了查看该邮件是否属于该用户.
我点击了MongoDB的消息组,并找到了可能有用的东西.每条消息都将被视为"博客"帖子.创建消息时,将两个用户(无论最初发送者/接收者最初)添加到数组中.之后的每个响应都将被视为注释,该注释将插入到数组中.
{
"_id" : <objectID>,
"users" : ["bob", "amy"],
"user_msgs" :
[
{
"is_sender" : "bob",
"msg_body" : "Hi Amy, how are you?!",
"timestamp" : <generated by Mongo>
}
{
"is_sender" : "amy",
"msg_body" : "Bob, long time no see, how is the family?!",
"timestamp" : <generated by Mongo>
}
]
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以查询涉及"Bob"的消息,并循环访问"user_msgs"数组.我将能够告诉发件人是谁,并按时间戳排序.
我有以下javascript:
$('#ge-display').click(function (event) {
window.open('/googleearth/ge-display.php','','scrollbars=yes,menubar=no,height=650,width=1000,resizable=yes,toolbar=yes,location=no,status=no');
event.stopPropagation();
return false;
});
Run Code Online (Sandbox Code Playgroud)
ID为'ge-display'的元素是标准链接:
<a href="/googleearth/ge-display.php" id="ge-display" target="_blank">Load Google Earth Plugin (in a new window)</a>
Run Code Online (Sandbox Code Playgroud)
问题是 - 当我拿出'return false;'时 来自click事件处理程序的行,javascript弹出窗口打开,然后另一个浏览器窗口打开 - 我以为stopPropagation()会阻止链接自己的点击处理程序?
我也尝试过stopImmediatePropagation() - 但我仍然需要返回false来停止链接的默认行为.
有markdown.js将markdown转换为HTML,PHP Markdown将markdown转换为HTML和从HTML转换.我的问题是,有没有JavaScript库将HTML转换为markdown?
我一直在努力开始进行单元测试,同时开发一个小的cli程序.
我的程序基本上解析命令行参数和选项,并决定调用哪个函数.每个函数都对数据库执行一些操作.
所以,例如,我可能有一个创建函数:
def create(self, opts, args):
#I've left out the error handling.
strtime = datetime.datetime.now().strftime("%D %H:%M")
vals = (strtime, opts.message, opts.keywords, False)
self.execute("insert into mytable values (?, ?, ?, ?)", vals)
self.commit()
Run Code Online (Sandbox Code Playgroud)
我的测试用例应该调用这个函数,然后执行select sql来检查是否输入了行?这听起来很合理,但也使测试更难维护.你会重写函数来返回一些东西并检查返回值吗?
谢谢
在某些情况下,如何处理类似于以下类的所有异常?
class Test : IDisposable {
public Test() {
throw new Exception("Exception in ctor");
}
public void Dispose() {
throw new Exception("Exception in Dispose()");
}
~Test() {
this.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它不起作用:
static void Main() {
Test t = null;
try {
t = new Test();
}
catch (Exception ex) {
Console.Error.WriteLine(ex.Message);
}
// t is still null
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用"使用"但它不处理从~Test()抛出的异常;
static void Main() {
try {
using (Test t = new Test()) { }
}
catch (Exception ex) {
Console.Error.WriteLine(ex.Message);
} …Run Code Online (Sandbox Code Playgroud) 基本上我只是想检查一个时间段是否与另一个时间段重叠.空结束日期表示无穷大.任何人都可以为我缩短这个,因为它很难阅读.干杯
public class TimePeriod
{
public DateTime StartDate { get; set; }
public DateTime? EndDate { get; set; }
public bool Overlaps(TimePeriod other)
{
// Means it overlaps
if (other.StartDate == this.StartDate
|| other.EndDate == this.StartDate
|| other.StartDate == this.EndDate
|| other.EndDate == this.EndDate)
return true;
if(this.StartDate > other.StartDate)
{
// Negative
if (this.EndDate.HasValue)
{
if (this.EndDate.Value < other.StartDate)
return true;
if (other.EndDate.HasValue && this.EndDate.Value < other.EndDate.Value)
return true;
}
// Negative
if (other.EndDate.HasValue)
{
if (other.EndDate.Value > this.StartDate)
return …Run Code Online (Sandbox Code Playgroud) 我的Android应用程序使用密钥生成令牌以进行身份验证.是否有更安全的方式来存储它,而不仅仅是将它放在数据存储中?我认为对于iPhone,我们将它存储在钥匙串中.我知道android.accounts.AccountManager,但这似乎给其他应用程序提供了访问密码的能力(如果用户选择了错误的选项),因此似乎不太安全.
如果您运行的是具有更高DPI设置的Windows,您会注意到桌面上的大多数应用程序图标看起来都很糟糕.甚至一些高调的应用程序图标(如Google Chrome)看起来也很糟糕,而Firefox,Skype和MS Office图标看起来很清晰:
(例)
我怀疑大多数图标看起来都很模糊,因为较低分辨率的图标会按比例放大而不是使用更高分辨率的图标.
我想给我的应用程序一个高质量的图标,似乎无法说服Windows使用更高分辨率的图标.我用图标编辑器IcoFX创建了一个多分辨率图标.该图标以16x16,24x24,32x32,48x48,128x128和256x256(!)提供(全部为32位,包括alpha通道),但Windows似乎使用桌面上48x48版本的图标并将其放大,看起来很糟糕.(我使用的是Windows 7 - 64位 - 通过在msi中设置快捷方式(通过Visual Studio 2008安装项目创建)并将其指向包含多分辨率图标的.ico文件来放置图标)
我试过删除128x128图标,但无济于事.有趣的是,在Windows资源管理器中,即使使用"超大图标"设置,图标看起来也很棒.如何创建高质量的桌面图标,在Windows上更高的DPI设置上看起来很棒?
编辑:我测试删除128x128选项,然后是48x48和128x128选项,并尝试Axialis IconWorkshop创建图标 - 没有任何工作.
编辑:经过多次试验和错误我认为这里的真正问题是Visual Studio 2008安装项目 - 手动设置我的可执行文件的链接正确使用高分辨率图标,但是安装程序创建的链接不使用正确的图标.在编辑器中设置链接的图标时,它只给我一个选项(索引0),它似乎是48x48图标.我试过手动调整.vdproj中的IconIndex,但没有运气.
我正在处理一个使用struts 1.2的旧应用程序.出于某种原因,我们使用纯html表单提交struts动作.例如:
对于testAction.do的内容输出,我尝试提交给自己.
第1项第2项然后我将表单bean TestForm与testAction相关联.
我不确定如何在表单中指定属性,以便在用户单击"提交"后从myitem1获取值
我试图添加getMyitem1(),setMyitem1(字符串[]项),getSelectedMyitem1(),setSelectedMyitem1(字符串[]项)
只有在加载页面时才会调用这些set方法.
我想我对struts 1.x中的ActionForm的理解一定是错的.
请指教,谢谢.
如何将jQueryUI样式应用于asp:Button.这是问题:jqueryUI按钮要求您具有以下格式<button>Test button</button>
当我尝试使用asp按钮服务器控件时<asp:Button />,asp:Button呈现为<input type=button>Test button </input>
更新:我得到了jquery提供的标准按钮样式.然而,当我想打一个工具栏出来,就像这个例子:http://jqueryui.com/demos/button/#toolbar,标准的asp:按钮失效我....或者也许我失去了一些东西.提前致谢,
Sashidhar Kokku