ナンバリングタイトルで習得した技を忘れるやつ

超普通の情報系大学生のメモや疑問まとめ、備忘録

CentOS7に突然ssh接続できなくなった時

タイトルの通り。
ある日、自宅のPCから研究室のネットワーク内の実験用サーバに二段階sshでアクセスできなくなりました。
ssh -vvv serveraddress で確認したエラーメッセージには、
debug1: key_load_public: No such file or directory

ssh_exchange_identification: read: Connection reset by peer
という記述が。あれれ〜

unix.stackexchange.com

にあるように、前者はsshクライアントが個別の公開鍵を見つけることができないという単なるデバッグログで、後者はサーバーは実行されているけどSSH接続が受け入れられていない、という内容のエラーみたいです。
当初は、MacOSを(今更ながら)Yosemiteから(High Sierraではなく)Sierraにアップデートしたせいだと考えていたのですが...



もくじ



Sierraに変えたから?

古いバージョンからSIerraに変えると何かと不具合があるというのは結構有名な話です。

http://webdev.jp.net/macos-sierra-permission-denied-publickey/

こちらはGitですが、同様にアップデートによってSSH接続がうまくいかなくなった事例です。
.ssh/configはそもそもないので/etc/ssh/ssh_configのパーミッションを見ますが問題無し。
そもそも一段階目のWindowsへのSSHは成功しているわけで...

Windows-CentOS間は?

TeamViewerで研究室内の自PCから実験用サーバへ接続してみたところ、上と同様のエラーが。
どうやらSierraのせいではないみたいです。
研究室に赴いてみると、なんとサーバが固まってる。慌てて再起動。
ps -A --sort -rss -o comm,pmem,rss | head -n 20
とかでプロセスのメモリ周りの様子を伺ってみると、systemd-journaldとrsyslogdが徐々に増加しているっぽい。
いや、増加してるのは別にいいんだけどconfigで設定されているはずの上限が守られていない。 なぜ...?

バグ

https://bugzilla.redhat.com/show_bug.cgi?id=1308780

CentOS7でSystemdがメモリリークしていて使用率がジワジワと上昇していた - YOMON8.NET

このあたりにも同様の事案が。systemdをアップデートすると、あっさり解決。
めでたしめでたし〜〜

余談ですがHigh SierraではなくSierraにしたのはOffice for Mac 2011のサポート対象外だと耳にしたからです。
ただでさえグーグル様のdocとかslideに頼りきりなのに、このままでは若者のOffice離れが進行してしまう...

インターンのあれこれとか探し方

超久々の更新。 書こうと思ってることは結構あるけど、実際に書くとなると案外エネルギー使うよね。

今回はインターンについて書こうと思う。 自分は院進学予定のB4なのですが、長期短期含めて三社ほどお世話になりました。国内のコンサル系と、国内っぽいウェブ系と、外資系のウェブ系の三つ。それぞれに関してもそのうち書くかも。 情報系だと他分野の学生以上にインターンに対するプレッシャーがあると思います。B4になると全く行ったことないって子の方がワンチャンマイノリティかもしれません。

とはいえ、研究をガッツリやりますってのも一種の強みだと思う。というか、学生なんだからインターンにかまけて研究蔑ろにするなんて、っていう一部教員陣の言い分は至極もっともで、まあ、バランスよくうまくやれって話だよね。インターン募集してる企業もちゃんと学業優先で、って大抵書いてあるからね。

で、じゃあどう探すかって話に移りましょう。

①大学で探す

これが一番手っ取り早い。昨今の企業さんは大学に来て説明会を開いてくれたりします。人事の方とエンジニアさん両方が来てくれるパターンも多いので、ここで選考についてとか色々聞くといいかも。

また、OGさんや先生が学科メーリスにまわしてくれる場合もあります。この場合だと話が通じやすい。

どちらも向こうから誘いに来てくれているわけで、インターン未経験の人も心情として応募しやすいんじゃないかなあ。

②知ってる企業をググる

