自分の分身を作りたい

理系の大学院生だよ

就活中にスタックしていた技術書を紹介する(+やりたい事)

こんにちは

 

長かった就活が終わりました。

 

先日面接が全て終了しましたので、その結果待ちの企業と、すでに内定をいただいている企業の中から最終的な進路を決定する予定です。

 

就職活動についても活動を通して色々と思うところがありましたので、後日まとめてみたいと思っています。

 

そして、就職活動中なかなか勉強する時間が作れませんでしたが、

 

技術書典に初めて参加して購入した技術同人や、

 

「就活が終わったらやろう」

 

と買いだめてしまった本がたくさんありますので、今回はそれら本たちと今やりたいことを紹介します。

 

  • 技術書典6 (4月14日@池袋サンシャインシティ 展示ホールD)
    • 購入した同人誌たち
  • コンピューター関連
    • 「30日でできるOS自作入門」
    • 「コンピューターの構成と設計(上)」 
  • やりたいこと
    • 本の勉強を管理するアプリケーションを作る(In Progress)
    • ゲームエミュレータを完成させる(In Progress)
  • まとめ

 

続きを読む

近況

お久しぶりです。3月になりました(もう半分終わる)。

 

最近ブログを全く更新できていなかったのは、シンプルに忙しかったからです。そうです、就活です。

 

これでも修士一年生なので、D進という道を選ばない限りは就職先を見つけなければならないわけで。

 

ESで困難な経験とか聞かれるけど、「今が一番困難だわ」って感じです。

 

学会発表、学会投稿、就活のトリプルパンチで3月初旬は死にそうになっていました。学会発表が終わったのですが、明日から某インターンに約1ヶ月参加するので、全く休めないという感じ。

 

多分日中はインターン、夜は学会投稿に向けてシミュレーションを回すという日々が続くのかなと。

 

やはり今が一番困難です(メンタル的に)。

 

就活のこととか後世に残さなければとは思っています。ここでは実名なので色々コンプラ的な問題があり言えませんが。

 

あとは技術的な記事はこれから全部Qiitaに載せて、こちらでは適当なことを残していこうと思っています。Qiitaの方が優秀なエンジニアの方々に意見してもらえる可能性が高いので。

 

こっちはわたくしの遊び場にしようと思います。

 

⬇︎Qiita

https://qiita.com/SoyaManabe

HUAWEI WATCH GTを1ヶ月くらい使ってみて思ったこと

f:id:daigakukabuu:20190123205823j:plain

 

はじめに

今年の初めくらいにしれっとスマートウォッチデビューをしました。 

確かに自分の周りでApple Watchを使っている人は数人おり興味はあったのですが、

Apple Watchの外見がいかにもApple Watch使っていますよなところや(100m先からでもわかる感じ)、iPhoneユーザーでないとその恩恵にあやかりづらいということ、かといってAndroid勢のスマートウォッチにあまり惹かれないといった理由で

今アツいHUAWEIユーザーの自分としては蚊帳の外だと思っておりました。

しかし12月中旬くらいにHUAWEIから新しいスマートウォッチが出るということで調べてみたところ意外と良さそうだったので買ってみたという次第であります。

購入したのはHUAWEI WATCH GTという、HUAWEIのスマートウォッチでは一番新しいモデルです。

f:id:daigakukabuu:20190123205836j:plain

 

consumer.huawei.com

 

周りからは「HUAWEI大丈夫かよww」などとご心配をいただいておりますが、情報を仮に抜き取られても困るような生き方をしていないのでなんとか生きています。

購入して1ヶ月ほど経つので思うところを述べていきたいと思います。

どんな人に向いているか

  • やけに目立つのはつけたくないという人
  • 充電にイライラしたくない人
  • 最低限の機能あればいいかなという人
  • 会話のネタが欲しい人 
やけに目立つのはつけたくないという人

見た目が近未来的すぎたり、四角かったりする時計は目立ちすぎるなど、僕のように恥ずかしがり屋な人にはおすすめな外観をしています。 

見た目がいい意味でよくあるスポーツ系カジュアルウォッチな見た目をしていますし、何より本体に厚みがないのでつけていて違和感がないと感じています。 

