北京旅游行程规划2016.04.21~2016.04.26

Alt text

北京,一个及其厚重的城市,千百年来的沉淀,是一个有中国传统气息,和现代化大都市互相融合的国际性大都市。带着无比向往与期待,相约2016,帝都,我和珊来了~一起见证北京的美~~

行前准备

北京四月气候适中,不冷不热,出行做好保暖,防晒,准备外套长裤,出行准备好遮阳伞、太阳镜等。
电子产品:手机、ipad、电脑、充电宝、拍照神器(记录美丽的瞬间)等。
换洗衣物若干。
钱包、证件、银行卡。
Alt text

行程路线--计划

北京旅游景点比较多,行程工具除了地铁,公交,可能大部分靠两条腿了。

规划旅游路线

  • 04.21,晚23:00到达北京首都国际机场航,卧榻关内酒店~

  • 04.22,南锣鼓巷——烟袋斜街——钟鼓楼——什刹海,是连在一起的景区

特色点:精美小商品,吃货常去地方,后海酒吧

钟鼓楼:30元/人

交通:地铁6号线和8号线便把这些景点全部串联起来

  • 04.23,箭楼——正阳门——毛主席纪念堂——中国国家博物馆——人民英雄纪念碑——人民大会堂——天安门城楼——故宫——王府井,这几个景点基本都在一条线上。

特色点:了解中华底蕴故宫,北京烤鸭特色小吃王府井购物天堂

正阳门:20元/人,人民大会堂:30/人, 天安门城楼:15/人, 故宫:60元/人

交通:崇文门换2号线,前门下车,步行去天安门广场

  • 04.24,天安门广场看升旗——八达岭长城——明十三陵(定陵—长陵,如果时间多可以游览全景:长陵—定陵—昭陵—神道,不过回来可能就会没位置坐了,如果你想要座位,可以选择最后到长陵)

特色点:八达岭长城,不到长城非好汉,明十三陵是明朝皇帝的陵墓,现在开放的是神道、昭陵、定陵、长陵。最佳的游玩路线是神昭定长

长城:40/人 明十三陵:通票140/人

交通:崇文门换2号线,前门下车,步行去天安门广场

交通到长城方式:

公交

1、919路公交车,票价12元。

德胜门—延庆 早上6:00发车 末班车 19:00。

延庆—德胜门 早上5:00发车 末班车 18:30。

2、877(空调车),6:00-17:00,发于德胜门,12元。

3、877(普通车),6:00-17:00,发于德胜门,7元。

S2线动车组

市内在北京北站乘坐S2线至八达岭。

票价:一站5元,两站以上6元。

  • 04.25,雍和宫——国子监——圆明园——清华大学(北京大学和清华大学其实离的一点也不远,但是清华大学只有周末才开放的)——颐和园——西单——东单

特色点:感受清华园的魅力,颐和园的山青水秀(颐和园普通票是30,建议可以再买张佛香阁的,那里可以看到颐和园全景,很壮观,看完颐和园才知道乾隆帝是多么厉害的建筑师),西单东单时尚购物天堂

雍和宫:24元/人 国子监:30元/人(孔庙连在一起) 圆明园:20元/人 颐和园:30元/人

交通:直走到王府井大街的灯口站坐车到动物园,转332到颐和园总站

  • 04.26,9:00北京首都国际机场,返回深圳~

  • 备选方案:798艺术中心——鸟巢、水立方——簋街

去的时候可以起的晚一些,先去艺术区看展览,然后进入鸟巢水立方看看,顺便看看鸟巢水立方的夜景,最后去簋街大吃一通,簋街是越晚越热闹。

鸟巢、水立方:套票100元/人

鸟巢、水立方交通:地铁1号线(四惠上,国贸下,2站),换地铁10号线(北土城下,11站),换地铁8号线(奥林匹克公园南门B口出,3站),下车向南550米

北京特色美食

北京最有特色美食有涮羊肉和烤鸭。

小吃就很多,但并不一定适合大众的口味:

像豆汁、焦圈、炒肝、爆肚、艾窝窝、驴打滚、糖火烧、豌豆黄、卤煮、炸灌肠……

