読者です 読者をやめる 読者になる 読者になる

physickのまったり生活

まったり工学系のお話をしたいですね

SSH認証における公開鍵の設定

自分用メモ

qiita.com

↑これ見てやれば楽勝(だと思う。)

注意点は、公開鍵と、sshディレクトリのpermissionだろうか。

基本的な流れは

1.ローカルで公開鍵と秘密鍵のペアを作成。

2.公開鍵を対象サーバーの ~/.ssh/authorized_keys に追記。

$ cat id_rsa.pub >> authorized_keys

とすればおk

3.後は

$ ssh user@host

でアクセスすれば自動的にパスワード無しでログインできる。

 

続き!

一人で複数サーバーにアクセスするような人は、

方法1 : 先ほど作った公開鍵を使い回す。(この公開鍵を異なるサーバーにも追記)

方法2 : 複数の秘密鍵/公開鍵ペアを作成。使用する秘密鍵は、

$ ssh -i ~/.ssh/秘密鍵1 user@host1

$ ssh -i ~/.ssh/秘密鍵2 user@host2

ってすることで使い分け可能。(だけどめんどい)

 

そこで、これ↓

www.ellinikonblue.com

~/.ssh/config に適当なホスト名と秘密鍵の対応を記載しておくことで解決できる!

 

ちなみに自分はshellスクリプト使ってsshをラップしたシンプルなコマンド作ってる。

コマンド作ると、

1. よく使うホスト一覧を表示できる。(物忘れ激しい人には良いよね。)

2. よく使うホストに簡単にアクセス(当然、IPアドレス打ち込んだりする必要全く無い。)

等のメリットがある。数行でかけるからオススメ。

 

【感動する最新技術】〜その1〜

Technology

さーーーーて、寒い季節になってきましたねぇ。

筆者は最近部屋から出ない生活が続いています。

まぁ冬にはありがちですよね。今冬眠に入るタイミングを伺っているところです。

 

さぁ!今回は(完全主観的)感動する最新技術を紹介していきまーす。

 

1.Google Project Soli とそれを応用した物体認識

www.youtube.com

工学系大好きマンならしってるかもしれません。

GoogleのProject Soli.

動画自体は2015年のものですが、まだ巷で見かけるものではありませんね。

はじめてこれを見た時、めっちゃ色んなことに応用できそうや!!

と思ったものですが、つい最近、その驚くべき応用法が紹介されました。

 

www.youtube.com

これには度肝を抜かれましたね。。。

これもかなりビジネスチャンスのあるシステムではないでしょうか。

こんなの使って一発当ててみたいもんですね笑

 

2.キャノンによる自由視点技術

www.youtube.com

いやウィイレやん。

っていうのが最初の感想ですね笑

ここまでくると工学の偉大さをしみじみと感じます。うん。エンジニア万歳。

何台のカメラを使って撮影しているのか等の詳細情報が分かりませんが、

ここまで綺麗にできているとなると、やっぱり不思議です。

 

初めにサッカーコートの白線、ゴールの位置と大きさを知っておいて、

3次元のVirtualなサッカーコートを作り、各選手に対応する人間のモデルを画像から判断した適切な位置に適切な体勢で配置して、テクスチャを貼り付ける的なことを行っているんですかね。

言葉で言うのは簡単ですが、実際に作るのはかなり難しように思います。いや〜、すごいな。

3.Boston Dynamics の Spot mini とか

www.youtube.com

Boston Dynamicsの動画にはいつもワクワクさせられますね。

まさに次世代のロボットって感じかな。

これも目からウロコでしたね。ただ、軍事ロボットに応用されるとか考えてしまうと怖すぎて夜も眠れなくなります。

一昔前の、ロボットの動作を全てプログラミングするという考え方から、機械学習とか進化計算の手法を取り入れて、最適な動作に必要なパラメータを学習させているのではないかなと思います。

諸説あるようですが、もし完全に制御理論で攻めてここまでヌルヌルした動きができているっていうならトリハダものです。(そうじゃなくても十分すぎるくらい凄いですが。)

一時はGoogle傘下にいましたが、売却を表明しているそう。TOYOTAが買うとかいう噂もあるので、今後の動向から目が離せません。

 

以上、最新技術紹介でしたー!!

ではまた!

Emacsに便利な補完機能jediをインストールする

Ubuntu emacs

さて、ドキドキしながらもメインPCをUbuntuWindowsデュアルブート化した筆者です。

研究室に配属されてUbuntuをメインで使うようになってきました。基本Emacsでコーディングするのですが、自動補完機能が標準ではついていないので、今回は補完機能jediを導入します。

