programing sisters 姉

プログラミングを学習するブログです

卒論書:LaTeX使うための初期設定記録

やっと卒論書き始めるためにLaTeXを使えるように設定したのでその記録を。


インストール

まず、LaTeXをインストール。
zip叩いてインストールに結構時間かかった。

texwiki.texjp.org


エディタにはVS Codeが便利と同期に教えてもらったのでVisual Studio Codeもインストール。

azure.microsoft.com



VS Codeの設定

VS Code開いて左にある四角が2つ重なっているのをクリックして、下の3つを検索しインストールする。


f:id:yoshinon444:20190129154632p:plain




VS Codeの日本語化

上にある"file"などのバーが日本語になってなかったら、Control + Shift + P"Configure Display Language"を検索し、コード内の"en"( Englishの設定になっている )を、"ja"( Japanese )に書き換えて保存。

f:id:yoshinon444:20190129154717p:plain

VS Codeを再起動すると上のバーが日本語になる。


次に、ファイル→基本設定→設定とすると、右上に{ }というマークをクリックし、2つ出てきた画面の右側の{ }内に下のコードをコピペして保存する。


"VS Code 日本語化 Latex" などと検索すると一番上に出てくるGitHubのページ。
VSCode でLatexの日本語環境を作る · GitHub



PDF埋め込めるようにする方法

main.texの5行目のusepackageを" [dvipdfmx] "と書き換える。

f:id:yoshinon444:20190129155104p:plain

Ubuntuで急に端末がエラーを吐き始めた話

 

お正月終わって研究ちゃんとがんばろと思っていた矢先にubuntuの端末がおかしくなって、仮想環境に入れなくなった話をします。

コードが動く環境を作り直すのに一日かかりました。。

 

↓ エラー内容 ↓

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

 

端末が急に消えたから付け直すと、こんなエラーが出てきました。pipもcondaもインストールされてないみたいに言われちゃってどうしようって。。仮想環境にも入れなくて研究で使うコードが回せない。。おそらくパスの問題でANACONDAを入れなおすとパスが通りなおす(?)、とアドバイスをもらいANACONDAを入れなおすことに。。

 

ANACONDAインストール

 

www.anaconda.com

 

ここで私はfastphotostyleを回したくて、python2をrequirementされているので " python2.7 version " をダウンロード。

普通は " python3.7 version " で良いと思う。

 

$ bash [ダウンロードフォルダ]/Anaconda2-2018.12-Linux-x86_64.sh

 

で、エンター押しまくって、yes/noを聞かれるからyes入れて

" Thank you for installing Anaconda2! "

が出たらインストール完了。

 

入れなおして再起動したらpipとcondaが使えるようになった!!

 

 仮想環境

 

$ conda info -e

で仮想環境のチェック。なんにも入ってない。。ってなったのでまた環境の作り直し。

 

$ conda create -n [仮想環境の名前] (python=2.7)

python2.7の環境を作りたいので最後にpythonのバージョンを指定。

 

$ conda activate [仮想環境の名前]

で仮想環境に入ることができました!

 

 

f:id:yoshinon444:20190113153727p:plain

 

fastphotostyleのチュートリアルに必要なもの載っているのでその通りにパッケージ入れていきました。

 

cupyを入れなくちゃいけなかったんだけど、永遠エラーで入らなくて、、

CUDA9.1を入れなおしてもエラー消えなくて

調べたらパスが通ってないんじゃないかって思って

$ export CUDA_PATH=/usr/local/cuda

とCUDA_PATH通してあげたら入りました!!

 

 

このように一日かけて環境直せました~!やったぁ

結局ほとんどのエラーはパスのせいだった。いまいちパスがなんなのか分かってないから、よくわからず調べてはやってみての繰り返しですんごい時間かかった。

またおんなじことになった時のためにここに書いておこうと思い書きました。

 

卒業したい~。

 

京都で見つけた素敵なカフェ:walden woods kyoto

 

明けましておめでとうございます。

今年こそ本当に卒業したい私です。

 

プログラミング全く関係ないのですが、京都に帰省中、素敵なカフェを見つけたのでご紹介したく更新します:)

 

 

今年は1/1〜1/4まで京都に帰っておりました。

4日に家族で叙々苑ランチの予定があり(私のお家はみんな朝が弱いのでランチといっても15:00前から)、烏丸の方の叙々苑でお肉をいただきました!美味しかった!私は恐らく初叙々苑。ママ曰く、ランチ叙々苑コスパよく、おススメらしいです。あと、土地によって味が違うらしいです。京都はおいしいらしい。(個人の意見)

 

4日の夜に新幹線取っていたので、烏丸から京都駅まで歩くことになりました。

ママがオススメの佛光寺の境内にあるカフェに寄ろうって話になったのですが、行ってみると私もパパも「来たことがある!」ってなって、違うカフェに行こうってなりました。

 

 

カフェがある佛光寺の境内でママと。

f:id:yoshinon444:20190105143125j:image

ママだけ足細く見える立ち方ずるい。。 

 

 

ここのカフェもオススメなので載せておく。京都ならではって感じのカフェ。

 

tabelog.com

 

 

んで、3人で歩いて京都駅の方まで向かってたら、ふいにママが「確かこの辺に良いカフェがあった気が、、、」と言いだし、立ち止まり探すことに。

一生懸命検索してくれてたんだけど、お店の名前がわからないらしく全然見つからず。。

 

私は荷物も重かったから、「もう京都駅で良くない?」って思ってた時、パパがGoogleマップで見つけたとこに行ってみると、「ここだーーー!」ってママが騒いでたから、追いかけてみたら凄くいい感じの場所だった。

重い荷物持ってヒールでくるくるくるくるくる歩き回った甲斐があった。

“walden woods kyoto”というお店です!!

 

 

こんな感じで急に現れる。

f:id:yoshinon444:20190105143849j:image

 

歩き疲れてたけどとりあえずピース。

f:id:yoshinon444:20190105144147j:image

 

お店のロゴ。

f:id:yoshinon444:20190105141320j:image

 

 

すごい雰囲気のある建物だな〜と思ってたら、後で調べてみると大正11年に建てられた洋館をリノベしたカフェらしい。

普段R-STORE というアプリでリノベの物件検索するのが趣味な私にとって最高に素敵な空間でした。

 

 

店内に入るとチャイのいい匂いがして、カウンター内に機関車みたいな焙煎機がありました。かっこいい。。

 

 

カウンターもオシャレ。

f:id:yoshinon444:20190105143653j:image

 

機関車みたいな焙煎機。

f:id:yoshinon444:20190105141259j:image 

 

横からも。

f:id:yoshinon444:20190105143507j:image

 

 

ママとパパはチャイを、私はモカを頼みました。出来上がるまで列があったので、「先に上行って席確保しといて〜」と言われたので、1人で二階に行ってみることに。

 

したら、普通のカフェとは全然違う席でびっくりしました!

ど真ん中に木があって、その周りに二段の階段で出来た座席があり、二段目に座ったり、一段目に座ったりしてティータイムを楽しんでる人たちがたくさんいました。

 

たくさんの人すぎて、また見たことない席すぎて、内心戸惑ったけど、オドオドしないように平常心を保ちながら少し隙間があったところに座りました。

 

 

天井はこんな感じ。

f:id:yoshinon444:20190105143734j:image

 

席はこんな感じ。

f:id:yoshinon444:20190105144518j:image

 

木と人がそれぞれ座る様子。

f:id:yoshinon444:20190105145029j:image

 

 

人の靴があったところに座るのは無理って人は行かない方がいいかもだけど、私は全くそーゆーところは気にしないので問題なかったです。

 

写真たくさん撮ってる女性がいたり、おそらく観光途中で休憩中の外国人の方がいたり、年始早々大盛況な感じでした。飲み物も美味しかった〜。

 

 

モカ

f:id:yoshinon444:20190105143757j:image

 

 

最寄駅は五条みたいだけど、全然京都駅からも歩けちゃうので、京都に行く際には是非立ち寄ってみてください:)

店舗情報載せておきます。

tabelog.com

 

 

隣に座ってはった近所の人たちっぽい4人組のおばさま達が、自前の座布団を持参してたことが1番面白かったです。

長居すると確かにお尻痛くなっちゃうもんね。

 

ちゃんちゃん。

卒論がんばろー!!

土曜日だけど研究室いこ。。絶対いこ。。気合い入れていこ。。

 

 

 

独学プログラマー22章読んでみた:アルゴリズム

 

この章以降はプログラマーとして働くのに必要な知識や心がけなどが書いてあるので、独学プログラマーの更新はおそらくこれで最後です。だいぶ時間かかったな。。。もっとハイスピードで勉強しないと卒論に全然間に合わないなぁと思ってます。ハイ。他人事の感じがやばいですね。

 

この章ではアルゴリズムについてでした。

アルゴリズム:特定の問題を解決するための再現可能な一連の手順

ということで何個かの問題の解決方法が載っていました。

 

 

FizzBuzz

 

これは1から100までの数字を出力するのに、3の倍数はFizz、5の倍数はBuzz、そして3と5の倍数はFizzBuzzと出力させるというものです。

f:id:yoshinon444:20181204173601p:plain

このように書けます。ここでポイントは3,5の倍数の処理を先に書くといことです。上から処理していくから順番大切!という感じです。次!

 

 

線形探索

 

探索アルゴリズムとは、データ構造の中から欲しいデータを探す処理です。
線形探索とは、要素を1つ1つ見ていくシンプルな探索アルゴリズムです。

ssという関数で探している要素があるかどうか調べて、あればその数字を出力しTrueを返します。なければそのままFalseを返します。

f:id:yoshinon444:20181204174906p:plain

breakはfor文を終わらせるものだから、if文の列と同じ並びかなと思ってたんですけど、もう一個下げなきゃいけないみたいで「??」と思った。

 

誰か教えて?

 

 

回文

 

ある文が回文か回文でないかを判定するプログラムです。

回文考える人ってすごいですよね。。どんな脳みそしてるんだろう。

f:id:yoshinon444:20181204175912p:plain

lower()することで大文字小文字を関係なく処理するためです。word[::-1]と書くことで文字列を逆転させることができるらしい。知らなかった。逆転させた文字列が元の文字列と同じなら回文なのでTrueとなり、違ければFalseを出力してくれます。

 

 

アナグラム

 

アナグラムとは、単語の文字を入れ替えて違う文字を作ることです。

pythonではソート(並べ替え)が簡単にできます。sorted()という組み込み関数があるからです。数字だと小さい順に並べ替えてくれ、文字だとabc順に並べ替えてくれます。なので二つの文字がアナグラムかどうか検証するプログラムがすごく簡単にかけます!

f:id:yoshinon444:20181102142344p:plain

たったのこれだけで書けちゃいました!ここでもlower()が活躍。

 

 

出現する文字列を数える

 

渡された文字列にどの文字が何回出現したかを数えるものをプログラミングします。辞書を使って、1文字づつループを回して実装しました。

f:id:yoshinon444:20181102144342p:plain

もし辞書の中にある文字がすでにあるならば+1をして、まだないなら1を代入するという流れです。このように要素の集まり(コレクション)を扱うのは頻繁にあるらしく、pythonの組み込みモジュールcollectioonsで提供されているらしいです。せっかくなのでこれを使っても書いてみました。

 

f:id:yoshinon444:20181102144700p:plain

これはcollectionsの中にあるdefaultdictというものを使っています。さっきより短くかけました!

 

f:id:yoshinon444:20181102144753p:plain

これはcollectionsの中にあるCounterというものを使っていて同じ動作をするのですが、関数すら自分で書く必要もなくなりました。簡単になりすぎてびっくりしました笑。

 

組み込みモジュールを自分で見つける能力が必要になってくるなと思いました。みんなが欲しいアルゴリズムならば組み込みモジュールにある確率が高いから、自分で0から書くよりもそっちを探す方が最終的には楽で速いかも。。

 

ここで不思議だったのは、出力が以下のようになり毎回合ってはいるんですけど順番がバラバラなんですよね。。なんで??

 

{'i': 1, 'e': 1, 'u': 1, 'a': 1, 'o': 4}

{'u': 1, 'a': 1, 'e': 1, 'o': 4, 'i': 1}

{'o': 4, 'u': 1, 'e': 1, 'a': 1, 'i': 1} etc...

 

わかる人教えてください~。

 

 

再帰問題

 

再帰:大きい問題を小さい問題に分割して解決する分割統治法で使われる手法

 反復法は手順を繰り返すことで問題を解決し、再帰法はその関数自身を呼び出します。反復法で解決できる問題ならば、全て再帰法でも解決できるらしい。再帰関数は無限に呼び出し続けられることを避けるために再帰終了条件を持たなければならないらしい。再帰終了条件とは、関数自身の呼び出しを終了する条件です。

 

再帰は守らなければいけないルールがあるそうです。

  1. 再帰終了条件を持つ
  2. 状態を変えながら再帰終了条件に進む
  3. 再帰的に関数自身を呼び出す

というルールです。

本では"99 Bottles of Beer on the Wall"という曲の歌詞を再帰法を使って出力してたんですけど、私は99本もビール飲めないので、7本にしておきました。

f:id:yoshinon444:20181204182153p:plain

 

出力

f:id:yoshinon444:20181204182257p:plain

こんな感じです。7本くらいなら飲めるので次の日のことも考えて、7本にしておきました。 numが1以下になるともうビールないよって出力してreturnで終わります。numが1より大きい時は、1つ引いて残りのビールの本数出力して、bottles_of_beer関数を再帰的に呼び出します。ちゃんと再帰終了条件あって、終わりに向かってるので上の3つのルール満たしてます!

 

 

終わり!

だいぶ前に途中まで書いてほったらかしてたけど折角書いてたからあげます。

さ、卒論のことはほっといてビール飲みにいくかな〜白目

 

 

 

独学プログラマー21章読んでみた:データ構造

 

この章はデータ構造について書いてありました。前にもデータ構造について書いてあった章があって、そこではリスト、タプル、辞書について書いてありました。今回はそれに追加で、スタックとキューというものが紹介されていました。

 

 

スタック

 

スタックはリストと同じように要素を追加したり、削除したりできるデータ構造のことですが、リストとの違いは、要素の追加・削除を最後の要素に対してしか行えないという点です。

 

例えば[1,2,3]というスタックは3の後ろにしか追加することができなくて、3しか削除できません。なので2を削除したい場合は3を削除した後にしか行えないということになります。

 

スタックから要素を削除することをpop、スタックに要素を追加することをpushと言います。また、このように最後に入れた要素だけ取り出せるデータ構造をラストイン・ファーストアウト(LIFO)と言います。わかりやすいですね!最後に入ったものが最初に出る。

 

スタックのデータ構造はpythonのライブラリで提供されているらしいです。この本では理解のために1回自分で実装することを進められていました。

スタッククラスには5つのメソッドがあります。

  • is_empty:中に要素がなければTrueを返す
  • push:要素をスタックの1番上に積む
  • pop:スタックの1番上の要素を削除
  • peek:スタックの1番上の要素を返す
  • size:スタックの要素数を返す

 

pushメソッドではpythonにもともと入っているappendメソッドを使い要素を追加し、popメソッドではデータ構造の指定のインデックスを削除できるpopメソッドを使って実装しています。インデックスを指定しなかった場合、データ構造の末尾の要素が削除されます。mainでは動作確認のために色々自分でチェックしてみた内容です。

 

f:id:yoshinon444:20181028154255p:plain

 

これを使うことで要素の並び順を逆に並び替えたりすることもできます。あるデータ構造を作り新しいデータ構造にpopメソッドを使って後ろから代入していけば良いです。pushメソッドは1つずつしか要素を追加することができないので、一気に追加する場合はfor文を回す必要があります。

 

 

キュー

 

キューもリストと同様に要素を追加したり削除したりできますが、スタックのように追加・削除の際に特別なルールがあります。スタックとは違い、最初に入れた要素が1番はじめに取り出すことができます。このようなデータ構造をファーストイン・ファーストアウト(FIFO)と言います。最初に入ったものが最初に出る。スタックと逆ですね。

 

これもpythonの組み込みクラスcollection.dequeとして提供していますが、実装して見ましょうということでした。

本来もっと多くのメソッドが用意されているらしいのですがここでは4つのメソッドを持たせます。

  • enqueue:要素をキューに追加
  • dequeue:キューから要素を削除
  • is_empty:中に要素がなければTrueを返す
  • size:キューの要素数を返す

 

 ここでキューの特徴であるFIFOのために、要素を追加する際にinsertメソッドを使用しています。insertメソッドでは要素を指定の位置に追加することが可能です。

リストオブジェクト.insert(指定のインデックス, 追加する要素)

インデックスに0を指定することで新しいものほどインデックスが小さくなるようにしています。これもmainの中は動作確認です。for文を使ってキューを作成してみました。

 

f:id:yoshinon444:20181028154322p:plain

 

ちゃんちゃん。

独学プログラマー19章読んでみた:github

 

19章はバージョン管理のことについて書いてありました。主にGithubの使い方が書いてあってpythonの勉強というよりは、実際にプログラマーになるための章かなと思いました。私はHPを作るという課題の時に教えてもらってGithub軽く使ったことがあったのですが、pullして自分の担当のところのプログラム書いてaddしてcommitしてpushするという流れだけ守ってやってただけなので、そのコマンドが何を意味しているのか全然理解してなかったので、そこが理解できたのがよかったです。あと使ったことないコマンドも紹介してあって、そんなこともできるのか〜と思いました。

 

 

Github

 

まず、バーション管理システムとは、複数のプログラマーによるプロジェクト内でのコード共有を支援してくれるシステムのことで、今よく使われているものがGithubです。よく使うワードとして、リポジトリというものがあり、これはバージョン管理システムによって作られるデータ構造です。コードの変更箇所が記録されます。ローカルリポジトリ中央リポジトリによって成り立ちます。ローカルリポジトリとは、メンバーそれぞれのコンピュータにあり、中央リポジトリGithubのようなウェブサイトで提供されます。プログラマーはローカルリポジトリで変更箇所(差分)を記録していて、それを中央リポジトリに同期することで全員で共有することができます。

 

 

使い方

 

まずリポジトリをウェブサイトで作成します。そのURLをコピーし

$ git clone [リポジトリURL]

というコマンドを書くことで自分のコンピュータにそのリポジトリがダウンロードされます。

 

ここでGitを使う上でよく使うものを先に紹介します。

ステージ状態とは最終的に中央リポジトリにpushしたい差分がどこなのかをGitに教えるということらしい。なのでpushの大まかな流れは、変更した差分をGitに教え、ローカルリポジトリに保存し、中央リポジトリに同期するって感じなのかな。

 

ここからは実際に使うコマンドの紹介です。

 

$ git remote -v

pushやpullする相手となる中央リポジトリのURLを表示する。よくコマンドで使われる-vはverbose(多くの情報を出力する)というものの略らしい。

 

$ git status

ローカルリポジトリに記録された状態と現場との差異を表示する。ステージ状態に無いものは赤く表示されます。なのでpushする際は赤い文字が無い状態にする必要があります。

f:id:yoshinon444:20181024170514p:plain

