たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

ふざけた環境からとびだせ!

ふざけた環境からとびだせ!

集え!OITer!!! OIT Advent Calender 2016!!!!

この記事は、 OIT Advent Calendar 2016の1日目の記事です。


12月1日 初日の今日は僕、たいちょーがお送りします。
さっきカレンダーの登録件数をみたら、がら空きでしたが大丈夫でしょうか・・・!?


先ずは自己紹介を

コピペがやりたい

初Advent・・・ども・・・
俺みたいに色んなエディタに手だしてる浮気野郎、他に、いますかっていねーか、はは

今日の友達の会話
あの実装カッコいい、とか あのIDEほしい とか
ま、それが普通ですわな

かたや俺はUnityのコンソール見て、呟くんすわ
NullReferenceExpression. (ソースコードが)こわれてる?それ、いつものことね。

好きな言語 C#bash
使ってるエディタ VIMとVisualStudio系 (emacsはNO)

なんつってる間に22:30っすよ(笑) あ~あ、早寝は健康の秘訣ね、これ


真面目に

あいこん
隊長 (@xztaityozx_001)と申します。たいちょー でもいいです。
ほかには 社長 とか 団長 とか呼ばれたことがありますね。まぁなんでもいいです。

朝滅茶苦茶早く学校に行き、誰もいない教室でニヤニヤするのが得意です。
趣味はプリキュアとどうしようもないシェルスクリプトを書くことです。
Unityでどうしようもないゲームも作りました。

OITのHxSという部活に所属してます。部員総数に対してアクティブがかなり少ない という涙を堪えきれない部活ですが、結構僕は好きです。 ↑にある作品はここで作ったものです。遊んでみて

MapleStoryを10年ぐらいやってます。今はリブート鯖でゼノンと火毒魔してます(xz機刃隊長zxに友録ヨロw)
他にはロックマンエグゼとかポケモンが好きです。


そろそろ本題

今回は初Advent Calender参加ということで、そもそもAdvent Calenderってなに?という所から始めるんです

Advent Calender は、クリスマスまでの期間に日数を数えるために使用されるカレンダーである。
Adventの期間(イエス・キリストの降誕を待ち望む期間)に窓を毎日ひとつずつ開けていくカレンダーである。
すべての窓を開け終わるとクリスマスを迎えたことになる。
--Wikipedia アドベントカレンダー

へー、もとはキリスト教関連のイベントなんですね~
もっとも古いものは1903年ごろに作られたようなので、100年以上も続く人気(?)の習慣なんですねぇ
まぁ20年間独りぼっちの僕には クリスマス なんてものはただただ寒い日なだけですが。

それと同記事にぼくのようなプログラマの端くれとかが思いつくAdvent Calenderについての記述もありました。

インターネット上などで、アドベントカレンダーに見立てて12月に一人、または複数人で毎日記事を投稿していくという企画がある。 特にプログラミングに関連するアドベントカレンダーの企画が近年多数行われている。 複数人実施の場合は、カレンダーを管理するサイトを軸にある程度の範囲(プログラミング言語や使用する技術など) を決めて参加者を募り、順に投稿を行うというスタイルが多い。 参加者が多い場合、クリスマスを超えて12月の終わりやそれ以上続くこともあり、1年続いた例もある。

ggったときによく見かけるQiitaで毎年開催しているのはこれにあたるようですね。
参加してみたいな~。bashのAdvent Calenderとかないかな。

OITでやるなら

OITらしいこと書きたい

うれしいことにまだいっぱい空きがあるようなのでネタが尽きぬ限りOITerに関すること書かせてもらいます。
既に登録されている方々からOITerなら感じている不平不満や満足していることなどをこれから12月25日までねっとり書いていただけることでしょう。

あ、もちろんOITじゃないことも書きます。というかそっちのが多いんじゃないかな・・・???

そんな中僕が書くのは

ふざけた環境からとびだせ!

