2014年3月 ’ 的文章存档

误删大文件的一个可能解救办法

上周在一台 OpenNebula 服务器上操作虚拟机镜像,正在生成和比对镜像文件的 md5 指纹:

# ls -l test.img
-rw-r--r-- 1 root root 10486808576 Oct 12 02:21 test.img

# md5sum test.img

在另一个窗口清理文件的时候不小心误删了这个 10GB 左右的镜像文件:

# rm test.img

这时候行动迅速的话还有时间拯救,因为服务器繁忙,执行 rm 删除 10GB 大文件的时候需要一点时间,利用这点时间切换到另一窗口使用 Ctrl+Z 立刻暂停 md5sum:

[1]+  Stopped                 md5sum test.img

这里利用的一个原理就是,如果有其他程序正在使用这个文件的话,Linux 不会真正删除这个文件(即使执行了 rm 命令)。我们在删除命令 rm 执行完之前暂停 md5sum,这样 test.img 就一直会被 md5um 占用而不会真正被 rm 删除。
阅读全文

JavaScript 语法陷阱

没有一门编程语言是完美的,JavaScript 也不例外,它语法陷阱重重,防不胜防:

  • 加号
  • “with”
  • 分号自动插入
  • 声明提升
  • “eval”
  • 多行字符串
  • 变量泄漏
  • “arguments.callee”

了解和熟悉这些陷阱,并在开发时注意规避它们,可以给我们省去很多麻烦事。

加号

作为二元运算符时,+ 既是数学运算的加法,也是字符串的拼接。另外,它还可以作为一元符号,表示正数。

看看下面的代码:

// 1
console.log( 1 + 2 ); // 3
console.log( "3" + "4" ); // "34"
// 2
console.log( 1 + "3" ); // "13"
console.log( "3" + 1 ); // "31"
// 3
console.log( 1 + null );
console.log( 1 + undefined );
console.log( 1 + NaN );
// 4
console.log( "3" + null );
console.log( "3" + undefined );
console.log( "3" + NaN );
// 5
console.log( 1 + {} );
console.log( 1 + [] );
// 6
console.log( "3" + {} );
console.log( "3" + [] );

 

也许你可以准确的说出第1组代码的结果,甚至第2组也能答上,但剩下的几组你能毫不犹豫地给出答案吗?
阅读全文

一个由Django的save方法引发的bug

bug的产生

我已经很久没碰到让人比较头疼的bug了,前两天的时候碰到了一个。写个文章记录下来。 希望看过文章的同学下次碰到类似bug就不用被烦恼到。

出现问题的这段代码简化过的逻辑大概是这个样子的:

from app.models import User
from celery.task import task

... ...

# 假设我们取到的user的age和name都是None
user = User.objects.get(pk=1)
# 开启两个task来执行任务
update_user_age.delay(user)
update_user_name.delay(user)

# Celery tasks

@task
def update_user_age(user):
    """
    接受一个User实例,然后修改它的年龄
    """
    user.age = 38
    user.save()

@task
def update_user_name(user):
    """
    接受一个User实例,然后修改它的名字
    """
    user.name = 'piglei'
    user.save()

这段代码的执行结果是,user的age和name字段永远 不会都被赋上值 ,要么是有name没有age, 要么有age没有name。

怎么样?能一眼能看出来问题在什么地方吗?如果能看出来的话,可以直接跳到最后一段啦。 不过当时笔者碰到的代码比这个要复杂不少,有一些task是通过django的signals触发 调用的,所以给排查产生了很大的麻烦,花了一些功夫才找到问题。
阅读全文

为什么从事技术的人普遍都比较难沟通?

范 凯

1. 木讷、没礼貌。

做技术需要踏踏实实沉下心来做事情,久而久之就会养成相对内敛一点的性格。如果你碰到一个满口甜言蜜语的技术人员的话,你真的要小心了,这种技术人员往往会给你惹出很大的麻烦,比方说谎报工作成果,在团队内搞风搞雨,搬弄是非,挑拨离间,这是我招人的血泪教训啊。

2. 合作做事情不喜欢汇报进度,比如正在做你的东西,忽然停下不知道干别的什么去了,不等你催他都不跟你讲。

如果是「合作」关系的话,用「汇报」这个字眼显得很有问题。他既然和你是平级的合作关系,凭什么要向你汇报他的工作?要汇报也是只有义务向自己的领导汇报吧。

