在Git源代码中的date.c文件中,我注意到以下特殊时间名称的结构:
static const struct special {
const char *name;
void (*fn)(struct tm *, struct tm *, int *);
} special[] = {
{ "yesterday", date_yesterday },
{ "noon", date_noon },
{ "midnight", date_midnight },
{ "tea", date_tea },
{ "PM", date_pm },
{ "AM", date_am },
{ "never", date_never },
{ "now", date_now },
{ NULL }
};
Run Code Online (Sandbox Code Playgroud)
我理解其中大部分的实用性(有些),但为什么要有"茶"时间(评估为17:00)?这只是一个复活节彩蛋吗?
是否可以在注释中进行过滤?
在我看来这样的事情(实际上并不起作用)
Student.objects.all().annotate(Count('attendance').filter(type="Excused"))
由此产生的表格将让每个学生都有理由缺席.查看文档过滤器只能在注释之前或之后进行,否则将无法产生所需的结果.
解决方法就是这样
for student in Student.objects.all():
student.num_excused_absence = Attendance.objects.filter(student=student, type="Excused").count()
Run Code Online (Sandbox Code Playgroud)
这可以工作,但在实际应用程序中执行很多查询,这可能会变得不切实际.我认为这种类型的语句在SQL中是可行的,但如果可能的话,我更愿意继续使用ORM.我甚至尝试过两个单独的查询(一个用于所有学生,另一个用于获得总数)并将它们与|组合.组合改变了总数:(
我在这里使用额外的SQL解决了出勤问题.
正如所有Perl程序员(希望)都知道的那样,调用Perl localtime
函数的年份值相对于1900年.想知道为什么会这样,我看了一下perldoc for localtime,并找到了这个有趣的块:
所有列表元素都是数字的,直接来自C`struct tm'.
然后看一下tm结构的C++引用,我发现tm_year
成员变量被声明为int
.
问题:那么,为什么年份值相对于1900而不仅仅是完整的四位数年份呢?有一些历史原因吗?在我看来,即使计算中的早期内存限制,整数(显然)足以存储全年.一定有充分的理由; 我很好奇这可能是什么.
我可能会遗漏一些明显的东西,但是我无法在ManyToMany字段上加入Django应用程序.我有两个型号:
class Area(models.Model):
name = CharField(...)
class Role(models.Model):
name = CharField(...)
areas = ManyToManyField('Area', ...)
Run Code Online (Sandbox Code Playgroud)
我的目标是拥有相当于这个查询:
select a.name, r.name
from area a
join area_role ar on ar.area_id = a.id
join role r on ar.role_id = r.id
order by a.name, r.name
Run Code Online (Sandbox Code Playgroud)
结果数据集如下所示:
Area Role
---------------------
A My Role
A Your Role
A Yo Mamas Role
B My Role
B Some Other Role
Run Code Online (Sandbox Code Playgroud)
正如您在示例中所看到的," 我的角色"项目出现两次,每个区域出现一次.我知道我可以得到区域列表,然后获得每个区域的角色列表(产生N + 1个查询),但是如果可能的话我想要有效率.因此,我发现prefetch_related可能是我想要使用的.但是,当我使用它时,我最终将所有Area值都设置为None.这是我试过的:
rqs = ( Role.objects.filter(areas__id__in=[1,2,3])
.prefetch_related(areas).order_by('areas__name', 'name') )
for r in …
Run Code Online (Sandbox Code Playgroud) 我有一个包含速率值的OrderedDictionary.每个条目都有一个密钥的日期(每个日期发生在每年一个季度的开始),值是一个数字.日期按顺序插入,从最旧到最新.
{
date(2017, 1, 1): 95,
date(2018, 1, 1): 100,
date(2018, 6, 1): 110,
date(2018, 9, 1): 112,
}
Run Code Online (Sandbox Code Playgroud)
我的费率字典比这大得多,但这是一般的想法.给定一个任意日期,我想在字典之前找到它的值.例如,查找日期date(2018, 8, 1)
应该返回值110,因为条目date(2018, 6, 1)
是在我的日期查找之前的最近的键.同样,日期date(2017, 12, 1)
应该返回95,因为最近的前一个键恰好是date(2017, 1, 1)
.
我可以通过在字典中遍历项目来轻松完成此操作:
def find_nearest(lookup):
nearest = None
for d, value in rates.items():
if(d > lookup):
break
nearest = value
return nearest
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说效率低,因为在最坏的情况下,我必须扫描整个字典(我之前提到过的字典可能很大).我将做成千上万种这样的查找,所以我希望它具有高性能.
解决性能问题的另一个选择是创建我所见过的缓存,这也是可行的,尽管我想知道内存限制(我不完全确定缓存增长的大小).
我可以在这里使用任何聪明的方法或Python核心模块吗?
我正在使用document.referrer来获取当前页面的先前URL并将其发送到curl文件,该curl文件再次将此变量发送到PHP文件以将其保存到数据库中.问题是,在保存到数据库中时,我将URL值视为重音字母
†Ûiÿû®û(~×(›û®û(~×â•ïðŠwhÂÏڞئjî
Run Code Online (Sandbox Code Playgroud)
我base64
在我的php文件中使用了编码方案.MySQL列的整理是latin1_swedish_ci
.
谢谢.
我有一个带有x轴的d3图表,它使用自定义时间格式:
var x = d3.time.scale.utc()
.domain([start, end])
.range([0, width]);
var customTimeFormat = d3.time.format.utc.multi([
["%b %d", function(d) { return d.getUTCDate() != 1; }],
["%b", function(d) { return d.getUTCMonth(); }],
["%Y", function() { return true; }]
]);
var xAxisTop = d3.svg.axis()
.scale(x)
.orient("top")
.tickFormat(customTimeFormat)
.innerTickSize(-height)
.outerTickSize(0)
.ticks(d3.time.month.utc, 1);
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是每个月都有一个勾号,但每三个月只有一个标签.然而,我似乎能够做到(a)每个月都有一个标记和标签,或者(b)每三个月都有一个标记和标签.
我如何指定每月绘制刻度,但每三个月只显示一次标签?
我有一个Java applet,它使用HTTPURLConnection
该类将非常大的文件上传到IIS-7 Web服务器.applet将文件分块,然后使用固定长度的流将这些片段POST到PHP脚本.
有时,在上传文件块时,客户端和服务器之间的网络连接会神秘地丢失.当发生这种情况时,我对writeBytes()
方法的调用抛出了IOException
我捕获的内容.在捕获到这个异常之后,我会进入我的finally
区域,在那里我尝试清理它.由于没有足够的数据写入连接(请记住,这是固定长度的流式传输),关闭输出流的尝试也会失败.结果,连接似乎"粘住"(即底层插座保持打开).这似乎是通过查看StreamingOutputStream类的方法的源代码来验证的close()
(注意注释表明套接字无法关闭).
有一种优雅的方式,我可以IOException
在写了一段时间后关闭HTTPURLConnection
吗?告诉HTTPURLConnection
对象disconnect()
似乎不够好.
这是我通过调用类的writeBytes()
方法调用网络时看到的第一个异常HTTPURLConnection
:
java.io.IOException: Error writing request body to server
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(Unknown Source)
at java.io.DataOutputStream.write(Unknown Source)
at MultiPartPostThread.run(MultiPartPostThread.java:321)
Run Code Online (Sandbox Code Playgroud)
我捕获此异常,然后尝试关闭DataOutputStream
我用来写入连接的对象.当我这样做时,我得到这个例外:
java.io.IOException: insufficient data written
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(Unknown Source)
at java.io.FilterOutputStream.close(Unknown Source)
at MultiPartPostThread.run(MultiPartPostThread.java:370)
Run Code Online (Sandbox Code Playgroud)
我可以通过注意在IIS日志中显示失败条目需要10分钟来验证套接字是否保持打开状态.延迟(10分钟)恰好是我的连接超时值.IIS日志中的示例行(为简洁而修剪):
2012-01-31 20:20:07 POST /upload_handler.php 200 0 0 356 26215490 3666
2012-01-31 20:20:10 …
Run Code Online (Sandbox Code Playgroud) 几年前,我为我的一个Firefox附加组件编写了以下函数,这有助于我获得一个特定于平台的换行符:
GetNewLine: function()
{
var platform = navigator.platform.toLowerCase();
if(platform.indexOf('win') != -1) // Windows
return "\r\n";
else if(platform.indexOf('mac') != -1) // Mac
return "\r";
else // *nix
return "\n";
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但在阅读换行维基百科的文章后,我注意到最近的Apple操作系统(OS X及更高版本)现在使用UNIX样式\n
行结尾.因此,我的小功能可能会为这种情况返回错误的东西(我没有Mac OS可以测试它).
有没有办法让Firefox告诉我特定于平台的换行符是什么?也许是某种内置的实用功能?我在我的扩展程序写入的文本文件中使用这些换行符,并且我想使用特定于平台的文件,以便文件在各种系统中看起来合适.
更新(2-13-2013):因此,navigator.platform.toLowerCase()
在Mac-mini(OS X)上运行函数调用时,我得到输出值macintel
.这将导致我的函数返回\r
而不是\n
应该返回.
Win-32 C++应用程序中的某些函数调用已应用CALLBACK
关键字,如本例所示(取自此MSDN页面):
BOOL CALLBACK DeleteItemProc(HWND hwndDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
// ... code here ...
}
Run Code Online (Sandbox Code Playgroud)
我通过Visual Studio看到CALLBACK
关键字已定义(使用#define
)为__stdcall
.该__stdcall文档并不能使它更清晰(至少对我来说)它做什么.
简而言之,使用CALLBACK
对我有什么用?这是绝对必要的,还是可以将该声明保留下来?