演習室の環境が ひどい というのは意識の高いOITerなら一度は感じることでしょう。
例えば今現在(2016/12/01)なら

  • 容量がUbuntuは500MB Windowsは300MBしかない

    • 市販のUSBメモリに負けるレベルだけど生徒数が多いので仕方ないな
    • なんかもっとあるって話を誰かに聴いた気がせんでもない
    • でもfirefoxのキャッシュだけでパンパン丸になるのは笑う
  • sudoさんが使えない

    • 学生にsudoさん与えるわけには!って感じだろうけどね~~~
  • Ubuntuのバージョンが古い

    • そろそろサポート終了ですよそれ
  • 起動するときたまにKarnel Panicする

  • windows側の起動がぐぅ遅い

    • セキュアブートきってんだろこれ
  • 持参PCから印刷機にジョブ発行できない

    • winの起動が遅いから印刷するまで時間かかる
  • キーボードの足がなくなってる

    • 消耗品なんだからすり減ったら入れ替えてくれ~~~
    • 足立てない人は関係ない
  • winは起動ごとに設定が消える

    • 壁紙とかはしかたないけどマウスの設定が戻るのはホント勘弁
  • C#する環境がない

    • mcsもmonoもはいってへんがな。やる気を出せ
  • ログインシェルがtcsh

    • bashにしようよ  いやtcshでもいいんだけどさ
  • winのときにメモ帳を使うようにおすすめされる

    • これはやばいとおもいます。

まだ いろいろありますけど特にぼくがしんどいと思っているのはtmuxscreenといったコマンドがないことです。

https://tmux.github.io/tmux.github.io

www.gnu.org

これがあるとないとで端末がどう違うかというと
terminal1
これが
terminal2
こうなるんです(背景のリゼちゃんはついてきません)

これ右は皆さん使っているVimで左は作業用のターミナルなんです
つまり コードを書くことコンパイルや実行などの作業 をする ターミナルを分けたまま 一つのウインドウで完結させられるんです!!
geditやemacsを教えられた通りに使っていればコードを書くときに

  • 課題のページ
  • ターミナル
  • エディタ

とウインドウを出してるでしょう
そして「 やったぁ~~こーどかけたぁ~~ 」といっていちいちフォーカスをマウスでターミナルに移すのです。

そーんなのはい・や・だ!

コーディング中は極力キーボードから手を放したくない系の僕はマウスなんていうものに触りたくないです。
え?じゃあAlt+Tab使えって・・・????

terminal3

どっちやねん!!!!

はーもう・・・
でもtmuxならこんな煩わしいことないです。でも演習室の環境には入ってない
演習室の環境ってしんどい・・・!

ならどうするか

演習室を無理やり快適する これに尽きる
演習室にいながら演習室を飛び出すことができるというライフハックならぬ 演習室ハック をご紹介します。

ターミナルとかそのへん

実はさっき見せたリゼちゃんが背景になっている奴は4日目の人のサーバにログインしています。
もちろん演習室からもログインできます。
しかもsudoさんつかえるし、容量も500MBの何倍だよって感じです。
まじありがとう

サーバの方

そんなサーバなんて貸してくれる友達いないよー><って方は有料で借りましょう。
レンタルサーバとかでggればすぐ見つかるでしょう。

借りたくないよー><って方は作りましょう。
ラズパイがあれば十分なのが作れると思います。(熱がやばい?)
www.raspberrypi.org

IPアドレスやポート番号が取得できたらいつでも簡単に接続できるようにスクリプトを書いておきましょう。

#!/bin/bash

ssh [IPアドレスとかホスト名] -l [ユーザー名] -p ポート番号

これを書いといてドーンとスクリプト実行すればいいです。
さらに

#!/bin/bash

dst=$2 #コピー先
src=$1 #コピー元
shift;shift
opt="$@" #オプション

scp $opt -P [ポート番号] [ユーザ名]@[IPアドレスとかホスト名]:$src $dst 

こういうのも用意しておけばサーバからすぐにファイルを引っこ抜けます。
使うときは

./pull.sh [コピー元] [コピー先] [オプション]

ってやります。

クライアントの方

RLoginというターミナルソフトをお勧めします。

http://nanno.dip.jp/softlib/man/rlogin/nanno.dip.jp

演習室のWinにはTeraTermが入っていますがこっちの方が使いやすいです。

  • 背景が設定できる
  • 画面をスプリットできる
  • USBにいれて持ち運べる
  • 選択するだけでコピーできる

