at backyard

Color my life with the chaos of trouble.

Rails5にてrails db:dropを行う方法

自分用メモとして下書きに取っておいてあったので、公開しておく。
(要は備忘録として公開しておいて、自身が困った時にあとで見返そうという魂胆)


常識かも知れないが、自分にとっては初の体験だったのでメモしておく

テスト環境として使っていたRailsの"Production環境"にて、
"rails db:drop"出来なった。

これはProduction環境で誤ってDBを壊してしまわないようにする、
Rails側で用意された防止策。

じゃーどうやって"rails db:drop"するのかというと
下記の記事が参考になった。

Rails 5に入ったDB破壊系taskの防止処理について | 日々雑記

まずは環境変数に設定する

export DISABLE_DATABASE_ENVIRONMENT_CHECK = 1

environmentにproductionを設定する

bin/rails db:environment;set RAILS_ENV=production

これでdrop出来る

rails :db:drop

ジョジョの奇妙な冒険とCaramelShip

今日ジョジョのアニメを拝見させていただいたのだが、 めちゃめちゃぶっ飛んでいて衝撃でした。

youtu.be

漫画も1巻しか読んでいない完全なるジョジョ初心者なのだが、 これはかなり好き嫌い分かれるかもしれないが、好きになる人はとことん好きになりそうな感じだと思った。 ウイスキーで言えばラフロイグと言った立ち位置だろうか。

デザインやストーリー構成も独特のセンスでぶっ飛んでいたが、 同時にダリを連想させるようなインテリジェンスなナンセンスがそこかしこに感じられて、 ただただそのオリジナリティに打ちのめされていた。。。 いやはや、これはすごい。

という、かなり今更なネタでブログを更新させてもらいました。

Caramel Shipの新作

アルバム制作も最終段階。 現在送ってもらったmasterデータの最終確認中。 かなり良い感じです。 発表したら是非ぜひ聴いてみてください。

下記はオフィシャルサイト

caramelship.net

画像サイズを1/3にするPython スクリプト

画像の比率そのままに、三分の一のサイズに収縮させるPython スクリプト
完全に書き捨て用ですが、未来の自分のためにブログに載せておく。
半年後の自分が見返したときに、もっと洗練されたものに修正してくれることを祈って。

# -*- coding: utf-8 -*-
import cv2
import os
import glob
from os import path
for i in glob.glob(path.join(os.getcwd(), "*.jpg")):
        img = cv2.imread(i)
        height = img.shape[0]
        width = img.shape[1]
        resize = cv2.resize(img, (width/3, height/3))
        cv2.imwrite(i, resize)

追記

cv2を使わずにPILを使ったバージョンを追加。

# -*- coding: utf-8 -*-
import os
import glob
from os import path
from PIL import Image
for i in glob.glob(path.join(os.getcwd(), "*.jpg")):
    img = Image.open(i)
    img.resize((int(img.size[0]/3), int(img.size[1]/3))).save(i)

Go言語で書き初め

f:id:shinshin86:20170101115058p:plain

きっかけはツイッターで呟いたとおり

ちなみにGolangは自分で書いたことはほぼほぼなく、
右も左も分からない状態なので、まずは下記のページを参考に勧めてみる。

http://golang.jp/install#introduction


なお、環境はMac環境。
Mac用のインストーラをダウンロードして、
インストールするというやり方でセットアップしていきます。

デフォルトでインストールすると、下記のパスにインストールされるようだ。

$which go
/usr/local/bin/go


とりあえずHello World.

package main

import "fmt"

func main(){
        fmt.Printf("Happy New Year!!")
}

ちなみにgoは"gofmt"とコマンドを打つことで、
goのコードを整形してくれるらしい。
コーディング規約戦争を生む前に、レール作っちゃうよ、という感じのよう。

下記のコマンドで、"gofmt"で整形したコードで上書き。

$gofmt -w hello.go

Writing Web Application

こちらのチュートリアル的なものを黙々と進めてみる。

Writing Web Applications - The Go Programming Language


上のページのまま進めると、簡単なwebアプリが出来る。

GOPATHのこと