これは私がよく使う手です。情報系の企業だと短期であれ長期であれインターンを募集してくれているところが多いです。面接とかでも知ってるサービス開発してるところの方が話しやすいよね。 大きい企業でもチキらずに応募してみましょう。ESが通ると自信がつきます。面接が通ると自信がつきます。インターンを経験すると自信がつきます。

興味がある人も多いので、後輩などに教えてあげられる先輩になりたいですね。

インターンの紹介サイトを利用する

これは個人的にはおすすめしません。実際に行ったわけではないのですが、アルバイト募集サイトとの違いがあんまりよくわからない...

いや、実際インターンって大体アルバイト契約だから間違いではないんですけどね。

あとはなんだろう、逆求人とかもたまに聞きますね。ただ、つよそうなひとがおおそうでなんかこわそう(こなみかん)

Pandasのカラム名に変数代入したい

解決してないからこれだけ。 zabbixで集めたヒストリのcsvを一つにまとめようとしたわけ。そこで、キーの名前をカラム名にしようとしたわけ。で、ファイル名を変数に入れてカラム名にしようとしたら失敗した。どうやって代入するんだ??
解決した。

そもそもの話だけど、pandas.DataFrameというものがある。これはpythonにimport pandasして使えるライブラリのメソッドで、行列のデータね。で、何がいいってデータ分析がしやすいわけ。Jupyterとかと連携するととっても便利。excelに戻れなくなる。
まあこの連携の話はググればたくさん出てくるからいいとして、これ、行とか列を後から追加できるのね。
note.nkmk.me このサイトさんがわかりやすかった。

df = pd.DataFrame()
df = df.assign(A=0)

上の例だと空のdfに新しい列Aが値0で追加されるってわけです。
ただ、不思議なことにこの新しい列名に変数を使っている例が全然見つからなかった。頑張って探したけど全く見つからなかった。(見つけたら教えて)
そのまま変数をあてはめようとすると、invalidですよーって出ちゃうんですよ。
じゃあどうするって話だけど、もっと簡単な書き方でよかったってだけ。

tmp_df = pd.read_csv(file, header=None, names=['itemid', 'clock', 'value', 'ns'], encoding="sjis")
file_name='example'
df = pd.DataFrame()
df[file_name]=temp_df['value']

この例では、'itemid', 'clock', 'value', 'ns'って名前の列を持つcsvを読み込んで、新しく作ったDataFrameに読み込んだcsvの'value'の値を持つ'example'って名前の列を作っている。これでいいのだ。
assignだとだめだけど、df[]に代入ならおっけ。
Zabbixとの連携用に書いたやつなので、きれいに書き直したらそのうちAPI呼び出しと一緒に投稿するつもり。

エディタについて

ちょっと愚痴りたいことがあるのでその前にエディタについてまとめようと思う。
まとめるっていっても使ったことあるエディタだけね。

Emacs


GNU Emacs - GNU Project
macに最初から入っているやつ。
多分、私と同じ大学の子はこいつをターミナルで別ウィンドウで開く設定にするところで最初につまずくと思う。そんなドジいない?うっそだぁ〜
Emacsの良いところは開くのがはやい。
あと、Ctrl+なんかで大抵何でも出来る気がする。プラグインがたくさんある。
Emacsキーバインド(Ctrl+Aとか)はLinuxでもMacでも大体使える、など。
悪そうなところとしては、何だろう、設定がめんどくさいとかかな。ググれば大抵出てくるけど。
自分が初めて触ったエディタがこれでした。学部1年くらいの頃に参加したフロントエンド系の勉強会で、渋いね(笑)みたいな反応された記憶がある。
AquamacsのがMacらしいらしいけど使ってないや。確かReleases · railwaycat/homebrew-emacsmacport · GitHubこれ入れてた気がする。もしかするとCocoa Emacsかも。


Atom


