• 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):

    map1

    单纯的[x,y]的数据是无法建立索引的,所以MongoDB在建立索引的时候,会根据相应字段的坐标计算一个可以用来做索引的hash值,这个值叫做geohash,下面我们以地图上坐标为[4,6]的点(图中红叉位置)为例。

    我们第一步将整个地图分成等大小的四块,如下图:

    map2

    划分成四块后我们可以定义这四块的值,如下(左下为00,左上为01,右下为10,右上为11):

    01 11
    00 10

    这样[4,6]点的geohash值目前为 00

    然后再将四个小块每一块进行切割,如下:

    map3

    这时[4,6]点位于右上区域,右上的值为11,这样[4,6]点的geohash值变为:0011

    继续往下做两次切分:

    map4

    map5

    最终得到[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:地图类型控件,默认在右上方;

    map.addControl()方法添加控件;

    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.html

    test 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;
     
    
  • 省市数据 json格式 mysql格式

    两种数据

    {"北京":["西城","东城","崇文","宣武","朝阳","海淀","丰台","石景山","门头沟","房山","通州","顺义","大兴","昌平","平谷","怀柔","密云","延庆"],"天津":["青羊","河东","河西","南开","河北","红桥","塘沽","汉沽","大港","东丽","西青","北辰","津南","武清","宝坻","静海","宁河","蓟县","开发区"],"河北":["石家庄","秦皇岛","廊坊","保定","邯郸","唐山","邢台","衡水","张家口","承德","沧州","衡水"],"山西":["太原","大同","长治","晋中","阳泉","朔州","运城","临汾"],"内蒙古":["呼和浩特","赤峰","通辽","锡林郭勒","兴安"],"辽宁":["大连","沈阳","鞍山","抚顺","营口","锦州","丹东","朝阳","辽阳","阜新","铁岭","盘锦","本溪","葫芦岛"],"吉林":["长春","吉林","四平","辽源","通化","延吉","白城","辽源","松原","临江","珲春"],"黑龙江":["哈尔滨","齐齐哈尔","大庆","牡丹江","鹤岗","佳木斯","绥化"],"上海":["浦东","杨浦","徐汇","静安","卢湾","黄浦","普陀","闸北","虹口","长宁","宝山","闵行","嘉定","金山","松江","青浦","崇明","奉贤","南汇"],"江苏":["南京","苏州","无锡","常州","扬州","徐州","南通","镇江","泰州","淮安","连云港","宿迁","盐城","淮阴","沐阳","张家港"],"浙江":["杭州","金华","宁波","温州","嘉兴","绍兴","丽水","湖州","台州","舟山","衢州"],"安徽":["合肥","马鞍山","蚌埠","黄山","芜湖","淮南","铜陵","阜阳","宣城","安庆"],"福建":["福州","厦门","泉州","漳州","南平","龙岩","莆田","三明","宁德"],"江西":["南昌","景德镇","上饶","萍乡","九江","吉安","宜春","鹰潭","新余","赣州"],"山东":["青岛","济南","淄博","烟台","泰安","临沂","日照","德州","威海","东营","荷泽","济宁","潍坊","枣庄","聊城"],"河南":["郑州","洛阳","开封","平顶山","濮阳","安阳","许昌","南阳","信阳","周口","新乡","焦作","三门峡","商丘"],"湖北":["武汉","襄樊","孝感","十堰","荆州","黄石","宜昌","黄冈","恩施","鄂州","江汉","随枣","荆沙","咸宁"],"湖南":["长沙","湘潭","岳阳","株洲","怀化","永州","益阳","张家界","常德","衡阳","湘西","邵阳","娄底","郴州"],"广东":["广州","深圳","东莞","佛山","珠海","汕头","韶关","江门","梅州","揭阳","中山","河源","惠州","茂名","湛江","阳江","潮州","云浮","汕尾","潮阳","肇庆","顺德","清远"],"广西":["南宁","桂林","柳州","梧州","来宾","贵港","玉林","贺州"],"海南":["海口","三亚"],"重庆":["渝中","大渡口","江北","沙坪坝","九龙坡","南岸","北碚","万盛","双桥","渝北","巴南","万州","涪陵","黔江","长寿"],"四川":["成都","达州","南充","乐山","绵阳","德阳","内江","遂宁","宜宾","巴中","自贡","康定","攀枝花"],"贵州":["贵阳","遵义","安顺","黔西南","都匀"],"云南":["昆明","丽江","昭通","玉溪","临沧","文山","红河","楚雄","大理"],"西藏":["拉萨","林芝","日喀则","昌都"],"陕西":["西安","咸阳","延安","汉中","榆林","商南","略阳","宜君","麟游","白河"],"甘肃":["兰州","金昌","天水","武威","张掖","平凉","酒泉"],"青海":["黄南","海南","西宁","海东","海西","海北","果洛","玉树"],"宁夏":["银川","吴忠"],"新疆":["乌鲁木齐","哈密","喀什","巴音郭楞","昌吉","伊犁","阿勒泰","克拉玛依","博尔塔拉"],"香港":["中西区","湾仔区","东区","南区","九龙-油尖旺区","九龙-深水埗区","九龙-九龙城区","九龙-黄大仙区","九龙-观塘区","新界-北区","新界-大埔区","新界-沙田区","新界-西贡区","新界-荃湾区","新界-屯门区","新界-元朗区","新界-葵青区","新界-离岛区"],"澳门":["花地玛堂区","圣安多尼堂区","大堂区","望德堂区","风顺堂区","嘉模堂区","圣方济各堂区","路氹城"]}
    

    中国省市区三级数据库表 txt

  • PhpStorm的一些快捷键说明

    . ctrl + shift + n: 打开工程中的文件
    . ctrl + j: 输出模板
    . ctrl + b: 跳到变量申明处
    . ctrl + alt + T: 围绕包裹代码(包括zencoding的Wrap with Abbreviation), ctrl + shift + del: 删除包裹
    . ctrl + []: 匹配 {}[]
    . ctrl + F12: 可以显示当前文件的结构,快速跳转到目标函数
    . ctrl + x: 剪切行
    . alt + left/right:标签切换
    . ctrl + r: 替换 ctrl + shift + r: 全局替换
    . ctrl + shift + up: 行移动
    . shift + alt + up: 块移动
    . ctrl + d: 行复制
    . ctrl + shift + ]/[: 选中块代码<table>….</table>
    . ctrl + / : 单行注释
    . ctrl + shift + / : 块注释
    . ctrl + shift + i : 显示当前class,function的详细信息
    . ctrl + p: 显示默认参数
    . ctrl + shift + v: 可以复制多个文本
    . shift + enter: 智能跳到下一行
    . ctrl + k: svn 提交
    . ctrl + shift + u: 大小写
    . ctrl + ~ : 切换主题
    . ctrl + F11: 添加标签 ctrl + shift + 大键盘数字键
    . ctrl + alt + F12: file path
    . ctrl + alt + a: search keymap
    . shift + F6: 重构标签名
  • 帝国目录权限修改脚本

    #! /bin/sh
    chmod 777 d/ -Rf
    chmod 777 s/ -Rf
    chmod 777 search/ -Rf
    chmod 777 html/ -Rf
    chmod 777 index.html -Rf
    chmod 777 e/data/ -Rf
    chmod 777 e/install/ -Rf
    chmod 777 e/admin/ebak/bdata/ -Rf
    chmod 777 e/admin/ebak/zip/ -Rf
    chmod 777 e/class/config.php
    chmod 777 e/class/user.php
    chmod 777 e/member/iframe/index.php
    chmod 777 e/member/login/loginjs.php
    chmod 777 e/pl/more/index.php
    chmod 777 e/sch/index.php
    chmod 777 e/tool/feedback/temp/ -Rf
    chmod 777 e/tool/gbook/index.php

  • IE里Cookie跨域不能读取

    1.页面里的COOKIE不能是浏览器进程的COOKIE(包括验证票和不设置超时时间的COOKIE),否则跨域会取不到.这点做跨域COOKIE的人比较少提到.不过实际上留意下几家大学做的方案,有细微的提到他们的验证模块里的COOKIE是有设置超时时间的.

    2.当利用IFRAME时,记得要在相应的动态页的页头添加一下P3P的信息,否则IE会自觉的把IFRAME框里的COOKIE给阻止掉,产生问题.本身不保存自然就取不到了.这个其实是FRAMESET和COOKIE的问题,用FRAME或者IFRAME都会遇到.

    3.测试时输出TRACE,会减少很多测试的工作量.

    只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。他们所用的内容是:

    P3P: CP=’CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR’

    ASP直接在头部加了头部申明,测试有效。
    <%Response.AddHeader "P3P", "CP=CAO PSA OUR"%>

    php的话,应该是如下写法:
    -PHP
    header('P3P: CP=CAO PSA OUR');

    ASP.NET的话
    通过在代码上加
    -C#
    Response.AddHeader("P3P", "CP=CAO PSA OUR");

    或者在Window服务中将ASP.NET State Service 启动。

    JSP:
    response.setHeader("P3P","CP=CAO PSA OUR")

    英语原文解析
    You can add a P3P compact policy header to your child content, and you can declare that no malicious actions are performed with the data of the user. If Internet Explorer detects a satisfactory policy, then Internet Explorer permits the cookie to be set.

    Visit the following MSDN Web site for a complete list of satisfactory and unsatisfactory policy codes:

    Privacy in Internet Explorer 6
    http://msdn.microsoft.com/workshop/security/privacy/overview/privacyie6.asp
    A simple compact policy that fulfills this criteria follows:

    P3P: CP=”CAO PSA OUR”

    This code sample shows that your site provides you access to your own contact information (CAO), that any analyzed data is only “pseudo-analyzed”, which means that the data is connected to your online persona and not to your physical identity (PSA), and that your data is not supplied to any outside agencies for those agencies to use (OUR).

    You can set this header if you use the Response.AddHeader method in an ASP page. In ASP.NET, you can use the Response.AppendHeader method. You can use the IIS Management Snap-In (inetmgr) to add to a static file.

    Follow these steps to add this header to a static file:

    1. Click Start, click Run, and then type inetmgr.
    2. In the left navigation page, click the appropriate file or directory in your Web site to which you want to add the header, right-click the file, and then click Properties.
    3. Click the HTTP Headers tab.
    4. In the Custom HTTP Headers group box, click Add.
    5. Type P3P for the header name, and then for the compact policy string, type CP=…, where “…” is the appropriate code for your compact policy.

    Alternatively, Internet Explorer users can modify their privacy settings so that they are prompted to accept third party content. The following steps show how to modify the privacy settings:

    1. Run Internet Explorer.
    2. Click Tools, and then click Internet Options.
    3. Click the Privacy tab, and then click Advanced.
    4. Click to select the Override automatic cookie handling check box.
    5. To allow ASP and ASP.NET session cookies to be set, click to select the Always allow session cookies check box.
    6. To receive a prompt for any type of third party cookie, click Prompt in the Third-party Cookies list.