min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

最新MacBook Proの発表と同時に大幅値下げされたiMacを買う

前記事で予算立てて買おうとしてたiMac。この時は結局買わなかった。

min117.hatenablog.com

そのうち買おうと思っていたら…

MacBook Proが発表されたのと同時に、iMacのほうが大幅に値下げされたらしい。

japanese.engadget.com

どれくらい値下げされたのか、値下げ前後を実際に比べてみる。

 

変更前

欲しいのは5Kで一番安いの。208,800円だった。

f:id:min117:20161029102841p:plain

変更後

値下げ後は178,800円になっている。208,800円から3万円も安くなった。

f:id:min117:20161029103013p:plain

素晴らしい。ノートはまだしばらくMacBook Airが使えるから、今回はiMacを買おう。

LinuxのSQL*Plusでbashのhistory機能を使う(カーソル↑↓で履歴を呼び出す)

ハピタス登録で1,000円分になるURL

その買うを、もっとハッピーに。|ハピタス

 

前記事でLinuxでsqlplusを使えるようにした(Oracle謹製Instant Clientを使用)。

min117.hatenablog.com

しかし、ヒストリ機能がない(Instant Clientだから?)。例えば矢印キー(↑や↓)を押しても、過去の履歴を表示できない。これじゃ実用に耐えない。

 

同じ悩みを解決している記事があった。

d.hatena.ne.jp

 

 

 

手順は以下のとおり。

① readline-devel をインストールする

② rlwrap をインストールする

③ sqlplus でヒストリ機能(履歴機能)を試してみる。

上記記事では②はソースからmakeしてたけど、yumでインストールできた。

 

まずは ① readline-devel をインストールするyumでインストールするだけ。

# sudo yum -y install readline-devel

f:id:min117:20161015213820p:plain

何事もなくインストール完了。

 

次に ② rlwrap をインストールするfedoraではこちらもyumからインストールできた。

# sudo yum -y install rlwrap

f:id:min117:20161015213938p:plain

こちらも無事にインストールできた。

 

いよいよ ③ sqlplus でヒストリ機能(履歴機能)を試してみるsqlplusを起動する前に rlwrap を呼べばいい。

rlwrap sqlplus scott/tiger@192.168.1.100:1521/MYDB01

 

rlwrapで包んでいるので、履歴機能が使えるようになっている。

f:id:min117:20161015214857p:plain

上矢印を押して履歴が出る(赤枠部分)。

Ctrl + r を押して検索文字列(line)を打つと、履歴を見れる(青枠部分)。

 

sqlplus で履歴が使えるとは。便利すぎる。WindowsOracle純正クライアント(sqlplus)より遥かに便利。さすがはLinux

 

LinuxのSQL*PlusからWindowsのOracleサーバにアクセスする(Linux版 Instant Client を使う)

Windows2003上にOracleサーバ(10.2.0.4.0)がいる。クライアント機(fedora Linux)から、このサーバにsqlplusでアクセスしたい。

 

今までは、VNCWindowsサーバに入って、そこからsqlplusを起動していた。

f:id:min117:20161015155804p:plain

これだと、VNCの環境のせいか、キーボードが英語版になってしまって使い物にならない(アットマークを入力が Shift+数字の2 とか)。

 

不便なので、Linux上から直接sqlplusを起動したい。最終的にはこうなる。

f:id:min117:20161015160209p:plain

 

 

 

やること

 LinuxSQL*Plusを使えるようにする。ただし、Oracleクライアントのフル機能だと(X Windowが必要だったりで)面倒なのでインストールしない。代わりに、Oracleが提供する Instant Client を使う。

 

手順

OracleのサイトからLinux版の Instant Client をダウンロードする。

② Instant Clientをインストールする。

環境変数を設定する。

SQL*Plus を起動し、WindowsOracleサーバに接続する。

⑤ 次回から手軽に接続できるようにする。

 

まずは OracleのサイトからLinux版の Instant Client をダウンロードする

Instant Client downloads for Linux x86-64

・ダウンロードするにはOracle開発者登録が必要。

・リンク切れの場合は、右上のSearch欄から「Instant Copy」で探せば見つかる。

f:id:min117:20161015161328p:plain

Linuxは64ビットだから、ダウンロードするのはたぶん「x86-64」だろう。違ったら、すぐ下にある「x86」をあとから試せばいいし。

