ぷよぐやみんぐ日記

@nemu_souがお送りするNIT-Ok ict委員会でのぷよぐやみんぐ日記 雑記

fish shellインストールからanyenvまで on ubuntu17.04

fish shellインストールからanyenvまで on ubuntu17.04


why fish

ubuntu17.04を仮想環境で構築している時に, twitterでfishいいぞ電波を受信したのでfishを始めてみた.

Friendly Interactive SHellの略らしいのでとてもフレンドリー.

why anyenv

こちらも環境構築時に耳にしたのでやろうと思った.


fishのインストー

versionを考えないのであれば何も考えずにapt-get installできる.

$ sudo apt-get install fish

fishのカスタマイズ

fishの設定ファイルであるconfig.fish(bash.bashrcみたいなもの)は,

~/.config/fish/config.fish

にある.

proxyの設定が必要な場合は, 任意のエディタでconfig.fishを開いて環境に合わせて以下を書き込む.

set --export http_proxy http://proxy_name:port
set --export https_proxy http://proxy_name:port
set --export ftp_proxy http://proxy_name:port

anyenvのインストー

https://github.com/riywo/anyenv
上記リンクのREADMEを参考に進める.
上記の想定shellがbashなので若干違うことに注意.

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'set --export PATH  "$HOME/.anyenv/bin" $PATH' >> ~/.config/fish/config.fish
$ exec $SHELL -l   # shellの再起動

**envのインストー

今回はpyenv, goenvをインストールした.

$ anyenv install pyenv goenv

config.fishを開いて以下を書き込む.

# pyenv 
set -x PYENV_ROOT "$HOME/.anyenv/envs/pyenv"
set -x PATH $PATH "$HOME/.anyenv/envs/pyenv/bin"
# ここから下にterminalで"pyenv init - fish"と打って出たものを書き込む
### *** ###

# goenv
set -x GOENV_ROOT "$HOME/.anyenv/envs/goenv"
set -x PATH $PATH "$HOME/.anyenv/envs/goenv/bin"
set -x PATH $PATH "$HOME/.anyenv/envs/goenv/shims"
command goenv rehash 2>/dev/null

python, goをインストールする.(2017/5/10現在の最新(?))

$ pyenv install 3.6.1
$ pyenv global 3.6.1
$ pyenv rehash
$ goenv install 1.8.0
$ goenv global 1.8.0
$ goenv rehash
$ exec fish

versionの確認

$ python --version
Python 3.6.1
$ go version
go version go1.8.0 linux/amd64

参考

pythonでの入力

入力に用いる関数 input()

input関数は入力を文字列で返します.
文字列を別の型にキャストして数値として扱ったりします.
ex. pythonで文字列'14'をint型にキャストすると数値14になります.

# 文字列 str型
s = input()
>>> 入力されるよ
# s => '入力されるよ'

# 整数 int型
i = int(input())
>>> 7
# i => 7

# 実数 float型
f = float(input())
>>> 5.4
# f => 5.4

list内包表記

list型(C言語でいう配列のようなもの)
set型(集合を扱う型, 重複を省いたりする)

a_str = [i for i in input().split()]
>>> 複数の値が 入力 されるよ
# a_str => ['複数の値が', '入力', 'されるよ']
# 文字列の場合 a_str = input().split() で同じことができる

a_int = [int(i) for i in input().split()]
>>> 1 2 3
# a_int => [1, 2, 3]

a, b, c = [int(input()) for i in range(3)]
>>> 3
>>> 5
>>> 7
# a => 3
# b => 5
# c => 7

# set内包表記
a_str = {i for i in input().split()}
>>> わーい すごーい たーのしー すごーい
# a_str => {'すごーい', 'たーのしー', 'わーい'}

a_int = {int(i) for i in input().split()}
>>> 1 1 2 3 5 8 13
# a_int => {1, 2, 3, 5, 8, 13}

map

リスト内包表記を使う以外の方法としてmapを使ったものがあります.  
リスト内包表記より実行速度が速いです.

a_str = list(map(str, input().split()))
a_int = list(map(int, input().split()))

文字列の分割に用いる関数 split()

split()は標準で文字列を空白区切りで分割します.

s1 = '文字列が 区切れるよ'
s2 = 'カンマでも,区切れるよ'
s3 = '2文字以上でも, 区切れるよ'
s4 = '文字列が たくさん あっても 区切れるよ'

# 分割された文字列はlist型で返されます.
s1.split() # => ['文字列が', '区切れるよ']

