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

かゆいとこログ

あと少しなのに良く分からないものを解説したいね

UbuntuにApache導入してWebサーバ立てるまでのかゆいところ

Apache導入、CGIスクリプトの作成とファイルアクセス

ホームディレクトリ配下でCGIファイルとかの更新を行う。

そもそも、なぜApacheが必要なのか

WebブラウザにHTML等要求されて、応答を返すなどという仕組みは(当たり前だが)本来備わっていないので、これを可能にするApacheというWebサーバーを立てることが必要。

CGIってなにそれ?

CGI(Common Gateway Interface)は、ウェブサーバ上で好きなプログラムを動作させる仕組み.

名前のとおり、単なるInterfaceなので、様々な様々な言語で実装されている. Pythoもその1つ.

 

実行環境?

Ubuntu 16.

Apache/2.4.18

 

aotake-rail.raindrop.jp

↑これを参考にした。ホームディレクトリ直下で

$ mkdir public_html

及び

$ chmod 770 public_html

として、(groupのpermissionは7にしないとだめなはず。)

続けて、

$ a2enmod userdir

ユーザーディレクトリの指定かな?

$ a2enmod cgid

CGIを使用可能にする。

を入力。

このあと、URLの先にもあるように、

mime.conf を編集して、.cgi の拡張子を持つファイルを cgi-script として処理するよう設定する。userdir.conf を編集して、public_html ディレクトリに ExecCGI Option を付加する。

(これをやらないと、cgiファイル読むときに、web-serverが、これXMLだわwwとか言って読みだしてエラー吐いて死ぬ) 

を行ってから再起動して終了。

 

Permissionについて

普通にCGIからサーバーのファイル触ろうとするとPermission denied食らう。
$ chmod 777 [FILE] ってしちゃえば行けるが、危険すぎる。
Apache2の場合はwww-dataなるuserがapacheを動かしているということを知る。

以下のサイトとか参考にする。Stack overflowのやつはわざわざvarwwwusersとかいうグループを追加しているが、必要ない。(下記参考)

stackoverflow.com

qiita.com

$ less /etc/apache2/envvars

とすることで、apache環境変数覗ける。
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
と記されており、userもgroupも"www-data"になっていることが分かる。

よって使用しているディレクトリ(今回cgiを書いているのは~/public_html/以下である)に対して、

$ sudo chgrp -R www-data ~/public_html

と入力してやる。(~/public_html以下のファイルを、グループ"www-data"の所有物にする. -R はRecursive(再帰))
次に、

$ sudo chmod -R 770 ~/public_html

としてやることで、適切なPermissionとなり、apacheがpublic_html配下のファイルにアクセスできるようになる。

デフォルトシェルをbashにしたい

screen実行時にbashになっていない場合もこれで解決。

現在のシェルを確認。

$ echo $SHELL

もしくは

$ cat /etc/passwd | grep [ユーザー名]

これで何も表示されない場合は、default shellが設定されてない。

 

設定するには

1. /etc/passwdを直接編集(やったことないしおすすめしない)

2. chshを使う

$ chsh [ユーザー名]

これで対話式にシェルを変更可能。-sオプション使っても良いけど。

※一度ログアウトし直さないと反映されないので注意!

Dynamic Programmingについて

動的計画法(DP, Dynamic Programming)について

最近やたらと動的計画法という単語を聞くので、基本をまとめておく。

動的計画法とは?

動的計画法(どうてきけいかくほう、英: Dynamic Programming, DP)は、計算機科学の分野において、アルゴリズムの分類の1つである。対象となる問題を複数の部分問題に分割し、部分問題の計算結果を記録しながら解いていく手法を総称してこう呼ぶ。
引用:Wikipedia

え?それって分割統治法じゃない?
同じものなのかな?

分割統治法と動的計画法の違いについて

アルゴリズムを設計する際には、まず全体をいくつかの小問題に分解して、その一つ一つを解いていくことにより全体の解を得る方法があります。このような手法を、分割統治法(divid and rule)と言います。

この方法は、ある程度複雑な問題を解く際には妥当な方法であるような感じがします。しかし、現実問題として、この方法には大きな欠点があります。なぜなら、実際に運用してみると、同じ問題を何回も解かなくてはならないようなケースに遭遇するからです。

そこで、「実際に必要とされるかどうかはわからないが、必要になりそうな小問題をあらかじめ解いておいて保存しておき、必要なときに取り出して使う、というアプローチも存在します。これが動的計画法(dynamic programming)の考え方です。

 

引用:

sevendays-study.com

納得。したつもり。
また分からなくなるかもだけどそのときはまた調べよう。

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〜

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

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

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

 

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

 

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をインストールする

さて、ドキドキしながらもメイン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が出てしまうことがあるので、エディタ等で修正しておくことをオススメします。