百度地图 JavaScript API 开发

官方更新 API 并没有公布更新的日期和改动细节。

于是乎,我通过个人推断,进行了更新日期的不完全收集,从近期刚刚开始收集,仅供参考:

百度地图 JavaScript API 更新日志

更新时间点:(不完全统计,仅供参考)

2015-06-24 12:10:59
2015-07-21 19:32:25
2015-08-18 10:50:21
2015-08-18 13:28:13
2015-08-20 14:55:46
2015-08-21 11:06:54
2015-08-21 12:05:12
2015-08-21 13:37:36
2015-08-24 10:33:11

目前已知的调整:

1.默认开启滚轮缩放

地图相关开发咨询,可联系我~

域名转出经验分享

很长一段时间都不见 godaddy 放出域名续费优惠码了。眼看域名就要到期,又不甘心原价续费。肿么办?

网上很多人提到转移域名(transfer),我一直没有详细了解。今天才了解到,很多域名服务商会在转入时收取一小笔费用,重点是:会免续费1年。如此规则,便“有机可乘”了。从 godaddy 转出,一年后,再考虑转回来,也能制造出优惠的效果了。

按照网上的介绍,我也顺利的在 godaddy 和 namecheap 进行了大部分转出、转入、付费的操作流程,在最后确认的时候,我犹豫了,这域名还有1个月才到期呢,我现在转就浪费了一个月。。。

生命不息,折腾不止。我于是乎想终止我的操作,但是已经付费了啊。这笔费用 namecheap 如何处理?

