我想我今天写的一些软件将在30年内使用.但我也意识到,很多都是基于UNIX传统,即将时间暴露为自1970年以来的秒数.
#include <stdio.h>
#include <time.h>
#include <limits.h>
void print(time_t rt) {
struct tm * t = gmtime(&rt);
puts(asctime(t));
}
int main() {
print(0);
print(time(0));
print(LONG_MAX);
print(LONG_MAX+1);
}
Run Code Online (Sandbox Code Playgroud)
执行结果:
函数ctime(),gmtime()和localtime()都将一个时间值作为参数,该时间值表示自Epoch(1970年1月1日00:00:00 UTC;参见时间(3))以来的时间(以秒为单位).
我想知道作为程序员在这个领域是否有任何主动做的事情,或者我们是否相信所有软件系统(又称操作系统)将来会如何神奇地升级?
更新看起来确实64位系统是安全的:
import java.util.*;
class TimeTest {
public static void main(String[] args) {
print(0);
print(System.currentTimeMillis());
print(Long.MAX_VALUE);
print(Long.MAX_VALUE + 1);
}
static void print(long l) {
System.out.println(new Date(l));
}
}
Run Code Online (Sandbox Code Playgroud)
但那一年292278994呢?
我刚刚开始玩事件驱动的架构,来自一个非常标准的面向对象的思维模式.
我注意到的第一件事是,理解和跟踪程序的难度似乎随着程序的大小呈指数级增长.虽然小型宠物项目很容易遵循,但感觉就像代码会迅速转向意大利面.
我理解我是这种发展思维的新手,并不是所有我的面向对象的担忧都会延续下去.有没有关于编写可维护,可理解的事件驱动代码的资源?使用node.js或Twisted或Event Machine的人对此有何看法?
architecture documentation maintainability event-driven node.js
语境:
同事和我之间正在进行辩论,我认为我们应该:
A.将所有计算/代码/逻辑保存在PHP中,并将MySQL视为"哑"信息库
他的意见:
B.根据什么更轻松/更快地进行混合搭配.http://www.onextrapixel.com/2010/06/23/mysql-has-functions-part-5-php-vs-mysql-performance/
我正在考虑可维护性的观点.他正在考虑速度(正如文章指出的那样,MySQL中的某些操作速度更快).
@ bob-the-destroyer @tekretic @OMG Ponies @mu太短了@Tudor Constantin @tandu @Harley
我同意(并且很明显)高效的WHERE子句属于SQL级别.但是,例如:
清除属于SQL域的示例:
问题是决定以下符号之间的权衡:
基于JSON:
"users": {
"id1": {
"id": "id1",
"firstname": "firstname1",
"lastname": "lastname1"
},
"id2": {
"id": "id2",
"firstaame": "firstname2",
"lastname": "lastname2"
}
}
Run Code Online (Sandbox Code Playgroud)
基于数组:
users: [
{
"id": "id",
"key2": "value2",
"key3": "value3"
},
{
"id": "id",
"key2": "value2",
"key3": "value3"
}
]
Run Code Online (Sandbox Code Playgroud)
关于同一问题的这篇文章,我决定(在前端)使用JSON对象表示法而不是对象数组,因为它符合我的要求,并且在浏览器中具有更好的性能和更少的代码.
但问题是列表本身并不是静态的.我的意思是生成列表,即从DB(NoSQL)获取/存储,并通过服务器上的Java API为新条目创建.我无法决定我应该在后端使用哪种表示法(最终也会影响用户界面).
任何关于性能,可维护性或可扩展性的想法/建议都表示赞赏.
我正在研究可以帮助我编写更小但更复杂的代码的算法.我可以设计一个20行的算法,而不是编写150行if-else语句.问题是很多这些算法都很复杂,需要大量的数学才能理解它们.我也是这里唯一了解他们的人.
为了代码的可维护性,像其他人一样编写代码会更好,还是使用算法更好?
algorithm maintainability cyclomatic-complexity code-complexity
以下代码指标计算的首选分数范围是多少?
c# maintainability cyclomatic-complexity code-metrics visual-studio-2008
它实际上不必添加新行,只是可读的东西.
有什么比这更好的?
str = "line 1" +
"line 2" +
"line 3";
Run Code Online (Sandbox Code Playgroud) 注意:我现在已经创建了一个jQuery插件,这是我尝试解决这个问题.我相信它可以改进,我可能忽略了很多用例,所以如果有人想提供反馈请随意:-) https://github.com/WickyNilliams/ReadyBinder
我没有这样的问题,但认为这将是一个有趣的讨论点,我希望人们对此有一些有趣的想法.
基本上,我在一个大型网站上工作,我们越来越多地编写越来越多的JavaScript.这很好,我喜欢JS独特的方法,我发现在语言的一些较暗的年代中可爱的奇怪之处;-)然而,一直困扰我的一件事是如何管理文档就绪事件,因为它们变得越来越大随着时间的推移(因此对于所服务的页面不太专注/特定)
问题是我们有一个JS文件(合并和缩小,虽然这对我的问题有点无关紧要).大多数JS都是使用揭示模块模式编写的,jQuery是我们选择的框架.所以我们所有的JS功能都在逻辑上分组为方法,命名空间,然后在脚本文件的底部我们有这个
$(function(){
//lots of code here, usually calling encapsulated methods
//on our namespaced revealing module
});
Run Code Online (Sandbox Code Playgroud)
问题是并非本文档就绪处理程序中的所有代码都与每个页面相关.例如,在一个页面上只有10%可能是相关的,在另一个页面上,80%可能是相关的.对我来说,这感觉非常错误,我觉得我应该只执行每页需要的代码,主要是为了提高效率,还要保持可维护性.
我搜索谷歌搜索这个问题的方法,但找不到任何东西,也许我只是在寻找错误的东西!
无论如何,所以我的问题是:
期待人们对此事的看法.
干杯
我不是专业的C程序员,我知道包括.c
来自另一个的源文件被认为是不好的做法,但我认为它有助于可维护性.
我有一个包含大量元素的大结构,我#define
用来保存索引.
#define TOTO_IND 0
#define TITI_IND 1
…
#define TATA_IND 50
static const MyElements elems [] = {
{"TOTO", 18, "French"},
{"TITI", 27, "English"},
...,
{"TATA", 45, "Spanish"}
}
Run Code Online (Sandbox Code Playgroud)
因为我需要从索引访问结构,所以我需要保持#define
和结构声明同步.这意味着我必须在正确的位置插入新元素并相应地更新#define
.
它容易出错,我不喜欢它(但出于性能考虑,我找不到更好的解决方案).
无论如何,这个文件还包含很多处理这个结构的函数.我还希望保持代码分离并避免全局变量.
为了使事情变得"更容易",我正在考虑将这个"容易出错的定义"转移到.c
仅包含此结构的单个源文件中.这个文件将是"危险的小心文件",并将其包含在我的实际"正常功能"文件中.
你怎么看待这件事?包含.c
源文件是否有效?还有另一种更好的方法来处理我的结构吗?
我刚刚看到Java的一个巨大的正则表达式让我想到了一般的正则表达式的可维护性.我相信大多数人 - 除了一些坏蛋perl贩子 - 会同意正则表达式难以维持.
我在考虑如何解决这种情况.到目前为止,我最有希望的想法是使用流畅的界面.举个例子,而不是:
Pattern pattern = Pattern.compile("a*|b{2,5}");
Run Code Online (Sandbox Code Playgroud)
一个人可以写这样的东西
import static util.PatternBuilder.*
Pattern pattern = string("a").anyTimes().or().string("b").times(2,5).compile();
Pattern alternative =
or(
string("a").anyTimes(),
string("b").times(2,5)
)
.compile();
Run Code Online (Sandbox Code Playgroud)
在这个非常简短的例子中,创建正则表达式的常用方法对于任何平庸的有才华的开发人员来说仍然是可读的.但是,请考虑那些填充两行或更多行的怪异表达式,每行包含80个字符.当然,(冗长)流畅的界面需要几行而不是只有两行,但我相信它会更具可读性(因此可维护).
现在我的问题:
你知道正则表达式的任何类似方法吗?
你是否同意这种方法比使用简单的字符串更好?
你会如何设计API?
你会在你的项目中使用这样一个整洁的实用程序吗?
你认为这会很有趣吗?;)
编辑: 想象一下,可能存在比简单构造更高级别的方法,我们都没有来自正则表达式,例如
// matches aaaab@example.com - think of it as reusable expressions
Pattern p = string{"a").anyTimes().string("b@").domain().compile();
Run Code Online (Sandbox Code Playgroud)
编辑 - 评论的简短摘要:
RegexBuddy - 花30欧元让你的代码可读(wtf?!这种产品的纯粹存在证明了我的论文是正确的 - 我们今天所知道的正则表达式是坏事(tm))
Martin Fowler的方法(仍然远非完美)
有趣的是,大多数人都认为正则表达式仍然存在 - 虽然它需要工具来阅读它们,聪明的家伙想办法让它们可维护.虽然我不确定流畅的界面是最好的方法,但我确信有些聪明的工程师 - 我们呢?;) - 应该花一些时间让正则表达式成为过去 - 这已经足够让他们和我们在一起已有50年了,你不觉得吗?
开放的BOUNTY
对于正则表达式的新方法,赏金将被授予最佳想法(无需代码).
编辑 - 一个很好的例子:
这是我正在谈论的那种模式 - 对能够翻译它的第一个人的额外荣誉 …
maintainability ×10
performance ×3
java ×2
javascript ×2
readability ×2
algorithm ×1
architecture ×1
arrays ×1
c ×1
c# ×1
code-metrics ×1
embedded ×1
event-driven ×1
jquery ×1
json ×1
mysql ×1
node.js ×1
php ×1
regex ×1
stm32 ×1
string ×1
time ×1
unix ×1
year2038 ×1