2018年11月22日三峡168赛记

Posted on Sat 01 December 2018 in 越野跑 • Tagged with 越野跑, 生活

把工作安排好后,急冲冲的赶到北京西站,又是在开车几分钟前上的车,和上次去江山跑越野一样, 至此我的三峡168越野跑之旅拉开了序幕。上车后,发现车厢好多人是去三峡比赛的,和他们寒暄了几句,爬到自己的铺位就睡了下来。一觉醒来,就到了宜昌。出了火车站,直接到旁边的汽车站坐上了汽车,等了一会儿,车上就载满了跑友,师傅开动了汽车,向秭归进发!

第一次来三峡,坐在靠窗的位置,目不转睛的望着窗外的景色,三峡的山和门头沟的山很像,都是比较险峻。这期间,老妈打来电话问我到那了,我在来三峡之前就让她和老爸过来玩,从信阳坐高铁到宜昌很方便,但是老爸和老妈死活不过来,怕花钱的想法有时真的是让我哭笑不得。这次她什么都没有说,只是让我吃好,休息好,不要勉强自己,注意安全,得到我的保证后,她就挂电话了,我继续看我的风景。

长江三峡险峻的高山

到秭归县城下了车后,走了一小段路来到了组委会指定的酒店进行装备检查,检查的挺严格的,我的体检报告被看了好一阵子,强制准备是随机抽查的,因为组委会安排的很有序,一会就检查完了,中间有个小插曲,就是GPS押金只能用现金,我只好去旁边的ATM机器取了些钱,真的是好久没有用ATM了,押金是用个信封装起来的,上面有名字和参赛号码,后面完赛的时候直接原封不动地还了回来 …


Continue reading

2018年10月20日江山100 60公里组赛记

Posted on Thu 25 October 2018 in 越野跑 • Tagged with 越野跑, 生活

比赛都结束了一个星期了,才想着要写一篇流水账赛记。

备战

自从报名了江山100越野赛60KM组别之后,就开始了抓紧训练,8,9月份一共进山5次,周一到周五隔天路跑,好在成绩一次比一次好。 从跑一圈三峰要6个多小时到现在可以把时间压缩到5小时10多分钟,能做到爬升的时候把心率稳定到145左右,平路和下坡都能跑动起来, 不枉我这两个月的运动量都上120KM之多了。

前往江山

北京到江山的火车只有一趟高铁,下午的的车次,晚上23左右到江山。20号早上5点就要开跑,没办法,订了九江中转的票,正好也去九江看看,然后19号请了一天的假。 18号上完班,冲冲忙忙的赶到北京西站,好在开车几分钟前上了火车,在火车上一觉睡到天亮。7点左右出了火车站就直奔江边。上午12点的火车到江山,时间很是充裕,打算去江边看看浔阳楼和锁江楼塔看看。 第一次近距离接触长江,叹为观止,江面比较宽,江边风比较大,呼呼作响,空气比较清新和潮湿,江面船只零星,江边的公园有很多晨练的人。 然后,就进了锁江楼塔,20元的门票很便宜,除了几个穿着时髦的阿姨,景区里面也没有几个游客。景区就一座塔楼和一座石塔就没有其他了。 sea_of_bamboo 塔楼每一层都有介绍锁江楼塔的历史,时间不是很宽裕,我匆匆的扫了几眼,找了几个不错的位置自拍了几张。 sea_of_bamboo 石塔被围栏围了起来,不能近距离观看 …


Continue reading

Go语言Context模块源码解析

Posted on Sun 30 September 2018 in 源码解析,Go • Tagged with Go

Go的标准库中的Context在日常的工作编码中的使用率很高。这个库是解决Goroutine之间裙带关系的利器,是channel之外的另一个较好的选择。这篇文章将通过源码来了解其实现。 本篇文章是基于1.10.3版本的Go源码, 源码位于src/context

context库有两个interface, Context和canceler:

type Context interface {
  Deadline()(deadline time.Time, ok bool)
  Done() <-chan struct{}
  Err() error
  Value(key interface{})interface{}
}

type canceler interface {
  cancel(removeFromParent bool, err error)
  Done() <-chan struct{}
}

并且为了方便使用,context库提供了如下几个方法来获取Context实例:

func Background() Context
func TODO …

Continue reading

2018年7月19日爱江山凤凰岭夜赛

Posted on Thu 19 July 2018 in 越野跑 • Tagged with 越野跑, 生活