Goを始めるにあたって"GOPATH"などの考え方が、
なんとなく躓きそうだなとか勝手に考えていたが、
ドキュメント類はわかりやすそうだったので、あとでしっかり読み込んでおく。

http://golang-jp.org/doc/code.html#Workspaces


動画付きなのはうれしいですね!

youtu.be


http://golang-jp.org/cmd/go/


ひとまず動画に習って

$mkdir gocode
$export GOPATH=$HOME/gocode

上のチュートリアルで作った簡単なwebアプリを読み込ませてみる。

$cd gocode
$mkdir -p src/github.com/{Githubアカウント名} # 私の場合は"shinshin86"
$cd src/github.com/{Githubアカウント名}

$cp -r {チュートリアルで作ったwebアプリパス(gowiki)} .

$cd gowiki
$go install

するとGOPATH直下にbinディレクトリが作られて、
下記のようになる。

# GOPATH直下にて
$tree
.
├── bin
│   └── gowiki
└── src
    └── github.com
        └── shinshin86
            └── gowiki
                ├── edit.html
                ├── test.txt
                ├── view.html
                └── wiki.go

これでコンパイルした実行ファイルを叩くとアプリが実行される

$~/gocode/bin/gowiki

でもbin側にパスを通すことで、
コンパイルしたプログラム名をコマンドから叩くだけで実行ができるようになるので、
より便利になる。

$export PATH=$HOME/gocode/bin:$PATH

下記で実行。

$gowiki

"go get"を試してみる。

実際にGithubに登録してみました。

github.com

試しに公開したコードを取り込んでみます。

さっき作ったgocodeディレクトリは一旦脇に避けて、
何もない"gocode"ディレクトリを作る。
(消してもいいんだけど、一応、ね)

$cd $GOPATH
$go get github.com/shinshin86/gowiki

$tree
.
├── bin
│   └── gowiki
└── src
    └── github.com
        └── shinshin86
            └── gowiki
                ├── README.md
                ├── edit.html
                ├── test.txt
                ├── view.html
                └── wiki.go

いいですね~!
私はまだまだペーペー野郎ですが、
すごく考えて作られている言語といった感想を持ちました。

あと、なんとなく触れにくいなと思っていたGOPATHも、
こうやって一つ一つ丁寧にドキュメント読みつつ、実行していくと、
とても便利なものであることを実感しました。

何事もそうだけど、
丁寧にドキュメント読んで、
動作を理解しつつ触れていくというのは、
何かを学習する上でとても大切なこと。
常に意識して行かなければならないと思いました。

というわけでGolang事始めでした。
書き初めっていうか、事始め、というか単なる備忘録になった。

そもそもチュートリアルなぞって、仕組みを理解するって感じで、
あまり書初めっぽくなっていないので、おせち食べたあと、
食後の運動がてらに何か書いてみようと思う。

というわけで、
2017年もよろしくお願いします!

追記 - FizzBuzz

結局書いたのは"FizzBuzz"でした。

package main

import "fmt"

func main() {
	i := 1
	fizz := "Fizz"
	buzz := "Buzz"
	for i <= 100 {
		if i%3 == 0 && i%5 == 0 {
			fmt.Printf("%d %s%s and HappyNewYear!\n", i, fizz, buzz)
		} else if i%3 == 0 {
			fmt.Println(i, fizz)
		} else if i%5 == 0 {
			fmt.Println(i, buzz)
		} else {
			fmt.Println(i)
		}
		i = i + 1
	}
}

でも、FizzBuzz一つ取っても、色んな書き方があって
そういうのを見比べるだけでも勉強になると思った次第。

今日はおせち食べて、友人と初詣行って、
友人が教えてくれたオススメの空耳アワー(at 初詣行く車内)で初笑いをさせてもらった一日でした。
あと、レイジ・アゲインスト・ザ・マシーンがめっちゃ流れていました。
すごく久しぶりに聴いたけど、彼ら、強烈でかっこいいよね!

youtu.be

2016年を振り返る

2016年振り返り

たぶん今年Hatenaブログを始めたきっかけの1つにもなっていると思うのだが
去年の大晦日、たまたまコーディグに関することでググっていた時に、
今年の振り返り的な記事をHatenaブログでたくさん見た。