北京烤鸭
Alt text

糖葫芦
Alt text

购物方面

食品方面
京白梨、果脯密饯、茯苓夹饼、北京烤鸭、稻香村糕点

纪念品
早期民俗或者宫廷的物件儿(仿)、景泰蓝工艺产品、兔爷儿玩偶摆件、北京面人、内画鼻烟壶、毛猴、老北京布鞋
Alt text

特色景点图片

  • 什刹海

走完短短几百米的烟袋斜街,左边一转就能看到什刹海(后海)后海的酒吧街就分布在两旁。
Alt text

刹前海与后海连接处有一座形似银元锭宝的石桥:银锭桥,因形似银锭故称银锭桥。是什刹海的风景之一,也是燕京小八景之一。
Alt text

  • 798艺术区
    798艺术区应该是文艺和非文艺小青年的最爱。文艺青年来观摩,非文艺青年来装逼,不可错过的地方。
    Alt text

  • 颐和园
    颐和园,中国清朝时期皇家园林,前身为清漪园,坐落在北京西郊,距城区十五公里,占地约二百九十公顷,与圆明园毗邻。它是以昆明湖、万寿山为基址,以杭州西湖为蓝本,汲取江南园林的设计手法而建成的一座大型山水园林,也是保存最完整的一座皇家行宫御苑,被誉为“皇家园林博物馆”,也是国家重点旅游景点。
    Alt text

  • 天坛
    始建于明永乐十八年(1420年),清乾隆、光绪时曾重修改建。为明、清两代帝王祭祀皇天、祈五谷丰登之场所。
    Alt text

  • 故宫
    北京故宫博物院,旧称为紫禁城,位于北京中轴线的中心,是中国明、清两代24位皇帝的皇家宫殿,是中国古代汉族宫廷建筑之精华。
    Alt text

  • 鸟巢、水立方 5A
    小贴士:适合下午去,进去展馆看,晚上看夜景。
    Alt text
    Alt text

参考资料:

学吉他知识集锦

吉他初学者学习计划

吉他谱曲
简谱 -- 带有 123467i 这种曲调的谱子
五线谱 --五条平行线组成
六线谱 -- TAB谱,带有6条平行线,包含数字谱、和弦谱、扫弦谱

吉他知识集锦

六线谱知识

右手按弦知识

吉他调音器的使用方法

和弦学习
所谓和弦,就是按照一定的音程关系组合而成的组合音,通常和弦都是由三个火三个以上的音符组合而成的,在实际演奏中,和弦主要是起到伴奏的作用。关于和弦,一般就是扫弦和分解和弦两种方式伴奏

练吉他节奏和拍子

点弦、揉弦的技巧

演奏吉他,解决紧张状态

优化JavaScript的执行效率

JavaScript的执行效率

页面里的动画效果大多是通过JavaScript触发的。有些是直接修改DOM元素样式属性而产生的,有些则是由数据计算而产生的,比如搜索或排序。错误的执行时机和太长的时间消耗,是常见的导致JavaScript性能低下的原因。你需要尽量减少这两方面对你的JavaScript代码带来的执行性能的影响。

对于动画效果的实现,避免使用setTimeout或setInterval,请使用requestAnimationFrame。
把耗时长的JavaScript代码放到Web Workers中去做。
把DOM元素的更新划分为多个小任务,分别在多个frame中去完成。
使用Chrome DevTools的Timeline和JavaScript Profiler来分析JavaScript的性能。

JavaScript性能分析是一门艺术活,因为你所写的JavaScript代码跟实际执行的代码完全是两回事。现代浏览器都会使用JIT编译器和其他优化手段来使你的JavaScript代码能尽可能执行得更快,这个编译和优化的过程会对代码产生极大的改动。

如果你想看看JIT到底长什么样,请参考:IRHydra2 by Vyacheslav Egorov。这篇文章讲解了页面中的JavaScript代码在Chrome的V8引擎中被优化时的中间状态。

尽管如此,在优化JavaScript程序的执行速度方面,还是有一些你力所能及的事。