f:id:min117:20161015161817p:plain

 

・バージョンはOracleサーバに合わせたほうがいいかも。今回は10.2.0.4.0を選んだ。

・ダウンロードするファイルは2つ。「Basic」と名の付いたものと、「sqlplus」と付いたもの。

・拡張子が「zip」と「rpm」とあるが、よく分からんので両方落としておく。

f:id:min117:20161015161951p:plain

インストール手順はサイトの下のほうに書いてあった。zipだと手作業でやるところを、rpmは全自動でやってくれるみたい。今回はrpmの手順でインストールする。

f:id:min117:20161015162452p:plain

ダウンロードできた。lsで確認。ファイルは4つあるけど、拡張子rpmの2つだけ使う。

f:id:min117:20161015162938p:plain

 

次に ② Instant Clientをインストールする。念のため sudo -s してスーパーユーザーにしてから作業する。

$ sudo -s

# rpm -ivh oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm

f:id:min117:20161015163233p:plain

# rpm -ivh oracle-instantclient-sqlplus-10.2.0.4-1.x86_64.rpm

f:id:min117:20161015163320p:plain

インストールが完了すると /usr/lib/oracle/Oracleバージョン/client64/lib というフォルダができている。

f:id:min117:20161015163649p:plain

 

続いて 環境変数を設定する。以下3つのコマンドを打てばいいだけ。

1つ目(LD_LIBRARY_PATHの設定)

export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.4/client64/lib:$LD_LIBRARY_PATH

2つ目(PATHの設定)

export PATH=$PATH:/usr/lib/oracle/10.2.0.4/client64/lib

3つ目(日本語の設定/UTF-8にする)

export NLS_LANG=JAPANESE_JAPAN.UTF8

 

ここまできたら、もうsqlplusが使えるはずなので SQL*Plus を起動し、WindowsOracleサーバに接続する。

# sqlplus scott/tiger@192.168.1.100:1521/MYDB01

192.168.1.100 WindowsOracleサーバ)のアドレス

:1521 Oracleが使うポート(普通は1521のはず)

MYDB01 SID名

 

無事に接続できた。日本語も正常に表示されている。

※ うまくいかないときは、たぶん環境変数の設定(赤文字)手順を飛ばしている。

f:id:min117:20161015164958p:plain

 

最後に、⑤ 次回から手軽に接続できるようにする。毎回環境変数の設定(③)をするのは面倒なので、起動時に読み込まれるファイル(.bashrc)にexport文を記述を追加しておく。

f:id:min117:20161015163828p:plain

ついでに、よく使うコマンドもaliasきっておいた。

参考

インストールとアップグレード

d.hatena.ne.jp

 

bash BUFFALOの無線LANルータをリモートからコマンドで再起動する

BUFFALO製の無線LANルータ WXR-1750DHP 買った。1万円超のグレードだけあって、性能よい。

中継器も付けて快適。

と思ったら、たまに親機(WXR--1750DHP)の通信がフン詰まることがある。再起動すれば直るけど、その都度ルータのある場所に行くのは面倒。

 

 

 

リモートで親機を再起動できるとよい。できればコマンドで。bashスクリプトにして、「コマンド一発でルータの再起動」できないか試してみる。探すと似たような事してる記事はあった。

Umbrella curlでBBR-4MGを再起動させてみる

ルータ再起動時のパケットをキャプチャしてPOST文を解析してる。解析文を、Linuxからコマンド(curl)でルータに送って再起動しているらしい。

解析例その1

f:id:min117:20161011010329j:plain

解析例その2

f:id:min117:20161011010432j:plain

 

 

ということで、流れは以下。

Linux(検証環境)にwiresharkをインストールし、キャプチャを開始する。

Linux(検証環境)のChromeから親機ルータにログインし、再起動コマンドを叩く。

ルータ再起動が終わったら、キャプチャを終了し、②のPOST文を解析する。 

LinuxCLIbash)からcurlで③のPOST文をルータに投げて、再起動できるか試す。

ーーー

まずは① から。Linux(検証環境)にwiresharkをインストールし、キャプチャを開始する。

wiresharkのインストールは前記事参照。

min117.hatenablog.com

キャプチャを開始する。CLIでコマンドからやる。LinuxfedoraIPアドレスは192.168.3.11に設定)にログインしたら、まずはネットワークアダプタを ifconfig で調べる。