いろいろあるんですがそれはggって
特に3つ目の 持ち運べる というのはかなり点が大きいです。
zipを解凍するとexeファイルが一つだけぽーんとあるだけなので楽々です(鍵も持ち歩かないとですが・・・)

その他の問題を解決しようか

ほかの問題の解決法を隊長的に解決してみました。

キーボード問題

keyboard1
これが問題なんですから、ここに消しゴムを挟めばいいです。
keyboard2
圧倒的

winのときにメモ帳を使うようにおすすめされる問題

code.visualstudio.com
VSCodeをローカルかUSBに入れるといいと思います。
ローカル(Zドライブ)に入れた場合はパンッパンになります。(経験済)
VSCodeはとても便利ですが、Zドライブ以外が初期化されちゃうので設定とか拡張機能がクリアクリーンされるのでつらいところ、あります。

もしくはgvimをportable gitと一緒に使うのがいいと思います。
www.kaoriya.net
github.com
演習室のWinにGitが入っていればportable gitはいらなかったんですが・・・

家PCをつけっぱにする人はTeamViewerのPortable版をUSBとかに入れて使うのもいいと思いますYO。
www.teamviewer.com
こうすれば家の環境がそのまま使えるわけですから楽ちんですわな。

なんにせよ「 メモ帳 」はダメです。

(windows側の起動がぐぅ遅い + 持参PCから印刷機にジョブ発行できない)問題

この二つの問題が組み合わさると
レポート印刷したいだけなのに死ぬほど待たされる
というせっかちなOITerなら耐えられない問題が発生します。

しかしプリンタの 文書印刷 機能を使えばPCを立ち上げずUSBから直接印刷できます!!
wow
しかし、USBをスキャンしてもwordファイルは検出されません!
boo
何回かやってみたところ、画像やテキストファイルは 検出されてます。pdfもできるのかな?
なんかdocxは見つかりませんでした。文書印刷 #とは
なのでwordを画像データにしておけばPCを立ち上げずに印刷できますね!
docx→pdf→pngという変換行程ですかね!

ログインシェルがtcsh

や、まぁこれはbashzshじゃないと死んじゃう人向けなんですけど。
ていうかそんな人はこれぐらい解決してるでしょぐらいなんですけど。
~/.cshrc

bash

を追記するだけです。

まとめ

演習室に文句を言っても仕方ないです。僕らの学費はキーボードではなく電飾やそうめんになることの方が多いですから。
ですので自分から自分の使いやすい環境を構築する必要があります。
emacsやgeditでもカスタマイズすることで驚くほどコーディングスピードが上がります。(たぶん)
不便に思っていることとかはggればだいたい同じように感じてる人がいて、嬉しいことにだいたいそれは解決されてます。

この記事では起動が遅いなどは解決できませんが、これを読んで少しでも快適な演習タイムがすごせることを願っています。

VSCodeの統合ターミナルをbashにしてiverilogしたい

VSCodeの統合ターミナルをbashにしてiverilogしたい

最近知ったんですがVSCodeに統合ターミナルが追加されたんですね。
terminal3
表示させるとヒョコッと下に出てきてIDE感が増します。
terminal4

しかしコイツ、Defaultではぼくの嫌いな cmd.exe が当てられているので、

_人人人人人人人人_
> なによこれ! <
 ̄Y^Y^Y^Y^Y^Y^Y ̄

と大声を出さざるをえないわけですが。

変えれるらしい

blog.kondoumh.com

win10でAnniversary Updateでbashをインストールしている人は、

    "terminal.integrated.shell.windows": "C:\\WINDOWS\\sysnative\\bash.exe",

と書くだけで、統合ターミナルがbashになります。

んじゃさっそく...

terminal5

い、
イヤッフォーウ!!!!

わぁぁぁぁぁぁぁい!!!!
terminal6
bashだぁぁぁぁぁぁぁ!!!
terminal7
わあああああああああああああああああああああああああああああ!!!!

ハァ・・・ハァ・・・

かなり普通にbashが使えるのでcmdとかcygwin立ち上げて~とか、面倒なこととはバイバイです。
ただ、↑キーでの履歴がみれない・・・?のでctrl-rをつかって履歴補完するといいです。

