• 百度地图 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: 重构标签名
  • npm常用命令(nodejs)

    npm install <name>安装nodejs的依赖包

    例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6

    npm install <name> -g 将包安装到全局环境中

    但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令

    npm install <name> –save 安装的同时,将信息写入package.json中

    项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包

    这样代码提交到github时,就不用提交node_modules这个文件夹了。

    npm init 会引导你创建一个package.json文件,包括名称、版本、作者这些信息等

    npm remove <name>移除

    npm update <name>更新

    npm ls 列出当前安装的了所有包

    npm root 查看当前包的安装路径

    npm root -g 查看全局的包的安装路径

    npm help 帮助,如果要单独查看install命令的帮助,可以使用的npm help install

  • tar 压缩/解压包

    tar包压缩的时候用cvf参数,解压的时候用xvf参数
    或压缩的时候用czvf参数,解压的时候用xzvf参数

    bz 包遇到了,就把z参数换成相应j参数

  • centos6 安装spawn-fcgi No package spawn-fcgi available.

    32位centos6:

    http://mirrors.neusoft.edu.cn/epel/5/i386/repoview/epel-release.html
    
    rpm -Uvh http://mirrors.neusoft.edu.cn/epel/5/i386/epel-release-5-4.noarch.rpm

    64位centos6:

    rpm -Uvh http://mirrors.neusoft.edu.cn/epel/5/x86_64/epel-release-5-4.noarch.rpm
    
    yum install spawn-fcgi
  • 墨菲定律

    1.别试图教猫唱歌,这样不但不会有结果,还会惹猫不高兴。
    2.别跟傻瓜吵架,不然旁人会搞不清楚,到底谁是傻瓜。
    3.不要以为自己很重要,因为没有你,太阳明天还是一样从东方升上来。
    4.笑一笑,明天未必比今天好。
    5.好的开始,未必就有好结果;坏的开始,结果往往会更糟。
    6.你若帮助了一个急需用钱的朋友,他一定会记得你——在他下次急需用钱的时候。
    7.有能力的——让他做;没能力的──教他做;做不来的──管理他。
    8.你早到了,会议却取消;你准时到,却还要等;迟到,就是迟了。
    9.你携伴出游,越不想让人看见,越会遇见熟人。
    10.你爱上的人,总以为你爱上他是因为:他使你想起你的老情人。
    11.你最后硬着头皮寄出的情书;寄达对方的时间有多长,你反悔的时间就有多长。
    12.东西越好,越不中用。
    13.一种产品保证60天不会出故障,等于保证第61天一定就会坏掉。
    14.东西久久都派不上用场,就可以丢掉;东西一丢掉,往往就必须要用它。
    15.你丢掉了东西时,最先去找的地方,往往也是可能找到的最后一个地方。
    16.你往往会找到不是你正想找的东西。
    17.你出去买爆米花的时候,银幕上偏偏就出现了精彩镜头。
    18.另一排总是动的比较快;你换到另一排,你原来站的那一排,就开始动的比较快了;你站的越久,越有可能是站错了排。
    19.一分钟有多长? 这要看你是蹲在厕所里面,还是等在厕所外面。
    20、计划没有变化快。
    21、欠帐总是要还的。
    22、做恶总是要遭报应的,现在未报,不是不报,只是时候未到。
    23、该来的总是要来的。
    24、明天又是一个新的开始。
    25、你越是害怕的事物,就越会出现在你的生活中。
    26、往往等公车太久没来,就走了的人,刚走公车就来了。
    27、关键时刻掉链子。
    28、越想要什么就越能得到什么。
    29、人出来混,总是要还的。
  • 移动互联网产品设计的原则

    1、 绝不考虑Web形态,一切考虑都基于APP。

    2、 产品优先级:

    (1)有趣高于功能。产品必须有趣,必须Cool,才可能形成传播和口碑。

    (2)功能高于交互。明确的功能满足明确的需求,用户不会在意炫酷交互效果。

    (3)交互高于UI。便捷、快速的交互设计为先,围绕具体功能实现UI,而非有优质UI方案为此专门设立一个功能。

    3、 聚焦:一个APP只做一件事情,一个大而全的APP意味着全面的平庸。

    4、 永远一维化:让用户在一个维度里解决具体的问题,Twitter的Timeline就是一个好的范例。而类似Facebook、Path那样的滑出式菜单则是一个灾难,因为这使得产品拥有两个维度,加大了用户理解的困难。

    5、 保持主干清晰,枝干适度。产品的主要功能架构是产品的骨骼,它应该尽量保持简单、明了,不可以轻易变更,让用户无所适从。次要功能丰富主干,不可以喧宾夺主,尽量隐藏起来,而不要放在一级页面。

    6、 不要让用户选择。同一个页面之内,有多个入口;同一个功能,有多个实现方式;同一个界面,有多个展示方式。这对于用户来说是一种痛苦而非享受,因为他们只会因此而感觉到困惑和恐惧。用户宁可采取重复操作漫长而固定的操作路径,也不愿意使用多变的快捷方式。

    7、 隐藏技术,永远展现简单的、人性化的、符合人类直觉的界面。开发不可以为了炫技而展示功能,产品不可以为了炫耀而功能堆砌。

    8、 拒绝个性化。除了依靠设计特色而立身的APP,换肤一类的个性化设计,除了让产品经理幻觉自己做了许多工作而自我满足之外,没有任何价值。它只能证明产品经理对自己的产品不自信,因为自信的产品经理凭借默认皮肤就可以满足用户。延伸开去,一个好的产品,其功能应该满足全球用户需求,无需为地区做特别定制化。

    9、 产品一定程度上是为了满足人性中的贪嗔痴,这是用户的痛点。能把握住之后,产品经理应该超越其上,用产品帮助人们得以解脱。

    10、想清楚自己究竟要做什么,不去迎合上司,不去讨好用户,不去取悦自己。

    11、分类!分类!分类!这是产品经理在确定产品主要功能构架之后,唯一应该为用户做的事情。分类无助于降低产品使用的难度,但是可以帮助用户认知产品和周边的世界。

    12、永远围绕功能而做设计,永远不要倒过来做这件事情。

    13、一个产品的基本功能不受用户认可,做加法也无济于事。

    14、想不清楚一个功能点之前,宁可不做。

    15、千万不要让用户在产品里“管理”什么。

  • 使用nginx作图片服务器的访问权限控制

    说到访问权限控制,很多看了nginx相关文章的朋友都会自然联想到X-Accel-Redirect这个头。这个头有个缺陷,就是所有的访问都会先经过一个fastcgi来判断权限。在下载系统上,用这个方法是非常合适的,但是在访问量非常大的图片服务器,单单用这个方法会使大量无需权限判定的图片也经过一个fastcgi处理,多此一举并且无端耗费大量的资源。虽然X-Accel-Redirect是一个新的方案,但是并不代表它能很好的解决所有问题,同时也不妨碍继续思考解决问题的其它办法。

    图片服务器加上权限判断主要用于博客和相册这样的系统。在网上稍微观察,可以看到目前大部分的博客相册等系统并没有针对图片本身加入权限判断,而仅仅是将网页部分的权限控制住。这样的话很多网友将其图片加锁,实际上此图片在外部仍有办法打开。我估计此原因有其一是实现起来有性能问题,其二是诸多网站将图片放置到CDN上,而CDN并没有对此有相应的方案的缘故。走了一圈发现只有QQ空间在用带权限的图片,而它看上去是直接用fastcgi实现的,性能居然还不错,佩服一下。

    下文单纯解决性能问题,其思路是在访问图片附近放置一个控制文件,通过nginx判断决定是否要到fastcgi认证,其原理类似apache的.htaccess。有用到CDN的,因为CDN多数是squid,要加入清理squid缓存的机制。

    1、针对单一图片的控制

    如果图片按照哈希结构放置,那么用户的图片加锁后要把每一张图片都加上控制文件,如果该用户图片较多,写入时稍嫌多些。

    比如有一张图:

    /data/image/a/z/asdfqerqwegasd.jpg

    写上一个空文件:

    /data/image/a/z/asdfqerqwegasd.jpg.lock

    然后在nginx配置判断:

    location / {
    root /data/image/;
    if ( -f “${request_filename}.lock” )
    {
    #rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
    return 403;#test
    }
    }

    这样,只要在图片旁边有一个.lock文件,就会访问到403 Forbidden;使用rewrite会将图片链接和cookie定位到后端,由后端返回判定结果X-Accel-Redirect头或者重定向到另外一个jsp去填密码。

    2、针对目录的控制

    如果图片是按照目录放置,那么配置会稍微复杂一些。

    location / {
    root /data/image/;
    if ( $request_filename ~ ^(.*)/[^/]*$ ){
    set $dir $1;
    }
    if ( -f “${dir}/lock” )
    {
    #rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
    return 403;#test
    }
    }

    首先用正则表达式取出图片路径的目录,然后带上控制文件名判断此文件是否存在,这样只要在图片的目录中放置一个名叫lock的空文件就能控制完整个目录:

    /data/image/a/z/lock

    测试一下,效果不错,只要控制文件存在,访问立刻403;删去控制文件,访问正常。

  • Rewrite 伪静态规则 在线Apache转换为Nginx

    http://www.anilcetin.com/convert-apache-htaccess-to-nginx/