比方说我手下带的研发团队、产品团队和运营团队共同合作做一个项目。研发工程师没有任何义务向产品人员或者运营人员汇报进度,研发团队只有义务向我汇报工作。那么团队之间怎么加强沟通呢?我采用的办法是:

各个团队把进度汇报到我这里来,我让产品人员每周出一个项目进度周报,邮件群发给所有人,让每个人了解项目的进度。另外,在项目上线前30天开始倒计时,每天下班前,我把项目组所有人召集起来进行一个快速的每日进度的review沟通会。

我采用这种项目管理方式屡试不爽,产品,研发和运营团队协作的效率很高。所以说,出现你说的那种情况在我看来就是领导的失职,产品人员没有权限直接指挥和自己平级的研发人员。是上一级的领导放弃了自己的职责。
阅读全文

老程序员的下场

www

 

长期从事编程活动的程序员都期望在50多岁时能爬到一个足够高的职位,或者能顺利的退休。

但我在这里讨论的可能是一个你还没有想过的问题:如果到那时你失业了呢?

50多岁时你的职业仕途会成为一个问题。如果你有很好的技术,有人雇你,你会有一个很高的职衔,或你是一个专家,或有很好的人际关系,你都有可能找到一个新的职务。

否则,你会从衣食无忧沦落为无家可归。这是真的。我55岁,我的简历会让你感觉非常优秀,10年前我能挣到多达100万美元。现在我是一个流浪汉。我身体不是很好,没有医险,没有牙医。能找到的工作只是一些基本不需要技术的体力劳动,我也干不了。
阅读全文

HTML和CSS是什么玩意儿?

HTML和CSS的一些东西会让你忍不住说“这TM是什么玩意儿!”。以下是困惑、失策和困境这些困扰着HTML和CSS问题清单:

• Dottype的声明
• Box Model的计算问题
• Rem单位和Mobile Safari
• 浮动(float)排在第一
• 浮动(float)和清除浮动(clear)
• 浮动和计算高度
• 浮动元素是块级元素
• 垂直相邻margin的倒塌
• 设计表单的行
• Firefox和<input>按钮
• Firefox按钮的内部轮廓
• 始终在<button>上设置type
• IE浏览器选择器的限制
• 位置解释
• 位置和宽度
• 定位与转换

Dottype的声明

总要有dottype声明。我建议用html5中简单的dottype声明方式

<!DOCTYPE html>

不声明dottype会导致畸形的表单、输入框和其它的一些问题;且会让页面在quirk mode下显示。
阅读全文

话说模式匹配:什么是模式?

一些刚从java转到scala的同学在开发的过程中犹如深陷沼泽,因为很多的概念或风格不确定,scala里有很多的坑,模式匹配也算一个。我整理了一下自己所理解的概念,以及一些例子。这个系列最好有些scala的基本经验,或者接触过一些其他函数式语言。

要理解模式匹配(pattern-matching),先把这两个单词拆开,先理解什么是模式(pattern),这里所讲的模式并不是设计模式里的模式。
而是数据结构上的,这个模式用于描述一个结构的组成。

我们很容易联想到“正则表达”里的模式,不错,这个pattern和正则里的pattern相似,不过适用范围更广,可以针对各种类型的数据结构,不像正则表达只是针对字符串。
比如正则表达式里 “^A.*” 这个pattern 表示以A开头、后续一个或多个字符组成的字符串;
List(“A”, _,  _*) 也是个pattern,表示第一个元素是”A”,后续一个或多个元素的List。
阅读全文

SAE月刊–2014年第3期

 

SAE月刊 2014年第3期

Sina APP Engine
易用、可靠、高效、安全
本期特讯 

 

新浪云计算公开课 3月20日下午,新浪云计算公开课走进高校活动正式拉开序幕,电子科技大学信软学院成为我们本系列活动的第一站。
新浪云计算总负责人、首席架构师丛磊先生以《SAE–让云触手可及》为主题进行演讲,为在座揭开了云计算的神秘面纱。同学们也在了解了新浪云计算的核心PaaS平台SAE(SinaAppEngine)的功能、架构、特色的详细介绍后,积极提问,将现场气氛一度推到沸点。
接下来,新浪云计算公开课还将走进更多高校,让我们期待,共同翱翔在知识海洋的美妙时刻。
【详细】
服务相关
关于3.24 平台故障说明及补偿方案
故障发生后,SAE第一时间和机房交涉,工程师连夜赶赴机房,全体工程师通宵努力,为的就是让大家的应用早日恢复。本次故障也暴露了SAE自身的问题,特别是对核心机房全体断电的突发情况应对不足,SAE愿意在全体用户的监督下,用实际行动进行改进!再次表示诚挚的歉意!【详细】
SAE手机推(Push)服务(IOS版本)上线
手机推(Push)是SAE开发的协助开发者推送手机通知的服务。
使用IOS版本手机推服务,首先请在SAE应用的服务管理列表中找到苹果推送页面,上传证书。证书的生成请参考苹果官方文档。证书上传成功后可通过调用SAE手机推服务接口推送手机通知。
【详细】 

 