f:id:daigakukabuu:20190123210314j:plain
f:id:daigakukabuu:20190123205924j:plain

 盤面も種類がいくつかあり、スポーツウォッチやクラッシックな盤面もあります。

f:id:daigakukabuu:20190123205902j:plain
f:id:daigakukabuu:20190123205909j:plain

 当然ディスプレイなので夜は光って少し目立ってしまいます。腕の動きを感知して表示してくれるので映画館とかでは気をつけたいですね。もちろん光らないようにロックはできます。

充電にイライラしたくない人

他のスマートウォッチを使用したことがないので正確な比較検討はできませんが、通常使用では30日バッテリーが持つと公式では言われています。

 体感では2週間は少なくとももつなという感じです。というかこの薄さでそれだけ持つ方がすごい。

防水機能も備えているので本当につけっぱなしで大丈夫という感じです。もはや付け外しが面倒臭いので風呂入るときも付けたまま入っています。

このようなデバイスって日頃の生活を便利にする代わりに煩わしい作業(充電など)を増やすために結局ストレスになってしまうということもありますが、こいつは普通の腕時計と遜色のない使い方をできるのでとてもいいです。 

この長寿命バッテリーは独自のLite OSを採用したことによりもたらされています。これによるデメリットも若干あるので後述します。

最低限の機能があればいいという人

こいつでできることのなかで僕がよく使うのは、

  • メッセージ通知
  • タイマー、ストップウォッチ
  • 天気
  • 懐中電灯
  • スマートフォン探索機能

この辺りです。他にもワークアウトの記録や睡眠、心拍記録、コンパス、気圧計などの機能も有しています。 

メッセージについては通知機能はありますが、返信機能はありません。これは盤面でキーを打つ方がしんどいと思うので別にいらないかなあと。

タイマー、ストップウォッチ機能はgoogle homeにお願いするのといい勝負なくらい使いやすいです。

体感ではスパゲッティを茹でる時に5回に2回くらいはこっちでセットします(残りの3回はスマートスピーカー)。

スマホや普通のタイマーみたいにまずポケットから取り出してorタイマーを探してという過程がなく、常にすぐそばで使えるというのは大きいです。

あと地味に便利なのが外の天気が1秒でわかるということ。天気や気温の確認が一瞬で見れるので外出前に便利。

 

f:id:daigakukabuu:20190123205917j:plain

 

懐中電灯は盤面が白く発光します。それだけ。

スマートウォッチはBluetoothでスマートフォンと接続しているのでこちらから発信してスマホから音を出してくれます。スマホをよく放り投げる僕にとってはとてもありがたい機能。

逆にキャッシュレスな支払い機能やマイク、スピーカーなどはついておりません。

ここに関しても僕は学生で、学生証やら小銭やらと決別することはできない環境で生活しているので、財布は持たざるをえない故、あっても使わないと思います。

会話のネタが欲しい人

スマートウォッチ自体がまだ普及はしていないので珍しがられます。まあビジネスな服装にはどうしても合わないし。レザーライクなベルトもありますが盤面が大きいのでスーツに合わせるには少し無理があるなと僕個人的には思いました。

まあどちらかというとHUAWEIユーザーであることの方がネタにされます。 

 

逆張りの精神ですね。

 

 

ここがだめ!

もちろんいいところだけではないです。個人的に残念なのは独自のOSを使っているが故に拡張性に乏しく、アプリケーションも初期にインストールされているもののみとなります。これからどうなるのでしょうね。

個人的には盤面の絵を自作できるやるとかやってみたかったのですがwearOSではないので使えません。残念! 

まとめ

思ったよりも生活に馴染んでいます。というのもスマートウォッチを便利に感じる理由は様々な機能が手元でできるからなんですよね。つまりスマートウォッチにおいてバッテリー持ちというのが非常に重要な要素であり、毎日毎日充電しなければならないようなものではお話にならないよということを、購入を迷われている方にはお伝えしたいです。

自分のユースケースを考えるとかなりコストパフォーマンス考慮してもよかったなと思っています。

 

f:id:daigakukabuu:20190123205849j:plain

 

個人的見解としては、スマートスピーカーよりは生活に溶け込まれています。

「Hey, Google」にいまだに慣れないので。

