あおかびのおすなば

日々のコトとかなんか見た感想とか

FortranのドキュメントをFORDで自動生成した話

諸事情により書いたものをここに乗せることができないので私の書いたものはここにありません.

Fortranを書く機会があり,そのドキュメントを作成する必要があったのでドキュメント自動生成ツールを調べた.

Fortranのドキュメントツールをいくつか上げるとこんな感じ.

  • f90doc
  • f90tohtml
  • FortranDOC
  • FORD

詳しくは fortranwiki.org

にいくつか乗っていて,

www.gfd-dennou.org

で比較されている.

今回は,FORDがfortran2003の文法にも対応しているので採用. 本家はここ.

github.com

使い方

トップページ用にHoge.mdを書いて,ford Hoge.mdとすればドキュメントが生成される. ソースコードのあるディレクトリはコマンドライン引数で--src_dir fuga/srcと指定するか Hoge.mdの中に書く.
Hoge.mdはこんな感じで書く.

summary: poyo
src_dir: fuga/src
            piyo/src

Main sentences in markdown.

markdown metadeta を使ってドキュメント生成の設定ができる. 公式のWikiもあるので詳細はそっちで.

Home · Fortran-FOSS-Programmers/ford Wiki · GitHub

使ってみて感想

いいところ

  • pipで入る・コマンド一発でビルドという簡単さ
  • MathJax対応
  • プリプロセッサを使ってくれるのでマクロでいろいろできる
  • ドキュメントをmarkdownでかける
  • htmlで吐き出されるので見るのが楽

ソースコードから自動生成されるドキュメントの見た目はまあ普通.

あとドキュメントに反映させるためのコメントは定義分の下に書かないといけないというのがもともとの実装.
こんな感じで.

function hoge
!! comment

調べてみて, github.com

を読む限り変更されてないようなオチに読み取れてしまったのだけど

github.com

でちゃんとマージされてて

!> comment
function hoge

と書けば可能.

これなら今までどおり定義文の上にコメントをかけるのでめでたい.

不満

  • トップページのSource Codes がディレクトリごとになってほしい
  • Source Code上で関数を呼び出してるところをクリックしたら定義に飛んでほしい
  • もうちょっとサンプルコードほしい

まとめ

割と簡単にドキュメントが作成できたし,開発が止まっていないので,使う価値はあるのではないでしょうか.

CyberRebeatCTF-WriteUp

CyberRebeatCTFに参加したのでWriteUpを書きます.

解いた問題全部書く気合は無いので以下の2つにしぼります.

  • Calculation
  • ChangeHistory

Calculation

まずはCalculation(Type: Programming)について.
59.106.212.75:8080にアクセスすると四則演算程度の数式が出てくるのでそれを何問か正解するとフラグが出てくる,という問題です.
私はpython3に計算させて解きました.
手間取ったところが2つあります.
一つは,数式の前に制御文字が入っていたこと.
最初これに気づかずにeval(数式)がうまく動かなくて困ってました.
これは制御文字をstripして解決.
2つ目は,pythonの出力を吐き出す場所.

nc hogehoge | python3 ans.py

でprint(fuga)すれば出来ると思ってたのですがだめでした.
画面には表示されるんですがncの標準入力に流し込めて無いんですよね...
結局,pythonでファイル(ans.txt)に出力して

tail -f ans.txt | nc hogehoge | python3 ans.py

として解決しました.
もっといいやり方無いんですか...(あったら教えてください)

ChangeHistory

次はChangeHistory(Type: Recon)です.
GitHubリポジトリからフラグを探す問題です.
「CyberRebeat github」でググって出てきたennachさんのgithubレポジトリからフラグを探します.
ChangeHistoryレポジトリを見ると,”I committed the FLAG by mistake! ”と書かれたClosedなissueがあってめちゃくちゃ怪しいです.
コメントを読むと,あるハッシュのコミットをremoveしたということですが,https://github.com/{user}/{repository}/commit/{hash}で出てきました.
せっかくコミット消してもそのハッシュを残してたらだめだよということですかね?

まとめ

実はncでつないでプログラムに解かせるやつやったことなかったので,それができてよかった.
GitHubみたいな普段使ってるツールからフラグを探すのは面白いですね.
おわり

VSCodeのユーザースニペットにフォーマットするやつ

VSCodeのユーザースニペット(json)にフォーマットするやつを作ったのでブログ書きます.
こちらになります.
VSCodeのSnippetにするやつ
非常に簡単な仕様になっておりますがブラウザから利用できるのでよかったら使ってみてください.
ちなみに全部フロントエンドで動いています.

感想

GOPATHの末尾にセミコロンを付けてはいけません

環境はwindows10です.

C:/Users/hoge/go;
のようにGOPATHを書くと,

go version

 GOPATH entry is relative; must be absolute path: "".

と怒られてしまいます.

revelでのコマンドもうまく動作しなくて困ってたんですが初歩的なミスですね...

ScalatraでシュッとWebアプリを作る(予定)

こんにちは.

最近寒すぎて何も出来ません.末端冷え性つらい.

さて,この記事はKMC Advent Calendar 2017 - Adventar8日目の記事です.

adventar.org

25日まで全て埋まっていて壮観ですね.

昨日の記事はnojimaさんの

BCC/BPFでシステムコールとかをいい感じにトレースする - @nojima's blogでした.

nojima.hatenablog.com

インフラレイヤーをいい感じにやるのはかっこいいですね.最近触る機会があり興味が出てきたので勉強したいです.

はじめに

KMCではたこ焼き焼いたりクレープ焼いたりしかしていないaokabiです.

ところで以下は最近のやっていき一覧です.

というわけでせっかくISUCONでWebアプリの世界を知ることが出来たので,今回はScalatraを使ってWebアプリを作成していきたいと思います.

ちなみに現在8日の21時です.どこまでできるんでしょうか?気になります.

Scalatra

ScalatraScalaのWebアプリフレームワークです.その名の通りRubySinatraをリスペクトした,スッキリとしたフレームワークですね.導入も簡単なのでさっそくやっていきましょう.

やる

と言ってもHello World!までの手順はとてもシンプルで,テンプレートが用意されているので簡単に準備は整います.大体は公式のGet Startedに従うだけです.

が,jetty:startコマンドでエラーを吐いたので,そこだけbuild.sbtに追記して修正します.

追記したのは24,26行目です.24行目でエラーが消えます.26行目はアプリがlistenするポートを変更しています.

これでHello World!は出来ました.aokabi.me/twitterで見ることが出来ます. 

Systemd

アプリを修正するたびにプロジェクトのルートディレクトリに移動してsbtコマンドから手打ちするのは嫌なので,Systemdでサービス化してしまいましょう.

serviceファイルは以下のように書きました.

簡単でとてもいいですね.

デプロイ

Vimで開発するのもいいですが,やはりIntelliJ君を使いたいですね.ローカル開発するとなると次はデプロイを楽にやりたくなります.方法は様々だと思いますがとりあえずGithubとJenkinsを使ってPushしたら自動でデプロイされるようにしましょう...

おわりに

 といったところで今回はここまで!めちゃくちゃ眠かったので許してください.

本当はいい感じのWebアプリを作るところもやりたかったのですがいい感じのアイデアが浮かばなかったです.

とはいえ此処から先もしっかり進めてその内ブログにでも書きたいと思います.

最近頑張ってちょっとずつブログを書いているのはとてもいい傾向だと思うので続けていきたいですね.

読んでいただきありがとうございました.

次回予告!

明日のKMCアドベントカレンダーtron君の「20歳になって一ヶ月」です.めでたい!!!

 

 

ISUCON7本戦で何もできずに人権を失った

注意:このブログではBigintについて触れていません

こんにちは.

ISUCON7本戦に「百万円ドリブン」の一員として参加しました.

メンバーは@murata, @nakario, @aokabi の三人で,二人はサークルの先輩です.

以下はメンバーのISUCONエントリです.

chy72.hatenablog.com

nakario.hateblo.jp

お昼のお弁当とクッキーと珈琲と懇親会のビールが美味しかったです.

結果はタイトルの通りであり,技術面で書くことは無いので,ひたすら反省を述べます.来年のために.

簡単に内容を言うと,websocketを使った,複数人で遊べる(クッキークリッカーのような)ゲームでした.

反省その一
  • アプリのログを殆ど見なかった

自分が普段書いているときは,真っ先にログを見るのになぜやらなかったのか.

普段Goを余り触らないカラなんて言い訳にもならない.

反省その二
  • nginxでできることがなにかあるんじゃないかと時間を掛け過ぎた

先輩がBigintの計算を頑張ってくれている間にオンメモリ実装をやるべきだった

実はm_itemだけはやったけど効果が無くてそこで無意味なのかとやめてしまったのは良くなかった

反省その三
  • チームプレーができなかった

一回方針の相談やリフレッシュなどを提案するべきだった.先輩二人がBigintに苦戦して停滞していたし,自分が冷静になるべきだった.できることが思いつかなくてワタワタしている場合ではない.しっかりしろ.

終わり

 結局終始焦っていてなにもできなかった.冷静になって話し合うのは大事.

来年こそはISUCONで役に立って優勝.

最後に,運営の皆様ありがとうございました!楽しかったです!