一个令人失望的短信平台
竟然通过容忍短信轰炸给客户带来的损失,赚钱黑心的短信差价。
没有最起码的短信异常检测机制。
大家都是搞技术的。
难道是你们公司太小,技术不行吗?
短信余额不足你咋检测到了,也通知我们该给钱了
短信消耗量比平日多几千倍你就检测不到了?通知我们发送异常很难吗?
如果实在是技术不济,还做什么短信平台,技术团队全部回家种地去吧。
费用比别家高,你把服务提上来啊?
啥都不行也就这样了。
再见了,云片网。你差同行太远了。
-
再见了,云片短信,轰炸与信任的选择
-
mongo操作日志
数据导出
mongodump -u never -p --authenticationDatabase admin -d dbnamexxx -o /data/db/bak/dbnamexxx
mongorestore -u never -p --authenticationDatabase admin -d dbnamexxx /data/db/db_bak/dbnamexxx
-
PostgreSQL 启动失败 No space left on device
PostgreSQL 启动失败
>FATAL: could not create semaphores: No space left on device
< 2015-10-07 22:00:26.817 CST >DETAIL: Failed system call was semget(1, 17, 03600)上述的空间不够不是指的是磁盘空间不够,而是创建semaphores时空间参数不够,系统调用参数semget报错,但是错误信息感觉有些迷惑……解决办法通常是减小max_connections,或者增大内核参数,如semmni,semmns等,在/proc/sys/kernel/sem里面调整,如
[root@localhost ~]# sysctl -w kernel.sem="500 64000 50 150"
kernel.sem = 500 64000 50 150
[root@localhost ~]# cat /proc/sys/kernel/sem
500 64000 50 150 -
virtualbox下 共享目录权限导致npm安装失败:npm ERR! ETXTBSY, rename
virtualbox下 共享目录权限导致:npm ERR! ETXTBSY, rename ‘/home/vagrant/.npm/….
解决办法:
npm config set cache /var/.npm
or
直接修改缓存目录
npm config edit
-
CentOS6 安装MongoDB及服务器端配置
运行yum命令查看MongoDB的包信息
um info mongo-10gen
(提示没有相关匹配的信息,) 说明你的centos系统中的yum源不包含MongoDB的相关资源,所以要在使用yum命令安装MongoDB前需要增加yum源,也就是在 /etc/yum.repos.d/目录中增加 *.repo yum源配置文件
vi /etc/yum.repos.d/10gen.repo,输入下面的语句:
[10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0
做好yum源的配置后,如果配置正确执行下面的命令便可以查询MongoDB相关的信息:
查看mongoDB的服务器包的信息
yum info mongo-10gen-server
安装MongoDB的服务器端和客户端工具
yum install mongo-10gen-server yum install mongo-10gen
-
centos 6.4 安装Atomic源
centos6.4 默认源,163源都不给力
安装Atomic源
wget -q -O – http://www.atomicorp.com/installers/atomic | sh
安装完后在/etc/yum.repos.d/目录会有一个atomic.repo文件。Atomic仓库支持哪些软件可以到这个地址查看:http://www.atomicorp.com/channels/atomic/有php、mysql、nginx、openvas、memcached、php-zend-guard-loader等软件,版本也比较新 -
MongoDB 地理位置索引的实现原理
地理位置索引支持是MongoDB的一大亮点,这也是全球最流行的LBS服务foursquare 选择MongoDB的原因之一。我们知道,通常的数据库索引结构是B+ Tree,如何将地理位置转化为可建立B+Tree的形式,下文将为你描述。
首先假设我们将需要索引的整个地图分成16×16的方格,如下图(左下角为坐标0,0 右上角为坐标16,16):
单纯的[x,y]的数据是无法建立索引的,所以MongoDB在建立索引的时候,会根据相应字段的坐标计算一个可以用来做索引的hash值,这个值叫做geohash,下面我们以地图上坐标为[4,6]的点(图中红叉位置)为例。
我们第一步将整个地图分成等大小的四块,如下图:
划分成四块后我们可以定义这四块的值,如下(左下为00,左上为01,右下为10,右上为11):
01 11 00 10 这样[4,6]点的geohash值目前为 00
然后再将四个小块每一块进行切割,如下:
这时[4,6]点位于右上区域,右上的值为11,这样[4,6]点的geohash值变为:0011
继续往下做两次切分:
最终得到[4,6]点的geohash值为:00110100
这样我们用这个值来做索引,则地图上点相近的点就可以转化成有相同前缀的geohash值了。
我们可以看到,这个geohash值的精确度是与划分地图的次数成正比的,上例对地图划分了四次。而MongoDB默认是进行26次划分,这个值在建立索引时是可控的。具体建立二维地理位置索引的命令如下:
db.map.ensureIndex({point : "2d"}, {min : 0, max : 16, bits : 4})
其中的bits参数就是划分几次,默认为26次。
-
利用Bucardo 将PostgresSQL数据同步到MongoDB
Bucardo 是一个用 Perl 语言编写的 PostgreSQL的多Master节点复制系统
它支持任意方式的同步,以下是同步到mongodb的说明
参考:http://blog.endpoint.com/2011/06/mongodb-replication-from-postgres-using.html -
思考
有两种方式构建软件设计:一种是把软件做得很简单以至于明显找不到缺陷;另一种是把它做得很复杂以至于找不到明显的缺陷。
一个人,一定要想清楚自己五年后要做什么,不要只看着眼前。
-
百度地图 JavaScript API 说明
http://developer.baidu.com/map/jsdemo.htm
基础应用
1.创建地图: var map = new BMap.Map(“divid”);
2.创建坐标点:var point = new BMap.Point(“经度”,”纬度”);
3.设置视图中心点:map.centerAndZoom(point,size);
4.激活滚轮调整大小功能:map.enableScrollWheelZoom();
5.添加控件:map.addControl(new BMap.Xxx());
6.添加覆盖物:map.addOverlay();
控件介绍
1.NavigationControl:缩放地图的控件,默认在左上角;
2.OverviewMapControl:地图的缩略图的控件,默认在右下方;
3.ScaleControl:地图显示比例的控件,默认在左下方;
4.MapTypeControl:地图类型控件,默认在右上方;
1.标注:Marker
(1)在point处添加标注:var marker = new BMap.Marker(point);
(2)添加覆盖物:map.addOverlay(marker);
(3)激活标注的拖拽功能:marker.enableDragging();
(4)为标注添加事件:marker.addEventListener(“名称”,function(){
//点击标注后的事件
});
(5)删除覆盖物:map.removeOverlay(marker);
(6)销毁标注:marker.dispose();
2.信息窗口:InfoWindow
(1)在某个特定的位置创建一个信息窗口:var infowindow = new BMap.InfoWindow(“内容”,{width:250,height:100,title:”hello”});
(2)在地图中央打开信息窗口:map.openInfoWindow(infoWindow,map.getCenter());
获取坐标:
http://developer.baidu.com/map/static/doc/Reference_of_Baidu_JavaScript_API_v1.4.pdf
http://developer.baidu.com/map/static/doc/Guide_for_Baidu_JavaScript_API_v1.4.pdf
http://api.map.baidu.com/lbsapi/getpoint/index.html
http://api.map.baidu.com/lbsapi/creatmap/index.htmltest code:
function initialize() { var map = new BMap.Map('map'); var point = new BMap.Point(112.550864,37.890277); map.centerAndZoom(point, 12); /* * 缩放控制按钮 * BMAP_NAVIGATION_CONTROL_LARGE 表示显示完整的平移缩放控件。 * BMAP_NAVIGATION_CONTROL_SMALL 表示显示小型的平移缩放控件。 * BMAP_NAVIGATION_CONTROL_PAN 表示只显示控件的平移部分功能。 * BMAP_NAVIGATION_CONTROL_ZOOM 表示只显示控件的缩放部分功能。 * */ var opts = {type: BMAP_NAVIGATION_CONTROL_ZOOM} map.addControl(new BMap.NavigationControl(opts)); /* * 那个破尺子 可以调整它所在的位置 * */ //var opts = {offset: new BMap.Size(15, 5)} //map.addControl(new BMap.ScaleControl(opts)); /* * 此类表示缩略地图控件 就是右下角的那个小地图 */ map.addControl(new BMap.OverviewMapControl()); /* * 显示其它类型的地图 三维 卫星 */ //map.addControl(new BMap.MapTypeControl()); //map.setCurrentCity("北京"); /* map.addEventListener('click', function(e){ alert(e.point); });*/ /* * 从这里我们标注地图 */ var icon = new BMap.Icon('pin.png', new BMap.Size(20, 32), { anchor: new BMap.Size(10, 30) }); var infowindow = new BMap.InfoWindow("内容",{width:250,height:100,title:"hello"}); //map.openInfoWindow(infowindow,map.getCenter()); var myLabel = new BMap.Label("海辉房产 21000元", //为lable填写内容 {offset:new BMap.Size(-60,-60), //label的偏移量,为了让label的中心显示在点上 position:point}); //label的位置 myLabel.setTitle("我是文本标注label"); //为label添加鼠标提示 map.addOverlay(myLabel); //把label添加到地图上 var circle = new BMap.Circle(point,5000); map.addOverlay(circle); var mkr =new BMap.Marker(point, { //icon: icon, enableDragging: true, raiseOnDrag: true }); map.addOverlay(mkr); mkr.addEventListener('dragend', function(e){ //这里可以把获取到的经纬度存到数据库里去 console.log(e.point.lng +', '+e.point.lat); }) } function loadScript() { var script = document.createElement("script"); script.src = "http://api.map.baidu.com/api?v=1.4&callback=initialize"; document.body.appendChild(script); } window.onload = loadScript;