小编Odd*_*ing的帖子

缩进代码生成

通常,程序员编写生成其他代码的代码.

(技术术语是元编程,但它比仅仅交叉编译器更常见;考虑生成HTML或每个XSLT文件的每个PHP网页.)

一个领域,我觉得挑战性的未来与技术,以确保这两个手写的源文件,以及计算机生成的对象文件明确缩进来帮助调试.这两个目标似乎经常相互竞争.

我发现这在PHP/HTML组合中特别具有挑战性.我认为这是因为:

  • 源文件中有时会生成比生成PHP更多的HTML代码
  • HTML文件往往比SQL语句更长,需要更好的缩进
  • HTML具有空间敏感功能(例如标签之间)
  • 结果是比SQL语句更公开可见的HTML,因此要做更合理的工作会有更大的压力.

你用什么技术来解决这个问题?


编辑:我接受至少有三个参数不打扰生成漂亮的HTML代码:

  • 生成代码的复杂性增加了.
  • 浏览器渲染没有区别; 开发人员可以使用Firebug或类似功能来很好地查看它.
  • 轻微的性能损失 - 增加了空白字符的下载时间.

我当然有时会生成代码而不考虑缩进(尤其是SQL).

但是,有一些论点推动了另一种方式:

  • 我发现,在实践中,我频繁读取生成的代码-有额外的步骤来访问它是不方便的.
  • HTML有一些空间敏感问题,偶尔会有一些问题.

例如,考虑代码:

<div class="foo">
    <?php
        $fooHeader();
        $fooBody();
        $fooFooter();
    ?>
</div>
Run Code Online (Sandbox Code Playgroud)

它比以下代码更清晰:

<div class="foo"><?php
        $fooHeader();
        $fooBody();
        $fooFooter();
?></div>
Run Code Online (Sandbox Code Playgroud)

但是,由于HTML中包含的空格,它也有不同的渲染.

php code-generation metaprogramming

5
推荐指数
1
解决办法
1063
查看次数

推送Git源代码树,而不仅仅是存储库

我正在使用Git错误.我想用得对.

这是我得到的:

在这里,在我的开发机器上是一个Git存储库,我承诺并测试.

在那里,是我的网络服务器 - 这个代码将被部署的地方.Web服务器有另一个裸git存储库,当我准备部署时,我可以通过SSH推送它.

我想要发生的是查看Git存储库,该存储库始终具有最新版本的源文件(在某些分支或某些标记上).

我可以做的是在Web服务器上创建另一个(非裸)git存储库,并在每次推送后进行手动拉取,但我希望每次执行时都不必登录到Web服务器git push.

有没有办法远程"推送到网络服务器并刷新其签出的文件,如果我保证我没有编辑网络服务器上的任何文件"?

或者我只是这样做错了你想打我?:-)

git

5
推荐指数
2
解决办法
918
查看次数

SFINAE:有些失败比其他失败更平等?

我正在尝试使用SFINAE来区分具有名为"name"的成员的类.我在似乎是标准模式的情况下进行了设置,但它没有工作 - 而不是默默地忽略'失败'替换,编译器会产生错误.

我确信我遇到了一些模板替换规则,如果有人能解释哪一个,我将不胜感激.

这是一个精简的例子.我正在使用gcc:

 template <typename U> string test( char(*)[sizeof(U::name)] = 0 ) { return "has name!"; }
 template <typename U> string test(...) { return "no name"; }

 struct HasName { string name; }
 struct NoName  {}

 cout << "HasName: " << test<HasName>(0) << endl;  //fine
 cout << "NoName: " << test<NoName>(0) << endl;    //compiler errors:

 //error: size of array has non-integral type `<type error>'
 //error: `name' is not a member of `NoName'
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae template-specialization

5
推荐指数
1
解决办法
249
查看次数

如何禁用urlretrieve的SSL验证?

围绕SO提出了类似的问题,但是解决方案是针对的urlopen。该函数采用一个可选context参数,该参数可以接受预配置的SSL上下文。urlretrieve没有此参数。如何在接下来的通话中绕过SSL验证错误?

urllib.request.urlretrieve(
    "http://sourceforge.net/projects/libjpeg-turbo/files/1.3.1/libjpeg-turbo-1.3.1.tar.gz/download", 
    destFolder+"/libjpeg-turbo.tar.gz")
Run Code Online (Sandbox Code Playgroud)

python urllib2

5
推荐指数
1
解决办法
1723
查看次数

Python的time.sleep - 永远不会醒来

我认为这将是一个简单的,当你看到它的问题,但它让我感到困惑.

[ 停止新闻:我是对的.解决方案被发现.看到答案.]

我正在使用Python的unittest框架来测试多线程应用程序.很好,很直接 - 我有5个左右的工作线程监视一个公共队列,还有一个生产者线程为它们制作工作项.生产者线程由测试用例触发.

在此测试中,只有一个任务被放入队列中.它在测试中所做的处理只是实际处理的存根,因此工作线程执行5秒睡眠以模拟任务真正完成之前所经过的时间,并且线程将准备好进行另一项任务.

代码片段是:

 logging.info("Sleep starting")
 time.sleep(5)
 logging.info("Waking up")
Run Code Online (Sandbox Code Playgroud)

现在奇怪的部分.我看到"睡眠启动"日志消息,但没有看到唤醒消息.程序锁定并且不响应键盘中断(CTRL + C).CPU负载非常低.