振り返りというテーマで皆、ブログ書いているんだなー、
もし自分が2015年振り返り記事書くんだったら、
初めて人前でスピーチ⚫︎プレゼンをしたこと(tedを見て研究までしたんだった※)とか、
Desmondとのコラボのこととか書くのかなー、などと妄想をフワフワ浮かべつつ、
自分も久しぶりにブログを書こうと思い立ったのだった。
※これについてはそのうち研究時にまとめた資料を何らかの形で公開したいと考えている

それがはてなブログを始めようと思ったきっかけだった。

ブログを始めたことは良いことだった。
特に学ぶことがたくさんある業界で備忘録として自分が行ってきたのを残すのは、
SNSに今日の晩飯を載せるのとはまた違ったタイプの、自分のログだった。

というわけで、
前置きが長くなったが、今年の振り返りを簡単に書いていく。5年後にも思い出せるように。
ただ途中で集中力切れて、尻すぼみ気味。。ま、5年後にも2016年のことを何となく思い出せるぐらいなニュアンスで書いていきます

Rebuild

まずはRebuild.fm。
ちょうど今年の正月に初めて聞いたのだが、衝撃的だった。
ポッドキャストを通じて、クールでGeekハッカーたちの会話を聞けるのは非常に新鮮で、学びもとても多かった。
Rebuildのおかげで自身の知識量は3倍になったと思うし、エンジニアとの会話のネタにもなったと思う。
この業界にはいってから学ぶことが多い分、どういう知識を身につけていけばよいか?
また、この知識は業界の中ではどういう立ち位置になるのか?(例えば、Hubot, Docker, linker,Coffee Script etc...)
あまり掴めていなかった部分がRebuildでの会話を聞いてくうちに明確になっていった。
プログラマーやエンジニアと呼ばれる人種が
普段どういうものに触れているかを知るきっかけになったし、
どういうところで情報を得ているのかとかも知ることが出来た。
また、最近話題のTech関連のニュースに触れられて、
自然とTech業界内の流れを、なんとなくだが感じることができた。

私の場合、仕事は主にJavaで、レガシーなシステム開発に携わることも多かったので、
この流れを感じれたのはことさら大事なことであるようにも感じた。
これは大きかった。

rebuildを知ったことも大いに関係あると思うのだが、
私はこの業界に入って今年で3年目になると思うが、今年が1番学びの成長曲線が大きかった年であると思う。
だが、そもそも私の基礎能力はひどいもので、毎日く○コードばかり吐き出しているので、
もっとココらへんはストイックにやっていく必要もある。
頑張りすぎずストイック。今後の課題。

さらには様々なテック系ブログも意識的に読むようになり、より中身のある情報に触れられた。
プロジェクトの運用1つとっても、様々な手法や工夫があり、
それらがプロジェクトにどう作用するのか?考えるのはコード書くのとはまた違った楽しみがあるように感じた。
英語は相変わらず未熟だが、海外のTech系のブログも来年は積極的に読むようにしていきたい。

Ruby on Rails

あと、今年後半はRailsのプロジェクトに関わることができた。
普段からJava、そしてsvn使って開発、
でもバリバリコード書くわけじゃなく、決められた箇所をコメント入れて修正するだけ(バージョン管理してるのに!)
もしくは1日ずっとエクセルの設計書いじって、結局直した箇所は10箇所にも満たない、
顧客を納得させる設計書の書き方について半日悩んだり、それシステム開発なのか!?
みたいな感じの業務が多かった私としては、これは大きかった。

勿論こういう業務にもそれをやる理由が当然あるのだから、それはそれで納得してやっていたのだが、
自分がやりたいこととの乖離が大き過ぎて、会社側にもっと違うことがしたい、と我儘を言わせてもらったのだ。

これは結果的に良い方向に行ったし、私の要望を聞き入れてくれた会社にはとても感謝である。
また、自分は何をするためにこの業界に入ったのか?をということをちゃんと考えるきっかけにもなった1つだった。

