Meet At Oct.

迁移博客至docker

由于五一前的这周工作需求不是很多,便趁着这个机会将博客迁移到了docker中,虽说网上docker相关文章有很多,第一次实践的我还是遇到了一些小问题,现在便来总结一下。

在这里我要推荐的是docker_practice,有中英文版本,很多细节知识都有讲到,非常适合入门学习。其次是docker hub,可以其上面寻找自己需要的一些镜像,这样可以有助于自己比较方便地写出自己想要的dockerfile。

我认为docker镜像最主要的好处是可复用,所以制作时需要注意生成镜像的大小,以便于网络传输。以dotnetcore为例,官方有专门的runtime镜像,build镜像,sdk镜像等等,根据自己的实际需求选择恰好满足自己需求的基础镜像就好。同时,dockerfile内能使用一条命令尽量使用一条命令,减少镜像的生成层数和生成时间。docker运行和预期不符时,善于使用docker logs来查看日志,利用好Google能解决许多问题。

下面是博客的dockerfile(本体fork自YuukoBlog,个人只是做了一些微小的修改...), 其中dbdata目录是为了挂载本地的sqllite,防止以后删除容器博客数据丢失。

FROM microsoft/dotnet:latest

RUN mkdir /package \
        && mkdir /dotnetapp

Copy . /package
RUN dotnet restore package/YuukoBlog/src/YuukoBlog/YuukoBlog.csproj \

更多内容 »

Published on 04/29/2017 08:11:00

关于村上春树的跑步

春夏交替时刻的上海的天气,就像是一个犯了错后不知该怎么向父母说少年,忽进忽退,踌躇不前。经过漫长的内心纠结之后,终于不再逃避,在这周勇敢地迎来了炎炎的夏日。而对此期盼已久的我也在这周读完了村上春树的《当我谈论跑步时我谈些什么》。

村上在书中说,相比于脑力劳动,写长篇小说更像是一场体力劳动,跑步有一部分原因是为自己提供一个能常年写作的健康体魄。我不像村上那样对跑步看的很重,但是每次心情不好的时候,也都会去跑步。在跑到口干舌燥大汗淋漓的时候,内心的阴郁和不安都会随着汗水排除体内,蒸发后消散在空气中。所以对于我来说,跑步也算是一种调节心态的方式吧。

更加具体地说,相较于晚上,我更倾向于清晨进行跑步。从黎明太阳还未升起时开始围着小区跑,一圈,两圈,跑过几圈之后,阳光也从无到有,一缕缕地从远方投射过来。也许是因为跑步者跑步时和阳光天生不对付,即使平时温暖柔和的晨光,看见一个眼镜因为汗水不断打滑的衬衫湿透了的晨跑者后也会展现出其火辣的一面,不能让对方轻看了自己。可惜的是,不够坚韧的我总是在这样的“斗争”中处于下风,坚持了一会后就败下阵来。我一般会选择在跑最后一圈还剩四分之一时慢慢停下来,收拾好心情,在顺路买好早餐后回去痛痛快快洗个澡。就这样开始了美好的一天。

通读全书能看到,跑步给村上所带来的不仅仅是一个健康的体魄。跑步过程中认识的形形色色的人,每年在世界各地参加的马拉松比赛,这些都是宝贵的财富。书中所展示出来的关于跑步的一切已经成为融入了村上的生命当中,水乳交融,不可分割。作为一个长跑者的村上让我明白了,坚持做一件事,总会有意想不到的收获。

书中的村上说自己并非因为意志强所以能每天都坚持跑步,而是因为喜欢。因为喜欢,自然就可以坚持跑下去。记得上次和一个高中好友聊天时谈到,她戏称自己比较功利,不会去做跑步这样回报率小的事。我可以列举出跑步的各种好处,最终却没有说出来,对于不喜欢的事情,我们总能找出不喜欢的理由。但愿对于喜欢的事情,我们也能不需要任何理由地去喜欢。说来也奇怪,像我这样一个随性的人,关系好的朋友都是比较现实,有时候和他们聊天,都会怀疑是不是自己长不大。现在想起来,大概是因为看的书茶毒过多,已经积重难返了。

不管是跑步也好,写作也罢,亦或是其他,可供给消费的人生终究很短。所以说就这样去吧,去做自己喜欢的事情,去见自己喜欢的人。我总是这样不断地激励着自己。

Published on 04/26/2017 18:31:05

.Net Core的一些个人总结

从开始接触.Net Core到现在已经有将近一年的时间了,今天来做一下相关的学习总结,顺便也回忆一下自己这段时间以来的成长。

有一点不得不承认的是,在接触.Net Core之前,我对于linux系统一点也不了解,也未曾有过主动去学习的念头,在接触了.Net Core之后才开始慢慢学习linux相关知识。我记得一开始使用终端时很多命令记不住,感觉十分麻烦,在不断地重复练习之后才慢慢熟练起来。