LiteOSはHUAWEIがIoT領域のために開発したOSのようですが、時代が時代なだけにどれだけ開発のコミュニティーが大きくなるかなんとも言えないですね。

 

developer.huawei.com 

パートナーもだいたい中国の会社だからなぁ。

 

 

NginxでBasic認証かけて404エラーが出る

Basic認証

簡易であり、ほぼ全てのwebサーバー、ブラウザで使うことができる。 アカウント名とパスワードを繋いでBase64でエンコードして送る。このためパスワードを通信中に抜き取られてしまう可能性がある。

Basic認証 - Wikipedia

Basic認証を実装

DjangoにもBasic認証の機能があるようだが、Nginxで特定のディレクトリに認証機能を実装することにした。

環境

  • AWS EC2サーバー
  • Python(3.6.8)
  • pyenv(1.2.9)
  • Django(2.1.5)
  • gunicorn(19.9.0)
  • nginx(1.14.1)

ここまでの環境構築は前の記事を参考にしてください。

www.so-hack.com

# htpasswdコマンドでBasic認証するためのツール
$ yum install httpd-tools
# アカウント、パスワードを登録
$sudo htpasswd -c /etc/nginx/.htpasswd [account name]
New password: 
Re-type new password: 
Adding password for user [account name]

次にnginx.confをいじります。

今回はhttp://[IPaddress]/hoge

の領域に認証機能を与えようと思います。

nginx.conf
server {
        #listen       80 default_server;
        #listen       [::]:80 default_server;
        #server_name  localhost;
        #root         /usr/share/nginx/html;

        listen  80;
        server_name     [IPaddress];
        client_max_body_size    4G;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://app_server;

                location /hoge/ {
                        proxy_pass http://app_server; ⇦これを忘れて小一時間苦しんだ。
                        auth_basic "secret derectry";
                        auth_basic_user_file "/etc/nginx/.htpasswd";
                }
        }

いじったのはlocation /hoge/の括弧内です。

今回嵌った点は2つありました。1つはBasic認証を実装したい領域(/hoge)について記述するlocation /hoge/location / {}の括弧内に記述しないといけないということ。

2つ目はBasic認証をするために必要なauth_basicと.htpasswdのパスを示すauth_basic_user_fileだけでなく、gunicornを使っているのでproxy_passも/hoge/内で記述しないといけないということ。

またおまえね。

参考にした記事ではWSGIを使ってなかったので、このことに小一時間気づかず。ずっと404Errorを吐き出していました。

認証機能のことについてもですが、WSGIについてもっと勉強しないとダメだなあ。

AWSのサーバーにDjangoのwebアプリ環境を構築(Nginx, gunicorn)

EC2にDjangoの環境を構築してIPアドレスでアクセスできるようにするところまでのメモ

構成

  • AWS EC2サーバー
  • Python(3.6.8)
  • pyenv(1.2.9)
  • Django(2.1.5)
  • gunicorn(19.9.0)
  • nginx(1.14.1)

Nginx

Nginxはオープンソースのwebサーバーです。他にはapacheとかありますね。

クライアントとサーバー内のwebアプリを繋いでくれます。

NginxとApache HTTP Serverの違いメモ - Qiita

gunicorn

gunicornはWSGI(Web Server Gateway Interface)の一種です。 WSGIを簡単に説明すると、NginxはPython言語を直接やりとりできないので、Pythonによって書かれたフレームワーク(Flask, Djangoなど)とNginxの架け橋をしてあげている存在と言えます。

第1回 WSGIの概要:WSGIとPythonでスマートなWebアプリケーション開発を|gihyo.jp … 技術評論社

Nginxのインストール

$ ssh -i [root/to/key] ec2-user@[your-ip-address] #まずはssh接続

#以下EC2サーバーでの作業
[ec2-user@ip-***-***-**-* ~]$ sudo su -
[root@ip-***-***-*-* ~]# yum install nginx

Python,pyenv,Djangoのインストール

[参考]

EC2サーバにPython3環境構築 - Qiita

$ yum install git -y

#pyenvをインストール
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

#依存環境をインストール
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel -y

#Pythonをインストール
$ pyenv install 3.6.8
Downloading Python-3.6.8.tar.xz...
-> https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
Installing Python-3.6.8...

$ pyenv global 3.6.8
$ pyenv rehash
$ python --version
Python 3.6.8

#Djangoインストール
$ pip install django

結局pyenvとpipenvどっちがいいんですか?教えてえらい人

gunicornでDjangoを走らせる

[参考]

Djangoの既存プロジェクトをec2にデプロイ - Qiita

$ django-admin startproject hoge

#gunicornをインストール
$ pip install gunicorn

#wsgi.pyのあるディレクトリ上で実行
$ gunicorn hoge.wsgi --bind=0.0.0.0:8000

これでWSGIを経由してDjangoのアプリが実行されました。

Nginxを経由させる

僕がはまったのはここでした。 クライアントとWSGIの間にNginxをかませるためにnginx.confをいじります。 EC2サーバー上だと /etc/nginx/nginx.confというパスになります。

#nginx.conf
upstream app_server {
        server 127.0.0.1:8000 fail_timeout=0;
    }

    server {
        #listen       80 default_server;
        #listen       [::]:80 default_server;
        #server_name  localhost;
        #root         /usr/share/nginx/html;

        listen  80;
        server_name     yourIPaddress;
        client_max_body_size    4G;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://app_server;
        }

いじるのはこの辺りです。 upstream app_serverは新しく付け足しました。 server{}内のserver_nameはEC2のIPアドレス(あるいはドメイン)を入れます。

そしてlocation{}のproxy_pass app_serverを参照していますね。 ここでずっとはまっていました。

僕はここでappserver{}にEC2のIPアドレスをずっと入れていたのです。

proxy_passというのはnginxがサーバー内で参照する場所(今回ではgunocornがDjangoを走らせているポート)を示してあげるのでここでは8000番ポートをさしてあげるのです。

最後にアプリを起動

$ gunicorn awstask.wsgi --bind=0.0.0.0:8000 -D

Dオプションでデーモン化(常に起動)させます。 8000番ポートにバインドしていますね。

さっきのproxy_passとここで繋がるのね

(やっとわかった顔)

ちなみにgunicornを止めるときは

gunicornとつく実行中プロセスを探す
$ ps ax|grep gunicorn
 2979 ?        S      0:00 /root/.pyenv/versions/3.6.8/bin/python3.6 /root/.pyenv/versions/3.6.8/bin/gunicorn awstask.wsgi --bind=0.0.0.0:8000 -D
 2982 ?        S      0:00 /root/.pyenv/versions/3.6.8/bin/python3.6 /root/.pyenv/versions/3.6.8/bin/gunicorn awstask.wsgi --bind=0.0.0.0:8000 -D
 2996 pts/5    S+     0:00 grep --color=auto gunicorn

#停止
$ kill 2979

[参考]

Django で gunicorn の起動と停止のメモ - 牌語備忘録 -pygo

まとめ

  • nginxでいじるのはnginx.confファイル。
  • proxy_passはgunicornがDjangoを起動させているポートを参照させてあげる。
  • 環境は汚さないようにしよう

雑。

Raspberry Pi 活用 ~とりあえずおうちクラウド化してみる(ファイルサーバー)~

おうちにある眠れるラズパイとLinuxPCを活用したいというところから、年明け早々ラズパイサーバー化計画を粛々と進めております。

そこで今回はラズパイとLinuxPCを接続して、ラズパイをファイルサーバーにするところまで紹介したいと思います。

  • 使用するもの
    • ハード
    • ソフト
  • PCとラズパイをSSH接続する
    • SSHとは
    • OpenSSHの準備
    • 公開鍵認証方式の設定
  • 外付けHHDのマウント
  • ファイルサーバーを作る(Samba)
    • Sambaのインストール
    • Sambaがデーモン(常駐プログラム)として稼働しているかを確認
  • おまけ
  • 購入リスト
続きを読む

低スペPCにLinux(Ubuntu)をインストールする

動機

  • 家にあるラズパイを活用したい
  • ラズパイをwebサーバーにしてwebアプリを公開してみよう
  • 古い低スペPC発掘
  • Linuxいれてサーバー構築の勉強をしてみよう←いまここ
続きを読む