# 引数で分割する文字を指定することができます.
s2.split(',') # => ['カンマでも', '区切れるよ']

# 2文字以上でも区切ることができます.
s3.split(', ') # => ['2文字以上でも', '区切れるよ']

# 文字列が複数あっても区切ることができます.
s4.split() # => ['文字列が', ' たくさん', 'あっても', '区切れるよ']

Flaskアプリケーションをuwsgi + nginxで動かしてみた

やってみる理由

去年のPCK(パソコン甲子園)で作ったアプリ「ふぁみここ」でサーバー側としてFlaskアプリケーションを実装しました.
その時は, uWSGIやnginxは名前だけ知っている状態でPCK本番もFlaskのrunメソッドで動かしていました.
※Flaskのrunメソッドは開発で使うもので, 実際にサービスを提供するためのものではないそうです.
前日夜と本番中, サーバーのメモリ使用率が爆発して数十分間サーバーにアクセスできない事態が起き, 今後それを回避するため uwsgi + nginx での動かし方に挑戦してみました.

環境構築

基本環境 : VMware, Ubuntu 16.04
インストールするもの

sudo pip3 install flask uwsgi
sudo apt-get install nginx

ディレクトリの作成

mkdir ~/python/flask/1/

個人的にできるだけ/ディレクトリ以下をごちゃごちゃさせたくなかったので
基本的にhomeディレクトリのしたで作業しました.

flaskアプリの作成

cd ~/python/flask/1/
vim app.py

Flaskの公式ドキュメントのものを使います.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

uwsgi設定ファイルの作成

flaskアプリと同じディレクトリで作業します.

vim uwsgi.ini

ここで'~‘を使って指定するとNo such file of directoryと怒られるので注意しましょう.

[uwsgi]
#application's base folder
base = /home/nemu/python/flask/1/
# /home/user_name/python/flask/1/

#python module to import
app = app
# app = app_nameを入れる
module = %(app)

#socket file's location
socket = %(base)/uwsgi.sock
#socket = /var/www/flask/tmp/uwsgi.sock
#socket = /tmp/uwsgi.sock

#permissions for the socket file
chmod-socket = 666

#the variable that holds a flask application inside the module imported at line #6
callable = app

#location of log files
logto  = %(base)/log.txt
#logto = /var/log/uwsgi/%n.log

master = true
processes = 1
vacuum = true
die-on-term = true

nginx設定ファイルの作成

sudo vim /etc/nginx/sites-enable/uwsgi.conf
server {
  listen 8080;
  error_log /home/nemu/python/flask/1/error.txt warn;

  location / {
    include uwsgi_params;
    #uwsgi_pass unix:///tmp/uwsgi.sock;
    #uwsgi_pass unix:///var/www/flask/tmp/uwsgi.sock;
    uwsgi_pass unix:///home/nemu/python/flask/1/uwsgi.sock;
  }
}

設定の確認

sudo service nginx testconfig

[fail]とでたら間違っている場所を探しましょう.
[OK]とでたら設定を読み込ませます.

sudo service nginx reload

uwsgiを動かす

flaskアプリがある場所で作業します.

uwsgi --ini uwsgi.ini

ブラウザから127.0.0.1:8080にアクセスしてHello, World!が表示されると成功です.

やってて困ったこと

  • ‘~'を使ったディレクトリ指定で怒られた
    • /home/<user_name>/ で指定した
  • .confファイルでセミコロンをつけ忘れた
    • /var/log/nginx/にerror.logというファイルがありそれを見て分かった
  • この記事ではやってないが, 参考サイト1でnginxに権限を与えているところでユーザー指定が不正と言われた
    • 参考サイト2でnginx:nginxの場所を<user_name>:<user_name>にすればいいと分かった

参考サイト

  1. http://qiita.com/kent_ocean/items/1d8e0d6e0b853b424fcf
  2. http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/

寝ても眠いのは違憲

※この記事はICT アドべントカレンダーの17日目の記事です.

※この記事はうちな~ICTビジネスプラン発表会の日に,

深夜2時に寝て朝の5時に起き夜の23時30分に帰ってきたのちに書かれています.

 

どうも眠そうな人(@nemu_sou )です.

昨日は強い一年生たちの強い記事でした.

potato0022.hatenablog.com

b-mk.hatenablog.com

rio-k827.hatenablog.com

 

四月に見たときはおもしろくてつよそうだなあ(小並感)などと思っていましたが、