对于我来说,学习.Net Core最直接的好处就是培养了我看英文文档和源码的习惯。刚开始工作的时候遇到的一些问题百度一下基本上都能找到解决方案,实在找不到就去翻一翻Stack Overflow。由于自身英语水平太差,每次尝试看英文文档都会十分吃力,加上又没有一个明确的目标,对于一些开源的工具的文档都是浅尝而止。刚开始学习.Net Core时是跟在博客园组织的翻译团队后面学习的,由于翻译进度比较慢,终于还是下定决心自己去啃官方文档了。其实现在想起来,在有道翻译等一些工具的辅助下,看英文文档本身并不是一件很难的事情。包括看一些开源工具的源码也是一样,只要坚持一段时间,很多能力和习惯都是水到渠成的,最怕的就是我们会因为各种各样的原因而半途而废。

在学习.Net Core的过程中,很自然地就会接触到一些以前所接触不到的东西,比如说linux系统,nginx反向代理和docker容器等等。微软的开源与跨平台之举着实开阔了像我一样的原本比较懵懂的.Net开发的视线。最近闲时看网上的一些招聘信息,其中有个二次元相关的创业公司比较吸引我,因为年初才入职了新公司所以也就是算了。现在.Net Core技术栈相关的招聘在慢慢增多,也说明了大家对于微软的开源还是保有比较积极的态度的。在这个在赶上了历史进程的时候,我们要更加注重自我奋斗的重要性了。

最后,希望所有的.Net开发们大家一起努力,一起加油!

Published on 04/16/2017 20:22:09

The net is vast and infinite

刚看完《攻壳机动队》电影回来,一开始就有只是去看一场好莱坞商业电影这样的心理预期,当看到很多剧场版情节被还原出来时,心里不免泛出一丝丝的感动,觉得也算是值了票价。虽说考虑到观影市场,电影对原著剧情进行改编无可厚非,导演对电影结尾部分的改编还是让我感到些许遗憾。素子没有同意傀儡师的融合请求,结局也就理所当然的少那句经典的“The net is vast and infinite”。

初中的时候很喜欢看科幻片,所以每隔几周我都会去音像店淘一些盗版光盘,也就不可避免的接触到电影《黑客帝国》。也许是因为那时我年纪还小,在看完黑客帝国1后心里莫名地产生了一股恐惧,以至于之后的很长一段时间内每天我洗澡的时候都会不由地摸一下自己的后颈,确认是否真的有存在那样的一个插座。

看过黑客帝国后,我逐渐接触到反乌托邦这个词汇,一度被其作品中对人类的未来抱有着消极的态度所感染。然而,忘了具体是什么时候,看完攻壳机动队95剧场版后的我产生了诸多疑问。素子为什么最后选择了和傀儡师融合?结尾的那句“The net is vast and infinite”表达了什么意思?摆脱了躯壳束缚的素子还算是人类吗?然而是不是人类又有那么重要吗?反思这些问题的时候,我发现自己对科技发展的态度慢慢由消极转变为积极。一方面,我意识到反乌托邦作品中描述矛盾寻根溯源还是人类彼此之间的矛盾,科技的快速发展只起到促进作用;另一方面,就像有人说的那样,科技的发展是一辆无法停下的列车,我们除了向前别无他法。所以与其消极地对待这一切,不如积极地展望未来。

如果像进化论所说,人类是由下了树的黑猩猩演化而来,那么我想,在遥远的未来,未来的人类看待现在的人类也会像现在的人类看黑猩猩一般。可反过来说,不管是黑猩猩,现在的人类还是未来的人类,都是同一只飘流在人类文明长河上的特休斯之船罢了,所谓进化只是我们在前行中为抵抗风浪而进行的不断修补。

Published on 04/09/2017 11:14:44

.netcore升级遇到的一个小问题

一般我们在Action加[Authorize(Policy="XXX")]来授权用户是否有权限访问该Action,同时程序启动时也要配置上相应的XXXPolicy,否则程序启动后没有做配置的授权不会生效。我们的项目的授权都是一开始配置在数据库中,程序启动时全部加载进来进行配置。周二项目上线时,由于我没有将新加入的权限配置加入正式库中,部署后的项目启动时挂了,幸好有阿里云的日志记录提示出是没有配置相应的权限的问题。加上后重新部署后就好了。

虽然只是一个小问题,也很快解决了。但是让我疑惑的时,为什么项目无法启动,在我的记忆中,没有进行授权的配置也就是对应授权不生效,不访问时并不会报错。最近项目迁移到了linux并升级到了1.1.0,我就想会不会是升级项目出的问题。

从github上clone下mvc源码,先切换到rel/1.1.0分支,在samples里面的测试项目的HomeController加一个About Action,并加上 [Authorize(Policy ="韩策")]权限,运行果然报错。

Alt text

切换分支到rel/1.0.3分支,相同的测试并未报错。

查看mvc1.1.0的源码可以发现程序添加mvc时会执行这样一段代码

foreach (var actionModel in controllerModel.Actions)
{
    var actionModelAuthData = actionModel.Attributes.OfType<IAuthorizeData>().ToArray();

更多内容 »

Published on 04/03/2017 13:52:32