查阅发现,官方回复是这样的(见:https://www.namecheap.com/support/knowledgebase/article.aspx/1348/219/canceled-domain-contacts-did-not-approve-transfer-of-domain

如果没有通过邮件确认转出确定,为转出所付费用会打回到你的账户,供你下次消费使用。如果你是用信用卡或者 paypal 支付,那你联系客服索要吧。

恩,就这样,我去讨债去鸟。。。

(几分钟后。。。)

我回来了,很顺利,客服帮忙取消了 transfer 操作,我的血汗最终会返还到信用卡里,汗。。。

以下 chat 经过供参考:

refund-payment

Windows 硬连接(mklink /H)的使用场景举例

我用 Github 托管一款 PC 端应用程序的中文语言包(一个独立的文本文件),便于优化、存档备份。

而调试语言包文字展现效果时,需要将语言文件放置在该应用程序安装根目录下。

每次进行调试、更新后,都要将结果复制到 Git 的目录,然后提交代码库。复制的过程带来额外的工作量,影响效率。

此时,用硬连接即可:

①语言包调试时所在目录:

“D:\Program Files (x86)\Elcomsoft Password Recovery\Elcomsoft Wireless Security Auditor\简体中文.lng”

②Git 本地代码库目录:

“D:\code\sigma\ewsa-git\简体中文.lng”

操作:

cmd  下 切换路径到①所在目录,然后执行命令:

D:\Program Files (x86)\Elcomsoft Password Recovery\Elcomsoft Wireless Security A
uditor>mklink /H 简体中文.lng “D:\code\sigma\ewsa-git\简体中文.lng”
为 简体中文.lng <<===>> D:\code\sigma\ewsa-git\简体中文.lng 创建了硬链接

此时,你在 Git 代码库②中的修改,会实时的在①中体现而无需手动复制以保证同步了。

这项功能有额外的条件:

1.连接不能跨磁盘;

2.只有 NTFS 文件系统上支持。

参考资料:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006(v=vs.85).aspx

更多用法,Google 吧~

Chrome 43 的书签管理器(Bookmark Manager)

Chrome 稳定版于2015.5.19 更新到了 43.0.2357.65 m,我看到了全新的书签管理器(据说在 稳定版 42 就出现了),而家中的电脑同样更新到了该版本却没看到书签管理器有什么变化。

经查发现,这还是一个实验性功能,在:

chrome://flags/#enhanced-bookmarks-experiment

中可以设置启用、禁用。

PC 用户中可能有些不太适应这一改动,不过据说这些改动是为了更好的适应触控设备的。

通过命令行打包 Chrome Extension 发布 Chrome Web Store

Chrome Web Store 中接收上传的格式为 .zip

我们的工程目录往往由 git 托管的,其根目录含有 .ssh 隐藏目录,直接打包目录会增大文件大小。手动拷贝一份出来,又显得特别 Low。

git 有命令行可以满足我们的需求(像 svn 的 export 一样):

D:\code\sigma\youdaocrx>git archive –format zip –output ../chrome-web-store-file.zip master

参考资料:http://stackoverflow.com/questions/160608/do-a-git-export-like-svn-export#answer-163769

Chrome 更新失败怎么办

1.有可能是因为更新链接被“墙”导致

诊断:

在 Windows 下,可以在 cmd 命令窗口里输入:

ping clients2.google.com

来测试这个域名是否正常响应。如果显示超时,则表明被墙。

你需要通过代理方式来代理这个域名的请求,就可正常访问了

2.有可能是你本地的电脑优化软件把 Chrome 的自动更新进程给禁用了。

使用 Git 命令时,遇到 Permission denied (publickey)

在 Windows7 下执行 git fetch 命令时遭遇阻碍:

Permission denied (publickey).
fatal: Could not read from remote repository.

一番折腾,发现了解决方案:
http://stackoverflow.com/questions/2127104/permission-denied-publickey-error-using-git-on-windows-7#comment14572392_6544796

总结来说,就是在 Windows 下利用 ssh-keygen -t rsa 生成的公钥、私钥,其文件名最好用默认的 “id_rsa”。如果是自定义的文件名,则需要手动在 ssh 的 config 里指定密钥路径。

所以,我把我的私钥文件名修改为 id_rsa,然后放置到 Git 安装目录下的 .ssh 文件夹(C:\Users\XXX\.ssh\)中,问题迎刃而解。

后续:
使用 Git GUI 时也遭遇 Permission denied (publickey) 。我整个人都蒙圈了。
之后查明,Git GUI 的 .ssh 文件夹跟 Git 命令的 .ssh 文件夹(D:\program files\Git\.ssh\)不是同一个。按照如上逻辑再处理一遍即可.
update 2015年6月1日:
如果本地同一个库跟踪两个不同的远端,而且钥匙也不同,可以这样进行区分指定:
在 .ssh 目录下新建 config 文本(无扩展名),格式如下:
Host github.com
User git
HostName github.com
IdentityFile /C/users/duxing/.ssh/id_rsa
Host code.jd.com
User git
HostName code.jd.com
IdentityFile /C/users/duxing/.ssh/id_rsa20150522

总结:

Git GUI:X:\Users\XXX\.ssh\

Git Command Line:X:\program files\Git\.ssh\

让 Fisp 的 liveReload 功能走起!

Fisp: 百度前端集成开发工具,http://oak.baidu.com/fis-plus 起因:

C:\Users\duxing.org>fisp release -h

  Usage: release [options]

  Options:

    -h, --help             output usage information
    -d, --dest <names>     release output destination
    -m, --md5 [level]      md5 release option
    -D, --domains          add domain name
    -l, --lint             with lint
    -t, --test             with unit testing
    -o, --optimize         with optimizing
    -p, --pack             with package
    -w, --watch            monitor the changes of project
    -L, --live automatically reload your browser
    -c, --clean            clean compile cache
    -r, --root <path>      set project root
    -f, --file <filename>  set fis-conf file
    -u, --unique           use unique compile caching
    --verbose              enable verbose output

发现有个 -L 参数,可是用起来却无效。 于是开始了探索之路… 经过一番琢磨,终于享受到了这个功能。 常规的使用方法是这样的: 在页面内添加一个特殊标记: <!–livereload–> 注意,这个标记是不含有空格的。通过 fisp release -wLr /xxx 发布后,它会被替换成一个 http://ip:port/livereload.js 资源。就是通过这个js来实现页面刷新的。 在你发布的时候 fisp 在后台还启动了一个支持 webSocket 的服务器进程,用来把你的修改信息传递给 livereload.js 命令其做出动作。 在具体开发中,情况可能稍有复杂,特举一例:

	我的一个项目中有两个模块(命名空间)。通过体验发现,发布多个模块,只能有一个模块可带有 -L 参数,因为只能启动一个 支持 webSocket 的服务进程,否则会因端口独占而报错。

不过,我推荐使用 Chrome 扩展:LiveReload (ID: jnihajbhpnppcggbcgedagnkighmdlei) 只需在 fis-conf.js 末尾追加一句:fis.config.set(‘livereload.port’, 35729); 因为这个扩展默认的端口是35729,然后通过 -wL 启动 fisp 时,扩展就可以监听工程的改动了,并且可以通过该扩展的 Icon 来对 Chrome 的 Tab 进行精细控制。

LiveReload 扩展安装地址:
https://chrome.google.com/webstore/detail/jnihajbhpnppcggbcgedagnkighmdlei

另外,熟悉了原理,我们也可以自己启动一个 webSocket 服务,手动嵌入 livereload.js 到你的项目中。

### 那么问题来了,livereload.js 从哪里弄?

如果你找不到别人共享的这个资源,可以自己用 node.js 搭建:
打开 https://github.com/livereload/livereload-server ;
安装(npm install livereload-server -g ),记下安装目录;
把源码列表里的 example 文件夹下载到刚刚安装的 livereload-server 的根目录。

用 node 执行 dummy-server.js 文件,来启动服务,记下端口号。
这样你就可以的到一个本地可访问的地址: http://yourHost:port/livereload.js

把这个地址作为 javascript 资源引入到你的页面中吧~

附: 这里可能有最新的官方揭秘:https://github.com/fex-team/fis-plus/issues/38

单片机:数码管的数字对应的16进制数值

// 计算单片机数码管显示数字对应的针脚16进制数值。
var NumCodeMap = [
	// 0
	['a','b','c','d','e','f'],
	// 1
	['b','c'],
	// 2
	['a','b','d','e','g'],
	// 3
	['a','b','c','d','g'],
	// 4
	['b','c','f','g'],
	// 5
	['a','c','d','f','g'],
	// 6
	['a','c','d','e','f','g'],
	// 7
	['a','b','c'],
	// 8
	['a','b','c','d','e','f','g'],
	// 9
	['a','b','c','d','f','g'],
];

function sigma( numCode ){
	var digCode = ['a','b','c','d','e','f','g'].map(function(item){
		return +(numCode.indexOf( item ) > -1 );
	});
	return parseInt( digCode.reverse().join(''), 2 ).toString(16);
}

function wrapHex( num ){
	return '0x'+ (num.length < 2 ? '0':'' ) + num ;
}

function get( num ){
	if( num >= 0 && num <= 9 ){
		num = parseInt( num );
		var hex = sigma( NumCodeMap[num] );
		return wrapHex( hex );
	}
	return -1;
}

// console.log( get( 0 ) );

// '0123456789'.split('').map(function(item){ return get(item);})
// ["0x3f", "0x06", "0x5b", "0x4f", "0x66", "0x6d", "0x7d", "0x07", "0x7f", "0x6f"]