使用requestAnimationFrame

假设页面上有一个动画效果,你想在动画刚刚发生的那一刻的时候做点什么,比如运行一段JavaScript程序。那么唯一能保证这个运行时机的,就是requestAnimationFrame。

1
2
3
4
5
6
7
8
9
/**
* If run as a requestAnimationFrame callback, this
* will be run at the start of the frame.
*/
function updateScreen(time) {
// Make visual updates here.
}

requestAnimationFrame(updateScreen);

常用帧绘制demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//绘制帧频率
window.RAF = (function(){
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {window.setTimeout(callback, 1000 / 60); };
})();

var requestID;

function repeatOften() {
// Do whatever
requestID = RAF(repeatOften);
}

requestID = RAF(repeatOften);

window.cancelAnimationFrame(requestID);

很多框架和示例代码都是用setTimeout或setInterval来实现页面中的动画效果。这种实现方式的问题是,你在setTimeout或setInterval中指定的回调函数的执行时机是无法保证的。它将在这一帧动画的某个时间点被执行,很可能是在帧结束的时候。这就意味这我们可能失去这一帧的信息,也就是发生jank。
Alt text

事实上,jQuery中animate函数就是用setTimeout来实现的动画的!我建议你去给它打个补丁,用requestAnimationFrame来取代setTimeout。

降低代码复杂度或者使用Web Workers

JavaScript代码是运行在浏览器的主线程上的。与此同时,浏览器的主线程还负责样式计算、布局,甚至绘制(多数情况下)的工作。可以想象,如果JavaScript代码运行时间过长,就会阻塞主线程上其他的渲染工作,很可能就会导致帧丢失。

因此,你需要认真规划一下你的JavaScript程序的运行时机和运行耗时。比如,如果你要在一个动画(比如页面滚动)执行过程中运行JavaScript程序,那么理想情况是把这段JavaScript程序的运行耗时控制在3-4毫秒以内。如果长于这个时间,那么就有帧丢失的风险。另一方面,在浏览器空闲的时候,你可以有更多时间来运行JavaScript程序。

大多数情况下,你可以把纯计算工作放到Web Workers中做(如果这些计算工作不会涉及DOM元素的存取)。一般来说,JavaScript中的数据处理工作,比如排序或搜索,一般都适合这种处理方式。

1
2
3
4
5
6
7
8
9
var dataSortWorker = new Worker("sort-worker.js");
dataSortWorker.postMesssage(dataToSort);

// The main thread is now free to continue working on other things...

dataSortWorker.addEventListener('message', function(evt) {
var sortedData = e.data;
// Update data on screen...
});

正如前面提到的,并不是所有的JavaScript代码都适合这种方式,因为Web Workers无法访问DOM元素。如果你的JavaScript代码需要存取DOM元素,也就是说必须在主线程上运行,那么可以考虑批处理的方式:把任务细分为若干个小任务,每个小任务耗时很少,各自放在一个requestAnimationFrame中回调运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var taskList = breakBigTaskIntoMicroTasks(monsterTaskList);
requestAnimationFrame(processTaskList);

function processTaskList(taskStartTime) {
var taskFinishTime;

do {
// Assume the next task is pushed onto a stack.
var nextTask = taskList.pop();

// Process nextTask.
processTask(nextTask);

// Go again if there’s enough time to do the next task.
taskFinishTime = window.performance.now();
} while (taskFinishTime - taskStartTime < 3);

if (taskList.length > 0)
requestAnimationFrame(processTaskList);

}

如果采用划分小任务的方式,那么你需要确保给用户呈现一个好的UX/UI,使得用户能感知到当前浏览器正在处理一个任务,比如使用一个进度条或者指示器。不管怎样,这种方式能使释放浏览器的主线程,使你的web应用总能对用户交互保持响应。

了解JavaScript的“帧税”

当我们评价一个框架、库或者自己写的JavaScript代码时,很重要的一点就是要分析每一帧中JavaScript代码运行的消耗。对性能很敏感的动画效果(比如渐变或滚动)来说,这一点尤其重要。