atom.io
GitHubが作ったやつ。
正直、思考停止でこれ使ってもいいと思う。めっちゃ使いやすい。
何が使いやすいかっていうとどうしてもEmacsとの比較になっちゃいそうなんだけど、まず、直感的に使える。
ファイルをドラックドロップで開けるし、プロジェクト全体でキーワード検索かけられるのが嬉しい。 でも起動までが遅い。
1ファイルだけ書き換えたいとかならコマンドプロンプトEmacs開けばいいと思う。
あと、プラグインがあって入れるのがめちゃくちゃ簡単。これに関しては検索かけるとおすすめ紹介してるページがあるので割愛。
コード自動で整形してくれたり構文チェックしてくれたり(atom-beautifyとかLinterとか)。
これによって少々面倒な目に合ったわけですが...
なんにせよ、わからないことがあってもググると沢山ヒットするので、英語苦手って人でもStackOverflowに頼らないで済むケース多いよ。


vi


UNIX系のOSに最初からついてるやつ。
あんまりよく知らないで開いて、モード切り替えのことを知らず困惑した人も多いはず。多分。
コマンドモードはesc、編集モードはiね。 やらかしたら、esc+:+qでなかったことにしましょう。
いいところは、ssh接続の時とかに使いやすい。サーバ設定とかね。 悪いところは、コマンドがややこしい。特にEmacsのコマンドに慣れてると、ctrl+eでなんで文末にカーソル移動しないの?みたいになる。
なんだかんだこいつを使わざるを得ない状況が度々あるので、開いて書いて閉じてくらいできるとよい。


nano


GNU nano
なんで入れたかは忘れた。
これも相当シンプルなエディタ。
viっぽいけどモード選択とかないし、開いた時にコマンドの説明があるし使いやすい。
ただ、デフォルトでは長い行は勝手に改行されてしまうそうなので、起動時に"-w" オプションを付けた方がよいらしい。

MetaEditor


https://www.metatrader5.com/ja/automated-trading/metaeditor
MetaTraderに付属してるやつ。
仕事関係でたまに使う。
というか、MQL系言語のコンパイル用にしか使ってない。他のエディタで編集して、コンパイルのために起動。
EA作成に興味ある方はどうぞ。


Eclipse


Eclipse 日本語化 | MergeDoc Project
こいつはテキストエディタじゃなくてIDE(統合開発環境)だけど、一応。
IDEテキストエディタと違って、エディタで編集してコマンドラインコンパイル、みたいな手順がいらない。
これ1本でおっけーってパターンが多い。
日本語化プラグインがしっかりしているので、Pleiades入れればいいと思うよ。
ただこれ重いんだよなあ。
家のノートはともかく、職場のデスクトップでも重い。
Atomもそうだけど、多機能だとその分動作がもっさりしやすい。
コンパイル言語を職場で使わなくなったので、それっきり久しく動かしてない。
AtomGitHub DesktopとnpmちょちょいってしてるとIDEを懐かしく感じる瞬間が全くないってこともない。

メモ帳


Windowsに最初から入ってるやつ。
これも立派なテキストエディタだからね。
何がいいって、余計なことを何もしない。ほんと。
自分がどんな設定にしたかとか、どうやって変更したかとか気にしなくていい。
超楽。でもこれでプログラミングする人ってあんまり聞かない。




で、何があったかっていうとね、謎の空白と改行が挿入されてたの。編集したファイルに。
以前はLinterに沿った変更ならそのままでいいよ、って言われてたけど、今は極力差分減らすようにって方針になったのね。
ほんでね、Atom+GitHub Desktopを主に使っているわけですが、謎の空白と改行が挿入されるわけです。
そういやLinterのプラグイン入れてたな、と思い、そして同時にLinter通りならこれでいいじゃんとも思いつつ、ファイルを元に戻してメモ帳で編集。
コミットしたのね。
したらば、
「いらない差分消してね」
って連絡が。確認すると、謎の空白と改行が。なんでよ。
確かめると、package.json(多分npmの)でESLintが。
多分これによって、Linterに合わせてコード整形されてる。
コマンドプロンプトでgit使ったら呼び出されてたし...
これは別に自分で入れたわけではない。多分リポジトリで共通。
あくまで予測ですが、このファイルの前回の変更以前に導入されたがファイル全体で適用はされてない状態なんじゃないかな?と。
変更加えたファイルのみに適用とか。
これは自分が悪いの...?
今見てもらっている上司さんも自分が担当しているプロジェクトに片手間で関わっているという感じなので、知らなくても残当だけど。
それでも一応消してとのことだったので、ignoreファイルらしきものにぶちこんだら解決。
釈然としない..........

