小编Jon*_*hop的帖子

为什么Git有下午茶时间?

在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)?这只是一个复活节彩蛋吗?

git

102
推荐指数
1
解决办法
3762
查看次数

带有嵌套过滤器的Django注释

是否可以在注释中进行过滤?

在我看来这样的事情(实际上并不起作用)

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解决了出勤问题.

  • 蒂米的博客文章很有用.我的答案是基于它的.
  • hash1baby的答案有效,但似乎与sql一样复杂.它还需要执行sql然后在for循环中添加结果.这对我不好,因为我将大量这些过滤查询堆叠在一起.我的解决方案构建了一个包含大量过滤器和额外的大型查询集,并立即执行所有操作.
  • 如果性能没有问题 - 我建议for循环工作.到目前为止,这是最容易理解的.

django

20
推荐指数
2
解决办法
8538
查看次数

为什么Perl的localtime函数(和C的tm结构)中的年份值相对于1900?

正如所有Perl程序员(希望)都知道的那样,调用Perl localtime函数的年份值相对于1900年.想知道为什么会这样,我看了一下perldoc for localtime,并找到了这个有趣的块:

所有列表元素都是数字的,直接来自C`struct tm'.

然后看一下tm结构C++引用,我发现tm_year成员变量被声明为int.

问题:那么,为什么年份值相对于1900而不仅仅是完整的四位数年份呢?有一些历史原因吗?在我看来,即使计算中的早期内存限制,整数(显然)足以存储全年.一定有充分的理由; 我很好奇这可能是什么.

c perl time

15
推荐指数
2
解决办法
907
查看次数

在Django中使用prefetch_related连接ManyToMany字段

我可能会遗漏一些明显的东西,但是我无法在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)

python django orm

10
推荐指数
1
解决办法
8868
查看次数

在OrderedDictionary中有效地找到前一个键

我有一个包含速率值的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核心模块吗?

python python-3.x

9
推荐指数
1
解决办法
206
查看次数

document.referrer提供重音字母

我正在使用document.referrer来获取当前页面的先前URL并将其发送到curl文件,该curl文件再次将此变量发送到PHP文件以将其保存到数据库中.问题是,在保存到数据库中时,我将URL值视为重音字母

†Ûiÿû®û(~×(›û®û(~×â•ïðŠwhÂÏڞئj­î
Run Code Online (Sandbox Code Playgroud)

base64在我的php文件中使用了编码方案.MySQL列的整理是latin1_swedish_ci.

谢谢.

php mysql

7
推荐指数
1
解决办法
118
查看次数

在d3时间轴上显示每个其他刻度标签?

我有一个带有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)每三个月都有一个标记和标签.

我如何指定每月绘制刻度,但每三个月只显示一次标签?

javascript d3.js

7
推荐指数
3
解决办法
4873
查看次数

捕获异常时如何优雅地清理HTTPURLConnection?

我有一个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)

java applet exception-handling httpurlconnection

6
推荐指数
1
解决办法
7273
查看次数

在JavaScript中获取特定于平台的换行符?

几年前,我为我的一个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应该返回.

javascript firefox newline firefox-addon

6
推荐指数
1
解决办法
1255
查看次数

CALLBACK关键字在Win-32 C++应用程序中的含义是什么?

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对我有什么用?这是绝对必要的,还是可以将该声明保留下来?

c++ windows winapi visual-c++

6
推荐指数
1
解决办法
5956
查看次数