对于JavaScript代码的性能分析,最好的方式就是使用Chrom的DevTools。一般来说,通过它你能获取到这些细节:
Alt text

如果你发现了运行时间很长的JavaScript代码,那么你可以开启DevTools中顶部的JavaScript profiler选项:
Alt text

但是,这个选项本身的运行也会有一些消耗。因此,确保只有在你需要查看更多运行时细节的时候才开启它。开启这个选项之后,再执行一次页面分析动作,你会看到更多细节:
Alt text

有了这些信息,你就能分析出JavaScript代码对于页面渲染性能的影响了,从而发现并修复JavaScript代码中性能低下的部分。至于如何修复,就像前面说的,你可以删除它或者把它放到Web Worker中去,以释放主线程来响应其他任务。

避免对JavaScript代码进行微优化

对于一个任务,如果换一种实现方式,浏览器的执行速度可以快100倍的话,是非常酷的。比如,读取一个元素的offsetTop属性就比计算它的getBoundingClientRect()要快。但一般情况下,在每一帧中运行的JavaScript代码之中调用这些函数的次数都是有限的。因此,在这些微优化上花再大的精力,整体上JavaScript代码的性能可能也就获得若干毫秒的提升。这是不划算的。

但是,如果你是做一个游戏,或者计算密集型的web应用,那么这条建议可能不适合你。因为你很可能要在一帧中执行很多计算工作,这种情况下需要争取做一切可能的性能优化。

简而言之:慎用微优化。因为一般来说它对你的web应用效果不大。

参考资料:

insertAdjacentText方法与 insertAdjacentHTML方法详解

insertAdjacentText方法与 insertAdjacentHTML方法使用场景

添加HTML内容与文本内容以前用的是innerHTML与innerText方法,最近发现还有insertAdjacentHTML和 insertAdjacentText方法,这两个方法更灵活,可以在指定的地方插入html内容和文本内容。

insertAdjacentText方法与 insertAdjacentHTML方法类似,只不过只能插入纯文本,参数相同

方法insertAdjacentText

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
语法:insertAdjacentText(where,text)

参数:

swhere: 指定插入html标签语句的地方,

text:要插入的内容

有四种值可用:

1. beforeBegin: 插入到标签开始前

2. afterBegin:插入到标签开始标记之后

3. beforeEnd:插入到标签结束标记前

4. afterEnd:插入到标签结束标记后

方法insertAdjacentHTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
语法:insertAdjacentHTML(where,text)

参数:

swhere: 指定插入html标签语句的地方,

text:要插入的内容

有四种值可用:

1. beforeBegin: 插入到标签开始前

2. afterBegin:插入到标签开始标记之后

3. beforeEnd:插入到标签结束标记前

4. afterEnd:插入到标签结束标记后

insertAdjacentHTML例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<head>
<title>24.htm insertAdjacentHTML插入新内容</title>
<script language="jscript">
function addsome()
{
document.all.paral.insertAdjacentHTML("afterBegin","<h1> 在文本前容器内插入内容1</h1>");
document.all.paral.insertAdjacentHTML("beforeEnd","<h2> 在文本后容器内插入内容2</h2>");
document.all.paral.insertAdjacentHTML("beforeBegin","<h4> 在文本前容器外插入内容4</h1>");
document.all.paral.insertAdjacentHTML("afterEnd","<h5> 在文本后容器外插入内容5</h2>");
}

</script>
</head>
<body onload="addsome()">
<div id="paral" style="fontsize:6;color='#ff00ff'" mce_style="fontsize:6;color='#ff00ff'">原来的内容</div><hr>
</body>
</html>

注意:

  1. 这两种方法必须在整个文档装载完成之后才能使用,否则将出错。

  2. InsertAdjacentText只能插入普通文本,InsertAdjacentHTML插入html格式的文本

  3. 用InsertAdjacentHTML插入脚本,必须在script元素中使用defer属性,否则脚本执行将出现运行期错误

  4. InsertAdjacentHTML插入html元素后,all以及其他可能的元素集合将自动更新以反应动态变化。如页面后续元素的sourceIndex 属性将改变。

  5. 当赋予InsertHTML/outerHTML属性无效的HTML标签,该方法可能出现运行时错。

