いつの間にかラズパイがDNSにつながってなかった話
なぜホスト名が解決できていなかったのか判明したので。
タイトル通りDNSにアクセスできなかったがためにホスト名の解決ができていなかった(当たり前だ)
jaga.hatenablog.com
そこで
qiita.com
を参考にして/etc/network/intefacesをいじることに。
第5章 ネットワークの設定
Debianのマニュアルを見ると静的IPを使う場合のエントリーは以下のようにかける
allow-hotplug eth0 iface eth0 inet static address 192.168.11.100 netmask 255.255.255.0 gateway 192.168.11.1 dns-domain example.com dns-nameservers 192.168.11.1
自分の環境の場合はwifiのwlan0を使用、ラズパイのIPアドレスは192.168.3.13、gatewayとDNSは192.168.3.1だったので
(ifconfigやnetstatで調べられる)
allow-hotplug wlan0 iface wlan0 inet static address 192.168.3.13 netmask 255.255.255.0 gateway 192.168.3.1 dns-nameservers 192.168.3.1 wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
元から記述されていたwpa-confを付け足してこんな感じに。
これで無事
ping google.com
が通りました。
npm installでfetch failedするのを治す
raspiにhubotいれて遊ぼうとおもってcoffee-script入れようとする。
apt-getで入るのはバージョンが古くおすすめしないらしいので、npm installでいれることに。
wikiCoffeeScript インストール - sappari wiki
ところが、yoとかgenerator-hubotを入れたときは正常に動いていたnpmがエラーを吐いてきた。localeをいじった関係かもしれない。
npm ERR! Linux 4.4.21-v7+ npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "coffee-script" npm ERR! node v7.6.0 npm ERR! npm v4.1.2 npm ERR! code ENOTFOUND npm ERR! errno ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! network getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443 npm ERR! network This is most likely not a problem with npm itself npm ERR! network and is related to network connectivity. npm ERR! network In most cases you are behind a proxy or have bad network settings. npm ERR! network npm ERR! network If you are behind a proxy, please make sure that the npm ERR! network 'proxy' config is set properly. See: 'npm help config' npm ERR! Please include the following file with any support request: npm ERR! /home/pi/npm-debug.log
こんなのや、
npm ERR! fetch failed https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.4.tgz npm WARN retry will retry, error on last attempt: Error: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
こんなエラーが!proxyがおかしいとかENOTFOUNDとか言っているが、結局はregistry.npmjs.orgというホスト名が解決できていないということらしい。
そこでgithubのIssueを参考にして/etc/hostsに以下を追記した
npm install giving fetch errors for some packages · Issue #13289 · npm/npm · GitHub
#/etc/hosts 151.101.36.162 registry.npmjs.com 151.101.36.162 registry.npmjs.org
そしてrebootして再度npm installを行うとみごと成功!
なんでこのホスト名が解決できなかったのかは謎...
また、途中紆余曲折して
npm ERR! Cannot read property 'path' of null · Issue #15348 · npm/npm · GitHub
npm ERR! Cannot read property 'path' of null · Issue #15227 · npm/npm · GitHub
あたりを参考にproxyの設定をいじってみたが、全く意味はなかった。そもそもproxyがよくわかっていない(オイ
社内とか学校のネットワーク使用してて同様のエラーが出たときは参考にしてみるといいのかもしれない
MacOS Sierraでkeyhac
SierraにアップデートしたらKarabinerが使えなくなったので、keyhacを採用した。
Keyhac - Pythonによる柔軟なキーカスタマイズツール - craftware
元々Karabinerはvimを[Ctrl-J]で抜けるときにIMEをオフにするのに使っていた。
先人のブログを参考にしてできたconfig.pyは以下
macOS SierraでVimの日本語入力を快適に - htlsne’s blog
macOS Sierra + Keyhacでキーバインドをカスタマイズ - Qiita
config.py
import sys import os import datetime import subprocess from keyhac import * def configure(keymap): keymap_iterm2 = keymap.defineWindowKeymap( app_name="com.googlecode.iterm2" ) def escWithIMEOff(): esc = keymap.InputKeyCommand("Esc") esc() ime_off = keymap.InputKeyCommand("(102)") ime_off() keymap_iterm2["Ctrl-J"] = escWithIMEOff
以下補足
- 二番目のリンク参考サイトで使用されているime_offにgoogle日本語入力のショートカット[Ctrl-Shift-Semicolon]を使う方法はラグが酷かったので、英数キー(102)を割り当てた。
- iterm2のappnameであるcom.googlecode.iterm2は、"Enable the Internal Log Output"をonにしてconsoleを確認することで確認できる。iterm2の場合は"Window : app : com.googlecode.iterm2"と表示された。
- なぜkeymapをiterm2に設定したかというと、vimを操作するときのkeyhacからみた操作アプリがiterm2だったからだ。一つ目の参考サイトではMacVimに指定していたので、おそらくMacVimなら独立アプリとして認識されるのだろう。
- なぜかkeyhacのconsoleの文字が異常に小さい![Cmd-Shift-+]でも拡大できない。解決法ご存じの方は教えてください...
追記1:
keyhacを起動するとmacの環境設定でデフォルトで設定されているキーボードショートカットが利用できないことが判明したので利用停止
追記2:
BetterTouchToolで実現する方法に切り替え
qiita.com
MacのTerminalのカラー設定を変えたらVim終了時コンソール復元しなくなった話
まだTerminal触り初めの頃、とりあえず画面をかっこよくしたいなと思って以下の記事を参考にカラー設定をSolarizedにしたことがあった。
導入すると、Vimなどのフルスクリーンアプリを使用する際にコンソール復元ができなくなっていることに気づく。当時は違和感を覚えるくらいで「まぁいっか」なんて流してたが、やっぱり不便だし治すことに。
こちらを参考にして
echo $TERM
を叩くと
と出た。ansiってなんだ?というのは置いといて、どうやらこれがxtermじゃないのが問題だったみたいだ。
そこでTerminalの設定を開いて使用しているprofileの詳細タブでTerminfoを確認し、これをxtermに変更した。
コレで元通りコンソールが復元するようになった。
以下蛇足。
環境変数マニュアル で$TERMを見ると以下のように記述される
emacs や vi では、1文字戻ったり画面をクリアする際、エスケープシーケンスを出力している。しかしエスケープシーケンスは端末の種類によって違うので、ユーザが今どの種類の端末を利用しているのかをプログラムに伝えるのが環境変数 TERM の役割なのだ。
そしてtermcapとterminfo | doda's blogの通り、
termcapやterminfoは、端末の動作の違いを吸収するためにあります。
dateやcatなどの大多数の一般的なコマンドでは文字列を順番に出力するだけなので、端末の違いが影響する事はほとんどありません。これに対しviなどの画面全体を使うようなプログラムでは、カーソルを指定した位置に移動したり、指定した位置に新しい行を挿入するといった操作が必要になります。こういった操作は端末に対して命令として解釈される文字列(制御シーケンス)を出力して行うのですが、この命令用の文字列は端末の種類によって違ったりします。そこでプログラムは、使用している端末(環境変数TERMで指定します)で使いたい機能がどのような文字列になるかをtermcapやterminfoで調べて出力します
terminfoとはエスケープシーケンスに関するDBのような役割を果たすらしい。
これによりフルスクリーンアプリを終了したときに元のコンソールの状態に復元する - 技術メモ帳で見かけた
本当は vim などのフルスクリーンアプリは"元のコンソール状態" に復元しようと、enter_ca_mode / exit_ca_mode というものを出力するのだが、このときに、端末データベースから"実際に出力すべきエスケープシーケンス" というものを取得しており、ここが正しく設定されていないため、うまく元のコンソールに戻らない。
という文言の意味が分かった。
ansiのためのterminfo、すなわちエスケープシーケンスのDBが取得できなかったがために、enter_ca_mode / exit_ca_modeが正しく出力されず、復元が失敗した。
リーダブルコード読了後の備忘録
リーダブルコードを読み終わったので自分用におさらい
列挙次項に気をつけてコーディングしつつ、「あれ、どうやって実践するんだっけ?」ってなったら読み直す、ってのを習慣化したい
(注意)自分の解釈が混じってます
名前に情報を詰め込む
- 明確な単語を選ぶ
- tmpやretvalなどの汎用的な名前を避ける
- 具体的な名前を使って、物事を詳細に説明する
- 変数名に単位、状態などを追加する
- スコープの大きな変数に長い名前を
- 大文字やアンダースコアに意味を込める
誤解されない名前
- 曖昧な英語表現を使わない(ex: length, filter, limit)
- 限界値にはmin, max
- 包含的範囲にはfirst, last
- 包含/排他的範囲にはbegin, end
- ブール値にisなどを
- 否定形を避ける
- getやsizeは軽量アクセッサに限る
美しさ
- 複数のコードブロックで同じことをするならシルエットも同じに
- コードの列を整理
- 順番は規則正しく
- 空行を使って大きなブロックを論理的に「段落」に分ける
コメント内容
- コードからすぐ抽出できることは書かない
- 補助的なコメントは書かない(コードを補うコメント書くくらいならコード修正しろ!)
- なぜ他のやり方でないのかを書く
- コードの欠陥をTODO:やXXX:で表す
- 定数の値にまつわる背景を書く
- 読み手が疑問に思いそうなところを書いておく
- 平均的な読み手が驚く動作は文書化する
- ファイルやクラスには「全体像」のコメントを書く
- コードブロックにコメントを付けて概要をまとめる
コメントは正確で簡潔に
- 「それ」などの代名詞を避ける
- 関数の動作はできるだけ正確に説明
- コードの意図は詳細レベルでなく、高レベルで記述
- よくわからない引数にインラインコメントを使う
- 情報密度の高い言葉を使う
制御フローを読みやすく
- 比較では変化する値を左に、より安定した値を右に配置
- if/elseのブロックは、肯定形・単純・目立つものの順に処理する
- 三項演算子、do/whileループ、gotoなどは避ける
- 深いネストを避ける
- 関数上部で単純な条件を先に処理するガード節を使う
巨大な式を分割する
- 説明変数を導入する
- if文の条件式が長くなるなら条件の否定を考えてみる
変数と読みやすさ
- 中韓結果を格納する変数など、邪魔な変数を削除する
- 変数のスコープをできるだけ小さく
- 一度だけ書き込む変数を使う
- プロジェクト固有のコードから汎用コードを分離する
一度に一つのことを行う
- タスクを全て列挙して別の関数に分割できないか検討する
- 言葉で説明して見ることが重要
短いコードを書く
- 不必要な機能をプロダクトから削除する
- 最も簡単に問題を解決できるような要求を考える
- 定期的に全てのAPIを読み込んで標準ライブラリに慣れ親しんでおく
- 質問と要求を分割する、あらゆる入力をうまく処理する必要はない
テスト
- テストのトップレベルはできるだけ簡潔にする
- テストが失敗したらバグの発見や修正がしやすそうなエラーメッセージを表示する
- テストに有効な最も単純な値を入力につかう
- テスト関数に説明的な名前をつけて、何をテストしているのかを明らかにする
Google Scholarプラグインから書籍のBibTeXを取得してMendeleyに突っ込む
論文書いてると引用元が書籍の場合ってありますよね
その場合PDFをとってきてMendeleyに突っ込んでwordに引っ張ることはできないので、書籍の情報だけをMendeleyに登録することになります。簡略化のためのTips
- Google Scholarプラグインをいれる
- 検索する
-
右上の''ボタン(クオートボタン?)を押す
-
BibTeXを押して別タブで開いたページを保存(拡張子は .bib に)
-
MendeleyのFile>import>BibTeXを選択
-
先程ダウンロードした.bibファイルを選択して終了
↑みたいに項目が追加されます
もっと楽な方法もあるかもしれません
見つけたらぜひ教えてください!
word2011 for Mac で参考文献のスタイルにIEEEを設定する
久々に投稿しようと思ったら、「今月のPVが100超えました」って出ててびっくりしたじゃがいもです
どうやらansibleの記事が需要あったらしいですね
拙いながら誰かのお役に立てた感じがして嬉しいです
とまあ本題。
現在学位論文を執筆中(ほぼまっさら)なんですが、wordのアウトラインや目次といった今まで縁がなかった機能に感動しています
論文ですから、参考文献を明記する必要があります
[1]
↑よく見るこんな感じのIEEEというスタイルにしたかったのですが、デフォルトでは入っていないのが辛い(officeが古すぎる!)
そこで
このサイトを参考にしてIEEEを導入しましたが、winとmacではディレクトリ階層が違うのでその備忘録。
論文を書き終えたら、参考文献一覧を作成します。初期設定では変なスタイルしか入っていないので、参考文献スタイルを自分で追加します。BibWord stylesをC:\Program Files\Microsoft Office\Office1\Bibliography\Styleに置くと、[参考資料]->[引用文献と文献目録]->[スタイル]からACM・IEEEなどのスタイルを選択できるようになります。
とありますが、macでは
/Applications/Microsoft Office 2011/Microsoft Word.app/Contents/Resources/Style/
配下に於けば問題ないっす。そんだけです。
一つ注意として、finderでこの操作を完了したい場合は
のように、プロパティを出してパッケージの中身を開いてやる必要があります。一応