コマンドよく忘れる子はコマンドのhistoryログ数を早急に増やせ

何で増やした方がいいかっていうとうろ覚えのコマンドcommand+rで探した時に見つからないと絶望感ぱないからです。
ちゃんと増やしてる人とかもう頭に染み付いてるって人には別にどうでもいいかもしれないけど、案外言われるまで気づかないって。私は去年のインターンで教えてもらって、ああ〜〜ってなった。

$ echo $HISTFILE
/Users/username/.bash_history

この、.bash_historyに自分のコマンド履歴が保存されています。
ちょっと見てみましょう。

vi
cd ~
export PATH="$HOME/.bin:/usr/local/bin:$PATH"
 ls -l /usr/local/
cd bin/
ls
ls /usr/local/bin/
emacs
which
echo $SHELL

このあたりとかでbin消えてテンパってたなあ、とか、何かやらかした時にどうやったのか振り返るのにも使えますね。
ここに保存される件数は$HISTFILESIZEで決められます。
$HISTSIZEというのもあって、こちらはhistoryコマンドとか上キーで出てくるコマンドの上限らしい。
echoで見てみると、

$ echo $HISTSIZE
500

$ echo $HISTFILESIZE
500

初期値確か500だけど、1000くらいに増やしたはずなんだけどな...?
まあ丁度いいし設定し直しましょう。

vi ~/.bash_profile

で開いて、

HISTSIZE=1000
HISTFILESIZE=1000

と書き加えましょう。基本的にはどこでもいいよ。
ほんでもって、

$ source ~/.bash_profile
$ echo $HISTFILESIZE
1000
$ echo $HISTSIZE
1000

sourceで設定ファイル読み込んだのちに、echoで確認するとちゃんと反映されてるね。
ちなみに、

source file

でfileに書かれていることが実行されるよ。だから、echo 'a'がたくさん書かれたファイルをsourceしたらターミナルが'a'だらけになるよ。どっとはらい

command not foundの時、どうしたか

完全解決まで二日かかった。

ある日、emacsが開けなくなった。
普段使っているエディタが動かなくなるのは相当怖い。Atomもterminalから起動しない。
コマンド自体は認識されている。なのに、動かない。

<エラー内容を確認しよう>
emacsatomもコマンドとして認識されている。
だが、atomのコマンド実行時、

-bash: sw_vers: command not found

と表示されている。つまり、/usr/local/binまでは辿れているわけだ。
なら、このsw_versってなによ。

<パスが怪しい?>
sw_versは、MacOSのバージョン確認のためのコマンドらしい。
なら、パスがおかしくなった?と思い、echo $PATHを実行、すると、

/usr/local/google-cloud-sdk/bin:/Users/sayaka/.nodebrew/current/bin:/opt/local/bin:/opt/local/sbin:/Users/sayaka/.opam/4.04.0+type-debugger/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/go/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Library/TeX/texbin  

汚いが、特に以前と変わってない気がする...source ~/.profile(.profileの再読み込み)をすると、 not a valid identifierの文言が。
もしかして、何か消えてる?

<最近何か変なことをしたか思い出してみよう>
そういえば、linux用のソフトをMacに無理やり入れようとして結局失敗した覚えがある。その際にルートを適当に設定した。(デフォルトルートがMacに存在しないところを指定してたため)
インストールの実行ファイルの中身を見ると、

sudo rm -rf $IDIR  