6.只有文档BODY内显示的内容能被以上属性和方法动态改变,BODY对象的内容能被动态操作,但BODY对象本身无法被替换。

7.以上属性和方式不能操作空标签(没有内容的html标签),如input,img。

8.对于table对象而言,只有td(innerHTML/innerText)和table(outerHMTL/outerText)对象可以用某些属性来替换或插入内容;而其他table对象,如tr、tbody不能用这些属性来改变内容。

hexo初始

什么是 Hexo?

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

安装前提

安装 Hexo 相当简单。然而在安装前,您必须检查电脑中是否已安装下列应用程序:

1
2
Node.js
Git

安装 Hexo

1
npm install -g hexo-cli

建站

安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。

1
2
3
4
5
$ hexo init <folder>   //新建网站目录
$ cd <folder> //进入文件夹
$ npm install //安装hexo依赖
$ hexo new [layout] <title> //建立新文章 $ hexo new "My New Post"
新建一篇文章。如果没有设置 layout 的话,默认使用 _config.yml 中的 default_layout 参数代替。如果标题包含空格的话,请使用引号括起来。

generate 生产静态文件

1
$ hexo generate

生成静态文件,静态文件生成到public。

publish

1
$ hexo publish [layout] <filename>

发表草稿。

server

1
$ hexo server

启动服务器。默认情况下,访问网址为: http://localhost:4000/。

1
2
3
4
选项	描述
-p, --port 重设端口
-s, --static 只使用静态文件
-l, --log 启动日记记录,使用覆盖记录格式

新建完成后,指定文件夹的目录如下:

1
2
3
4
5
6
7
8
.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes

_config.yml

网站的 配置 信息,您可以在此配置大部分的参数。

package.json
应用程序的信息。EJS, Stylus 和 Markdown renderer 已默认安装,您可以自由移除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"hexo": {
"version": ""
},
"dependencies": {
"hexo": "^3.0.0",
"hexo-generator-archive": "^0.1.0",
"hexo-generator-category": "^0.1.0",
"hexo-generator-index": "^0.1.0",
"hexo-generator-tag": "^0.1.0",
"hexo-renderer-ejs": "^0.1.0",
"hexo-renderer-stylus": "^0.2.0",
"hexo-renderer-marked": "^0.2.4",
"hexo-server": "^0.1.2"
}
}

scaffolds
模版 文件夹。当您新建文章时,Hexo 会根据 scaffold 来建立文件。

source
资源文件夹是存放用户资源的地方。除 posts 文件夹之外,开头命名为 (下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去。

1
2
3
4
5
6
7
8
9
scaffolds 脚手架,也就是一个工具模板
scripts 写文件的js,扩展hexo的功能
source 存放博客正文内容
source/_drafts 草稿箱
source/_posts 文件箱
themes 存放皮肤的目录
themes/landscape 默认的皮肤
_config.yml 全局的配置文件
db.json 静态常量

themes
主题 文件夹。Hexo 会根据主题来生成静态页面。

注意事项:

1.GitHub Pages的public形式,不要使用系统推荐的Launch automatic page generator,系统会默认分配xx.github.io,我们直接把分支名变成xx.github.io的public形式最好。

Alt text

2.域名绑定,一定记得添加CNAME域名。二级域名绑定的时候,这样CNAME blog 默认 pfan123.github.io即可。
Alt text

其中遇到的问题:

1.hexo3.0之后,hexo deploy 配置 type类型,只能是git,请配合安装安装 hexo-deployer-git。

2.hexo deploy 部署到线上通常是gh-pages分支。

3.github通常会自动分配,xx.github.io,xx.github.com域名,但是我们访问通常是在xx.github.io/xx/下访问,请在_config.yml里面设置url ,root,就行修复。

4._config.yml编译不通过,yml语法极度严格,不通过往往是空格问题,记得所有设置参数属性末尾都要加空格

参考资料: