texでソースコードを載せる

こんにちは。 今日はtexの話です〜!

ソフトウェアなどに関する論文を書く人はおそらくソースコードを載せる機会もあるのではないか、と思います。今回は僕がソースコードを載せる機会があり、その時に使ったパッケージの紹介です。 「tex ソースコード」などで検索するとたくさん引っかかるとは思うのですが、 自分用のメモということでここに残しておきます。

texソースコードを載せる

texソースコードを載せるには、「jlistings」というパッケージを導入します。 ダウンロードはこちらから→https://osdn.net/projects/mytexpert/downloads/26068/jlisting.sty.bz2/

今回僕の実行環境はMacです。 ダウンロードできたら、

/usr/local/texlive/2017/texmf-dist/tex/latex/listing/

へ移動し、先ほどダウンロードしたjlisting.styをこのディレクトリ内に置きます。 しかし、このままでは使えないので、

sudo mktexlsr

を実行します。 これで自分のtex環境下で使えるようになるはずです。

実際使うときは、プリアンブルで次のように定義します。

\usepackage{listings, jlisting}
\lstset{
  language={Ruby},
  basicstyle={\small},
  identifierstyle={\small},
  commentstyle={\small\ttfamily \color[rgb]{0,0.5,0}},
  keywordstyle={\small\bfseries \color[rgb]{1,0,0}},
  ndkeywordstyle={\small},
  stringstyle={\small\ttfamily \color[rgb]{0,0,1}},
  frame={tb},
  breaklines=true,
  columns=[l]{fullflexible},
  numbers=left,
  xrightmargin=0zw,
  xleftmargin=3zw,
  numberstyle={\scriptsize},
  stepnumber=1,
  numbersep=1zw,
  morecomment=[l]{//}
}

言語の設定などは、lstset内のlanguageを変えます。 僕が今回対象としている言語がRubyだったので、 language={Ruby}としています。

あとは、本文中にソースコードを貼りたいところに

\lstinputlisting[caption=hogehoge, label=hoge]{file_name}

参照するファイルは、同じディレクトリ内に入れておくことで参照できます。 ファイル分割するまでもないような分量の場合は、 そのまま入力することもできます。

\begin{lstlisting}[caption=hogehoge,label=hoge]
  def hoge
    puts 'hogehoge'
  end
\end{lstlisting}

参照する際は、いつも通り\ref{hoge}とすればOKです。

ここはおまけ

ソースコードを貼る時に、自動的に設定されるキャプションが Listing 1.1: hogehogeみたいな感じになるんですが、 これを図にしたい、と思った時は次のようにします。

\begin{figure}[h]
\begin{lstlisting}
  def hoge
    puts 'hogehoge'
  end
\end{lstlisting}
\caption{hogehoge}
\label{hoge}
\end{figure}

これで、 図1.1: hogehoge出力されます。 教科書によってはソースコードが図になっているものもあるので、 そちらに合わせたい場合は、このようにするとできます。

参考サイト

qiita.com

対応言語一覧

LaTeX の Listing 対応言語一覧

pythonをhomebrewで入れようとしたら詰んだ

こんにちは。
最近詰んでばかりです。笑

pyenvのインストール

$ brew install pyenv

で、好きなエディタで.zshrcもしくは.bashrcを編集です。

# .zshrc
eval "$(pyenv init -)"
export PATH="$HOME/.pyenv/shims:$PATH"

echo $PATHで、PATHが通ってるかを確認したら、pyenvのインストールは完了です。

python2.7.14インストールできなかった

$ pyenv install 2.7.14

これでインストールできるはずでしたが、できませんでした。

解決策

解決策としては、

$ CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install -v 2.7.14

っぽいですね。

https://github.com/pyenv/pyenv/wiki/Common-build-problems#build-failed-error-the-python-zlib-extension-was-not-compiled-missing-the-zlib

インストールの処理が変わったみたいですね。

これでインストールできました。

あとは、rbenvとかと同じように、

$ pyenv global 2.7.14

でOKです!

おつかれさまでした。

rubyでxmlファイルをrexmlつかって解析しようとして諦めました

こんにちは。

こちら、雪がひどいです…
積雪量が60センチはあるんじゃないか、と思うくらいにはやばいです。

そんな中、今日も学校に行こうと思いましたが、 あいにくと、今日と明日はセンター試験のため、学内には入れないそうなので、家で作業してます。 その一つの内容が、今日これから書く話です。

xmlって何

xmlは、XML(eXtensible Markup Language)のことで、構造化言語の一つです。 特徴として、データに対してタグを設定してやることで、それがなんのデータなのかを自由に決めることができます。

Rubyによる解析(ぶち当たった壁1)

研究でデータを抽出するためにRubyで解析しようとしてたんですが、まずファイル容量が大きすぎて、解析にすごく時間がかかるという問題にぶち当たりました。
しかし、bashで10000行ごとにファイル分割を行う、という方法で、なんとかなりました。

さらにぶち当たった壁2

戦えるぞ!と思った矢先にぶつかった壁が、使おうとしてたデータが、<row />と言う形で一行で一つのデータになっているため、タグでデータが挟まれていないという問題です。
そのため、rexml/documentを使おうと思っていた僕は、積みました。

# エラー内容
Illegal character '<' in raw string "<p>I ...略

こんな感じで、Illegal characterだよっていうエラーです。タグの中に文字列の<が入ってるせいで発生した問題のようです。
なので、諦めました。

そうだ、ライブラリに頼るのはやめよう

そこで、もうこの際テキスト処理にしてしまおう、という方向で頑張ることにしました。
できました。

File.open('ruby.xml').each_with_index do |line, i|
  line =~ /<code>(.+)<\/code>/
  matched_line = $+

  if (!(matched_line.nil?) && matched_line.length > 0)
    print "#{i+1}: "
    p '<code>' + matched_line + '</code>'
    puts '======='
  end
end

今回<code></code>の間の文字列が欲しかったので、その区間の文字列を全部取ってくるっていう処理です。each_with_indexを使ってるのは、後からxmlファイルを見たときに何行目の処理だったかなぁ?の確認をするためです。

あとは、ここからクローンディテクションツールで、コードクローンを検出して…などなど。
意外とまだやることは山積みだなぁ。

独り言

そういえば、研究室にgitlabを入れるって言う話が今度上がるかもなぁ。 導入できたら、研究のデータのバージョン管理が一括管理されてすごく便利なんだけど、いかんせん保守する人がいなくなる可能性を考えると、導入しても大変なんじゃないかなぁっていう不安があります。

いい考えだと思うんだけどなぁ。研究室内サーバに立てたら、学内しか繋がらないから、学校くる動機にもなるし、一石二鳥てきな(?)


お疲れ様でした。

記事書くときのエディタ

こんにちは〜〜。
つぶグミ食べながら今日はブログ書いてます。

つぶグミ
こちらです。

困りごと

最近、ブログを更新することが増えてきたのですが、そこで気づいたことがあります。 はてなブログ標準のブラウザエディタが重い。 最初のうちはそうでもないんですけど、文字数が増えれば増えるほど、重たくなります。
昨日の記事の量でも重いです。

環境

MacBook Pro 13 inch, Early 2015
プロセッサ 2.9 GHz Intel Core i5
メモリ 16 GB
ブラウザ Safari

対策

今は、ブラウザで書かずに、Quiverというアプリで書いてから投稿するようにしてます。 Markdownで書いてるので、はてなブログでもほぼコピペで大丈夫なので、楽ですねぇ。 それに、リアルタイムプレビュー機能があるので、ちゃんと適用されているかも確認できます。 MacDownでもできるんですけど、ファイル管理とかタグ付けとかが、結構大変なので、Quiver使ってます!

f:id:tdall12:20180106222244p:plain
Quiverの編集画面

何かいい方法があったら教えてください〜〜〜!

今年の目標とは別にやりたいこと

こんにちは〜〜!
卒論の提出が刻一刻と近づいてきてます。

どうしてもっと早く研究テーマを決めなかったのか、 もっと面白みのあるテーマがあったんじゃないか、 とか、考えれば考えるほど、色々出てきますよね。 後悔先に立たず的な。

最近やたら、興味のある分野が広がったせいか、これについてもっと勉強して新しいことやってみたいなぁって思うことが多くなりました。

友達と開発

実は4年生になってから、大学の友達と共同開発をやっていません。 もちろん、学生団体の方の開発はやってるんですけど、それ以外の趣味のところでやってないんですよ。
最近Twitterで話題になってるTalkroomは学生3人で作成したって言うじゃないですか。すごい、本当に。

残りの学生生活が少ない中で何か残そうと必死です。 友達と開発をして、それが引き継がれて行くっていうのが理想です。 若干1名、開発したいって言ってる人がいるので、火曜日にMTGする予定ですが、これ次第で学生生活に悔いが残るか残らないかが決まります(大げさ)

ドメイン駆動設計

DDDって最近なんかやたら聞くんですよね。特に、スカラのカンファ行ったあたりから顕著です(今まで聞き流していただけかもしれない)。それで、先日研究室にドメイン駆動設計の本が2冊届きました。エリックエバンスさんの本と、実践ドメイン駆動設計という本です。

中身をまだみてないのですが、在学しているうちに是非読みたい本です。社会人になったら、そう簡単に手に入れるのは難しいかなぁと(金銭的に)。

フロントエンド

実はフロントエンド全然やったことないんですよ。 それで、エンジニアになる以上、フロントもバックもできた方がいいじゃないですか。なので、フロントの勉強したいんですよ。 最近だと、Vueとか、Reactとかいろいろあって、どれが今のトレンドなんだよwって感じなんですけどね。

今はReact + Goで何かしら作ってます。 最初はRails5.1でReactいけるぞお!とかなってたんですけど、 せっかくGo勉強してるしGoでつかおーって思いReact + Goになりました。 コンポーネント指向とか、いろいろ用語が出てきたり概念が出てきたりしますが、楽しくやってます。 3月までにReact使いこなしたい。

(React nativeもいずれは…)

おわりに

そんなこんなで、色々やりたいことはあるけど手をつけられていないことが多くあるので、1年という期間でできる限り目標で立てたことプラス、これらのことを実現していきます!!(ついでに今年社会人1年目になろうとしている←)

久しぶりにPostgresqlを使おうとしてエラーでた話

こんにちは。
実は、 book.impress.co.jp

こんな情報が流れてきました。 それで、これはチャンスだ!と思って、速攻Go言語の本買いました。 サンプルコードを動かすために postgresqlを使うといこうことで久々に動かすかぁ、と思って

$ psql -l
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

おや?動かない。

サーバー起動してないんだろうなぁと思いつつも、以前Macフォーマットしてるので、 フォーマットしてからPostgreSQL入れてなかったかなぁ、と思いpostgres —versionを実行。

$ postgres --version
postgres (PostgreSQL) 10.0

いや、入ってるな。 じゃあやっぱりサーバー起動してない。

ググりました。
【再起動して解決】connections on Unix domain socket “/tmp/.s.PGSQL.5432”?への対処 | ベランダゴーヤ研究所

これ近いんじゃない?と思ってさーっと読みました。
結論から言うと、brew servicesは使ったことがなかったので、これは違うな、と感じて、環境構築の段階の記事を見ました。

サーバー起動してみる

Qiitaの記事のコマンドを実行。

pg_ctl -D /usr/local/pgsql/data -l /var/log/postgres start
pg_ctl: directory "/usr/local/pgsql/data" does not exist

うん、動かない。
ディレクトリ内って言ってるし、これじゃないことはわかった。

PGDATA設定されてるので、pg_ctl -l /usr/local/var/postgres/server.logこれかなぁ、と思って実行。

$ pg_ctl -l /usr/local/var/postgres/server.log
pg_ctl: no operation specified
Try "pg_ctl --help" for more information.

これも違う…
言われた通りhelp確認してみた。 読みながら、「あれ、そもそもstartいるんじゃね?」と言うことに気づいた。

pg_ctl -l /usr/local/var/postgres/server.log start
waiting for server to start.... done
server started

startくっつけたら動いた。

確認のために、psql -lを実行。

   Name    |   Owner    | Encoding |   Collate   |    Ctype    | Access privileg
-----------+------------+----------+-------------+-------------+----------------
 postgres  | hogehoge   | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |

うごいた!!歓喜!(※hogehogeは変更してあります)

こうして、やっとGoのサンプルコードを動かす準備はできました。
ふぅ…。笑

あけましておめでとうございます!

あけましておめでとうございます!

2018年になりましたね。 そこで今回は、2018年の目標をここに残しておきます。

2018年の目標

  • 卒論をちゃんと終わらせる
    卒論は卒業がかかってるので、真面目にやります。 eXtreme Programmingのプラクティスの一つのテスト駆動開発に対して適用する何かを提案するという内容です。(何かはまだ非公開)

  • ブログを更新する
    ブログを更新するというのは、 ブログって始めてもなかなか更新できなくなるんですよね。 これからは、長文とかじゃなくて、ちょっとしたことでも、更新しようと思います。 面白みのない内容がほとんどだと思いますが、よろしくお願いします。

  • 10ヶ月間で50万貯金する
    社会人になるので、頑張ります! 50オーバー目指します!

  • たくさんの本を読む
    自分の知らないこともまだまだたくさんあるので、 知らないことを知るために知識に貪欲になります。 もちろんWebの記事とかでもいいんですが、 本という形で出版されるレベルのものを読む方がまとまってていいかなと思いますので、本を読みます!

  • よく勉強をする
    たくさん本を読むに繋がるんですけど、 勉強するために本もたくさん読みます。

  • カフェにいく(いろんなCoffeeを飲む)
    都会に行くのでいろんなカフェ行きたいです。 休日はカフェでゆっくりしたいですね。

  • 休日のどっちか1日はゆっくりする
    平日働いて、土日もめちゃくちゃ勉強するとかせず、土日どちらかはゆっくりお家の掃除とかして過ごしたいです。 気分転換大事なので!

  • 運動する(特にバスケットボール) 小中高とバスケしてきたんで、大人になってもバスケしたいです! それにデスクワークが主なので、定期的な運動しないと大変なことになります笑

と、いろいろとしたいことはあるので、少しずつ実現していきます。

2018年は記事も1日に2件とか更新するかもしれないですし、一週間に1回も更新しない時もあるかもしれませんが、苦戦してるんだなぁと温かい目で見守ってください。 今後ともよろしくお願いします。