友人に借りているサーバーにもログインできました。
terminal8

本題

こんなところで記事が終わっては転載以外の何物でもなくなるので、続きを。

xztaityozx.hatenablog.com
この過去記事に書いた通り、iverilogがインストールされていればRunnerという拡張機能でソースから直接端末を開いてHDLをコンパイルできる。
marketplace.visualstudio.com
でもぼくのwinにはIcaros iverilogがインストールされていなかった、というよりbashの方だけインストールしてた。
何故かというと、

sudo apt-get -install iverilog

で終わるから。
インストーラー落として・・・I agreeとか押して・・・めんどいわ!!

だからbashの方使いたい。

直接Runnerにシェルスクリプトを与えてみる

おおかたやる前から「 無理でしょw 」とぼくの中の何かが訴えていましたが、

#!/bin/bash

iverilog $1
vvp a.out
rm a.out

こんなスクリプトを書きました。
これをRunnerに与えます。

"runner.languageMap": {
    "verilog":"C:/Users/***/Documents/GitHub/CPU/run.sh"
}

そしてCtrl-Shift-Rをそぉい!
terminal9
あ?あぁ・・・
普通にbash.exeを選んでOKを押したら。
terminal11
なんもでぇへん!!!!

まぁそうだろうなと思ってbatに切り替えていく。

正直batの書き方あんまりわかんないんでシンプルなものしか書けないんですけど、

bash -c "echo abc"

書いた時のぼく「いきなりiverilog通るわけないしとりあえずechoしとこw」

terminal11
ふえぇ・・・

どうやらこんなふうにbatからbashは起動できないみたいですね・・・・!

解決策は?

はい。色々調べたんですけどなかなか解決策が見つからなくて無限の沼に落ちていきました。
その間色々考えてたんですけど、

  • bashにしかないならともかくwin版もあるのに何やってんの?
  • Runnerに任せるならcmdとか関係なくない?
  • 解決策調べるよりbatの書き方ggってカッコイイbat書いた方がいいじゃん

つまり
http://snu.nm.land.to/documents/iverilog.htmlsnu.nm.land.to
インストールした。
そして

D:/iverilog/bin/iverilog.exe %1
D:/iverilog/bin/vvp.exe a.out
@echo off
del a.out

気の迷いでDドライブにインストールしちゃったけどパスちゃんと書いたら通ったのでok。

ggり力の低さを実感した一日でした。

VSCodeをVerilogHDLのすごいエディタにする

VSCodeをVerilogHDLのすごいエディタにする

HDLを書きたいけどいいエディタがないょー>< という皆さんへ
VSCodeをVerilogHDLのすごいエディタにする方法をご紹介

VSCodeって?


VSCODE
Visual Studio Code

Visual Studio Code is a code editor redefined and
optimized for building and debugging modern web and cloud applications.
Visual Studio Code is free and
available on your favorite platform - Linux, Mac OSX, and Windows.

つまりVisual StudioとかいうMicrosoft社が販売している(高いのは80万円ぐらい)強すぎるIDEをフリー版にしてマルチプラットフォームにしたもの。

いろんな言語に対応していて(させることもできる)、 有志が作った拡張機能とかをインストールすることで強いエディタに育てられます。
この記事もVSCodeでMarkDownという形式で書いてます。

デフォルトではVerilogHDL用の機能が無いのでカスタマイズしていきます。
俺についてこい!

インストール方法


ここにアクセスしてプラットフォームにあったアーカイブとかインストーラをダウンロードします。

winなら

exeインストーラがここに ここです

zipアーカイブとかLinuxMacなら

下の方にありまする こっち

ダウンロードし終わったらダブルクリックして解凍とかインストールしてください。(ここは説明いらないと思います)

VSCodeがインストールされたら起動しましょう

ようこそVSCodeへ


これがVSCodeです。カッコいい
画像
さっそく拡張機能をインストールしていきます。
最近のバージョンはやり方が簡単になりました。
vscode4.png
ここをクリック
vscode5.png
こういうのが出たら検索ボックスに「HDL」と入れてみましょう。
そして
vscode6.png
上から二番目のVerilogHDLをクリックします。 そしたら vscode7.png
こういうのがでます。 これはVerilogHDLを書くためにシンタックスハイライトやシンプルなスニペット補完をしてくれるナイスな拡張機能です。
作ったのはIWD研の人らしいです。 vscode8.png
さっさとインストールします。

