Skip to content

Commit

Permalink
add & update articles
Browse files Browse the repository at this point in the history
  • Loading branch information
masakichi committed Jan 4, 2019
1 parent 8b4ee08 commit 9744c92
Show file tree
Hide file tree
Showing 23 changed files with 241 additions and 25 deletions.
File renamed without changes.
34 changes: 17 additions & 17 deletions config.toml
Expand Up @@ -87,8 +87,8 @@ copyright = "" # default: author.name ↓ # 默认为下面配
mathjaxUseLocalFiles = false # You should install mathjax in `yout-site/static/lib/mathjax`

postMetaInFooter = true # contain author, lastMod, markdown link, license # 包含作者,上次修改时间,markdown链接,许可信息
linkToMarkDown = false # Only effective when hugo will output .md files. # 链接到markdown原始文件(仅当允许hugo生成markdown文件时有效)
contentCopyright = '' # e.g. '<a rel="license noopener" href="https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank">CC BY-NC-ND 4.0</a>'
linkToMarkDown = true # Only effective when hugo will output .md files. # 链接到markdown原始文件(仅当允许hugo生成markdown文件时有效)
contentCopyright = '<a rel="license noopener" href="https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank">CC BY-NC-ND 4.0</a>'

changyanAppid = "" # Changyan app id # 畅言
changyanAppkey = "" # Changyan app key
Expand Down Expand Up @@ -171,18 +171,18 @@ copyright = "" # default: author.name ↓ # 默认为下面配

# 将下面这段配置取消注释可以使 hugo 生成 .md 文件
# Uncomment these options to make hugo output .md files.
#[mediaTypes]
# [mediaTypes."text/plain"]
# suffixes = ["md"]
#
#[outputFormats.MarkDown]
# mediaType = "text/plain"
# isPlainText = true
# isHTML = false
#
#[outputs]
# home = ["HTML", "RSS"]
# page = ["HTML", "MarkDown"]
# section = ["HTML", "RSS"]
# taxonomy = ["HTML", "RSS"]
# taxonomyTerm = ["HTML"]
[mediaTypes]
[mediaTypes."text/plain"]
suffixes = ["md"]

[outputFormats.MarkDown]
mediaType = "text/plain"
isPlainText = true
isHTML = false

[outputs]
home = ["HTML", "RSS"]
page = ["HTML", "MarkDown"]
section = ["HTML", "RSS"]
taxonomy = ["HTML", "RSS"]
taxonomyTerm = ["HTML"]
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
54 changes: 54 additions & 0 deletions content/post/Netflix日区使用指南/index.md
@@ -0,0 +1,54 @@
---
title: "Netflix 日区使用指南"
date: 2018-11-04
tags: ["Netflix"]
isCJKLanguage: true
draft: false
url: "/post/setup-netflix-on-rk3328-tv-box"
---

说来惭愧,最近沉迷看电视已经小半年没更新日记了,嘛,那就说说看电视好了。

<!--more-->

起因是自从学习了日语,想了各种方法接触日文、日语资源。文字方面通过[使用 Kindle 可以下载各种日文原版书]({{< relref "日亚Kindle书店漫游指南.md" >}}),也一直使用至今,很满意。但是影视资源方面一直没有太大进展。查看自己的搜索记录事实上去年 10 月份我试用过 Netflix 和亚马逊的 Prime Video,当时的印象是各种海外映画,番组确实是有日语字幕,而邦画(日影、日剧、动漫等)的部分似乎基本不提供字幕,很沮丧,就作罢了。

