在我目前的工作地点,我们有一些令人震惊的代码被吹捧为下一代框架.
事实上,这个意见中只有一个人就是那个写了大部分内容的人.该部门的其余部分给人的印象是编码错误,调试的皮塔饼和一般的naff.
写这篇文章的人对管理层有着相当有影响力的地位,所以他们就在营地的那一边.
我们已向管理层强调(真实)关注,但显然他们不愿意花更多时间参与一个不直接有助于提高利润的项目.
在此框架上部署了多个应用程序,因此任何重构都需要包含这些应用程序.
整个事情是如此交织在一起,以至于我们不能扯掉特定类的实现并以这种方式重写它,因此即使对核心api进行简单的更改也意味着一个大型项目.
然而,它确实有3年的实时部署和许多错误修复,角落案例和边界条件迎合.
我们是否重写部分并尝试重构,因为它将是几个大型项目,随着时间的推移重构,可能需要另外3年才能完成它或我们只是在现有的基础上重写我们的特定要求框架?
是否有标准控件允许用户编辑String to String Dictionary的键值对?
如果没有,你会如何实现?我有一些想法,但没有一个看起来很棒.
采取以下两个例子:
Date.parse("02/20/2009")
Date.parse("02-20-2009")
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,假定顺序为MM DD YYYY,但在第二个示例中引发错误,因为(我假设)它尝试将其解析为DD MM YYYY.
为什么?
我想了解视频和音频解码的工作原理,特别是定时同步(如何获得30fps视频,如何将其与音频耦合等).我不想知道所有的细节,只是它的本质.我希望能够编写实际视频/音频解码器的高级简化.
你能指点一下吗?MPEG2视频/音频解码器的实际C/C++源代码将是理解我认为的那些事情的最快方式.
我有一个导入模块的模块,但在某些情况下,导入的模块可能不存在.导入模块后,有一个类继承了导入模块的类.如果我ImportError在模块不存在的情况下捕获异常,我怎样才能阻止Python解析模块的其余部分?如果那是不可能的话,我愿意接受其他解决方案.
这是一个基本的例子(selfaware.py):
try:
from skynet import SkyNet
except ImportError:
class SelfAwareSkyNet():
pass
exit_module_parsing_here()
class SelfAwareSkyNet(SkyNet):
pass
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一方法是:
selfaware.py模块之前,请检查skynet模块是否可用,并简单地传递或创建存根类.如果selfaware.py多次导入,这将导致DRY .在内部selfaware.py使用try块定义类.例如:
try:
from skynet import SkyNet
class SelfAwareSkyNet(SkyNet):
pass
except ImportError:
class SelfAwareSkyNet():
pass
Run Code Online (Sandbox Code Playgroud)我需要检查一个控件是否是另一个控件的后代.会Control.Contains做这个工作,还是仅仅搜索一级子控件?
我试图将类上的集合属性标记为Obsolete以查找所有出现并在我的警告列表中保留缩小的事项列表,因为我们需要用其他东西替换此集合属性.
编辑:我已通过Microsoft Connect提交此问题,问题#417159.
编辑16.11.2010:在编译.NET 3.5和4.0时,验证现在可以在C#4.0编译器中使用.我在发布的代码中收到4个警告,包括评论"Not OK?"的警告.
然而,令我惊讶的是,该列表只包含了一些内容,远远少于我所知道的,并且spotcheck告诉我,由于某种原因,警告列表中的编译器并不总是将该属性的使用标记为过时.
这是一个示例程序,可以在Visual Studio 2008中编译.
请注意标记为#1-#4的末尾附近的四行,其中,我希望所有人都报告所使用的属性已过时,但#3不是,而且似乎如果我继续前进直接对集合属性或方法,属性本身的使用不会被标记为过时.请注意,#3和#4引用相同的属性,#4标记为使用过时的属性,而#3则不是.测试显示,如果在表达式中,我访问属性返回的集合的属性或方法,编译器不会抱怨.
这是一个错误,还是我不知道的C#编译器的"隐藏的宝石"?
using System;
using System.Collections.Generic;
namespace TestApp
{
public abstract class BaseClass
{
[Obsolete]
public abstract String Value
{
get;
}
[Obsolete]
public abstract String[] ValueArray
{
get;
}
[Obsolete]
public abstract List<String> ValueList
{
get;
}
}
public class DerivedClass : BaseClass
{
[Obsolete]
public override String Value
{
get
{
return "Test";
}
}
[Obsolete]
public override String[] ValueArray
{
get …Run Code Online (Sandbox Code Playgroud) 从pthread_key_create联机帮助页:
一个可选的析构函数可以与每个键值相关联。在线程退出时,如果键值具有非 NULL 析构函数指针,并且线程具有与键关联的非 NULL 值,则使用当前关联值作为其唯一参数调用指向的函数。如果一个线程退出时存在多个析构函数,则析构函数调用的顺序是不确定的。
如果在为所有具有关联析构函数的非 NULL 值调用了所有析构函数之后,仍有一些具有关联析构函数的非 NULL 值,则重复该过程。如果在至少 [PTHREAD_DESTRUCTOR_ITERATIONS] 次迭代析构函数调用未完成的非 NULL 值之后,仍然有一些非 NULL 值与关联的析构函数,则实现将停止调用析构函数。
我写了一个小例子,用一个简单的析构函数为非空线程特定值打印“Hello World”。据我所知,即使在第一次调用析构函数后线程特定值仍然不是 NULL,这个析构函数也只被调用一次(至少在 linux fedora 和 mac os x 上)。
我错过了什么吗?!(在 glibc 上 PTHREAD_DESTRUCTOR_ITERATIONS = 4。)
这是我的小例子:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NB_THREADS 1
#define NB_KEYS 1
static pthread_key_t keys[NB_KEYS];
static pthread_mutex_t mutex;
void destruction (void *arg)
{
(int) arg ++;
printf ("Destructor called! -- key value : %i\n", (int)arg);
}
void* startup_routine(void* argv)
{
int i;
int th …Run Code Online (Sandbox Code Playgroud) 我正在使用grails做一个Web应用程序.现在我正在进行注册页面.在注册页面中,我想通过ajax检查用户名可用性.我可以在控制器或服务中编写用户名可用性检查的代码.我想知道如何联系服务器从客户端通过ajax.
我的示例gsp代码是
<g:form method="post" action="signup" controller="auth">
<input type="text" name="name" >
<input type="text" name="username" >
<input type="password" name="password" >
<input type="submit" value="signup">
</g:form>
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,如果用户名文本框失去焦点,它应检查可用性.我做了一些谷歌搜索.但我无法得到我想要的.可以为此提供任何帮助或良好的教程吗?
谢谢.
我想将DirectX(井,XNA)的东西渲染到system.windows.forms控件而不是整个窗口(所以我可以将它与按钮和东西配对).
这可能吗?我会使用哪种控件?我该怎么办?我搜索了文档,但我不知道我打算使用哪些术语!