これ怪しくね?上手く出来なかったら作ったディレクトリ消す、みたいな内容だったと思うけど、これでは?

<何が消えてる?>
sw_versがcommand not foundってことは、sw_versが本来あるべきところが消えちゃったのでは?という考えにやっと至る。ただ、ソフトのインストール時に指定したルートが思い出せない。パスのどれかのはずなんだけどなあ...which sw_versとかで見つからないかなと(which:後ろのがどこで呼ばれてるか見つけてくれる)試したらwhichまでないことが判明。typeは使えた。type javaは無理。でもtype pythonはおっけー。
調べていると、どうやらsw_versはMacX固有のコマンドなのね。
OSXの固有コマンド - MacWiki
ここで、/usr/binがないことに気づく。

<友達を頼ろう!>
ないならコピーさせてもらえばいい、ということで、同じ型を持つ大学のお友達を頼ることにしました。本当にありがとう。
しかし、コピーしてもらってから気づく。sudoがない。(もらったファイルmvしようとして気づいた)
コピーの段階でpermission deniedで弾かれていた模様。rootで入ってもらって再びコピー。
が...sudoでは/usrはやっぱりダメらしい。suでrootで入れや、との記述がネットであったので試すも、

Killed:9

何このエラー。どうやら強制終了らしい。メモリ関係でやらかした時に出るとのこと。そういえばプログラミング実習で見たことある気がする。
メモリに問題があるの...?もうダメじゃん...

<大人を頼ろう!>
研究室の先生に聞こうかと思ったけど先生は確かWindowsだった気がする、ということで、大学のサポート担当さんの元へ。
バックアップ取ってないことに呆れられる。すみません。
あと、OSのアップデート怠っていることにも呆れられる。はずかし。
慌てて購買で外付けハードディスクを購入(非経済的)、Yosemiteのインストーラを外付けに入れていただきました。
取り敢えずバックアップ取って(もしかしたら取れないかもと言われた)、OSを上書きインストールするといいよ、とのこと。ありがとうございます。
あとは自分で頑張って、と激励していただく。

<あとは時間がやたらかかるだけ!>
TimeMachineでバックアップを取ろうとするが、これがまた超長い。研究室でのんびり待つこと三時間。やっと終わる。
ここで帰宅。不安なのでhome以下を直接外付けにコピー。こういう時1TBあると雑にコピーできていいね。そしてこれも長い。一時間ほど。
そしていよいよOSの再インストール。再起動を選んですぐにcommand+R。すると、再インストールするかクリーンするか、みたいな選択が出るので再インストールを選択。この時、ディスクを特に繋いでいなくても始まったので、Wi-Fi環境があれば大丈夫そう。
ここからが超長い。あと〜分、みたいな表示があるんだけど、ガバガバ。進んでるか不安な人はログを開くといいよ。一応進んでるから。
インストールが一旦終わったと思ったら二回目。???となりつつも下手に弄ると壊れそうなので放置。
結局、このインストールが終わるのに4, 5時間かかった。


無事元どおりになった今となっては、/usr/binがなくなっている時点で再インストールに踏み切るべきだったとも思いますが、大容量のディスクを持っていなかったためケチりたい気持ちがあった。
一万円、高い勉強量だった。
サポート担当さん、そして友人に心からの感謝を。

Packet Tracerについて

pkaファイルがある場合は、Packet Tracer開いてFile->Openから開く。
メニューバーが邪魔な場合は、View->Toolbarsのチェックボックス外す。
左下にデバイスのパーツがあるので、それでネットワークの構築を行う。動画に解説があるが、バージョンで結構違うので、手探りでやるべし。リファレンスは一応あった。
ネットワークのパーツをクリックすることで、IPアドレスの設定や、コマンドプロンプトを開ける。
一通り接待したのちに、右下のタブからシミュレーションモードに切り替える。ここで、PDU等をデバイスまでクリックドラッグし、Auto Captureを選択すれば、シミュレーションできる。
あのタイプのボタンは放射状と呼ばないのでは?