Skip to content
Permalink
Browse files

add & update articles

  • Loading branch information...
masakichi committed Jan 4, 2019
1 parent 8b4ee08 commit 9744c92df6bf9d2023b5184f1d95762dd7dfd260
File renamed without changes.
@@ -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
@@ -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"]
Binary file not shown.
Binary file not shown.
@@ -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/).

以上です。
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

This file was deleted.

Oops, something went wrong.
@@ -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/),基本上前者看些新闻(基本靠汉字猜),后者用来熟悉片假名(不过基本都是编程方面的术语)。
@@ -14,6 +14,8 @@ slug: "songs-of-the-blue-hearts-and-the-high-lows"

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

## 迷路

{{% music id="22656817" %}}
@@ -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/)
Binary file not shown.
@@ -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 %}}
Oops, something went wrong.

0 comments on commit 9744c92

Please sign in to comment.
You can’t perform that action at this time.