みんな結果を残していてやはりすごかったですね。

 

とりあえず今年を振り返ってみる

1月 : たぶんだらだら競プロしてた.

2月 : 同上

3月 : 競プロをやるならとりあえずAOJ100問解けと教授に言われて100問解いた.

結果的には開発組としてPCKモバイル部門のメンバーになった. (ここからPCKが終わるまで競プロはほぼAtCoderしかしなかった.)

4月 : アイディア出しに苦しむ.

5月 : 同上

6月 : アイディア出しと企画書に苦しむ.

7月 : 企画書提出二週間後に結果発表、予選通過.

8月 : 頭のなさ+テストの合間ということで数学甲子園が爆発した. 夏休み突入.

9月 : (pythonわからず && サーバーわからず && ラズパイわからず)でめっちゃぐぐってたくさんコードを書いて消した.

10月 : すこしずつわかってきたものの頭のないコードをはやしまくった.

11月 :  パソコン甲子園. ベストデザイン賞をとった. latteぷろとwingぷろに出会う.

12月 : JOI予選, 20点足りずBランク. mitoの頑張りによりうちな~ICTビジネスプラン発表会で受賞.

 

おもしろかったこと.

PCK競技予選に相方(@RINPANMAN0606 )が一時間半遅刻してきた.

PCKで送る郵便物の紙を無限に書き間違えた.

PCKのハイライトがしゅりで埋まった.

PCK会場ですぐ近くに日本有数の進学校の人々がいた.

latteぷろがイケメンだった.

温泉さいこう.

くやしかったこと.

ベストデザイン賞でチーム名を呼ばれた時, 受賞した嬉しさよりもグランプリを取れなかった悔しさのほうが先に来た.

JOI予選通過まであと20点だったこと(部分点マスターになれなかった).

感想.

会津秋葉原たのしかった.

東京の駅は人が多すぎる.

python, サーバー, ラズパイの経験値を得た.

来年はまだ時間があるからといってだらけないで開発する.

JOIに落ちたけど逆に競プロモチベが今まで通りある. これは競技の強い人たちにいつか会いたくなったため.

年度末の学校の表彰でICT委員会の人々が無限に呼ばれるのが楽しみ.

 

来年やりたいこと(目標)

競プロ(PCKがんばる, 実装力, 考察力をみにつける<-これは開発にもつながる).

pythonを軸にいろんな知見を得る(小さなツールとかたくさん作ってみたい).

数学と仲良くなる.

 

まとめ

来年も, この不思議でおもしろくてつよい人たちが集まるICT委員会でたくさんおもしろいことができるようにがんばりましょう.

疲れた深夜のテンションで書いたのでとても雑な文章ですが, ここまで読んでくれてありがとうございました.

 

 今日は僕以外にも一年生が二人記事を書いてくれています. ぜひ読みましょう.

//roy-lの記事

//Shoの記事

 

明日は禁止された宗教における神の一人であるところのmitoくんです.

//mitoの記事

楽しみで夜も眠れませんね.

そりでは, ぽやしみ~.

MongoDB 操作入門

mongoDB 起動/再起動/停止

$ sudo service mongod start
$ sudo service mongod restart
$ sudo service mongod stop

mongo shellの起動

$ mongo

DBの作成・選択/選択しているDBの詳細/削除/表示

> use データベース名
> db.stats()
> db.dropDatabase()
> show dbs

collectionの作成/詳細/削除

> db.createCollection('collection名');
> db.collection名.stats()
> db.collection名.drop()

document操作

データ挿入

> db.collection名.insert({"name":"nemu_sou"})

複数データ挿入