Rubyに業務で触れたのはとても良い体験だった。
普段とは全く異なる開発手法に触れられたのも、自身の知見を広める良い体験になったし、
(TDD, GitFlow, チケット管理 etc...)
プロジェクトの運用一つでスピード感や品質の維持の仕方がだいぶ変わることを身をもって体験した。
ちなみにRubyプロジェクトは今月で終わり、来月はたぶんRubyじゃないプロジェクトに携わることになると思うが、またRubyにも業務でどんどん携わっていきたい。

音楽のこと

Desmondとは今年も継続的に音楽を作れたし、
レーベルとの絡みだったりも踏まえて様々な体験をすることが出来た。

caramelship.net

また、彼に実際に会えたのも今年だ。

また、Beaglesにてインタビューをしていただいたのも今年。
自身の音楽活動を振り返るとても良いきっかけにもなった。
とても貴重な体験ができたと思う。

note — Beagles進藤氏インタビュー(1)

買ったもの、買ってよかったもの

いまざっと頭に浮かんできたものを3つだけ書いていく

Kindle

まじで買ってよかった。
重い書籍が単行本サイズで読めるのは、本を読む敷居を限りなく下げる。
英語をすぐ調べられるのも、嬉しい。

iPod Touch

AppleMusic駆動で購入。
音楽をローカルに落として、どこでも聴けるのはでかい。

ただしApple Music自体は聴きたい日本人の曲があまりなかったのは残念。
PerfumeをAppleMusicで色々聞き返したかったんだが。。。

だが、総合的に見れば私はApple Musicを気に入っているので、今後も使い続ける予定。

おっきな水筒(Peacock ピーコック魔法瓶 ステンレスボトル 0.6L)

朝いちで作ったコーヒーをたっぷり詰め込んで職場に持っていけるので、めちゃめちゃ重宝した。
飲み口がでかいのである程度離れが必要だけど、
そんなことよりこの容量の大きさは嬉しい限り。
ジム行くのにスポートドリンク入れて持っていくとかも、来年はしたいな。

(上はAmazonリンクになります)

BrewingHeads

rebuild.fmの影響で初めた。
今年で30になったし、なにか新しいことを初めてみようと思ったのだ。

http://shinshin86.github.io/BrewingHeads/


ここら辺の経緯についてはPodcastの中でも語っているので、お時間あるときにでも聴いてみてください。

最後に

2016年振り返り記事書いていたら、結構な分量になってしまってなかなか書き終わらないので、もうここらへんで締めます。
全然総括していないし、なにより最後まで書く集中力がなかった。。。
村上春樹氏がよく小説を書くにはそれ相応の体力が必要だと言っているが、まさしくそのとおりだと思う。
ブログ書くのもコード書くのも(さらには曲書くのだって)、それ相応の体力が必要なのである。
恐らくはこの集中力切れた問題も、体力に起因するのではないだろうか。
というわけで、来年は自分のやりたいことを全力でやるための集中維持のためにも、
体力トレーニングを行っていく必要があるのかもしれない。

というわけでこの辺で締めます。
これからTensorFlowちょっと触って、マラソンしてくる予定。

ちょろっと使いたいときのMySQLメモ

全部CLI上から操作するときのメモである。
忘れっぽいのメモした

Dump取りたいとき
mysqldump -u {ユーザ名} -p {データベース名} > {生成したいDumpファイル名}.sql
# パスワードを入力
Dumpファイルをimportしたいとき
mysql -u  {ユーザ名} -p {データベース名} < {importしたいDumpファイル名}.sql
# パスワードを入力
CLIからmysqlに接続したい時
mysql -u {ユーザ名} -D {データベース名} -p

# パスワードを入力

bottleアプリケーションにflashを使いたい。あと、PyPI初登録の話。

使いたいなと思って探してみたらありました。クリスマスイブの夜のことでした。

pypi.python.org


で、下のコマンドで淹れようとしたらエラーになりました。

pip install bottle-flash
Using cached bottle-flash-0.1.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/mn/q382m6zd3jqbyxy6f4tg97140000gn/T/pip-build-c2dmcbx3/bottle-flash/setup.py", line 17, in <module>
        long_description = open('README.rst').read(),
    FileNotFoundError: [Errno 2] No such file or directory: 'README.rst'