$ ifconfig 

f:id:min117:20161011003818p:plain

ネットワークアダプタ名は「em1」となっていることが分かった。

これをもとに、パケットキャプチャコマンドtsharkを叩く(wiresharkというコマンドは無い)。

$ sudo tshark -i em1 -w tshark_BUFFALO.pcapng

-i ネットワークアダプタ

-w 保存形式をwiresharkで読める専用形式(pcapng)にして保存する。今回はファイル名を tshark_BUFFALO.pcapng にしてみた。

f:id:min117:20161011004848p:plain

キャプチャ開始。画面左下にはキャプチャされたパケット数(190)が表示されている。

ーーー

次に② Linux(検証環境)のChromeから親機ルータにログインし、再起動コマンドを叩く

ルータ(192.168.3.1)にログイン。

f:id:min117:20161011010455p:plain

管理画面から「詳細設定」を開く。

f:id:min117:20161011010812p:plain

管理メニューからエアステーションを再起動する。

f:id:min117:20161011011108p:plain

ーーー

そして③ ルータ再起動が終わったら、キャプチャを終了し、②のPOST文を解析する。 

ルータ再起動したので、Linuxに戻ってキャプチャを終える。tsharkのコマンドを「Ctrl + c」で終わればいいだけ。キャプチャファイルができているか ls で見てみる。

$ ls -shal | grep tshark_BUFFALO.pcapng

f:id:min117:20161011011456p:plain

できている。これを解析するのは、LinuxからGUIwireshark)でやる。fedoraのメニューからwiresharkを起動。

f:id:min117:20161010220003p:plain

メニュー「Open」から、先程のキャプチャファイルを指定して開く。

f:id:min117:20161011011921p:plain

f:id:min117:20161011012124p:plain

開くと膨大な量が出てくるので、欲しい情報だけにフィルタする。今回はFilter欄に ip.dst==192.168.3.1 && ip.proto==TCP としてみた(ルータ192.168.3.1を宛先にして、かつ、TCPを投げているパケット のみにフィルタする)。

f:id:min117:20161011011850p:plain

画面を新しいほう(下)から順に見ていって、Infoの欄で「POST」を投げているところを探してみたら、それっぽいURIを発見。

URIhttp://192.168.3.1/cgi-bin/cgi?req=fnc&fnc=%24{get_json_param(LANG,1476111126367)}

ーーー

最後に④ LinuxCLIbash)からcurlで③のPOST文をルータに投げて、再起動できるか試す。そのまえに、そもそも上記URIで本当に再起動できるのか試したいので、Macのブラウザに貼って叩いてみる。

f:id:min117:20161011013022p:plain

ダメだった。JSONが返ってきてしまう。

f:id:min117:20161011013103p:plain

パケット解析で違うところを見ているのか?POSTの投げ方が悪いのか?もう少し精査必要。

ーーー

wiresharkのフィルタ条件を見直した。

(変更前)ip.dst==192.168.3.1 && ip.proto==TCP

(変更後)ip.dst==192.168.3.1 && http

これでフィルタしてみると、1つだけ「Line-based」が解析されてるのあり。ルータの再起動(REBOOT)は1回だけだったし、解析文字列中にもREBOOTがあるから、多分これだろう。

f:id:min117:20161011014223p:plain

これをPOSTで投げれば解決!かと思ったら、URI中に sWebSessionnum とか sWebSessionid とかいう文字が…セッション内でなきゃリブートできないのか…これはcurl無理かもしれん。また時間あるときに調べる。

 

 

 

 

 

 

 

 

fedora wiresharkのGUI版をインストールするには yum -y install wireshark-gnome を使う

 

fedora20 でパケットキャプチャの必要が出た。wiresharkをインストールしたい。とりあえず yum で入れてみる。

$ sudo yum -y install wireshark

f:id:min117:20161010215603p:plain

インストールはすんなり成功したものの、GUIメニューに「wireshark」が無くて困った。起動できない。インストール先を探そうと $ which wireshark しても、そんなものないと言われる。

ーーー

以下で解消。

$ sudo yum -y install wireshark-gnome

f:id:min117:20161010215745p:plain

GUI版を使うには wireshark-gnome をインストールする必要があるみたい。メニューにも出てきた。

f:id:min117:20161010220003p:plain

ちなみに、CUI版のwiresharkは、tsharkコマンドで起動するらしい。わかりにく。