> db.collection名.insert({name:"nemu_sou", hoby:"programming"})
> db.collection名.insert({name:"nemu_sou", hoby:"programming", age:16})
> db.collection名.insert({name:"nemu_sou", hoby:["programming", "sleep", age:16})

document表示

> db.collection名.find()

document検索の条件指定

> db.collection名.find(条件)
> db.collection名.find({name:"nemu_sou"})
> db.collection名.find({name:"nemu_sou", hoby:"programming"})
> db.collection名.find({member:["nemu_sou", "kurokoji", "mito", "luz"]})
> db.collection名.find({member:{ $in:["nemu", "mito"]}})

条件の例

演算子 MongoDB 意味 sample
< $lt 右辺より小さい {age:{$lt:100}}
<= $lte 右辺以下 {age:{$lte:100}}
> $gt 右辺より大きい {{age:{$gt:100}}
>= $gte 右辺以上 {age:{$gte:100}}
!= $ne 等しくない {name:{$ne:‘mr.a’}}
該当なし $in 要素が含まれているか ({member:{ $in :[“nemu”, “mito”]}})
該当なし $exists フィールド(列)自体の存在チェック ({name:{$exists:false}})
OR $or $orで指定する条件のいずれかを満たすものを抽出 ({$or:[{name:“nemu_sou”}, {hoby:‘sleep’}]})

1年の計は元旦にあり(・_・)

あけましておめでとうございます。

激動(O高専入学)の年2015年が過ぎ2016年がやってきました。

4月には後輩が来るなんて信じられません。

 

nemu-sou.hatenablog.com

なんでもやります。

らしいです。素晴らしいですね。

 

 

f:id:nemu_sou:20160101174956p:plain

 

アばばばばばばっばばばばばっばばっばっばっばっばばっばっばbbっばっばっばばっばbbbbbbbbbbbbbbっばあbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbっばあああああああああああああああ

 

まったくわからなぁぁぁぁい( )

ggrggr

f:id:nemu_sou:20160101180022p:plain

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

 

・・・

冬休み明けて余裕ができたらict委員会の先輩に聞きに行こうと思います。

 

 

ムリ、じゃあなにしよう

ぷよぐやみんぐクソザコジャンaojやろ

 

問題文を読む

(白目)

 

ここまでの時間わずか数秒

解けない上にやる気でないって詰んでるじゃん。。。

 

もうゃだ。まぢむり、、、ITPしょ。。。

ict委員会に入ってからの出来事、、、来年は(=゚ω゚)ノ

※この記事はICT Advent Calendar 2015 の17日目の記事です。

はじめに

皆さんこんにちは、こんばんは。今年もやっと寒くなってきて布団から出れない季節になりましたね。私は最近22時に寝て3時に起き二度寝する生活をしてます。(不本意です。眠いです)

 

mosmos-syrc.hateblo.jp

 

12期から「かわいい」と評判のC++のプロ、眠そうな人(@nemu_sou)

 

だいぶ誤弊がありそうなこと書かれてましたね。

結局JOI予選でもc++で書きはしませんでしたし。

 

※この記事はJOIの結果が出た後かなしみに包まれながら書いています。

 

もくじ的なの

  • 四月から大まかに振り返る

  • 来年やる事

  • ict委員会12期生へ

  • matome

四月から大まかに振り返る

  • 四月--高専入学、ict委員会に入るプロⅠわっほい
  • 五月--プロⅠわっほい
  • 六月--同上
  • 七月--プロⅠおわた、プロⅡわっほい
  • 八月--プロ(略)
  • 九月--お家でダラダラしてたらいつの間にか夏合宿
  • 十月--プロⅡがやっと終わる、c++の道へ
  • 十一月--パソコンにvim, cygwin君がやってくる
  • 十二月-- JOI君にメタメタにされる

夏休みにだらだらしすぎました。1か月ちょっと、大きいです。

それにしてもいろいろありました。←(まとめるの下手)

 

来年やる事

 書こうと思ったんですがやる事やりたい事いちいち書いてたらきりがないので

 興味を持ったことなんでもやります。

 プログラミング、それ以外いろんな事を知りたいです。

 

 ここで横から「筋トレしろ」と言われましたはい。やるかどうかはわかりません。

 

ict委員会12期生へ

 負けない!!!

 プロ(@kuro__koji__), 神(@mitohato14), 超ハイスペック(@mosmos_syrc),

 まなうぇい(@manae_manawey), じゅり氏(___10riridk0)

 いつも一歩先を行ってる上記の強い人たちに追いついてやる。

 ※るいこ(@___rrr1130)は言うまでもなくみんなの癒しです。

 

matome←(まとめるの下手)

 来年は

  • 明らかに無駄に過ごしている時間を減らす。
  • いろんなことを知る。やる。

 そこに立ちはだかる睡魔の壁。座右の銘は「睡魔に勝て」にでもしましょうかねぇ。

 

これで終わりです。。。

 さあ13日(日)から始まった一年生ラッシュも今日で終わりです。

 明日からはまたict委員会の偉大な先輩たちの記事が見れますね!!!!!!!!!

 

 これでICTアドベントカレンダー17日目〆とさせていただきます。

 

 座右の銘:「睡魔に勝て」 by眠そうな人