在我丰富的空闲时间里,我与许多科学家(主要是生物学家)合作,他们开发软件,数据库和其他与他们工作相关的工具.
通常这些项目是一次性构建的,在内部使用,最终有人决定"哦,这可能对其他人有用",所以他们发布二进制文件或将一个PHP接口打到它上面并将其推到网页.但是,他们通常不会为其他开发人员提供他们的源代码或数据库转储而烦恼,因此在实践中,这些项目通常在编写代码的项目即将结束或失去资金时死亡.几个月(或几年)之后,其他一些实验室需要使用相同类型的工具,他们必须重复第一个实验室所做的工作,该项目最终会死亡,起泡,冲洗,重复.
有没有人对如何说服主要工作不是编程的人有任何建议,这对他们的社区有益,因为他们对他们建立的工具更加开放?
同样,关于如何传达版本控制,错误跟踪,重构,自动化测试,持续集成以及我们专业开发人员认为理所当然的其他常见做法这一想法的任何建议都是值得花时间的好主意吗?
不幸的是,许多科学家似乎认为编程是一种枯燥乏味的工作必需品,他们的研究更重要,没有意识到现在,软件开发是科学研究的一部分,如果社区是整体提高了发展标准的标准,每个人都会受益.
你曾经遇到过这种情况吗?什么对你有用?
我想使用MapReduce方法分析连续的数据流(通过HTTP访问),所以我一直在研究Apache Hadoop.不幸的是,似乎Hadoop希望以固定大小的输入文件开始工作,而不是在消费者到达时能够将新数据传递给消费者.这是真的吗,还是我错过了什么?是否有一个不同的MapReduce工具可以处理从打开的套接字读入的数据?可扩展性是一个问题,所以我更喜欢让MapReducer处理凌乱的并行化内容.
我玩过Cascading并能够在通过HTTP访问的静态文件上运行作业,但这实际上并没有解决我的问题.我可以使用curl作为中间步骤将数据转储到Hadoop文件系统的某个地方,并编写一个监视程序,以便在每次准备好新的数据块时触发新作业,但这是一个肮脏的黑客行为; 必须有一些更优雅的方式来做到这一点.有任何想法吗?
我正在为我维护的库组装一个Visual Studio 2013解决方案.该库主要使用竞技场分配,因此我们有一个分配器接口:
#define HAMMER_ALLOCATOR__H__
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct HAllocator_ {
void* (*alloc)(struct HAllocator_* allocator, size_t size);
void* (*realloc)(struct HAllocator_* allocator, void* ptr, size_t size);
void (*free)(struct HAllocator_* allocator, void* ptr);
} HAllocator;
[... API functions ... ]
#ifdef __cplusplus
}
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
我们还实现了一个包装器malloc,realloc并且free:
#include <string.h>
#include <stdlib.h>
#include "internal.h"
void* system_alloc(HAllocator *allocator, size_t size) {
void* ptr = malloc(size + sizeof(size_t));
*(size_t*)ptr = …Run Code Online (Sandbox Code Playgroud)