DPDK FW進捗
seccamp 2018卒業生です。
趣味で作っているDPDK FWの進捗報告をさせていただきます。
よろしくお願いします。
DPDKとは
パケット処理に特化したライブラリのことです。
- kernel bypassしてUser landから直接NICをたたくことができる
- PMD(Poll Mode Driver)でCPUを占有(Polling)してパケットに関する処理に全リソースを割くことができる
- hugepageの利用で、一ページあたりの大きさを大きくして、ページ数を少なくして、高速化ができる
以上のようなメリットがあり、パケットを高速で送受信することができます。
進捗
以上のことをしました。
それぞれについて説明していきます。
フィルタリング設定json読み込み化
まず、今までdropする5tuple(ip dst/ ip src/ ip proto/ src port/ dst port)フィルターの情報を標準入力で受けつけるように実装していました。
しかし、それは非常に面倒だと普通は思うのでjsonを読み込んでフィルターするように実装しました。
これを実装した後に改めて計測をしました。
その際、janssonというライブラリを使いました。
Jansson — C library for working with JSON data
Jansson Documentation — Jansson 2.11 documentation
また、Log出力のOn/Offもここで切り替えられるようにしました。
FW性能測定
環境
上のような環境で実験しました。
Host 1側でIntel DPDK pkt-genを走らせてパケットを送信して、Host 2側で今回作成したFWを走らせてパケットをフィルタリングして、Host 1側に送信する、という形で測定しました。
githubリンク
パケットと戯れた結果
自分で作ったパケットを自分で作ったFWでdropするという謎の遊びができるようになった
— アゴドリル (@AG0D0R1RV) 2018年12月1日
Todo
フロント側との結合
もっと低レイヤー的なことをして、パケットロスを減らしたい。
(どうすれば性能が向上するか全くわからないが、、、)
これを今後取り組みます。
最後に
自分はDPDKの開発環境を持っておらず、seccampでお世話になったsyuu先生のマシンを借りて開発をしています。
また、技術的な質問にも答えていただいて非常に感謝しています。
ありがとうございます。
最後の最後に
まだまだやることがあるので頑張りたい
seccamp2018参加記
8/14~8/18にセキュリティ・キャンプ(seccamp)に行った参加記
seccampとは
セキュリティ・キャンプ事業の中心的な行事です。毎年8月中旬頃に4泊5日の合宿形式で、情報セキュリティに関する実践的な講義を実施しています。対象は22歳以下の学生で、参加するためには、募集期間中(毎年4月~5月頃)に応募課題を提出し、書類審査に通過する必要があります。
本大会は、2004年から毎年1回開催されており、これまでに663名の修了生を輩出しました。既に社会で活躍している修了生も多数存在します。
なお、全国大会では、参加に係る費用を主催者側で負担しています。参加者は、キャンプ期間中一人一台のPCが貸与される他、受講費・交通費・宿泊費を含めて、無料で参加することができます。
セキュリティ・キャンプ:IPA 独立行政法人 情報処理推進機構
ということで学生無料で強い人に色々教えてもらえるキャンプがあるということで応募用紙を出したら通ったので行ってきた。
(応募用紙は気が向いたらブログに投げたい。)
seccamp通りました#seccamp2018
— アゴドリル (@AG0D0R1RV) 2018年6月14日
0日目
パッキングがいい感じにできて助かった。
1日目
朝はしっかり起きて出撃した。
— アゴドリル (@AG0D0R1RV) 2018年8月14日
出撃トラック
眠い・暑い・荷物重いで会場到達までが地味に辛かった。
北府中駅から会場のクロスウェーブ府中までは自分と同じ様にスーツケースを持った民がたくさんいたのでついていけば場所がわかった。
ツイッターでよく見るやつ pic.twitter.com/t0ur5iZSpC
— アゴドリル (@AG0D0R1RV) 2018年8月14日
開会式
OSCの紹介
法律のお話
夕食
18:00に夕食でめっちゃ早かった。
LT大会
Wiiの正しい遊び方LTとか、アンチウイルスソフトウェアとパッキング処理済みマルウェア対決のLT、Z4で扱うDPDKのLTが面白かった。
面白いし、技術力的なところでレベルが違うなぁ、って思いながら聞いてた。
グループワーク
seccamp終わった後、どういった活動をするのか、話し合ったりして検討した。
2日目(トラック1日目)
なぜか圧倒的起床力をこのタイミングに発揮してしまい、6:00に起きた。
キャンプ中に唯一の外出できるコンビニタイムでコーヒーを調達した。
しっかり起きれたのに部屋がわからないというインシデントが発生して2、3分遅れてトラックの部屋に着いた。
参加したトラック紹介
圧倒的治安の悪さで有名なZトラックで、その中で決めつけで治安の悪いZ4トラックで毎日頑張ってコードを書いてた。
真面目なことを言うと、DPDKというネットワーク処理に特化したCのライブラリを使ってファイアウォールを実装していこう、というゼミに参加しました。
講義開始
twitterで見た事がある赤いサメアイコンの強い人とネコのアイコンの無限に強い人が講師で、受講者は自分と研究でDPDK使ってる強い人で物理が専攻で趣味でプログラムやってる人が行っては行けないようなやばいゼミだった。
マシンが4台、受講者二名にプロの講師二名の最高の環境だった。
1日目は各トラックのイントロダクションをして、その後は各ゼミごとに別れてイントロ・実装とか作業をしていった。
自分は朝から晩まで事前課題で書いたコードをDPDKのコードに移植するために、C言語のコードのバグフィックスと最適化を行なっていた。
基本的にペアプロで開発をしていった。
sshで開発マシンに入って頑張って実装してた。
マシンのhost名がかっこよくて、良さみが深い、って一人で思ってた。
ssh経由で開発するっていう事が今までなくて、nanoの使い方で色々困ってた。
(nanoを使った理由は単に下にコマンドが書いてあって使いやすそうだったからです。
実際はまあまあ辛かったのでemacsかvimを使い始めたいと思います。)
自分がコードを書いていて、色々というかほとんど指摘されました。
いつも、中途半端な理解だったところもしっかり指摘されてしまって、教えてもらいながらやっていけたので良かったです。
gitの使い方とか、bashのコマンドとか、Cのコードの書き方以外にも色々教えてくれた。
最後の方はエラー出してごめんなさい〜、って心の底で思いながら実装してた。
講師の人がエラーの処理方法とかを隣で教えてくれたけど、朝からの作業時間が10時間くらいとかで、頭が蒸発してて頭に入ってこなかった。
(講師の人にもこれはバレてたっぽい。)
バグフィックスが割としんどかった。
でも、エラーが出たときのときの対処を何回もやって、これは今回のゼミだけでなくて、今後の日常の開発で常に役立つよなぁ、とあとで思った。
・8:30~12:30
・13:30~17:30
・19:00~22:00
の合計11時間で今まで感じたことがない疲れを得て、2日目を終えました。
シャワって11:30くらいに速攻で寝れた。
3日目(トラック2日目)
起きたのが8:20で、朝飯行けない〜、って思いながらトラックの部屋に向かった気がする。
朝に特に話があるわけでもなく、各班の作業タイムが始まった。
1日目まででまだDPDKのサンプルコードに移植する作業が始まってなくて、あーやばい、って心の底で思ってたのを覚えてる。
トラックの最後の時間までにはDPDKのサンプルコードを動かして、少しづつやっていける状態になったのでよかった。
企業紹介
某社さんのオフレコの話が聞けてやばかった。
グループワーク
疲れてて、チューターの人と喋ったりしてた。
HR
HRという名の実装時間
相変わらず、コード書いてた。
HRの時間が終わって良い感じのところまでいって、もう少し実装したいですーみたいな事を言ったら、良いよーって言ってくれて、神だった。
結局良い感じの時間まで教室外の机で実装してた。
近くにいた講師・チューターの方々が「進捗どうですか」「どんな感じですか」って質問されて答えようとしたら「nano使ってるんですか?」ってなってみんな大好きエディタの話でめっちゃ盛り上がった。
楽し〜い。
あと、良い感じのCUIのプログラムのdemoを見せたりしてくれて、かっこいー、こんなの作りたいー、って思ったりしました。
4日目(トラック最終日)
6:30くらいに起きた。
まだベッドでゴロゴロ寝られるな、って思ってゆっくりしてたら8:15くらいなってて、朝飯行けない〜、ってなった。
3日目夜に良い感じに実装が進んで少しだけコードをいじって、計測にはいれた。
良い感じに高速化出来てる感じでよかった。
午後はトラック内で最終発表をした。
資料作成能力のNASAを発揮してしまい、時間をかけてしまった。
一旦、事前課題で自分が書いたコードが最終的にDPDKにのせて早くなったのがトラック最終日までに実装できたので、一応最低限の目標は達成したと言えるので、安心と高速化の喜びを感じた。
4日目のどっかのタイミングでNOC部屋に行ったりもした。
Elastic Search + kibanaで可視化されたログ見せてもらった。
飯時にめっちゃトラフィック上がってるアクセスポイントとかわかって面白い〜、とか思ってた。
企業紹介
ゲヒルンの発表が面白かった。
グループワーク
色々考えた。
seccamp恒例の本などのプレゼントタイムもここで行なった。
HR
今後、どういった機能を実装すると良い感じになるかという検討をしてた。
5日目
例の如く、朝飯行けず。
グループワーク
今後取り組む事を書いた。
成果発表
集中トラックは他も面白そうだった。
コンパイラゼミの0日目にセルフホスティング出来た人の話が普通に面白くて、かつ実装力がやばそうでやばかった。
リバエンゼミとかのハードよりのゼミも面白そうだな、って思った。
成果発表(続き)
いろんな分野の話が聞けた。
資料があるのであとで色々見てみたい。
閉会式
アウトプットが大事だという話を聞いた。
ブログとgithubに色々アウトプットしていきたい。
帰宅トラック
荷物が重くて大変だった。
戦利品
セキュキャンパーカーとTシャツといろんな本をもらいました。
(写真に乗ってないノベルティもたくさんいただきました。ありがとうございます。)
自分の受けていない、他の講義の資料があって、あとで勉強できるチャンスがあって良い〜、って思いました。
感想
素直に楽しかった。まずはそれに尽きると思います。
三日間、隣に強い講師がいて、いろんなことを聞いてなんでも答えてくれるという最高の環境だった。
参加する講師・受講者が無限に強くてやばいのでは思ってたけど、案の定トラック1日目に実装力がなくて頭が蒸発してました。
自分はまだまだプロには程遠い存在ということがわかったので、精進していく必要があると再認識した。
twitter上にいる強い人にも名刺交換とかできて、いろんな人と関われる良い機会になった。
開発の方は、C言語の基礎から丁寧に教えてくれて、最終的にはDPDKのサンプルコードに移植して動かせる状態になった。
開発したものに関しては、また開発記という形で別のブログに上げたいと思う。
C言語完全に理解した、DPDK完全に理解した、まではいかないけど、ほんのちょっとは理解できて成長できたと思います。
三日間nanoを使って開発したけど、流石にemacsかvimに入信した方が良さそう、って言われてvimの資料があったので、、、(以下略)
スライド
最後に
Zトラックはいいぞ
(ほぼ)一対一で開発できて最高だった。
(他のトラックに参加してないからなんとも言えないけど、さすがに一対一はこのZトラックだけなのでは?
なお、治安の悪さもピカイチだった。)
治安が悪いと散々言ってるものの、実際はめっちゃラフな環境ですごい開発しやすくて、居心地がよかったので3日間本当に楽しかった。(だからこそ治安が悪くなった(?))
興味のある学生へ
応募した方が絶対良い経験・良い刺激になるので応募しましょう。
学生なのに応募しないで後悔するのが一番良くないので。
なので、このブログを見て、かつ技術的に強くなりたい人は来年応募しましょう、という参加してください。(Zトラックは良いぞ!)
ネットワークとマルウェアに興味がある人はぜひZ4に応募しましょう。
一緒に参加した人へ
切磋琢磨しあいましょう。
また、どこかで会いましょう
講師・チューターの方々へ
強くなって帰ってきます。
最後の最後に
トラック最終日に撮った治安の悪い写真で参加記を終わりたいと思います。
Z4最終日 pic.twitter.com/kvmYMyxHNA
— アゴドリル (@AG0D0R1RV) 2018年8月17日
dockerについて
学内でGit,dockerなどの開発環境について勉強する(ゆるふわ)勉強会があったので物理学科ながら参加してみた。そこでdockerにふれたので忘れないように書きます。
dockerとは
Docker Inc.が開発した軽量なコンテナ型の仮想化ツール
仮想マシンとコンテナ型仮想化の違い
Virtualboxなどの仮想マシンはもともと動いているホストOSの上にVirtual boxなどの仮想マシンを立てて、そこでゲストOSを立ててそこでプロセスなどを実行する
dockerなどのコンテナ型の仮想環境ではコンテナという領域でプロセスを実行する
コンテナは仮想マシンに比べて余計なものが動かない→軽い!!!
dockerの公式ドキュメント
Docker Documentation | Docker Documentation
imageとcontainerについて
・image
コンテナの実行環境、ファイルシステム、操作方法みたいなのをまとめたもの
自分でOS,コマンドなども編集可能
・container
imageによって作成した仮想環境のこと
コンテナの起動まで
イメージの取得
$ docker pull [image名]
https://hub.docker.com/explore/
上のリンクからpullできるものは確認できる
version指定をしたいときは
$ docker pull ubuntu:14.04
上のように":"をつけてversionを指定
コンテナの起動
$ docker run [option] image [command]
imageがローカルにないか自動で確認してくれて、ないときは自動でpullをおこなってから起動をする
オプション
-i インタラクティブ
-t 擬似端末接続
-d バックグラウンドで実行
$ docker run -it ubuntu:16.04 /bin/bash
↑よく使う
上のコマンドを実行すると、起動したubuntuのコンテナのターミナルに接続ができる
コンテナ名を指定
$ docker run --name hoge ubuntu
コンテナ名:hogeのコンテナを作成
(通常、コンテナ名はランダムに作成される)
よく使いそうなコマンド一覧
起動中のコンテナにログイン
$ docker attach [コンテナ名 or ID]
起動中でないとアタッチはできない
コンテナの起動
$ docker start [コンテナ名 or ID]
-aオプションを加えて
$ docker start -a [コンテナ名 or ID]
で起動と同時にコンテナにアタッチ(ログイン)することもできる
imageの一覧を表示
$ docker images
実行中のコンテナの一覧を表示する
$ docker container ls
すべてのコンテナ(実行中でないものも含む)を表示する
$ docker container ls -a
コンテナ/イメージの削除
$ docker rm container名 $ docker rm image名
コンテナ/イメージの全削除(実行中のものは除く)
$ docker container prune $ docker image prune
そういえば
dockerのインストールが成功しているのにも関わらず、dockerの起動の際にpermission denied
などと表示されるときはユーザがdockerグループに所属していないためにsudoを毎回打つ必要があります。そのためユーザをdockerグループに所属させると、毎回sudoを打つ必要がなくなります。詳しくは
自分はこの方法で解決しました。
Gitの基本操作
学内でGit,dockerなどの開発環境について勉強する(ゆるふわ)勉強会があったので物理学科ながら参加してみた。Git回だったのでまずはローカルでのgitの基本操作について復習としてまとめてみる。
基本的なコマンド
- git init
- git add
- git commit
- git status
gitレポジトリの作成
今回は作業用ディレクトリとしてzinken_reviewを作成し移動。
$ mkdir zinken_review $ cd zinken_review
gitで管理したいのでgit init
コマンドを使用してgitレポジトリを作成する。
$ git init
そうするとInitialized empty Git repository in ~/zinken_review/.git
と表示されて空のgitレポジトリが作成されてgitで管理・運用ができるようになる。
確認としてlsコマンド
$ ls -a
を実行すると.gitファイルがあるのが確認できる。
基本の流れ
ファイルの作成・変更→git add→git commit
の順に作業をしていく。
空の状態なので新たにテスト用ファイル(今回はtest1.txt)を作成・編集をして、これをコミットする作業を行う。
①test1.txtを作成・編集
②ファイルをステージングエリアにあげる
ステージングエリアにあげるにはgit add
コマンドを使用する。
$ git add test1.txt
③コミットをする。コミットをするにはgit commit
コマンドを使用する。実行するとviが起動してコミットメッセージを書くことができる。
$ git commit
コミットメッセージをemacsで書きたい場合は、以下のコマンドを実行するとコミットメッセージがemacsでかけるようになる。
$ git config --global core.editor 'emacs -nw'
これで更新終了。
ファイルの編集・追加→git add→git commitが一連の流れ
↑これ大事
git statusについて
どれをステージングエリアに上げたか否か、コミットしたか否かを調べるにはgit status
コマンドを使う。
変更したファイルをステージングエリアに上げていない状態でgit status
コマンドを使用すると以下のような表示になる。
変更・追加したファイルをステージングエリアに上げて、コミットしていない状態でgit status
コマンドを使用すると下のような表示が出る。
すべてのファイルがコミットまでされて最新の状態である場合は下のようになる。
ブランチ関連のコマンド
- git branch
- git checkout
- git merge
ブランチの作成・切り替え・結合
ブランチを作成する時はgit branch
コマンドを使用する。
試しにtest_branchという名前のブランチを作成する。
$ git branch test_branch
現在のブランチ一覧を確認するときも同様にgit branch
コマンドを使用するとbranchの一覧が表示される。
$ git branch
"*"マークが付いているところが現在いるブランチである。
ブランチの切り替えをしたい場合にはgit checkout
コマンドを実行する。
$ git checkout test_branch
ブランチを結合するにはgit merge
コマンドを使用する。
masterにtest_branchをmergeする場合には、まずmasterに移動する。それからgit margeコマンドを用いてブランチを結合する。
$ git checkout master $ git merge test_branch
他にもgit log
コマンドやGithubとの連携など、様々なコマンドがあるので調べてまとめたい。
参考
Git - Book
サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ
ICPC国内予選2017敗戦記
チーム:kurodoriru5で参加しました
ICPC国内予選
— アゴドリル (@AG0D0R1RV) 2017年7月14日
チーム:kurodoriru5
with@_jau5_ @claw_88
で出ます
本番
Aはソートしてやればいいとc氏に言われ言われるがまま実装
A,AC
Bをj氏と考える
文字列扱う系の問題でj氏が得意な問題だと勝手に思ってた
""の中だけを考えてる問題だと二人とも誤読したりしていた
実装方針が大きく変わってc氏にPCを渡す
Cはc氏がいつの間にACを出していた
問題も見ていない
Bを再びPCでコーディングしていくj氏
できたと思ってサンプル通すとすべてあってた
これは来たと提出
WAが返ってきた
あれー、ということで二人で悩んでいたが最後に何かしらの文字がある時のことを考えてなかったっぽい(詳しくは覚えてない)
サンプル見るとその時のパターンがなくてやられましたねということを話していた
j氏がさくっと直して問題なさそうだったので提出
B,AC
終了まで確か45分くらい
Dを解こうとc氏奮闘、
xorを使う、DPを使うっぽいって確か言ってたなあ
残念ながらDのACを獲得することはできず、短い3時間がおわってしまいました
ABCの3完で113位
学内で4位、RICORAサークル内では2位という結果になりました
感想
楽しかったけど、悔しいです。悔しいけど2ヶ月くらい前から1週間に1回、チームで集まってAOJ-ICPCの過去問を解くなどできる限りでやれることをやってきました。それで進出できなかったので悔しいけど、やりきった達成感もあります。
そして、このチームメンバーと一緒にICPCに出られたことが嬉しいです。このチームは2年生2人、3年生1人のチームなのでみんな来年も出ようとすれば出れるので、もしできるのであればこのチームで来年も出てリベンジを果たしたいなあと1人で勝手に思っています。
サークル内で1位のチームも3完ということで弊サークルからのアジア予選進出のチームは残念ながらいませんでした。
去年のICPC終わってからモチベーションの低下と大学のレポート三昧で全然競プロする時間がなかったと思うので今年はこの悔しさを糧にして頑張りたいと思います。
実装力をつけて来年こそはアジア進出するぞ!
最後に
アジア予選進出した方はアジア地区予選でも頑張ってください!
監督を引き受けていただいたS先生、ありがとうございました。
ICPC 模擬国内予選2017 参加記
チームkurodoriru5で出ました
j氏(RICORAの長)、c氏(葛飾のプロ)、a(私)の3人です
ICPC模擬国内kurodoriru5(@AG0D0R1RV @claw_88 )で出場します! pic.twitter.com/7Y9Jh2Ujo7
— jau5 (@_jau5_) July 2, 2017
毎週土曜のチーム練習で1人1問担当ではなく、ペアプロ方式で解くことになってたのでいつも通りその感じで解いていきました。C,Dは3人で解いてました
14:00(開始予定時刻)
あれ、つながらない
Twitter情報 「15分遅延」
申し訳ありません。コンテストの開始を15分遅らせます。
— ACM-ICPC OB/OG会 (@icpcjag) July 2, 2017
3人「まじかー」
14:15
Twitter情報「遅延」
3人「まじか、運営がんばれ」
15時にコンテスト開始します。今度こそ開始します。
— ACM-ICPC OB/OG会 (@icpcjag) July 2, 2017
15:00開始(0分経過)
3人「お、問題出てる」
a「A解きます」
c「見てます」
j「B見てます」
15:20(20分経過)
c氏にアドバイスもらいながらA実装完了
(言われた通りに実装してた)
a&c「Aできたね」
j氏に提出方法を教えてもらう
15:25(25分経過)A.AC
3人「おー」
j「B書きます」
a「見てます」
15:50(50分経過)B.AC
3人「おー」
c「j氏実装お願いします」
j「指示お願いします」
a「後ろから見てます」
16:30(90分経過)
?「できたけどサンプル合わない」
3人でバグ探す
?「ソートの位置、違うんじゃない?」
「あー、ほんとだ」
直して提出
2WA
?「あれ、何でだ?」
c「ここ違くないですか」(どこかにバグがあった)
j&a「ほんとだ」
直して提出
16:50
C提出
1ケース目AC
2ケース目、通す前に障害発生
Dにいく
17:15(135分経過)
c「D問題二分探索?」
j,a「頼んだ」
17:30(150分経過)C.AC
システム直ったらしい
C,AC
17:55(175分経過)
3人「D問題うまくいかないね、、、」
18:00(180経過)
twitter開いて30分延長を知る
Dを解く
18:20(200分経過)
c「D実装終わった」
j「Dサンプル通った」
コマンドミス、、、不穏な空気が漂う
3人「あれ、やばい」
18:30(210分経過)コンテスト終了
3人「お疲れ様です」
結果
A,B,C3完
93位
よかった点
- 何回かチーム練をしていて、A,Bを今までになく早く解けた(気がする)
- Cのバグを3人で協力して(割と早く)見つけられた
ミスった点
- 入出力コマンドミスでトラブル。D問題を提出できなかった→ファイル名を間違えないように決める
- CでWAを出してしまった
私個人
- Dを解くときまで頭が回らずj氏、c氏の2人に任せきりになってしまって、非常に申し訳なかった→3時間考えきる脳力が必要
- ちょいちょい後ろからミスを指摘できてよかった
まとめ
チーム戦、楽しかった
コンテスト中も笑いありで非常によかった
トラブルがあったけど運営の人たち、お疲れ様でした
本番も頑張る
Sublime Text 3のテーマ・カラースキームを変えた
こんにちは。
Sublime Text 3のカラースキーム・テーマを変えたので変更の方法をまとめたいと思います。
(現在のテーマ:Cobalt2)
デフォルトで入っているカラースキームを使う方法
sublimeにはデフォルトでもカラースキームが豊富に用意されています。
これらを使うには[Preferences]→[Color Scheme]→[Color Scheme - Default] としていくとデフォルトで入っているカラースキームを選ぶことができます。
デフォルトで入っていないカラースキーム・テーマを使う方法
デフォルトで入っていないカラースキーム・テーマを使いたい場合にはインストール作業と設定作業が必要です。
個人的なおすすめ
Cobalt2(←これに変えました!!!)
青基調の爽やか系。良さみが深い。
設定
"color_scheme":"Packages/Theme - Cobalt2/cobalt2.tmTheme", "theme":"Cobalt2.sublime-theme"
Tech49
ダーク系でかっこいい。
設定
"color_scheme":"Packages/Theme - Tech49/Tech49.tmTheme", "theme":"Tech49.sublime-theme"
material -Darker
ダーク系だけど、Tech49に比べて落ち着いた色合いでよいです。
設定
"color_scheme":"Packages/Material Theme/schemes/Material-Theme-Darker.tmTheme", "theme":"Material-Theme-Darker.sublime-theme"
こんな感じでテーマを変えてsublimeをカスタマイズしてみてください!
P.S.早くライセンス買わねば
参考・参照した記事
Sublime Text のテーマやカラースキームを変更する方法 - 情報系大学院生のWebメモ
コードがはっきりと見やすくて、使いやすい Sublime Text 3 のテーマのまとめ | コリス