こんな感じで表示されます。これはtest10.pyはステージ状態では無いということが一目瞭然ですね。

 

$ git add [ファイルパス]

ステージ状態にしたいファイルパスをここに書くことでステージ状態にすることができます。ファイルパスのところを.(ドット)に置き換えることで"全ての差分"を自動的にステージ状態にすることができます。

 

$ git reset [ファイルパス]

ステージ状態にしたあとでステージ状態を取り消したい時はこのコマンドで実行できます。

 

$ git commit -m [コミットメッセージ]

これでステージ状態の差分をローカルリポジトリに保存できます。コミットメッセージとは以下のファイル名の右に書かれているコメントのことで、これを書くことで複数のメンバーで作業する時にわかりやすくなります。

 

f:id:yoshinon444:20181024171542p:plain

 

$ git push origin master

これは呪文です。これでcommitした差分を中央リポジトリに同期することができます。

 

$ git pull origin master

これで誰かが変更したものでも差分を中央リポジトリからローカルリポジトリに同期することができます。

 

 

前のバージョンに戻すこともできます。

 

$ git log 

これで今まで行ってきたリポジトリの履歴を見ることができます。コミットにはコミット番号(ID文字列)というものが全てに付いているので、そのID文字列を見るためにこのコマンドを実行します。

 

$ git checkout [コミット番号]

先ほど見たID文字列をここに指定することで、その時点のコミットした状態まで戻すことができます。コミット番号のID文字列とは例えば”16c62a261a161b70c844d4027eadd6a936c4cffc”このようなものです。

 

$ git diff [ファイル名]

これで、前回コミットしたものとの差分、つまりリポジトリに記録されたものと違う部分を表示することができます。

f:id:yoshinon444:20181024172536p:plain

この時一番下の行を書き足しているので+で表示されています。

 

f:id:yoshinon444:20181024172630p:plain

逆にこの時は一番下の行を削除したのでーで表示されています。

 

 

他にも色々なことができるみたいなので、ぜひ使えるようになりたいと思いました。チームでも作業がややこしくならずに進められそう。今までチームでやったことそんなに無いけれど、仕事となったらたくさんあるだろうし、練習しとこうと思いました。

 

バイバイ!

 

独学プログラマー18章読んでみた:パッケージ管理ツールpip

 

18章はパッケージ管理ツールについて書いてありました。主にpipについて。なんかわかってる様でわかっていない言葉があったので先に言葉をまとめる。

 

  • パッケージ管理ツール:プログラムのインストールや管理を行うプログラム
  • パッケージ:配布用に梱包されたソフトウェア
  • メタデータ:ソフトウェアの名前やバージョン、プログラムが動作するのに必要な他のパッケージへの依存関係といった情報

pythonのパッケージ管理ツールであるpipは最近のpythonをインストールすれば一緒にインストールされます。

 

新しいパッケージをインストールするには

$ pip install [パッケージ名]

をすれば入ります。

ただパッケージ名を書いただけの時は最新のバージョンがインストールされ、バージョンを指定したいときは[パッケージ名]==[バージョン番号]としてあげることで指定したバージョンをインストールすることができます。インストールしたパッケージを使用する時は、pyhtonのコードのはじめにimportします。

 

パッケージのインストール先としてpythonsite-packagesディレクトリというものがあり、インストールできるパッケージはPyPIに全て登録されているらしい。

 

 

$ pip

と打つとpipでできることが全て表示されるので、それを参考にして使うと良いと思います。

 

仮想環境を作るとその環境ごとに別のパッケージをインストールできるので、違う環境を作りたい時は仮想環境を利用すると良いみたい。

 

研究室でpillow(画像処理などができるパッケージ)をインストールするときもpipを使って少しは知っていたので、「おーこんなことも書いてくれてるのかー」と思いました。pipについては検索するとQiitaなどいろんなページで紹介されているので詳しく知ってなくてもその都度検索すればなんとかなると勝手に思ってます。