これでVSCode側のうんぬんはおしまいです。 VSCodeを再起動すればVerilogHDLの拡張機能が有効になります。


iverilogを用意する。


Win版

せっかくHDLを書いてもiverilogがないとどうにもならんので用意します。
といってもここを見てもらえばわかるのでwindows版は割愛

Linux版のいんすこ

ターミナルに以下のコマンドをシューッ!!!

% sudo apt-get install iverilog

おわり

おわり

これで一通りHDLが書けるようになったので好きなように書いてね

発展編

ここからはさらにスゴいエディタへ進化させたい人向けです。


VSCode上で実行結果を得る

Runner という拡張機能を使うとVSCode上でiverilogの結果を取得できます。
vscode9.png
これ Runner はプログラムやスクリプトを実行してその結果をVSCode上に表示させるスゴいやつです。

インストールしたらverilogを実行するようにbatを書きます

iverilog %1

これを適当なファイル名(例えばrun_iverilog.bat)で保存して好きなフォルダに保存します。
僕はdocuments以下に置きました。ファイルへのパスはしっかりメモっておいてね。

次はVSCodeとRunnerにbatファイルの場所を教えます。
Ctrl+Shift+Pを押し、「setting」とタイプして
vscode10.png
上から二番目のユーザ設定を開いてどうぞ
vscode11
VSCodeでは設定系をJSONという形式で記述します。自分の設定をするときは右側に追記する手法です。
ここに

"runner.languageMap": {
    "verilog":"C:/Users/USER/Documents/run_iverilog.bat"
}

と追記します。
これは verilog タイプのファイルを開いているときに path のbatファイルを実行するようにRunnerに教えています。 また

"runner.extentionMap": {
    "v":"C:/Users/USER/Documents/run_iverilog.bat"
}

とすれば、拡張子が ".v" であるファイルに対してRunnerは path のbatファイルを実行します。
↑の例はどちらでもいいです。

ここまでできたら後はRunnerするだけです。 HDLを書いているエディタ上でCtrl+Alt+Rを押すと...
vscode12
こんな風に出力がされます。 (文字化けとるがな)
ちなみに僕が実行したbatファイルは

echo test

なので本当はiverilogの出力がここに出ます。

Linuxの場合はbatファイルをshファイルで書くだけですね。

スニペットを追加する


スニペットとは

スニペットってのは補完のことです。
vscode13
こういうやつです、見たことあるかもね。

これをHDLを記述する際にもガンガン使っていくわけですが、スニペットの定義ファイルにほしいスニペットがないかもしれません。
しかし、スニペットの定義は自分で追加できます。

↑までの手順通りに拡張機能を追加しているなら、スニペットの定義ファイルは、ユーザ以下の
.vscode/extentions/mshr-h.VerilogHDL-0.0.11/snippets/verilog.json にあります。
拡張子がJsonなので察しているかと思いますが中身はJsonです。
例えば

"monitor":{
    "prefix":"mon",
    "body":[
        "$monitor ($time, ,\"$1\"$0);"
    ],
    "description":"monitor"
}

テストベンチとかでよく見るあれです。これを書いたらどうなるかというと
vscode14
mon を入力してTABキーを押すとbody内に書かれた文字列が展開されます。
以降TABキーを押すたびに$1$2→・・・の位置へとカーソルが進みEnterを押すと$0の位置へ移動してスニペットが終了します。

以降は簡単な例を書いときます。

//port接続用(同名)
"connect":{
    "prefix":"con",
    "body":[
        ".$1($1),$0"
    ],
    "description":"connect to same name port"
},
//port接続用(異名)
"connectanothor":{
    "prefix":"acon",
    "body":[
        ".$1($2),$0"
    ],
    "description":"connect to same name port"
},
//timescale
"timescale":{
    "prefix":"ts",
    "body":[
        "`timescale ${1:1ps}/${2:1ps}$0"
    ],
    "description":"timescale"
}

いろいろやってみてね!