かゆいとこログ

あと少しなのに届かないかゆいところに効きます

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)のきほん


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

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

 

え?人が見れば一発で分かんじゃん。

とはじめのうちは思ってしまいますが、これは例が簡単すぎるからです。

 

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

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

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

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

 

以上がSVMの基本的な考え方です。
こんなにもシンプルなのに、カーネル法(別記事に多分書く)などと組み合わせて用いるとかなり強力であることが分かっており、現在でも使われています。

 

[Caption]

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

 

参考:

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

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

Galaxy S5にフォント導入〜♪

半年前くらいに格安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ファイルのみの書き換えで問題ないかと思います。