今年因为有了电视机、并且五月份看了一篇 Netflix 技术博客介绍他们为了登陆日本市场[对字幕做的各种努力](https://medium.com/netflix-techblog/netflixにおける日本語字幕の導入-b8c8c4fa299e),发现日语字幕确实有别于英文字幕难度会高很多(主要是ルビ、傍点、縦書き、斜体、縦中横等)。于是再一次使用了 Netflix,惊讶的发现几乎所有的日剧、日影都有了日文字幕(而且感觉应该只会有日文字幕,突然有种日语没白学的感觉)以及很多美剧、纪录片等甚至有日语配音(Netflix 自家出的居多)虽然听起来怪怪的,就当是おまけ了(最新一季的 Better Call Saul 就是听着日语吹替看着日文字幕看完的,谜)。另外好多欧美电影、纪录片都有中文字幕,所以其实不是奔着日语资源也是很值的。(感觉已经看了好多纪录片了)

![ベター・コール・ソウル](better_call_saul.jpg)


其实到现在能流畅的使用还是废了点儿力,说到底最关键的还是需要比较好的网络环境。托最近搬家的福,终于用上了几百兆的宽带,也让我的路由器终于发挥了点作用。

![下行带宽差不多有 300 Mbps](speedtest.png)

其次需要一个能用的日本代理,Netflix 是根据 IP 来判断用户地域,进而提供不同的影视资源。另外要注意的是一些 IDC 或者云服务厂商的 IP 可能被 Netflix 屏蔽。有了好用的代理之后最好是能把代理安装在路由器上,这样比如使用电视观看 Netflix 会方便很多。我这里使用代理之后的带宽大概跑到 50 兆左右,流畅看 Netflix 1080P 足够了(因为电视机是 1080P 的,4K 的情况怎么样不太清楚)

![挂上日本代理后的带宽](fast_com.png)

至于 Netflix 帐号的问题,简单的使用可以去万能的淘宝,当然也可以自己用信用卡支付,不同的地域资费不太一样,据说土耳其还是哪能很便宜,当然了和几个人长久合租可能是最划算的一种方式了。

到此为止基本就能使用 Netflix 了,不过需要在电视上使用可能还得动点脑子,如果是比较新的安卓电视可以试着安装 Netflix 的 App(如果安装的是手机版 App 操作稍微有点儿蛋疼,实在不行可以插个鼠标),可以使用 [APKMirror](https://www.apkmirror.com/) 或者 [APKPure](https://apkpure.com/) 搜索直接下载 apk。至于像我一样用着比较老的电视不太能安装 App 的情况可以买个电视盒子,比如说淘宝上的外贸盒子,大概几百块钱,大体上都差不多是基于 RK3328 系列芯片组装的。

{{% admonition tip "RK3328 芯片的电视盒子相关介绍" %}}
- [RK3328、4GBメモリ搭載のAndroid TV box「A5X Max Plus」実機レビュー](https://obakasanyo.net/review-a5x-max-plus/)
- [Even Cheaper Android KODI BOX - H96 Max Plus 4GB RAM 64 GB ROM](https://www.youtube.com/watch?v=5s_o2HjPIRE)
![RK3328 平台的电视盒子照片](rk3328.jpg)

{{% /admonition %}}

最后为了能及时收到 Netflix 上架了哪些作品,找到一个日本网站 [Netflix 日本非公認ファンブログ](http://netflix-fan.jp/new-arrival/)每天都有更新,今天上架了啥,下架了啥等等。用 [Inoreader](https://www.inoreader.com/) 订阅一下,看到感兴趣的标记一下挺方便的,比如前几天上架了魔戒、黑客帝国啥的。

{{% admonition info "显示效果图" true %}}

![搜藏列表](netflix_wishlist.jpg)

![电影](netflix_movie.jpg)

![电视剧](netflix_tv.jpg)

{{% /admonition %}}

Special thanks to @[qinhuai](https://www.douban.com/people/qinhuai/).

以上です。
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 0 additions & 7 deletions content/post/_index.md

This file was deleted.

2 changes: 2 additions & 0 deletions content/post/业余日语学习的近况.md
Expand Up @@ -11,6 +11,8 @@ slug: "learning-japanese-part-1"

大学时代,受到室友影响,莫名其妙地学会了 50 音,这一次算是又一次地上路了。

<!--more-->

首先,找到了应该是最为简单的课文内容,来自 NHK 的[《简明日语》](http://www.nhk.or.jp/lesson/chinese/),大概每天听两课基本能听懂,当然了拟声拟态词的部分基本左耳朵进右耳朵出,这里边的语法都非常简单,录音的质量很高。

建立起一点儿自信后,开始浏览一些日文网站,我的天,扑面而来各种可怕的单词、语法、片假名简直觉得自己是个智障,嘛,冷静了一下挑了两个看起来友好一点网站决定稍微跟一下,一个是类似于高级豆列一样存在的叫作[まとめ](http://matome.naver.jp/),另外一个有点儿像国内的 V2EX 叫作 [Qiita](http://qiita.com/),基本上前者看些新闻(基本靠汉字猜),后者用来熟悉片假名(不过基本都是编程方面的术语)。
Expand Down
2 changes: 2 additions & 0 deletions content/post/人気はないけど、僕は好きなんだ.md
Expand Up @@ -14,6 +14,8 @@ slug: "songs-of-the-blue-hearts-and-the-high-lows"

> お待たせしました。次の駅は幸せばっかりの夢の駅。
<!--more-->

## 迷路

{{% music id="22656817" %}}
Expand Down
32 changes: 32 additions & 0 deletions content/post/例えば十年.md
@@ -0,0 +1,32 @@
---
title: "例えば十年"
date: "2018-01-27"
tags: ["日语"]
isCJKLanguage: true
draft: false
slug: "pass-jlpt-n1"
---

要说上周有什么值得高兴的事的话,就是通过了 JLPT N1 的考试,距离上次[考完 N2]({{< relref "契机.md" >}}) 又过去了半年时间,距离[立下学习日语的计划]({{< relref "业余日语学习的近况.md" >}})过去一年多了。

现在回过头来看,一方面自己运气的确非常好,基本上是我能保持乐趣的同时做到的最快通过 JLPT 的方法了,虽然当初学日语的时候并没有以此为目标,可以这么说,我打从一开始就没有为了通过 JLPT 去学习,而是自己作为一个日语独学者,通过考试检验一下自己的学习方法而已。

<!--more-->

当初开始学习的时候总是最迷茫的,市面上充斥着各种各样的学习方法,材料。就单拿知乎来说吧,有看了几年动漫学了下五十音几个月就能过 N1 的人存在,也有从头到尾多少个月利用各种工具,文档也好表格也好最后周密地通过的实践派。也有说 1 年时间或者几个月时间恐怕不可能的谨慎派。但我发现他们没有一个人的情况和我一样,我大概认识五十音的一半,动漫几乎没看过,那会儿也没太大兴趣,日剧虽然偶尔会看一些。那既然没有适合我的,我就自己建一个呗,毕竟我是个程序员嘛。

首先那个记录下每天学习记录,反复记忆的方案我肯定生理上没法接受,本身就是因为自己懒散惯了才选择了做程序员,让我去做机械的工作基本上是和我多年建立的价值观冲突,当然伟大的人善于改变自己,但是弱小懒惰如我肯定没法坚持下来,没法坚持下来就肯定是放弃。我从小大到早上就起不来,来北京快三年了,几乎从来没见过太阳从哪边升起(感谢公司的弹性工作制度)。而且,我本来是个非常敏感的人,内心容易受到伤害,容易陷入自己嫌恶的境地。一旦遇到挫折要走出来需要花费比常人更多的时间,好在听了朋克摇滚后几乎痊愈了,似乎还比一般人更强大了一些,笑(当然这是后话了)。

于是我就掂量了一下自己至今为止都会些什么,有哪些可以来学日语的。首先中文毫无疑问可以用来学日语,会基础的英语也可以用来学,会写一些代码至少可以混口饭吃的程度,编程语言也是语言嘛,多少可以用来学。我大体上做了如下分配,用英文来学概论,看西方人怎么总地把握这门东方的语言,对它的语法发音等有个较为全面但细节不足的印象就可以了,不求全程用英语去学日语。重要的是有全面的把握,至少我是这样的人,对一件陌生的事物没有一个较为全面的把握,很难放开手去执行接下来的事情,日语也是,日常工作写代码也是。其次各种ややこしい的问题交给中文去解决,毕竟是自己的母语理解力上多少会好一些。编程的用处大概在以下几个方面,首先片假名我是通过编程术语去熟悉的,编程的思想也帮了大忙,大概是这么两个。一个是鸭子类型[^1],“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”所以我把自己的行为表现得像是日本人,那在外人看来就当我是日本人好了。于是我把各种东西都调成日本语,时间也使用日本标准时间,甚至有一段时间抽日本烟(最终因为太淡放弃了)。另外一个概念是自举[^2],这个解释起来比较麻烦,可能我也解释不清楚,总之比如你要开发一门新的编程语言,第一个编译器需要用其他语言来实现,但之后这门语言日趋完善,你就可以用这门新的语言来为自己添加新功能啦。拿学日语来说,我先用英文中文学日语,最终还是要回到用日语学日语对不对?当然还有编程技能本身带来的好处,比如说一键生成振り仮名啦,比如分词程序 MeCab[^3] 快速找到一个活用形的原形是什么啦,以及写一些小机器人来为每天的日常灌输一些日语之类的事情,总之觉得可以拜托电脑桑的事情,理论上就可以写程序实现不是吗。这大概是我最初制定的方针,至于通过考试,认识厉害的友邻们都是预想外发生的事情。

其次执行面上面,我需要保持最大限度的平衡。毕竟白天需要为生计忙碌,需要为公司效力以换取我额外的自由。所以不能在上班时间学习日语,但作为(像我这样的二流)程序员没有搜索引擎就很难写程序,我就把平时用的 stackoverflow 换成日本的 qiita,这样道德上也没有问题,本来是向西方人学习怎么写代码,我现在换成向日本人完全没有问题嘛,解决问题的同时间接的学了日语。另外就是尽早完成自举,就是用日文去学日文,我觉得学完五段动词变形就会查日语字典了差不多,那个时候就可以开始看简单的日语日记也好,博客也好,挑战一下长篇小说也是不错的。说到查字典,我差不多是看了编舟记开始喜欢上查字典的,感觉很有意思,看的途中也用手机查了下大辞林里对「恋」的解释,翻译成中文是“被特定的异性强烈地吸引,想见面,想占为己有,想待在一起的心情”这么说我怕是对日语有这样的感情,笑。最近修字典的人们也开始意识到不一定仅限于异性。

接下来就只要坚持就可以啦,既然喜欢日语的话,不说每天见面,基本上每个星期都不会间断,睡前看看漫画和文章渐渐成为习惯之后,就成为了日常。至于考试,我都是参加考试前一个月开始做历届真题而已,怎么讲,稍微感受到了一点儿社会人的余裕?(你别骄傲)虽然借了朋友的备考书,实际上翻了两页就再没有继续,ごめんね。而 JLPT 厉害之处就是最终考试成绩几乎和我做第一份真题的估分完全一致。所以按照我这个细水长流的方案来说,即便不通过也没什么好担心的,如果挂了就一句どうせ試験勉強ちゃんとしなかっただろ〜可以一笑而过了。实在要说这个方案的缺陷的话多少是孤独的,而且随着时间的推移可能会越来越孤独,恐怕直面自己喜欢的东西,或是想做的事情的话,也无法避免吧。所以,能把我每天学到的一点点新东西分享给友邻,我已经很开心了。

那么,接下来呢。我还是不知道本格的日语学习是什么,不过那已经不重要了,因为无论如何通过语言完全理解原理上不可能实现,母语不可能何况是外国语,那过多地研究学习方法又有什么意义呢,只要适合自己就可以了?眼下而言按照我一后端工程师狭隘的看法,如果没有出现大的问题,线上的代码就不要轻易去改动吧,目前我继续维持现状好了。等我有新的发现再给大家报告。

いつ?例えば十年後。

[^1]: [鸭子类型](https://zh.wikipedia.org/zh-hans/鸭子类型)
[^2]: [编译器的自举原理是什么?](https://www.zhihu.com/question/28513473)
[^3]: [MeCab: Yet Another Part-of-Speech and Morphological Analyzer](http://taku910.github.io/mecab/)
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
74 changes: 74 additions & 0 deletions content/post/在白熊咖啡馆打工的两天/index.md
@@ -0,0 +1,74 @@
---
title: "在白熊咖啡馆打工的两天"
date: 2018-05-13
lastmod: 2018-11-14
tags: ["编程"]
isCJKLanguage: true
draft: false
url: "/post/how-to-build-a-douban-bot"
---

{{% admonition abstract "TL;DR" %}}

写了一个豆瓣定时发广播的机器人?

https://www.douban.com/people/shirokumacafe/

{{% /admonition %}}

店长白熊桑 @[qinhuai](https://www.douban.com/people/qinhuai/) 说想在豆瓣开个白熊咖啡馆,我说反正我闲着也是闲着要不就交给我吧(大意),于是有了这个项目,就是定时把白熊咖啡馆的截图发到豆瓣广播上。

<!--more-->

## Day 1
要完成这个工作,无非就是分三步:

1. 准备好截图

2. 准备好发广播
3. 设置定时程序

要先拿到截图就必须要有素材,素材当然就是白熊咖啡馆的片源啦,马上下载了 50 集,当然人工一张一张截图虽然也是个办法,果然还是太麻烦了,而且容易出错,规格也很难保证,于是就想着用程序去完成,就请来了 ffmpeg 桑,让他每隔 20 秒就去截一张图。

```shell
ffmpeg -i shirokumacafe_01.mkv -f image2 -vf fps=fps=1/20 %d.jpg
```

写个遍历文件的简单代码,就可以坐等把所有截图都获取啦,50 集一共获取了 3698 张图片。然后打包传到服务器上(当然本地用也行,只要能保证一直开机运行就行)

```shell
rsync -av --progress -e "ssh -p $ssh_port" ./images.zip $remote_dst
```

然后就是研究怎么发广播,就跟平时刷广播一样,无非就是用浏览器,或者用 App。只要模拟这个过程就可能像他们一样发出广播了。这里选择了模拟 App 请求的方式,简单,方便而且有效期长。就是拿着账号密码去换 `access_token`,有了这个凭证就可以用它来发广播或者干其他什么事了。于是写了 `shirokumacafe.py` 这个程序,从 50 集的截图里随机挑选一张,然后发到豆瓣广播上。

最后为了让这个程序定时跑起来,只要用 crontab -e 设置一下就可以啦。

```shell
0 * * * * cd /root/app/shirokumacafe && pipenv run python shirokumacafe.py
```

## Day 2
上面的程序运行了一天之后,发现了一些问题,比如 OP 和 ED 的截图存在感较高,还有一些意味不明的图片,也没有办法嘛,毕竟每 20 秒截一张图的办法谁也不知道都拿到了什么样的照片。另外一个就是感觉就光秃秃一张图片未免有些单调。于是为了解决这些问题,打工第二天开始了。

为了改善机械的截图方式,想到了用台词去截图,也就是用字幕。这样一来至少是有对白的画面,质量多少会高一点儿,另外台词顺便可以当发广播的文字,一举两得,不对顺便还能当学日语的例句,一举三得了。首先就是提取字幕,用 `mkvmerge -i `查看字幕信息,然后用 `mkvextract` 导出就行。之后就是处理这些字幕文件,提取出我们需要的截图时刻(这里简单地使用了字幕起止时间的中间作为截图点),然后合并一下中日两种文字的台词。总的来说就是 `coffee.py` 的作用了。有了这些信息,就写了 `bamboo.py` 让他去按照台词的时刻截图了,最后截了近两万张图,辛苦了 **ffmpeg** 桑。

OP 和 ED 出现概率高的原因是因为他们每集都有嘛,简单得改了下随机策略就解决了,先把 OP 和 ED 的截图摘出来选出一张,然后把他加到正片的截图池里再随机选一张就差不多了。

以上就是打工两天的内容啦。



{{% admonition tip "提示" %}}

附项目地址: https://github.com/masakichi/shirokumacafe

{{% /admonition %}}

![咱们裸熊](bears.jpg)

{{% admonition info 追记 %}}
- 2018/05/13: 发完广播后自动回复截图出处
- 2018/05/27: 支持发布 GIF 动画
- 2018/11/14: 转移到新的服务器,使用 systemd 的 timer 触发定时功能
{{% /admonition %}}

0 comments on commit 9744c92

Please sign in to comment.