我在使用Python和SQLite进行日期存储/检索时遇到了设计问题.
我知道SQLite日期列将日期存储为ISO格式的文本(即'2010-05-25').因此,当我显示英国日期(例如,在网页上)时,我使用转换日期
datetime.datetime.strptime(mydate,'%Y-%m-%d').strftime('%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)
然而,当谈到将数据写回到表中时,SQLite非常宽容并且非常乐意存储'25/06/2003'在日期字段中,但这并不理想,因为
我可以在同一列中留下混合的日期格式,
SQLite的日期函数仅适用于ISO格式.
因此,我需要在提交之前将日期字符串转换回ISO格式,但是我需要一个通用函数来检查要在所有日期字段中写入的数据,并在必要时转换为ISO.这对我来说听起来有点乏味,但也许这是不可避免的.
有更简单的解决方案吗?是否更容易将日期字段更改为10个字符的字段并存储'dd/mm/yyyy'在整个表中?这样在从表中读取或写入时不需要转换,如果我需要执行任何日期算术,我可以使用datetime()函数.
其他开发人员如何克服这个问题?任何帮助,将不胜感激.为了记录,我在Python 3.1中使用SQLite3.
假设我有一个可以保存基类方法地址的指针类型.我可以为其分配子类方法的地址并期望它正常工作吗?在我的情况下,我使用它与基类指针,对象的动态类型是派生类.
struct B
{
typedef void (B::*MethodPtr)();
};
struct D: public B
{
void foo() { cout<<"foo"<<endl; }
};
int main(int argc, char* argv[])
{
D d;
B* pb = &d;
//is the following ok, or undefined behavior?
B::MethodPtr mp = static_cast<B::MethodPtr>(&D::foo);
(pb->*mp)();
}
Run Code Online (Sandbox Code Playgroud)
在讨论static_cast时,标准说明了这一点:
5.2.9.9类型"指向Cv1 T类型D的成员的指针"的rvalue可以转换为类型为"指向cv2 T类型B的成员的指针"的rvalue,其中B是D的基类(第10节),如果a从"指向T类型B的成员的指针"到"指向T类型D的成员的指针"的有效标准转换存在(4.11),并且cv2与cv1具有相同的cv资格,或者更高的cv资格.63)空成员指针值(4.11)被转换为目标类型的空成员指针值.如果类B包含原始成员,或者是包含原始成员的类的基类或派生类,则指向成员的结果指针指向原始成员.否则,演员的结果是不确定的.[注意:虽然B类不需要包含原始成员,取消引用成员指针的对象的动态类型必须包含原始成员; 见5.5.]
和往常一样,我很难破译标准.它有点说没关系,但我不能100%确定上述文本是否真的适用于我的示例代码中的情况.
我在编写jQuery插件时尝试qunit,我想知道如何测试以下内容:
(function($){
$.fn.myPlugin = function(options){
var defaults = {
foo: function(){
return 'bar';
}
};
options = $.extend(defaults, options);
return this.each(function(){ ... });
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
这是我的qunit测试的简单版本:
module('MyPlugin: Configuration');
test('Can overwrite foo', function(){
var mockFoo = function(){
return 'no bar';
};
//equals(notsure.myPlugin({ foo: mockFoo }, 'no bar', 'Overwriting failed');
});
Run Code Online (Sandbox Code Playgroud)
所以我想知道如何在我的测试中从我的插件中公开内部方法/成员?
我已经阅读过多篇帖子,但它对我来说不起作用.我正在使用最新的4.2 SDK.
我的代码是
self.tableView.contentOffset = CGPointMake(0.0, 44.0);
Run Code Online (Sandbox Code Playgroud)
这部分工作,它会将搜索栏向上移动一点点,但它不会完全隐藏.我已经尝试将值44增加到更高的值,这对以前没有任何影响!我在表的视图控制器的viewDidLoad方法中调用此代码.有没有人有任何想法?
例如,从英语翻译成法语
submit:
create: 'Create %{model}'
update: 'Update %{model}'
submit: 'Save %{model}'
Run Code Online (Sandbox Code Playgroud)
会成为
submit:
create: "Créer un(e) %{model}"
update: "Modifier ce(tte) %{model}"
submit: "Enregistrer ce(tte) %{model}"
Run Code Online (Sandbox Code Playgroud)
在括号(genderized)中实现文本以处理传递的任何模型的最佳方法是什么.谢谢!
我们使用MySQL来存储无模式数据(请参阅:使用关系数据库获取无模式数据,以获得受FriendFeed如何使用MySQL存储无模式数据的解决方案).
一个大表包含我们应用程序的所有实体:
CREATE TABLE entities (
added_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
, id BINARY(16) NOT NULL
, body MEDIUMBLOB
, UNIQUE KEY (id)
) ENGINE=InnoDB ;
Run Code Online (Sandbox Code Playgroud)
一些细节:
存储实体唯一需要的属性是id一个16字节的UUID.实体的其余部分对数据库不透明.我们可以简单地通过在中存储新属性来更改"模式" body.
该added_id列存在,因为InnoDB以主键顺序物理存储数据行.AUTO_INCREMENT主键确保在旧实体之后按顺序在磁盘上写入新实体,这有助于读取/写入位置(新实体比旧实体更频繁地读取).
我们的数据库将我们的无模式数据存储在body.< - 这是这个问题的主题.
许多其他有趣的细节,比如"进入" body数据以构建异步物化视图(索引只是离线构建的表),但它们与当前的讨论无关......
我们应该如何序列化结构化数据(键值对)body?
JSON或BSON很简单,因为每行重复字段名称.这使其具有灵活性的优势,但在空间效率方面也是一个很大的缺点(序列化数据中字段名称的每行开销).我们试图将内容保留在内存中,并且最小化内存和网络占用空间非常重要.我们可以在同一空间中放置的记录越多,查询的速度就越快.我们更喜欢相对较长的描述性字段名称,并缩短它们以使我的数据库更快是错误的!
最后,JSON/BSON对于我们的目的是不可行的,除非我们变得更复杂并将小键映射到与数据库对话的应用程序驱动程序中的更具描述性的键.这让我们思考......
虽然我们的数据库是无模式的,但实际上:1)没有太多不同类型的实体,2)同一类实体的版本不经常更改,3)当它们确实发生变化时,通常只是添加另一个领域.JSON/BSON没有版本控制的原生支持.
在版本控制和数据定义更改方面,Protocol Buffers和Thrift更加复杂.Thrift和Protocol Buffers都是将数据序列化到数据库的理想选择,而Thrift的设计使得编码格式是可扩展的.
协议缓冲区看起来是在无模式数据库中序列化数据的绝佳选择.
CouchDB和MongoDB(两个最流行的无模式数据库?)分别使用JSON和BSON,但我们找不到任何关于使用更高级的东西,比如Protocol Buffers,作为存储无模式数据的序列化格式.有些产品存储特定语言的对象版本(即将Java的Externalizable对象存储在数据网格中,或者在Ruby中使用MySQL进行NoSQL),但这些都很痛苦(尝试从其他平台访问它们,甚至从MySQL本身访问它们,并忘记版本控制).
是否有人在其数据库中存储更具互操作性的协议缓冲区,或在其无模式数据库中存储其他一些高级序列化格式?这是一个问题,除了JSON/BSON/XML的直接每行序列化,还是序列化特定语言的对象之外,是否还有其他选项.它甚至可行吗?我们错过了什么吗?对不起意识风格的叙事流!
我希望确定一个点(鼠标位置)何时在一个B样条控制点定义的曲线上或附近.
我将为B-Spline提供的信息是n个控制点的列表(在x,y坐标中).控制点列表可以是任意长度(> = 4)并定义由(n-1)/ 3立方贝塞尔曲线组成的B样条.贝塞尔曲线都是立方的.我希望设置一个参数k,(以像素为单位)定义为"接近"曲线的距离.如果鼠标位置在曲线的k个像素内,那么我需要返回true,否则返回false.
有没有一个算法可以提供这些信息.任何解决方案都不需要精确 - 我正在努力达到1像素(或坐标)的容差.
我发现以下问题似乎提供了一些帮助,但不回答我的确切问题.特别是第一个参考似乎仅是4个控制点的解决方案,并没有考虑我希望定义的接近因素.
编辑:示例曲线:
e, 63.068, 127.26
29.124, 284.61
25.066, 258.56
20.926, 212.47
34, 176
38.706, 162.87
46.556, 149.82
54.393, 138.78
Run Code Online (Sandbox Code Playgroud)
格式的描述是:"为每个边缘分配一个pos属性,该属性由3n + 1个位置组成.这些是B样条控制点:点p0,p1,p2,p3是第一个Bezier样条,p3 ,p4,p5,p6是第二个等.点由逗号分隔的两个整数表示,表示以点(1/72英寸)指定的位置的X和Y坐标.在pos属性中,控制点列表可以在起始点ps和/或终点pe之前.它们分别具有通常的位置表示,带有"s"或"e"前缀."
EDIT2:对"e"点的进一步说明(如果存在,则为s).
在pos属性中,控制点列表可以在起点ps和/或终点pe之前.它们具有通常的位置表示,分别带有"s"或"e"前缀.如果在p0处有箭头,则存在起点.在这种情况下,箭头从p0到ps,其中ps实际上在节点的边界上.箭头的长度和方向由矢量(ps -p0)给出.如果没有箭头,则p0位于节点的边界上.类似地,点pe在边缘的另一端指定箭头,连接到最后一个样条点.
我使用Runtime exec()方法在Java中创建子进程.但是,由于子进程是一个交互式程序,我需要在需要时为其提供输入.另外,我需要显示子进程的输出.我怎样才能以最简单的方式做到这一点?
我使用StreamGobbler使用process.getInputStream()显示程序输出.但是,我不知道如何识别程序何时等待输入以及何时使用proc.getOutputStream提供输入.我怎样才能做到这一点?
我对scala和jodatime都比较陌生,但两者都给人留下了深刻的印象.我想弄清楚是否有更优雅的方法来做一些日期算术.这是一个方法:
private def calcDuration() : String = {
val p = new Period(calcCloseTime.toInstant.getMillis - calcOpenTime.toInstant.getMillis)
val s : String = p.getHours.toString + ":" + p.getMinutes.toString +
":" + p.getSeconds.toString
return s
}
Run Code Online (Sandbox Code Playgroud)
我将所有内容转换为字符串,因为我将它放入MongoDB,我不知道如何序列化joda持续时间或句点.如果有人知道我真的很感激答案.
无论如何,calcCloseTime和calcOpenTime方法返回DateTime对象.将它们转换为Instants是我发现的最好的方法.有没有更好的办法?
另一个问题:当小时,分钟或秒是单个数字时,结果字符串不是零填充.是否有一种简单的方法使字符串看起来像HH:MM:SS?
谢谢,约翰
我发现自己重复了很多:
val = x if x else y
Run Code Online (Sandbox Code Playgroud)
有时x会深入到类或字典中的几个级别,因此它会变得很长:
val = obj.elements[0].something if obj.elements[0].something else y
Run Code Online (Sandbox Code Playgroud)
它看起来很难看,迫使我打字更多.任何已知的缩短方法?也许像这样的内置存在?
val = first_try(x, y)
Run Code Online (Sandbox Code Playgroud)
我想我可以很容易地写自己的,但希望内置.
first_try = lambda x,y: x if x else y
Run Code Online (Sandbox Code Playgroud) python ×2
algorithm ×1
bezier ×1
c++ ×1
graphics ×1
ios ×1
iphone ×1
java ×1
javascript ×1
jodatime ×1
jquery ×1
math ×1
mysql ×1
nosql ×1
objective-c ×1
polymorphism ×1
process ×1
qunit ×1
runtime.exec ×1
scala ×1
schemaless ×1
spline ×1
sqlite ×1