技术资源
SAE技术微博精选(最新)
1.《JSON资料整理》
2.《Java的一个安全框架:Apache Shiro》
3.《七天学会NodeJS》
4.《Python教程》
5.《深入浅出大话索引》
6.《如何正确配置Nginx+PHP》
7.《两种高性能I/O设计模式(Reactor/Proactor)的比较》
8.《一张图帮你了解App开发全貌》
9.《正则表达式30分钟入门教程》
10.《软件构建实践》
11.《如何为豆瓣FM写一个chrome的歌词插件》
 
12.《加盐hash保存密码的正确方式》
13.《使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制》
14.《Linux基础篇之文本、数据流处理命令》
15.《怎样编写高质量的java代码》
16.《写给Python初学者的设计模式入门》
17.《开源日志系统比较》
18.《C语言、内存分配、地址、指针、数组、参数、实例、解析》
19.《理解RESTful架构》
20.《排名前八的 PHP 调试工具》
21.《关于 Apache 的 25 个初中级面试题》
22.《JAVA 多线程和并发基础面试问答》
23.《How to Create a Python Library》

访问SAE
扫描二维码 扫一扫,获取优质技术资源
关注微信:Sina APP Engine
关注新浪微博
如果您有任何疑问或建议,请联系我们,欢迎发邮件到saemail@sina.cn,或到开发者论坛交流反馈。

 

iTerm 好用在哪儿

terminal

 

iTerm 装了好久,但一直都还是在用系统自带的 Terminal.app, 原因主要是完全没发现 iTerm 有什么明显的优点,外加它的图标真的是很丑… 直到我看到 iTerm help 中 Highlights for New Users 这项,总结下来比较有用的是以下几点:

1. Mouseless Copy

cmd-f -> tab

2. Split Panes

cmd-d (vertically) / cmd-shift-d (horizontally)

navigate among split panes: cmd-opt-arrow

3. System Wide Hotkey

Preferences > Keys. Enable “Show/Hide iTerm2 with a system-wide hotkey”

4. Save Mark/Jump to Mark

cmd-shift-M / cmd-shift-J

5. Autocomplete

cmd-;

6. Paste History

cmd-shift-H

7. Instant Replay

cmd-opt-B / Esc

这个功能比较给力,可以看到之前特定时刻的显示信息,比如特定时间点 top 的显示。

8. Full Screen

cmd-Enter

9. Exposé Tabs

cmd-opt-E

和 Chrome 的 Tab Overview (cmd-ctrl-T) 类似,标签页缩略图

10. Appearance

theme

原生的 theme 看着都不是太舒服,这里 提供了一些备选,我用的是 Novel.itermcolors 如图
阅读全文

编程范式,程序员的编程世界观

编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式。随着编程方法学和软件工程研究的深入,特别是OO思想的普及,范式(Paradigm)以及编程范式等术语渐渐出现在人们面前。面向对象编程(OOP)常常被誉为是一种革命性的思想,正因为它不同于其他的各种编程范式。编程范式也许是学习任何一门编程语言时要理解的最重要的术语。

托马斯.库恩提出“科学的革命”的范式论之后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词。编程范式一般包括三个方面,以OOP为例:

  1. 学科的逻辑体系——规则范式:如类/对象、继承、动态绑定、方法改写、对象替换等等机制。
  2. 心理认知因素——心理范式:按照面向对象编程之父Alan Kay的观点,“计算就是模拟”。OO范式极其重视隐喻(metaphor)的价值,通过拟人化,按照自然的方式模拟自然。
  3. 自然观/世界观——观念范式:强调程序的组织技术,视程序为松散耦合的对象/类的集合,以继承机制将类组织成一个层次结构,把程序运行视为相互服务的对象们之间的对话。

简单的说,编程范式是程序员看待程序应该具有的观点。
阅读全文