Pelicanになれる作業

苦労したこと

ともかく疲れた。もうPelican触りたくない。

Pelicanは公式ドキュメントがあるから設定には困らないはずなんだけど、それ以前の問題といったところ。

というか間違えて大事な部分にまで手をいれてしまったせいで一回はブログが投稿できなくなった。

仕方ないので諦めてPelican-quickstartをもう一度やり直した。こんなこと二度としたくない。

この記事を書くのだって二度目だ。一個前の投稿など何回書いたか、という気分。(あくまで気分)

Pelicanに移してまだ2回目の投稿だというのにもう当分したくない。

Pelicanについてわかったこと

  • make serveは連続してできない
  • pythonでエラーが出てもエラーログは役に立たない
  • モジュールとか例外の名前を読んだところで到底解決できない
  • 前後の自分の行動から察せよ
  • かなり柔軟、というか細かく指定ができそう

やること

  • 過去ブログのインポートができるかどうか調べる
  • ブログのカスタマイズ
  • markdownになれる
  • 記事を書く

ドメイン取得の罠

以前からBloggerでの投稿をなんとかしようとしてきた。
もっと簡単に、もっと手軽に。できればMarkdownで書きたい。
Markdown→HTML変換サービスはすぐに見つかった。
だが、Bloggerスタイルシートの仕様上、これはうまくいかなかった。
じゃあ別ブログサービスに移行しようか、今だとやはりはてなかと悩んでいたところ、
友人がGithubPagesを使ってWebページで遊んでいるのをTwitterで見かけた。
いっそどうせなら、と思い僕もgithub.ioのブログ用リポジトリを作った。
Markdown変換ツールにはPlicanを使うことにした。
静的サイトジェネレーターというらしい。
軽くググったところ、候補としては他にも色々あったが、結局のところRuby,Python,javascriptのどれを使うか、みたいなところだった。
RubyでJekyllとかOctopressとかを使うのもアリだとは思ったのだが、やはりRubyはまだわかっていない気がするので無難な選択肢としてPythonのPelicanにした。

インストールはすぐに済んだ。使い方も難しくない。
ググって出てきたブログとかの通りにやればすぐできた。
gitの使い方を思い出すのに少し苦労した、というかghp-importがよくわかってなかった。
何度か繰り返しGithubへpush。
うん、できたできた。

どうせだからドメイン独自ドメインにしよう。
こういう機会にとっておくと後で何かに使えるかもしれない。いい経験になるだろう。
ということで早速友人に「ドメイン取得サービス何使った?」と聞いたところ「FC2」と返ってきたのでFC2ドメインにて取得。
一応他のサービスとも比較してみたが金額はさして変わらなかった。
それよりも使い勝手とか、身の回りに質問できる人がいるかどうかのほうが重要だ。
そしてFC2にて.comドメインを取得。契約に伴うあれこれに記入して、メール確認。

ようし! これで独自ドメインが使えるぞ!

→ このウェブページにアクセスできません

ありゃ。
CNAMEを使ってgithub.ioのアドレスからリダイレクト(?)する設定になっていたはずだが、.comアドレスでは表示できないようだ。
試しにCNAMEを消去したところ、正常にブログが表示された。

どうもおかしい。ということで、もう少し確かめてみたところ、ドメイン側でもっときちんとした設定をする必要があったようだ。
FC2の管理ページからDNS設定を行い、digコマンドを使って確認する。
友人2人と自分のアドレスをそれぞれ比較してみる。
すると何故か僕のアドレスだけ反応がない。

ドメイン取得には時間がかかるようだ。

ググった結果、最長で2週間くらい見積もる必要があるらしい。
これから毎日PC起動後にターミナルを開いてdigコマンドを打っては閉じる作業が続く。

How To SLIME

SLIME

LispのためのIDE(統合開発環境)、ということでここにある。
詳しくは「SLIME Lisp」などでググってもらえればわかると思う。
Land of Lispを読むにあたって結構便利だということがわかってきたのでまとめてみる。
なお、ほぼググった内容のまとめなので。

あ、Emacsの話です。

インストール

たしか

sudo apt-get install slime