下には簡潔にやり方のみを書きますが、軽く半日はハマっていました。。。

こういう、インストールでつまずく問題はいつの時代になったら解決するのやら・・・

 

まずは、MELPAを導入。"MELPA"とはEmacsの便利なパッケージ管理機能です。

Emacsの設定ファイル(自分の場合~/.emacs)に

(require 'package) ;; You might already have this line
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))
(when (< emacs-major-version 24)
  ;; For important compatibility libraries like cl-lib
  (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(package-initialize) ;; You might already have this line

を追記します。(参考:http://melpa.milkbox.net/#/getting-started)

これで、MELPAのパッケージを簡単にインストールできるようになります。

 

次にjediをインストールします。

emacsを再起動して、

M-x package-list-packages

と入力。(これが現れない場合は上の設定が上手く行っていない。)

しばらくするとパッケージのリストが現れるので、

C-s jedi

でjediを検索、選択してインストールします。(これだけではまだjediを使い始められないので注意)

 

次に、jediをインストールしたフォルダにload-pathを通します。

emacsの設定ファイルを開いて、

(setq load-path (cons "~/.emacs.d/elpa" load-path))

を追記。("~/.emacs.d/elpa"となっている部分は、jedi等のフォルダが格納されているディレクトリとします。melpaで行えばこうなっているはず。)

さらに、jediモードのトリガーを設定。

pythonで使用する場合は以下をemacsの設定ファイルに追記。

(add-hook'python-mode-hook'jedi:setup)

(参考:http://tkf.github.io/emacs-jedi/latest/)

Emacs再起動後、

M-x jedi:install-server

と入力して、めでたく終了です。

ちなみに、virtualenvがないと上のコマンドが上手く機能しないので、入れておきましょう。

 

※上の手順で上手く行かない場合・・・

環境によっては上の手順で上手く行かない場合があるようです。

その場合に試すべき手順を紹介します。

まず、~/.emacs.d/elpa/jedi-0.2.7/等の、jediのディレクトリまで移動し、

必要な場合は、

$ virtualenv env
$ source env/bin/activate

でvirtualenv環境をつくってから、

このディレクトリ(~/.emacs.d/elpa/jedi-0.2.7/等の、jediのディレクトリ)で

$ pip install jedi epc

を実行します。環境によって、pip2またはpip3も試してみましょう。

これで上手く行く場合があります。

 

 

 

UbuntuでのVPN構築

自宅から学内LANに入るため、さぁ〜てUbuntuVPN接続を設定しますか。

と、ものの数分で終わらせる予定だったのですが…

結果的に1時間くらいもがく羽目になりました。

ちなみに Ubuntu 16.04 LTS 64bit です。

 

まず、学内ではCiscoVPNを使っているので、CiscoVPN接続ができる環境を整えなければなりません。

 

まずはTerminalで

$ sudo apt-get install vpnc network-manager-vpnc

と入力します。

他のwebサイト等を見た限りではこれだけで、

システム設定→ネットワーク→左下の+ボタン→VPN作成

を押してやることでVPNの種類選択

f:id:physickelback:20161112193710p:plain

がでてくるからCisco VPNを選択して設定すればええんやで〜

ってかいてあったりするんですが、実際やってみると・・・

標準のPPTPしかないんやけど・・??

さらに、再ログイン、再起動してみても状況は変わらず、ここでかなりハマりました。

いろいろ試行錯誤しつつ、やっとたどり着いたページがこれですね↓

bugs.launchpad.net

僕の場合、まだ

$ sudo apt-get install vpnc network-manager-vpnc-gnome

を試してなかったんで、これを実行してやると…

f:id:physickelback:20161112194209p:plain

ふぉぉぉぉぉ!!
良かったぁ。

これでもうまく行かなかった方は上に記したページにあるように、

$ sudo apt-get install network-manager-gnome network-manager-pptp network-manager-pptp-gnome network-manager-iodine network-manager-iodine-gnome network-manager-openconnect network-manager-openconnect-gnome network-manager-openvpn network-manager-openvpn-gnome network-manager-strongswan network-manager-vpnc network-manager-vpnc-gnome 

を実行して、network-manager関連のソフトウェアをまるごと全部インストールしちゃってみるとうまくいくかもしれません。

 

また、所属機関から指定されているpcfファイルがある場合は、Cisco VPNではなく、"保存したVPN設定をインポートする"を選択します。

pcfファイルのdescriptionに日本語とか入ってるとerrorが出てしまうことがあるので、エディタ等で修正しておくことをオススメします。

 

 

SVM(Support Vector Machine)のきほん

Machine Learning 人工知能 お勉強


f:id:physickelback:20161017225714j:image

ここのところ人工知能が大ブームとなっておりますね(*^^*)

自分も最近、自然言語処理の勉強を始めたところです。

 

何?自然言語処理って言葉知らない?

 

簡単に言うと、人間の言葉を使ってコンピュータとやり取りすることを可能にする技術分野ですかね。

対話型で言ったらiPhoneのSiriとかMicrosoftのりんなちゃんとかがいますよね!

将来的には今よりも数段レベルの高い対話型のAIが登場しているでしょう。

それらの鍵となっているのが自然言語処理なんです。

 

ここでは、自然言語処理はじめ、人工知能分野において広く使われるSVM(Support Vector Machine)について勉強していきましょう。

 

1. SVMが対象とするタスク

SVMは2値分類を行うタスクに対して用いることができます。

2値分類というのは、与えられた各データに対して、そのデータが正クラスに属すのか負クラスに属するのかを判別するタスクです。

ここで、以下の問題について考えてみましょう。

 

【例】:今日の平均気温と平均湿度をもとに明日の天気を予測したい。

ここでは、正クラスが晴れ、負クラスがそれ以外に対応するものとします。

 学習データ:
f:id:physickelback:20161017231906j:image

※あくまで概念を理解するための記事ですので、値はテキトーです。

上のような学習データを学習した後、今日の平均気温と平均湿度が15度、40%だったとします。

さて、明日は晴れるでしょうか?

 

 2.SVMの考え方

まずはSVMの考え方を知るために、上の学習データをグラフにプロットしてみましょう。

すると、以下のような図が得られます。

f:id:physickelback:20161018002016j:image

(注)正クラスが晴れ、負クラスがそれ以外に対応しています。

 

人間であれば、左下の方に打たれる点は晴れ(正クラス)となり、

右上の方の点は負クラスとなっていることが直感的に分かるでしょう。

今日のデータ(15度、40%)をプロットしてみると…

f:id:physickelback:20161018210106j:image

 

今日のデータは正クラスに分類され、明日は晴れるということが直感でわかってしまいますね。

ではこれをコンピュータに判断させるにはどうしたら良いのでしょうか。

 

答えは案外シンプルで、

f:id:physickelback:20161018210846j:image

このように、正クラスと負クラスの間に分離直線を引かせて、点がそれよりもどちら側に属しているかで判別してやればいいんですね!

ここで、この直線をどう引かせるかが問題となってきます。

この直線の引き方をうまく定めたのがSVMというアルゴリズムなんです。

皆さんは、以下の3種類の分離直線、どれが一番うまく機能すると思いますか?


f:id:physickelback:20161018211446j:image

 

そうです。真ん中ですよね。

左右のように、片側に寄ってしまっていると分離直線付近の点に対して正しいクラス分けができない気がします。

SVMはこの直感に基づいて、分離直線と各クラスの点とが出来る限り離れるように直線を引くんです。

これをマージン最大化と呼んでいます。

 

 

ここまで読んできたけど、SVMってショボくね?

だって上の問題とか人が見れば一発で分かんじゃん。

と思ったそこのあなた。

まだSVMを分かっていませんね。

 

今回例に挙げたのは平均気温と平均湿度という、たった2つのパラメータから明日が晴れか否かを推定するという問題でしたが、パラメータは2つに限らず、3つ、4つ、いや、原理的にはいくつあっても良いのです。

例えばパラメータが3つの場合は、3次元座標にプロットされる学習データに対して分離平面を考えます。

また、4次元以上の場合は超平面による分離を行うことになります。

(ここまで"分離直線"という言葉を使ってきましたが、直線になるのは2次元の場合のみですので、一般的にはこのように"分離平面"といいます。) 

 

ということでSVMの概念、分かって頂けたでしょうか?

お疲れ様でした!

概念を理解したところで今回はオシマイです〜。

 次回は「マージン最大化」を数式に落とし込んでより具体的な解説をしていきます(๑•̀ㅂ•́)و✧

 

[Caption]

後半部分でSVMは最強であるみたいな書き方しましたが、SVMは基本的にそのままでは線形な問題にしか適用できないという大きな欠点があります。これについての詳細はまた別の記事に書こうと思います。

 

参考:

言語処理のための機械学習入門

https://www.amazon.co.jp/dp/4339027510

Galaxy S5にフォント導入〜♪

android

半年前くらいに格安SIMデビューしようと購入したGalaxy S5ですが…


f:id:physickelback:20161005204045j:image

どぅはっwww

ルート化されてるやんけw

ということで、今までiPhoneでまったりスマホユーザーだった僕が突然rootedスマホっていう過激な環境に置かれてしまったわけですね。

 

まぁ折角ですから色々遊んでみたいということで、まずはツイッターとかでたまに見る変な顔文字

 └(՞ةڼ◔)」トカイッテミチャッタリィィィ!!!!
▂▅▇█▓▒(’ω’)▒▓█▇▅▂
ŧ‹"ŧ‹"ŧ‹"ŧ‹"(๑´ㅂ`๑)ŧ‹"ŧ‹"ŧ‹"ŧ‹"

↑こういうキモいのね。

を表示できるようにしていきたいと思います。

 

まず、フォントを導入していない状態だと、対応していない文字が豆腐になってしまいます。


f:id:physickelback:20161006171216j:image

(http://a.excite.co.jp/News/bit/20121030/sum_E1351498844494.html)

 

Tofu destroyerなる、このような文字を表示してくれるアプリもあるようですが、いちいちアプリの指定欄にコピペで貼り付けなければならないので結構大変です…

 

 

0. 準備

必要なものは以下の通りです。

●root化されたスマホ

●ファイルエクスプローラー(今回はESファイルエクスプローラーを使用。)

 

1. フォントデータを入手

Google playにて「ツイやつγ font」をインストールします。

 

f:id:physickelback:20161005204316j:image
左上のやつね。

続いて、フォントデータを抽出していきまーす。

ファイルエクスプローラーで

/data/app/com.suruyatu.twitter.font...(略)

を開く。

因みにrootedな環境でないと…


f:id:physickelback:20161005214634j:image

dataフォルダの中身が丸ごと見えません。

フォルダの中にあるapkファイルを長押し、好きな場所に解凍します。


f:id:physickelback:20161005211542j:image

解凍されたフォルダを開いて…


f:id:physickelback:20161005211440j:image

assetsフォルダ内にあるフォントファイル(拡張子ttf)をコピーし、/system/fontsにペーストします。


f:id:physickelback:20161005211752j:image

 こんな感じになってればオッケー!

コピーしてきたフォントファイルの権限を644(つまり画像の通りrw-r--r--の状態)にすることを忘れずに!!

これを忘れる人多いです。(知らんけど多分そう。)

因みに、権限は長押ししてプロパティから変更できます。

 

 これで終わりだったら嬉しいのですが、他にもいくつか変更すべき事柄がありますね。

めんどくさいね。うん。

 

2. ファイルの書き換え

まず、

/system/etc/fonts.xml

を開きます。

やるべきことは、このファイルの最後の行に

画像内に示した3行を追加すること。


f:id:physickelback:20161005214117j:image

これでOSがフォントの存在を認識してくれます。

 

さらに、

/system/etc/fallback_fonts.xml

を開き、画像のように追記を行います。

 
f:id:physickelback:20161005214128j:image

これでめでたく終了です!!!

(system_fonts.xmlは書き換えなくて良いの?と思った方は下をお読みください。)

 

豆腐が解消されましたねー!ふぅぅーー!

やっぱroot化端末って楽しいですね!(怖い面もあったりするけどね)

 

【考察】

そもそも、fallback_fontsの書き換えも必須ではありませんが、フォントデータのリストをfonts.xmlに記述するという約束は比較的新しいもののようで、古いアプリなどに対応するためにはfallback_fontsの設定が必須のようです。

参考程度に、fonts.xmlの冒頭文を載せておきますと…

 

fonts.xml
NOTE: this is the newer (L) version of the system font configuration,
supporting richer weight selection. Some apps will expect the older
version, so please keep system_fonts.xml and fallback_fonts.xml in sync
with any changes, even though framework will only read this file.

All fonts withohut names are added to the default list. Fonts are chosen
based on a match: full BCP-47 language tag including script, then just
language, and finally order (the first font containing the glyph).

Order of appearance is also the tiebreaker for weight matching. This is
the reason why the 900 weights of Roboto precede the 700 weights - we
prefer the former when an 800 weight is requested. Since bold spans
effectively add 300 to the weight, this ensures that 900 is the bold
paired with the 500 weight, ensuring adequate contrast.

 

ということで、ここにはfontsに加えてfallback_fontsとsystem_fontsを書き換えなさいと書かれているのですが、system_fontsの冒頭分には、ここ(system_fonts)にないフォントはfallback_fontsから探してくるで〜と書かれているので、上記のように2ファイルのみの書き換えで問題ないかと思います。