tshark -i eth0 -R 'ip.src==192.168.0.1 && not tcp && not icmp'

d.hatena.ne.jp

 

 

bash bannerコマンドでシェル画面に文字列を出すスクリプト(文字列Xamarinを出力)

 

ツイッターで見かけたこの記事。感動した。bashを使って画面に縦文字を書く「banner」コマンドの出力を、横にするワンライナー

f:id:min117:20160924205842p:plain

天才は居るもんだ。bash最高。awk最高。速攻で試してみる。

banner -w 40 'Use Xamarin' | tr '# ' '+-' | awk '{printf $0;if(length<40)for(i=length;40-i>0;i++)printf "-";print ""}' | awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(j=1;j<=NF;j++){for(i=1;i<=NR;i++){printf a[i,j]}print ""}}' FS= | tail -r | tr '+- ' "# " | sed 's/ *s//'

f:id:min117:20160924210211p:plain

マジか。できた。ちょと本気感動した。文字列引数にして好きなの出せるようにするスクリプトにする。

$ vim bannerXamarin.sh

f:id:min117:20160924210647p:plain

実行してみる。

$ ./bannerXamarin.sh 'I LOVE Xamarin!!!'

f:id:min117:20160924211046p:plain

$ ./bannerXamarin.sh 'Now Trying Xamarin!!!'

f:id:min117:20160924211122p:plain

やばいなこれ。MacBook Proに取ってある予算、Windows機に使っちまいそうだ…

Mac HDDの容量不足のときは「写真」ライブラリを外付けに移行して解消する

            

macOS Sierra になってから、Macのストレージの管理がしやすくなった。容量を食ってるファイルを確認できる。

ーーー

「このMacについて」から

f:id:min117:20160923062743p:plain

上のメニューから「ストレージ」を選んで「管理」を押すと…

f:id:min117:20160923062755p:plain

HDDを分析して容量の大きいものをピックアップしてくれる。ファイルだけなじゃく、フォルダまで対象になるのが良い。

f:id:min117:20160923062802p:plain

Yosemiteのときにできた「写真ライブラリ」アプリが大量にストレージを食ってた。ローカルに全ファイルをコピーして持つ仕組みだからみたい。これを外付けHDDに逃がす。良い記事をみつけた。

chalibrary.link

手順としては3つらしい。

①「写真Library」データを外付けHDDに逃がす

② Optionキーを押しながら「写真」アプリを起動する→ライブラリを選択

③ 写真アプリ→環境設定→「システムフォトライブラリとして使用」

ーーー

まずは①「写真Library」のデータを丸ごと外付けHDDに逃がす。記事ではFinderからコピーでやってるけど、面倒なのでコマンドで、しかも移動でやる。

$ cd /User/ユーザ名/Pictures

$ mv 写真ライブラリ.photoslibrary/ /Volumes/外付けHDD名/

f:id:min117:20160923064022p:plain

ーーー

次に② Macのキーボードの Optionキーを押しながら「写真」アプリを起動する。

f:id:min117:20160923064553p:plain

「写真ライブラリ.photoslibrary」というフォルダが見つからない て感じの注意メッセージが出た。移動したんだから当然。「ほかを開く」から選び直せばいい。

f:id:min117:20160923064800p:plain

「その他のライブラリ」から、外付けに逃した「写真ライブラリ」を選択してやる。

f:id:min117:20160923064808p:plain

f:id:min117:20160923065050p:plain

写真アプリで読み込みが始まる。

f:id:min117:20160923065120p:plain

ーーー

最後に③ 「システムフォトライブラリとして使用」を行う。

写真アプリの「環境設定」を開くと

f:id:min117:20160923065426p:plain

"写真"のiCloud機能は…と意味不明なメッセージがでるが、無視。左上の「一般」を選ぶ。

f:id:min117:20160923065450p:plain

「システムフォトライブラリとして使用」があるので押す。

f:id:min117:20160923065553p:plain

「システムフォトライブラリとして使用」がグレーアウトすれば完了。

f:id:min117:20160923065616p:plain

 

そもそも、この「写真」アプリって好きになれない。名前が「写真」なんて、一般的すぎるからGoogleに引っかからないし、ローカルに写真全部をコピーして持つ仕様も(ストレージばっか食って)どうかと思う。ジョブズならこんな作りにしなかったんじゃないの?と。