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

がべーじこれくしょん

技術系とかいろいろ

RubyによるTwitterBot作成入門資料を書いた

サークルの新歓資料として一つ書いたのですが、新歓も終わったことですし晒しちゃいます(だが未完成である)

Rubyの環境構築については結構詳しく書いたつもりなので、環境構築ガイドにでも使ってください…

hackmd.io

最終的にマルコフ連鎖を用いてツイートを学習しながら自動でつぶやくところまで仕上げたいです(願望)

ActiveRecord::PendingMigrationError の倒し方

よくあります。

99.9%がモデルの変更に伴うマイグレーション忘れです。

作業を開始する前、pullしてきた直後、必ず以下のコマンドを実行しましょう。

$ rails db:migrate

docker-composeを使ってる場合のメモ。

$ docker-compose run web rails db:migrate

Rails with docker-composeで"A server is already running."と出る問題

docker-composeで、dbwebの切り分け運用している方は多いらしい。(僕は長いことvagrantだったのでよくわかりません)

友人のプロジェクトを手伝っているときに、docker-compose upwebが立ち上がらないことがあったのでメモ。

問題の概要

docker-compose upとすると、A server is already running.というエラーが発生し、webコンテナが正常に起動してくれない。

原因

これは、何かしらの要因によって、前回のプロセスが正常に終了しなかった場合に発生すると考えられます。

docker-composeは、実行プロセスのPIDを<project_dir>/tmp/pids/server.pidに書き込み、終了時に削除するという方法をとっています。

docker-composeは、コンテナを立ち上げる際、まずこのファイルを見に行った上で、実行中のプロセスを確認します。

そのため、何かしらの要因でこのserver.pidが削除されず残ってしまった場合、docker-composeはこれを実行中とみなしてしまいます。

対処法

諸悪の根源であるserver.pidを葬り去りましょう。

$ rm <project_dir>/tmp/pids/server.pid

PIDがわかる場合は、server.pidの中で該当するPIDを削除するだけで大丈夫です。

Rails with docker-composeで'/tmp/mysql.sock'がねえよと怒られたとき

この問題、よくあるみたいなのでメモ。

1. mysql.sockがあるかどうか疑う

mysql.sockについてですが、まれに自動で作成されない場合があるそうです。そのため、dbコンテナ上であらかじめ手動で作成してから再度試してみましょう。

$ sudo touch /var/lib/mysql/mysql.sock
$ sudo chown mysql:mysql /var/lib/mysql/mysql.sock

2. config/database.ymlの設定を疑う

そもそもソケットいらない?

docker-composeを用いてweb用とdb用のコンテナをそれぞれ分けて運用している場合、config/database.ymlhostdbとコンテナを明示する必要があります。(当たり前かもしれない…)

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: password
  host: db
 
development:
  <<: *default
  database: myapp_development
 
test:
  <<: *default
  database: myapp_test

passwordの空欄を許可している場合は、passwordの値は空欄で構いません。

Macで使えるフリー回路図エディタ「Qt-BSch3V」を使ってみた

私の通っている学校の講義のなかで「実験」というものがありまして,それがまた厄介なんですよね(?)

そんな話はさておいて,今回は回路図をMacで書こうと思います.(というのも実験のレポートで回路図を用意する必要性が生じたからなのですが…)

いろいろ探した結果,「Qt-BSch3V」というものがよさそうなので使ってみます.

もともと,Win用の回路図エディタとして「BSch」というものがあるらしく,それのMac移植版ということらしいです.

使い方

ダウンロードとインストール

まずは,Vectorから「Qt-BSch3V」をダウンロードしてきます.

www.vector.co.jp

ダウンロードしてきたら,解凍してください.

解凍してできたフォルダをまるごとApplicationsフォルダに投げればインストール完了です.

起動とセットアップ

青色のBSchと書かれたアイコンがそれです.

起動すると,セキュリティの警告が出ると思いますが,お構いなく立ち上げましょう.

起動すると,以下のような画面になると思います.

f:id:musaprg:20170424013146p:plain

これが,エディタ画面です.

初期状態だと抵抗等のコンポーネントが読み込まれていませんので,コンポーネントをどこから読み込むかを指定してあげなければなりません.

メニューバーのSet→Libraryをクリックすると,Qt-BSch Set Libraryが立ち上がります.

f:id:musaprg:20170424013449p:plain

コンポーネントは,先程解凍してできたフォルダの中のLIBVというフォルダ内に入っています.

Addを押すと,選択画面が出るので,この中のライブラリファイルをすべて追加します.

以上でコンポーネントの追加は完了です.好きなだけ回路図をかきましょう!

(使い方については気が向いたら加筆します)

pip installしたはずなのにImport errorと言われた場合

環境

MacOSX 10.12.2 pyenv 20160629

方法

pip installしたモジュールをimportしようとしてImport Errorを吐かれたときは、$PYTHONPATHが正しく設定されているか確認しなければならないらしい。

pipでインストールしたモジュールのインストール先は、/usr/local/lib/python2.7/site-packages/であるのに対して、pyenvを使っている場合のパスは/Users/Hoge/.pyenv/shims/python/site-packages/になっている。これでは、pipでインストールしたモジュールが読み込まれないのもうなずける。

Pythonは、$PYTHONPATHという環境変数の中にあるパスを基本的には探索します。 そこで、$PYTHONPATHにこのpipで設定されているインストールパスを追加することで、正常に読み込まれるようになります。

$ export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages/

あとは、上記スクリプト.bashrcなり、.zshrcなりに追加することで解決です。

CentOS7.2でpwntoolsを入れるときに入れたパッケージ

環境

CentOS7.2(Vagrant上) Python2.7.5 pwntools-3.5.0

やり方

以下でいけました。vagrant上でpwnできるねやったね!

$ sudo yum install libffi-devel openssl-devel
$ sudo pip install pwntools

Pwn勉強中なので、しっかり勉強した上でオレオレライブラリを作りたい…(願望)