Continue reading

人生中第一幅水彩画

Posted on Sun 25 March 2018 in 水彩 • Tagged with 水彩, 生活

迷上了水彩,画了幅人生中的第一幅水彩画。 sea_of_bamboo


Continue reading

2018年1月1日爱江山凤凰岭城市越野赛

Posted on Mon 01 January 2018 in 越野跑 • Tagged with 越野跑, 生活

自从八月份参加了崇礼越野赛30KM组别的并完赛后,一发不可收拾的爱上了越野赛,再也不想着去参加半马,去跑个好成绩好北马中签。越野跑高度的自由度让我很享受运动的过程,再见了马拉松。从崇礼回来后我没事儿就刷爱燃烧看别人越野跑的赛记,心中热血沸腾。不久之后北京爱江山凤凰岭城市越野赛就开始报名了。


Continue reading

Effective Modern C++ 读书笔记之第六章

Posted on Thu 06 October 2016 in 读书笔记 • Tagged with c++11, lambda

lambda表达式

Item 33 避免使用默认的变量捕获方式

上面说到c++11的lambda表达式有两种变量的捕获方式:按值(复制)捕获和引用捕获。Item33在采用引用模式(默认[&]会捕获定义lambda表达式作用域下的所有变量, [&params]为显示捕获定义lambda表达式作用域下特定的变量)下,如果不加注意的话,lambda表达式很容易走出引用变量的作用域范围,造成悬空引用,会产生未定义的错误。

#include <iostream>
#include <functional>
#include <string>
class A
{
 public:
    A() : name_("default"){}
    void Print() const {
        std::cout << "A::Print: " << name_ << std::endl;
    }
 private:
        std::string name_;
};

typedef std::function<void()> func …

Continue reading

Effective Modern C++ 读书笔记之第二章

Posted on Wed 03 August 2016 in 读书笔记 • Tagged with c++11

auto关键字

Item5:auto优先于显示类型声明

首先,在C/C++中声明一个变量,如果不进行初始化,其默认值可能会因为其所在的作用域的不同而不同,在使用的时候可能会出现意想不到的错误。而auto类型的变量类型是从初始化进行推导的,所以需要在定义auto变量的时候进行初始化。使用auto变量可以强制对其进行初始化。

int a; //ok
auto x = 10; //ok
auto a; //error: declaration of ‘auto a’ has no initializer

其次,使用auto可以避免冗长的显示类型声明,特别是在操作STL的各种容器及迭代器等, auto能够敲很多冗余的代码逻辑,如:

std::map<std …

Continue reading

Effective Modern C++ 读书笔记之第一章

Posted on Thu 21 July 2016 in 读书笔记 • Tagged with c++11, lambda

Item 1: 理解模板类型推导

C++98只有一种模板参数类型推导即函数模板参数类型推导,但是在C++11之后,修改了原有的类型推导规则,并加入了auto和decltype的推导规则。 函数模板形如如:

template<typename T>
void f(ParamType param);// ParamType可以是T加上各种修饰,如const, reference,指针等

然后在程序逻辑中调用该函数:

f(expr); // expr为传入到函数f中的参数

在编译器进行编译的时候,编译器通过expr来进行两部分的推导:ParamType 和 T。 在这里,书中总结了ParamType的三种不同类型: 1. 当ParamType是指针或者引用的类型,但不是universal reference类型(这个会在Item 24讲到)。

  1. 当ParamType是universal reference类型

  2. 当ParamType既不是指针也不是引用类型。

下面依次详解ParamType在不同类型下,参数推导的机制。

Case 1: ParamType是指针或者引用类型, 但不是universal reference …

Continue reading

编辑距离算法

Posted on Mon 18 April 2016 in 文本算法 • Tagged with 编辑距离, Levenshtein Distance

编辑距离, 又叫Levenshtein距离。在wiki上的解释是: 两个不同的字符串, 其中一个字符串转在单字符操作(替换, 插入, 删除)下换成另外一个字符串所需的最少的编辑次数。

例如, 字符串"kitten"转换为字符串"sitting"的编辑次数为3, 且没有比这更少的编辑次数, 过程如下:

  1. kitten --> sitten(k替换成s)

  2. sitten --> sittin(i替换成e)

  3. sittin --> sitting(在字符串末端插入g)

其算法描述的:

现有两个字符串 \(a\)\(b\), 其长度分别为\(m\)\(n\)\(i …


Continue reading