'README.rst'がないというエラーだったので、
ひとまずファイルをダウンロードして直接参照して使用することに決めました。

でも、そのままでは現在のBottleでは使えないようでした。
動くようにメソッド内に手を加えます。と言っても大した変更はしていない。
(Bottleの仕様が途中で変わったのかな?
ちゃんとBottleを使っているわけではないので、これはあくまで想像ですが)

ダウンロードしてきた"bottle_flash.py"の下記の箇所を以下のように書き換えることで、
正常に動きました。(2016/12/24時点)

-        self.app.hooks.add('before_request', self.load_flashed)
-        self.app.hooks.add('after_request', self.set_flashed)
+        self.app.add_hook('before_request', self.load_flashed)
+        self.app.add_hook('after_request', self.set_flashed)

ちなみに私が使用していたbottleやPythonのVersionは下記の通りです。
古いバージョンだとそのまま動くのかもしれない。

Python 3.5.1
bottle==0.12.9

せっかくだから今回の修正を整えて"bottle-flash"の作者にプルリク送ろうと考えていたら、
どうやら、このリポジトリ自体が既になくなっているようでした。

今後Bottleでflash使いたいときに、
pipでinstallしてすぐに使いたいなと思ったので、
このプロジェクトをforkしてPyPIに登録することにしました。
ライセンスも引き継ぐ形でMIT。

なおforkしたリポジトリのURLは下記のとおりです。

Github

github.com


PyPI

pypi.python.org



インストール方法は、下記の通り。

pip install bottle-flash2

"bottle-flash2"って名前にしたのは、
いかにもforkしましたよ的な名前にしようと思ったのと、
なんだかゲームの必殺技っぽい語感だと思ったので。
(今のところ機能拡張などは考えていないので、名前は特に変えなくていいかなと思った)

PyPI登録時にミスしたこと

初のPyPI登録ということもあって、色々と登録時にミスをしてしまった。
どんなミスかは箇条書きで書いていく。

1."setuo.py"内のsetup()内の"name"内の名称を"bottle_flash2"という形で間違えてしまっていた。
nameの部分はpip install時に指定する名称にもなるようなので、ここを間違えるのはイタい。
(そのため最初は"pip install bottle_flash2"という名称でインストールするようになっていたわけだ。)

2.READMEを初め".md"で書いてしまっていた。".rst"でないと整形がされない。

変換方法については備忘録代わりに別記事としてメモしておいた。

shinshin86.hateblo.jp


3.TestPyPIでのテストを行えなかった。
本来PyPIに登録する前にTest用のTestPyPIで登録に関するテストなどを
行っておくべきであるようなのだが、その手順を抜かしてしまった。

TestPyPI · The Python Package Index


これには理由があって、TestPyPIへの登録を済ませて下記のコマンドを叩いたときに、
何故かログインができなくて、調べても原因を救命できなかったので、
仕方なくPyPIへの登録へ進んでしまったのだ。

python setup.py register -r https://testpypi.python.org/pypi

その後TestPyPIへの登録もできて、諸々のミスの修正前テストを行うことが出来た。
(ちなみに、ログインできなかった原因は単純に".pypirc"のパスワードをタイポしていただけだった...orz)

まあ、そういうわけで"bottle-flash2"は公開時点で
いきなりVersionが"0.0.1"から"0.0.3"にあがっている。
最初にドキュメントや記事を丁寧に見ておけば防げたであろうことなので、
これは反省ポイントである。



あと、あとでBottleのAPIもちゃんと読んどこう、この機会に

https://bottlepy.org/docs/dev/api.html

PyPIへの登録の際に参考にさせていただいた記事

ちなみにPyPIへの登録については、下記の記事を参考にさせていただきました。

qiita.com

qiita.com

qiita.com

余談

ちなみに、PyPIって"パイアイピー"って読むんですね
上司と酒飲みながらPythonのこと話すときに
"パイパイっていうPythonパッケージを管理するためのサービスがあってですね〜"って普通に話していました。
はずかしい。。。

追記(2017/1/29)

PyPIの件、普通に皆パイパイって呼んでいるみたいだったので、特に問題ナッシングそう。