怎样以后台Demon方式启动关闭MongoDB和Redis

不知道是多少次看到人问怎样以后台方式启动MongoDB,网上搜索了一下,其实写这个的文章还是挺多的。不过看完发现大家都只写了怎么启动,却没写如何关闭。而且我又想凑个数刷个关键字,于是记下这篇。

update @ 2015-5-26 增加Redis的启动与关闭

一种权重算法及其实现

一大早在V2EX上看到有人讨论一个关于权重的算法,源于题主的面试,他还发了博文,果然,面试他的人夸奖了他的态度。这的确是难得的。

面试官给出的题目如下:

每首歌曲都是一个评分,现在有2000首歌曲,要求实现一个随机播放器,每首歌曲播放的概率应该正比于它的评分,例如评分9.1的歌曲,和评分7.9的歌曲,播放的次数应该是91:79

面试官给出了如下的解决方案:

把评分从小到大排序,之后把根据每首歌的评分,生成一个半闭开区间,然后生成一个随机数,看随机数落在哪个区间,就是选择的那首歌。例如,有三首歌,评分是[1,2,3] 那么应该是生成三个区间 [0-1,1-3,3-6],之后生成一个0-6之间的随机数,随机数落在哪个区间,就选择对应的歌曲。

被面试的人后来给出的解决方案是:

假定每个评分只到小数点后一位,那么其实,利用空间换取时间的思路,只需要把每首歌按照他的评分多少相应的复制多少重复的歌曲,并且把所有的歌曲都扔到一个池子里面,之后从池子里面等概率的选取一首歌就行了。在最坏的情况下,2000首歌曲的评分都是9.9,那么每首歌需要复制99首。

不过其实细想来,这无非就是一个简单的权重问题。权重算法有大量的解决思路,前不久在实现一个小的广告系统时,正好也有权重设置。在这里分享了下我的解决方案吧。

分为三步:

  • 遍历所有项,得到所有项的总权重
  • 再次遍历所有项,给每一项,加一个0到总权重之间的随机值,得到新权重。注意,每项加的都是即时生成的随机数
  • 在第二步遍历的同时,取出新权重最大那一项

那些援助到底可以折算成多少吨黄金?

在微博上看到一个如下的微博:

49年蒋介石把40吨黄金运抵台湾,很多学者认为是台湾经济起飞的原因。毛向阿尔巴尼亚援助100亿,折合黄金1200吨。毛援助越南200亿美金,折合黄金4400吨。仅此两项外援,共计黄金5600吨,那么问题来了:阿尔巴尼亚和越南经济为什么没有起飞呢?顺便说一下:同期中国三千多万农民惨遭饿死。

看到这个吨数,还是很震惊的,对于我等普遍用克来计算黄金价值的人来讲,用吨必然是不习惯的。后面的评论大多也是调侃和漫骂,当然是没有人真的去计算的。

利用Ajax无刷新上传文件到Node.js服务器

最近做一个垂直社区项目,图片上传是现如今社区的标配,何况面向的还是女性用户。后端使用Node.js,图片上传必然是要不刷新不用iframe了。顺便,也测试了一下Coding.net的“演示”功能,的确是方便免费够用,代码传上去基本零配置就可以跑起来了。这篇文章涉及的代码托管在Coding上,最终的例子也是运行在Coding的免费服务器上。

协议与结构

整个上传采用RFC1867协议,即基于HTML表单的文件上传协议。借助这个协议,为表单增加enctype="multipart/form-data",再使用typefileinput控制来选择文件,然后便可用POST方法上传文件。

文件上传时会分段提交,借助Connect的connect-multiparty模块,即可接收各段组合整理为文件,并将文件存到临时目录,我们可再编写其它代码来处理文件。本例中,我们会把文件复制到public目录,以提供web访问。

整个示例程序包括以下几部分:

  • HTML表单,负责文件的选择
  • JavaScript组织表单数据,执行上传
  • Node.js接受上传的文件,并负责文件的移动和组织

示例程序的代码托管在Coding上的Node.js-Ajax-Upload-File,在线演示地址为node-js-ajax-upload-file.codingapp.com

JavaScript奇技淫巧45招

本文是一篇翻译文章,原文信息如下:

JavaScript是一个绝冠全球的编程语言,可用于Web开发、移动应用开发(PhoneGapAppcelerator)、服务器端开发(Node.jsWakanda)等等。JavaScript还是很多新手踏入编程世界的第一个语言。既可以用来显示浏览器中的简单提示框,也可以通过nodebotnodruino来控制机器人。能够编写结构清晰、性能高效的JavaScript代码的开发人员,现如今已成了招聘市场最受追捧的人。

在这篇文章里,我将分享一些JavaScript的技巧、秘诀和最佳实践,除了少数几个外,不管是浏览器的JavaScript引擎,还是服务器端JavaScript解释器,均适用。

本文中的示例代码,通过了在Google Chrome 30最新版(V8 3.20.17.15)上的测试。

上海昆虫博物馆

远离人群,无论是思想还是身体。这话是没错的,尤其是年轻的人。于是2015年第一天,去上海昆虫博物馆!

这昆虫博物馆,还是非常有来头的。法国神父韩伯禄1868年来到中国,脚跟没稳都开始着手建立博物馆,忙活了十多年,终于在1883年建成了自然博物馆,想想那时开埠也不过几十年,他却想着建立自然博物馆。只可惜,上世纪五十年代这博物馆被拆分,昆虫馆便成了中科院的资产。

期货从业资格考试过关心得及学习资料(视频+音频mp3+PDF)

10月的时候,手头比较闲,网上逛的时候看到以前的考试大改名233网校了,想着闲的没事,于是看了一下考试日历,正好11月16号刚好有个期货从业资格考试,看着正好是不大了解的新鲜玩意儿,便打上计划买书报名准备考试了。运气也还比较好,正好通过了。按照惯例,还是喷一点考试心得,发一些准备资料吧。

使用URL直接激活Bootstrap中的tabbable

Bootstrap中的tabbable的确很好用,但是,tab-content不能直接使用url来定位,只能通过鼠标点击来激活。这成了一个限制,不过通过jquery可以轻松的来使用URL直接定位到tabbable中某个tab-content。

如果要实现通过URL来定位相应的tabbable的内容,那需要改变如下几个内容:

  • 删除现有导航和tab-content中class的active值
  • 为相应的导航控制添加一个active的class值
  • 为相应的tab-content添加一个active的class值
    下面的这个js函数可以实现如上的几个操作:
1
2
3
4
5
6
7
8
9
10
11
12
function navigateToTab() {
var TabId = window.location.hash.replace('#', '');
var isTabExists = ($(".tabbable li:contains('" + $("a[href=#" + TabId + "]").html() + "')").html());
if(TabId && undefined != isTabExists) {
//高亮相关连接
$(".tabbable ul li").removeClass('active');
$(".tabbable li:contains('" + $("a[href=#" + TabId + "]").html() + "')").addClass('active');
//呈现相关内容(tab-content)
$(".tab-content .tab-pane").removeClass('active');
$("#" + TabId).addClass('active');
}
}

将上面的函数,放到通用的js文件中,即可在URL后加#和相应的tab-content id来实现定位了。

更新:代码中增加了判断,只有#后面跟的tab-content id存在的时候,才进行相应的激活操作。