して終わらせた。
.emacsもろくに書かなくて平気だったと思う。

これだけだとあんまりなので、ググって見つけたサイトのインストール方法を拝借してみる。

上記の本家サイトからGithubのページへ行ける。
そこからクローンないしダウンロードしたディレクトリを.emacs.d配下にslimeという名前で置く。
あとは.emacs(or .emacs.d/init.el)に以下を記述。

;; Clozure CLをデフォルトのCommon Lisp処理系に設定
(setq inferior-lisp-program "ccl")
;; ~/.emacs.d/slimeload-pathに追加
(add-to-list 'load-path (expand-file-name "~/.emacs.d/slime"))
;; SLIMEのロード
(require '
slime)
(slime-setup '(slime-repl slime-fancy slime-banner))

なおこの説明ではLisp処理系にはClozure CLを使っているが、自分の処理系に合わせて変えてもらって構わない。僕のinit.elには”sbcl”で書かれている。

使い方

とりあえずemacs起動してM-x slimeで対話環境(REPL)が出る。
もちろんC-p C-nC-a C-eなどEmacsキーバインドが使える。
履歴を辿りたいときはC-↑C-↓でもできるが、M-p M-nを推奨。
大抵ミスるので、そういう時は別ペインに分割されて表示される内容から、選択する数字をタイプする。
例えばこんな感じ。

The variable HOGE is unbound.
[Condition of type UNBOUND-VARIABLE]

Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] Abort thread (#)

Backtrace:
0: (SB-INT:SIMPLE-EVAL-IN-LEXENV HOGE #)
1: (EVAL HOGE)
--more--

この場合「hoge」という変数はないと言われている。
Backtraceについては特に言わなくてもいいだろう。
エラー周りの処理を吐く、どこの言語でもあるやつだ。
問題はRestartsの方で、REPLを再開するのに3種類の選択肢が用意されている。
内容を読んで0,1,2のどれかをタイプすればよい。

Lispソースから

本題はこちら。
仮にhoge.lispみたいなlispのソースがあったとする。
そのソースをemacsで開いて、SLIMEを起動。
すると以下のことができるようになる。
C-c C-c:関数一つのコンパイル
C-c C-k:ソース全体のコンパイル
C-c C-z:REPL呼び出し
要するにこれらを上手く使いこなせば、ターミナルからのコンパイルだとかプログラム実行だとかにソースと行ったり来たりをしなくて済むというわけだ。
emacsを起動してソースを開いてslimeを起動する。
そうしてコーディングをし続けて、途中でたまにC-c C-cだとかC-c C-zとかで確認すればいい。

いやだが待てよ? 評価は? C-jか?(それはelisp)
上記のコンパイル関連はあくまで「関数」に関してのコマンドだ。コンパイルした関数をそのままREPLで使えるという話。
たとえば関数fugaを定義したあと(fuga 10)を評価したい時、いちいちREPLに戻って(fuga 10)とやるのだろうか。
1回ならそれもいいが、もしfugaが頻繁に書き換わる関数だったら? その度に実行動作を確認したい場合は?
fugaを書き換えてC-c C-cしてペインを移動してM-pで直前の(fuga 10)を呼び出して実行。
そういう手もあるだろう。
でももっといい手がある。上記のコマンドと同じように、ソースの画面からC-M-xで直接評価できる。
これでペインをまたいで履歴を一個戻して再実行、の必要がなくなる。C-c C-cしてC-M-xこれで済む。
正直これの便利さを言いたいがためにこの投稿を書いたといってもいい。
もっと詳しいことは下記の記事とか参考になる。
SLIMEのキーバインド - pattersonの日記
本家本元のマニュアルも一応見に行ったのだけど何故か読む気にならなかった。
表の形にしてあるだけでどうしてこうも読みやすく感じるのだろうか。

まとめ

まずは

sudo apt-get install slime

そして

C-x C-f hoge.lisp
M
-x slime

その後は
1.コードを書く
2.C-c C-c & C-M-X
1と2を繰り返す。

参考

モダンCommon Lisp第3回: SLIMEの使い方 基礎編 | ありえるえりあ

Modern Common Lisp: 第5回 SLIMEの使い方 開発サイクルについて

sbcl+slimeの環境を整える - yutoichinoheの日記

StackEditを使ってMarkdown記法の投稿を書いてみた

StackEditを使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a>記法の投稿を書いてみた

StackEdit

ここから誰でも使える。
Chrome用アプリと聞いていたがブラウザ関係無しに使えそう。
とりあえずFirefoxChromiumで使えることは確認した。

テスト投稿

とりあえずググった結果これが一番よさそう。
とはいうもののMarkdown記法を自分が使いこなせているのかといえばご覧の通りである。
まぁブログ投稿と練習を兼ねるということで。

コード確認

とりあえずこのブログで扱うであろう言語を全部確認していく。
 ;common lisp
"hello,world"
 #python
print('hello,world')
 //c++
printf
("hello,world");
 #ruby
puts
'hello,world'
ちょっと面倒だったのでコメントとhello,worldのみ……
んん? Lispのコメントだけ色づかない?
それともコメントの書き方間違ってる?

機能

基本的にMarkdownエディタとして使える。
2ペイン縦分割でリアルタイムに見れる。
簡単なショートカットキーも対応。(Ctrl+Zだけしか使ったことないけど)
右上にあるいくつかのボタンに便利な機能がある。
左から順に5つある。
  1. Markdown syntax」
    Markdonのアンチョコ
  2. 「Table of contents」
    #とかの見出しで作るツリー構造とか見れる
  3. 「Document statistics」
    文字数、単語数、段落数をカウントしてくれる
  4. 「HTML code」
    HTMLコードを開いてくれる。デフォルトでハイライト(反転)済み。
  5. 「Open in viewer」
    プレビューの全画面表示。元に戻すにはどうしたらいいかと思ったら、左上の#記号を押せばよかった。
アンチョコは非常に便利。
他にも様々な形式でローカル保存できたりgoogle driveやdropboxdとの連携があったりとシンプルながらもありがたい機能がついている。

まとめ

まぁいくら便利にブログが書けたところで投稿に中身があって更新が続かなけりゃなんの意味もないんですけどね。

(投稿後追記)

うおおおおい! 肝心のBloggerの方でコードがハイライトされてないじゃないか!
しかもHTML上ではきちんとh1,h2,h3ができてるのに実際にブログを表示するとフォントサイズがおかしい。
一体どうなってるんだ。

(解決)

どうやらBloggerに送る際に問題があったようだ。
Publish on Bloggerで選べるformatは三種類
最初紹介記事とかに載ってたようにHTMLを選んだ。
すると上記の通り上手く表示がされない。
次にmarkdownを試した。BloggerMarkdown対応ではないので当然これも駄目。
そこでtemplateを選んだところ、すっきりとプレビュー通りにいった。
しかも驚いたことに、間違えて二重に投稿してしまったHTML版の投稿まで直っている。
これは単純に変換がどうこう。と言う前に何かjavascriptとかが入ってるかどうかの問題なのでは、と思い比較したらビンゴ。
 rel="stylesheet" href="https://stackedit.io/res-min/themes/base.css" />
type="text/javascript" src="https://stackedit.io/libs/MathJax/MathJax.js?config=TeX-AMS_HTML">
templateにあったこれが鍵だったようだ。一回templateを下書きに戻して意図しない表示になってしまったHTML版の投稿にこれを加えたところ、template版と同じ表示になった。
だが投稿して確認したところ何かがおかしい。コードのハイライトも見出しサイズも合ってる。けど違和感を感じる。
見比べたところ、ブログ全体のレイアウトが変化している。そうか、スタイルシートの書き換えをしてしまったからか。
投稿内限定でスタイルシートを適用するようにしなくてはいけないらしい。
なんだかもう面倒になったのでとりあえず今回は保留

4章 条件と判断 メモ

休みに入ったし、Lispを勉強し直そうと思ってLand of Lispを読み始めている。
Lispの本を読むのはいつだったか読んだ「初めての人のためのLisp」以来か。
SLIMEインストールした時とかちょっと触ったりはしてたんだけどね。
quoteの理解が中途半端だったけどデータモードとコードモードという説明のおかげで理解がはっきりしつつある。

本を読んでちょっと試しにコードを書いてみようとしたら怒られた。

temp1が無いぃ? そりゃそうだ、ここで定義しようとしたんだから。
と、そこでsetqが定義ではなく束縛だと気づいた。ごっちゃにしてた。
というわけでdefparameterを使って本来やりたかったことを。
正直(1. 2)でなくていいのだけど、なんとなくこう書いてしまったので。

temp1とtemp2を定義。中身は一緒。途中で一応なか見を確認。
さてこれを比較。読んでた内容、4章の比較関数についての確認。

中身が一緒なのにeqでは違うと言われ、equalでは同じと返る。
「より進んだLisperは、ある種の状況のもとではコンスを敢えてeqで比較することがある」とある。ふむ。

つまりこういうことか。temp1とtemp1でeqが一緒なのは当たり前として、temp1をtemp2で束縛するとeqでも同じになる。
eqでは変数のポインタ(アドレス?)を比較し、equalでは評価した値を比較という感じだろうか。
確かこれ初めてのPythonの説明でも同じ感じのあったな。Rubyもこんな感じだったような。
確認してしまえばそこまで悩まなかった。
問題はマクロとかそれ以降だ……

ところでBlogにコード(特にLispのコード)載せる際、手軽でいい感じにハイライトしてくれる設定とかないですかね。

(10:26 更新)
とりあえずgistで。これが一番簡単でかつ覚えていやすい方法かな。
でも投稿編集画面をHTMLと行ったり来たりするの面倒だな。
なんとかしてMarkdown記法でblog投稿できないだろうか。

なんか軽くググった程度で手段は色々みつかった。皆考えることは同じらしい。
しかし今回はちょっと面倒なのであとにしよう。
しかしはてなブログはデフォルトでMD対応ですか……ブログ選択間違ったかなぁ。


SECCON CTF オンライン予選 反省会

テスト期間真っ最中にも関わらず参加してました。勧誘に失敗したので1人です。
ksnctfや8946などは知っていましたが、公式なCTFのイベントに参加するのは今回が初でした。
なんとか1問くらいは解いてwrite-upをここに書いてやろうと思っていたのですが、結局練習問題(提出方法確認問題)以外1問も解けませんでした。大体6時間くらい経過後に1問も解けていない状態でかなり心が折れてました。最後には諦めて試験勉強に移って寝ました。
仕方ないのでどこで諦めたのか、どこまでは取り組んだのか書いてみます。
あ、基本100点問題しか取り組んでないです。
後々から上位者の得点状況とかみると、上の人でも100点とれていなかったりというパターンもあったので、開いた問題は全て片っ端から取り組んでいくべきだったようです。

(反省会)

[フォレンジックス 100]ここはどこ?

ダウンロードしたデータに符号化された文字列が。えーと、これなんだっけ。MD5?
ググってMD5でないことを確認した後、どうしても名前を思い出せなかったので一旦記憶に合った8946の問題を確認。そうだそうだ、base64だ。
確かbase64はネット上にエンコーダ/デコーダがあったはず、と探して入力。
かなり長い文字列だったので、入力制限に引っかかるものも。
なんとかデコードできるサイトをみつけたものの、結果が文字化けしていました。あれー?
うーん、文字コード指定がおかしかったのだろうか、とあれこれ調べて時間が過ぎました。
そういえばbase64程度ならコマンドラインでできるのでは、と試してもみました。
base64 -d base64.txt > result.txt
が、こちらも同様に文字化け。お手上げですね。

[プログラミング・crypt 100] calculate it/計算せよ

nc calculateit.quals.seccon.jp 45105

Hint1: 四則演算ではありません / It is not a four arithmetic operations.
Hint2: 計算例 81 9- 16 6- 4/ 15 X 3- 72 45 = 82
Hint3: G- G- G- G- G- G- G- G- G- G- = 0
Hint4: X X X X X X X X X XXX = 300
真面目にとりかかった時には既にHint1と2が出ていた状態。
Hint1と問題分を読んで、「これは/の左と右で翻訳されていることを示しているのでは」と思ってました。
与えられた場所へncすると問題が与えられ答えを聞かれる形。数秒で判断して解答しなければ「Too slow, bye.」といって切られてしまいます。結構時間がシビア。だからプログラムを書いて自動で解かせろってことなんでしょうね。
何回か試したところ問題は完全にランダムでXや/、-が出てくる数もランダムでした。一個も/がない問題もありましたので上記の推測は間違いだとわかります。
出てくる文字は0〜9とA〜X、/と-でした。Xが演算子ではなく英語のエックスだと気づいた時に数えてみましたが、Xは32進数に入りませんね。32進数ではVまでです。あと2個、惜しい。
Hint3と4が出てきた後も風呂とかで考えましたが、結局解けずに寝ました。

[バイナリ 100] Enjoy the Game

このゲームをクリアしたらパスワードが得られる。
you will get the password if you get a goal of the dungeon.
一人称視点迷路ゲームが与えられる。どうやらゴールに答えがある様子?
ダウンロードしたgame.zipの中にはdataフォルダ,game.exe,readme.txtが。
更にdataの中にはKabe.mqo,Kabe2.mqo,KabeTex.bmp,KabeTex2,bmpが。
ふむふむ、どうやらゴールとそれ以外の設定ファイルが入ってる様子。無印が道中の通路で2がついているのがゴールか。
設定ファイルの中に答えがないかな、と探してみましたが見つかりませんでした。
ただ、KabeTex2.bmpが「Print Password」を裏から見た画像だったのでやはりゴールが鍵のようです。

とりあえず起動してみる。動きはちょっともったりしてたような……どうでもいいか。
左手法とかで簡単にとけないかなーとちょっと遊びましたが、そんな簡単にはいかないようで。
こういった迷路ゲームの場合初期配置と迷路の配置が起動ごと毎回ランダムになっているのでは、と思ったので何度か起動を繰り返してみる。
どうやら初期位置と迷路は全て同じようです。じゃあゲームの書き換えとかじゃなくてもゴールまでの道筋さえ見つけられればなんとかなりそうですね。

ところでmqoってなんだ? とググるメタセコイアなる3Dモデリングソフトが。ふむ。
設定ファイルの書き方を見つける。 http://metaseq.net/jp/format.html
じゃあこれをいじるか、とKabe.mqoのvisibleを非表示に書き換え。
するとすぐそこにあるじゃないですか。(初期位置から左に向いただけ)
あれ、でもこれって壁の向こうでは……ゴールがどこにあるかわかったけど行き方がわからない。
じゃあ壁を透過してたどり着く道を探そうか、と思って再びmqoファイルをいじりましたが画面が暗くなっただけでした。3Dデータよくわからない。
なにかヒントがないかとreadmeとか読んでいましたが、結局この迷路の地図を見つけるしかないのではという結論に。
しかしdataの中にはそういったものはありませんでした。もはやexeの中を探すしかないようです。まぁバイナリの問題ですし。
これのソースを復元できればこんな風に迷路の配置がわかるはずです。
さてそこで逆コンパイル(逆アセンブル?)
objdump -d game.exe > dump.txt
そこまでは別によかったんですが、逆コンパイル後のアセンブリ(?)が読めず断念することに。
取り組みもそうですけど、こうして書いている際に自分がしたことのが逆コンパイルなのか逆アセンブルなのか、出てきたデータがアセンブリなのかバイナリなのかわかってないのが恥ずかしいですね。
バイナリって機械語(マシン語)だから01の2進数なのでは? とも思いましたけどバイナリかるたは16進数だったような……うーん、勉強しなければ。

[ネットワーク・Web 100] repeat after me

followme.capというファイルが渡されるのでとりあえずWiresharkを起動……と思ったら入ってなかったのでインストール
中を確認していきます。が、Wiresharkをほとんど使ったことなかったので読み方がわからない。
とりあえずザザーっと中を検めていくと、途中にpasswordの文字を見つけました。
followme@133.0xf2.010357's pasword:
どうやらTelnetのData欄に通信内容が書いてあるみたいですね。この前後を見ていくと、どこかからどこかへとsshで接続をしている様子。接続先のubuntuサーバの中でlsをした結果「flag.txt」なるファイルがあることもわかりました。つまりsshを成功させればよいようです。
ポート番号もSSH先を入力してる箇所で見つけましたので、あとはSSHのパスワードさえわかればなんとかなりそうです。
通信内容をみるとパスワード入力に失敗しているのか、何度かパスワードを聞かれています。
その最後のパスワード入力からログインまでの内容を追っていきます。
ls -l\025followme$whoami\027ls-l\177\177. -l.\002\177\r
(実際には¥はバックスラッシュです)
\rや\nはプログラミングでよくみるエスケープシーケンス(改行)ですが、\177や\027などは何でしょうか?
いつかどこかのCTFのwriteupで見たような気がしますが思い出せません。
エスケープシーケンスや文字コード、ASCII、unicodeなどを調べてみましたがわかりませんでした。
とりあえずその部分を抜いた文字やwhoamiなどで試してみましたが全てログインできず。
そもそもwhoamiはパスワードなのか? とばbashにうちこんでみたところ、自分のユーザー名が出力されました。lsと同様、これもコマンドのようです。
もしやこれは接続元のユーザー名がパスワードになっているのでは?
接続後のユーザー名はfollowmeのようですが、それ以前のユーザー名はわかりませんでした。
このあたりを数時間取り組んでみましたが成果が出ず、断念。

[その他 100] 練習問題

答えは、「SECCON」です。
提出方法の確認問題でしょうか。こういう公式のきちんとした大会にもこういった問題があるのには驚きました。ひょっとしたら罠か何かだと思ってビクビクしながらの回答提出。

[その他 200] Encode me.

encode_me_91というファイルが渡される。
この問題に対して何かをした記憶がないので取り組んでないと思います。
とりあえずfileコマンドで形式をみて、「AmigaOS bitmap font」と出たところまでは確認したのですが、その後ググっても有益そうな情報がなかったので放置してました。


終わってからの感想。
どのCTF大会でもそうですが、とりあえず終了後も問題に取り組めるようにしてほしいなと思いました。サーバ設定の関係から現実的には無理だとは思いますけど、現状復習がかなり難しい状態です。
この投稿を書いていて「問題文なんだっけ?」と思いましたが問題ページも完全に閉じられているので見に行けない状態です。スクショくらいとっとけばよかったかな。

そういえばIRC、一応何かに使うのかなと思ってXchatをインストールしておきましたが、最初に開始直後に繋げた以外使いませんでしたね。その時は誰も喋ってなかったし、あれなんの意味があったんだろう。


(CTF 復習)

ここまで書き終えて、他の人のWrite Upを見てきました。(2014/1/26 PM 9:00)

[フォレンジックス 100]ここはどこ?

なんでみんなすんなりデコードできているんだろう。
ともかくBase64は画像にも使えるということを知った。
ps.
あれ……他の人と同じようにperlで画像にデコードしても見れないんですが……
何がいけないんだろう

[プログラミング・crypt 100] calculate it/計算せよ

これはちょっと気がつけませんね。僕には無理だったと思います。

[バイナリ 100] Enjoy the Game

あそこまでする必要はなかったようです

[ネットワーク・Web 100] repeat after me

例のバックスラッシュから始まる文字は制御文字だったようです。
というか普通にASCIIで合ってたようですね。
ただ8進数だったようです(10進数で見てた)。範囲に177を入れるにはそれしかなさそうです。
\027 ETB 伝送ブロック終結
\177 DEL  抹消
\002 STX テキスト開始
それで、これら文字をどうやって入力したらいいんだろう。DELはDeleteキーを押せばいいとして、伝送ブロック終結とテキスト開始って……?
あ、Wikiに書いてある^BとかってCtrl+Bなのね。そういえばEmacsとかnanoとかでも同じ記法見たっけ。
と、いうわけでそれらを含めつつ試してみたところ
Permission denied (publickey,password).
 まだ何かを勘違いしているようです。

[その他 200] Encode me.

バイナリだったんだこれ……
base91...?


以上でした。
精進します。
とりあえず今はテスト勉強します。