Tag: 程序设计
在LINUX下, 你可以通过安装 sendmail 程序并通过 mail 命令方便的发邮件. 在WINDOWS下, 你可以通过以下VBSCRIPT在WINDOWS的宿主脚本环境(Windows Scripting Host)下运行. ' VBScript to Send Email Notification ' Author: https://helloacm.com ' Usage: cscript.exe sendemail.vbs email subject text ' 23/Dec/2014 Sub SendEmail(ToAddress, Subject, Text) …
.NET 4.0 之后 (e.g. 4.5) 添加了并行 For, ForEach 的支持.如果你的代码里有很多处 SIMD (单指令,多数据 Single Instruction Multiple Data). 就可以通过 Parallel.For 和 Parallel.ForEach 来进行多线程.使用方法非常简单:你不需要再手动创建几个线程,然后同时启动多线程,并等待它们的执行(同步). 首先,你需要引用这两个单元. using System.Threading; using System.Threading.Tasks; 为了演示方便,建立了一个长度为10的数组,元素是 Double 类型. double …
在做代码审核的时候,发现有一同事写了这样的代码.出现这种代码只能说明工作压力山大, 都不思考了. 不需要注释也能看明白,意思就是想获取一个唯一的临时文件,用了 Path.GetRandomFileName() 得到一个随机文件名,并且用 Path.GetTempPath() 得到临时文件夹.问题是他觉得这样不保险,于是就不停的尝试,如果文件存在的话,就试着下一个随机的文件名,直到不重复(或者最大尝试 100 次), 看到这里, 真是醉了. 另一个小问题就是,这个 while 还每次判断 文件名是否为空,这个只有在第一次判断的时候才为空,之后都不可能为空的,这样的代码质量真的很低. C# (.NET) 里 Path.GetTempFileName() 创建一个临时文件,并返回这个文件名.创建文件名的好处是这样就能确定该文件是唯一的, 因为其它进程在执行这个函数的时候如果文件名存在,则会获取下一个临时文件名并创建.每次都能保证唯一,而不会出现多个进程获取得到同样的文件名. 该程序员想的是,获取一个文件名(并不着急创建),之后再创建,感觉就是脱裤子放屁,多此一举,因为获取临时文件名就是肯定要创建该文件的,不创建的话获取文件名干什么? 代码审核很重要,因为这段代码平常来说是不会出问题的,但是效率实在不敢恭唯. 实际上,上面的代码完全可以替换成下面的代码(不会创建文件名), 这样的结合会更加实用些 (而且更简便, 高效) public static …
2014年11月13日
BASH, BASH, I.T., 学习笔记, 技术, 折腾, 杂乱, 程序设计, 网站信息与统计, 计算机, 计算机
大部分VPS或者虚拟主机服务器什么的都是基于 Linux 系统 (其它操作系统像 Windows 不太适合做服务器, 一则是价钱贵, 二是不稳定) Linux 系统主要是命令行界面, 多任务多用户系统. 强大的地方在于如果配置好的话, 完全可以拔掉显示器键盘鼠标等, 只接电源放几个月甚至几年都不会出问题. 这篇贴子介绍了备份数据(库)的一种思路. 这篇帖子则介绍如何在发现有问题的访问后就禁止掉该IP. 有一个非常好的办法就是经常监控比较耗资源(CPU或内存)的进程, 及时发现问题. 我们可以在LINUX下创建一个脚本, 含有以下内容, 并且 chmod +x 后可以直接在命令行下运行. #!/bin/bash #helloacm.com echo "-------`date`--------" echo …
Matlab 在做研究处理数据方面是非常方便的.往往只需要一两行代码就可以省去你敲C++代码几百行.因为在 Matlab 里, 很多函数,功能都是现成的,所以你完全可以不必要 reinvent the wheels. Matlab 的长处是处理矩阵,数据,可视化等.比如有一些三维向量,或者说是射线,那么单看数据你可能发现不了问题,最好的方法就是用 Matlab 提供的 quiver3 命令将其在三维空间中展示出来. 命令 quiver3 需要指定6个参数,x, y, z, u, v, w 其中 x, y, z 是点的位置(射线点),u, v, w …
我在 stackoverflow 上问了这个问题: inline int test(int n, int tag, int flag) { if (0 == flag) return ((n & tag) == tag); return ((n & tag) != tag); } …
再NB的程序员也有可能写出很垃圾的代码,特别是没睡醒的情况下.所以代码审核就显得尤其的重要. 当一个开发项目即将完工或者一个BUG修复时,尽管已经通过了测试,但是还是需要有一些人专门针对上传的代码进行审核 (Review). 有些代码是一般不会造成问题, 但是却有可能会效率低下,比如: 很有意思,有一同事写了这样的代码,其实本意是想把一个角度限制在 0 到 360 度之间,但是是浮点角度,也许他认为不知道怎么对浮点数取余,所以就这样设计代码,不停的减,不停的加360度, 至到在范围内. 且不说这样做的效率,浮点数不断多次的运算会造成误差.如果这个角度极大或极小,则这两个循环则非常的费时.这是有可能测试人员无法测出来的,不经过代码审核是不会发现问题的. C#里是支持浮点取余的(不过得注意符号,负数的取余也是负数), 即使不支持,也可以通过: double fmod(double a, double b) { return a - b * (int)(a / b); } …