我在Windows和Ubuntu(Python 2.6.2)中看到了同样的问题.

我一直在考虑是否发生异常并被隐藏,所以我在第一行和第二行之间添加"print 1/0" - 我看到提出了Division By Zero错误.我把它移到睡眠后,我从来没有看到过这个消息.

我想"好吧,也许其他线程试图同时记录非常大的东西,它仍在缓冲.它在做什么?"

那么,到目前为止,测试已经返回到unittest,在测试系统状态之前暂停等待线程开始.

 logging.info("Test sleep starting")
 time.sleep(0.25)
 logging.info("Test waking up")
Run Code Online (Sandbox Code Playgroud)

哇,看起来很熟悉.它以完全相同的方式冻结!第一条日志消息出现,第二条消息不出现.

我最近对该单元进行了重大改写,因此我无法声称"我没有触及任何东西",但我在改变中看不出任何不妥之处.

可疑区域:

  • 我包括使用Threading.Lock(因为我不知道如何推理GIL的安全性,所以我坚持我所知道的.我没有看到任何关于我的代码的"僵局".

  • 我是Python的unittest框架的新手.它是否可以通过重定向日志记录或类似功能来模拟这些症状?

  • 不,我没有替换非标准时间模块!

什么会阻止一个线程醒来?我还错过了什么?

python multithreading deadlock sleep

4
推荐指数
1
解决办法
5758
查看次数

中断№13(啊= 48) - 不工作

我想要获取我的硬盘参数.使用此处描述的技术.

代码给出cf = 1(错误).我如何解决它?

x86 assembly interrupt bios

4
推荐指数
1
解决办法
2178
查看次数

Facebook/Twitter"赞"纯HTML中的按钮

我正在尝试为我的简单网站添加分享按钮...

  1. 是否有可能在纯HTML中制作Facebook"喜欢"按钮?

  2. 是否有可能在纯HTML中制作Twitter"喜欢"按钮?

html javascript php

4
推荐指数
2
解决办法
4801
查看次数

SQLite 中的文件锁

我正在编写我的第一个 SQLAlchemy (0.6.8)/Python (2.7.1) 程序,它位于 SQLite(我认为是 3.7.6.3)之上,在 Windows Vista 上运行。

为了执行单元测试,我将 SQLite 指向一个测试数据库,并且我的单元测试脚本会定期删除数据库文件,因此我一直在使用已知的初始状态。

有时我的(单线程)单元测试无法删除文件:

WindowsError: [Error 32] The process cannot access the file because it is being used by another process
Run Code Online (Sandbox Code Playgroud)

使用该文件的唯一进程是单元测试工具。显然,我完成的一个单元测试没有释放某些锁,从而防止同一进程中的下一个单元测试删除文件。

我已经搜索了所有创建会话的地方,并确认有相应的 session.commit() 或 session.rollback()。

我在我的代码中搜索了所有 session.commit() 和 session.rollback() 调用,然后立即添加了 session.close() 调用,试图显式释放任何事务锁,但没有帮助。

是否有任何秘密可以确保在事务结束时删除剩余的锁以允许删除文件?

python sqlite sqlalchemy

4
推荐指数
1
解决办法
998
查看次数

为什么Python的queue.Queue.get()允许从超时中提前返回?

更新:这个问题是基于Queue.get()实际行为的错误心理模型,这是由一些略微模糊的文档引起的,但主要是由一个有缺陷的,手动实现的timedelta.total_seconds().当我试图证明原始答案不正确时,我发现了这个错误.现在这timedelta.total_seconds()是由Python提供的(从2.7开始),我将继续使用它.

对困惑感到抱歉.


这不是"我的代码为什么不运行?" 问题,但"这个设计决定背后的动机是什么?"

从2.3开始,Python的队列模块包含一个带有get方法的Queue类,它接受一个timeout参数.这是手册中的部分:

Queue.get([block[, timeout]])
从队列中删除并返回一个项目.如果可选的args块为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止.如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常.[...]

(强调我的)

请注意,即使尚未达到超时,它也可能引发Empty异常.事实上,我在Ubuntu(但不是Windows)上看到了这种行为.它只是提前退出,它对我的​​代码产生了轻微的影响 - 我可以编写代码.

大多数阻塞超时都会占用最小超时,这在非实时操作系统(包括Windows和Linux)上是有意义的.无法保证操作系统在任何给定的截止日期之前将上下文切换到您的进程或线程.

但是,这个最大超时.任何人都可以解释这个设计决定可能有意义吗?

python real-time

4
推荐指数
2
解决办法
1990
查看次数

Pylons重定向给出:AttributeError:'HTTPFound'对象没有属性'exception'

(这个问题记录了我对一个错误的研究,以节省其他人解决它的时间.)

我有一个基于Pylons 1.0.1框架的网页.

开发人员建议迁移到他们的新产品Pyramids的升级路径.Pylons 1.0.1将不会做进一步的工作.

但是,我不需要任何进一步的功能 - 网站正在维护,所以我没有升级框架.

最近,在将一些其他更改部署到服务器之后,尽管我的代码没有任何更改,但网站仍停止工作.特别是,重定向调用给出了错误:

AttributeError:'HTTPFound'对象没有属性'exception'

python pylons

4
推荐指数
1
解决办法
987
查看次数