ぶろぐめんどくさい

技術系の記事と漫画レビューが入り混じった混沌

Bash on Ubuntu on WindowsでRails覚書

railsの導入で引っかかったところをまとめる。

参考

ここ->http://qiita.com/chimame/items/8130aa2c07a152a865b1を参考にrailsを導入。

サーバ起動時にエラーが発生

$ bundle exec rails s
=> Booting Puma
=> Rails 5.1.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Exiting
/home/user/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rb-inotify-0.9.8/lib/rb-inotify/watcher.rb:74:in `initialize': Invalid argument - Failed to watch "/mnt/c/Users/furik/Dropbox/work/rails/taskapp/config/locales": the given event mask contains no legal events; or fd is not an inotify file descriptor. (Errno::EINVAL)

bashはfile_watcherに対応していない->file_watcherを無効化。

config/environments/development.rb
- config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+ #config.file_watcher = ActiveSupport::EventedFileUpdateChecker

Don’t know how to build task ‘rails’ (see –tasks)

参考 stackoverflow.com

bundle install --binstubsを実行

ルーティング

config/routes.rb

+ resources :projects
+ root 'projects#index'

Postできない

Rails4.0からの仕様? protect_from_forgeryを追加。

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :null_session
end

参考(http://nonbiri-tereka.hatenablog.com/entry/2014/09/03/104824)

Template is missing

render nothing: trueいらない。ステータスコード204だけどまあいいや。

bundle exec railsできない

gemのインストールパスを設定。

bundle install --path vendor/bundle

忘れがちなコマンド

  • bundle exec rails
  • rails g model Task title done:boolean project:references
  • rails g controller Tasks
  • rake db:migrate
  • rake routes

ハイテンション利休をやったから分析してみる

アキバヨドバシで買ったハイテンション利休を4人でやりました。

f:id:be116:20170426173023j:plain

結論から言うと、一発ネタなゲームだなあと感じました。

まずはルールを簡単に説明します。 このゲームは利休に茶器を献上し、その見返りとして茶菓子をもらうゲームです。 利休は等級の高い茶器を好みます。しかし、同一の等級の茶器は受け取りません。 等級の高い茶器ほど、利休のテンションが高まり、見返りの茶菓子を多く獲得することができます。 では、受け取った茶菓子の額が一番多いプレイヤーが勝ちかというとそうではなくて、利休のテンションにより勝ちから手を引かなければならない場合があります。 このゲームは春夏秋冬の4ターンで決着します。一ターン毎に利休に茶器を献上します。それぞれの茶器には利休のテンションがどれだけあがるかが示されています。例えば1等級の茶器であれば利休のテンションが5上がります。5等級であれば、1しか上がりません。利休のテンションは利休の受け取った茶器の合計で決まります。受け取った茶菓子の額が利休のテンションより下回っていれば「わびさびを理解した」ということで勝ちから手を引くことになります。利休のテンション以上の額の茶菓子を獲得したプレイヤーの中から勝者を決めることとなります。この時の勝者は利休のテンションに最も近い額の茶菓子を持つプレイヤーです。つまり、利休のテンション以上であり、最も利休のテンションに近づいたプレイヤーが「わびさびの程度を理解した」として勝者となります。 それでは、勝利の鍵となる茶菓子をどう受け取るのかを説明しましょう。 最初に茶菓子を受け取る権利は利休に茶器を献上したプレイヤーにあります。 利休に茶器を献上するためにはプレイヤーの中でも最も等級が高く、また被りの無いように茶器を場に出す必要があります。 茶器を献上したプレイヤーは献上した茶器に示されたテンションの数だけ茶菓子を受け取ります。 プレイヤーはその中から一枚選び、右隣のプレイヤーに渡し、そのプレイヤーも一枚選び、更に右隣へと一枚ずつ茶菓子を受け取っていきます。 最初に、といったのはこのように茶器を献上したプレイヤーだけが茶菓子を受け取るわけではないということを伝えたかったからです。 ハイテンション利休の面白いところはここにあります。

一番等級の高い一等級の茶器は利休に献上しやすいものですが、一方で利休のテンションが5上がる、つまり、5枚の茶菓子カードを引くため、4人で遊ぶ場合では茶器を献上したプレイヤーは2枚分の茶菓子を獲得することになります。茶菓子の額は3両から7両までと決まっており、利休のテンションが5上がる一方でこっちは10獲得するといった状況がありがちです。これでは利休のテンションを大きく超えてしまうことになります。

というわけで利休のテンションを下回らないように、そこそこ茶菓子を引けるゲームプレイをする必要があります。

実験として、5等級から2等級まで順番に出してみるゲームプレイをしてみました。結果は負けですが、利休のテンション+2でゲームを終えることができました。(そのときのゲームでは利休のテンションにピッタリと付いていたプレイヤーがいたため負けてしまいました。)そのときのゲームでは最初の春と夏で利休に茶器を献上し、次の秋と冬では全員の出した茶器がかぶってしまったため、茶器を献上することができませんでした。春夏の時点で+2を維持できていたので勝ったなと思ったのですが、上には上がいました。このときのゲームで困ったことは2等級の茶器の処理です。1等級の茶器は使い勝手が悪いので残そうとしていたのですが、それ以外は何も考えずに5等級から出していたものですから、最後の手札に2等級の茶器が残った時無駄に茶菓子を頂いてしまうと思い、ひやひやしたものです。結局、秋冬と場は流れましたが。この経験から言えることは持っている茶菓子の額が利休のテンションを上回った場合、等級の高い茶器は早い段階で処理しておくべきだということです。たくさん茶菓子を持っている状態で冬に茶菓子を受け取ってもいいことはないですから。

このゲームで勝つためには、利休のテンションに付かず離れずを意識し、途中で等級の高い茶器を処理し、利休のテンションの程度を見て、冬は流すか、茶菓子を受け取るかを考えておく必要があるのでしょう。

ちなみに、一発ネタだなあと感じたところは、ゲームを遊んでいて勝ち方がよくわからなかったところ、ハイテンション利休という名前と、わびさびを理解していたというありがたいお言葉からです。

ゲーム「キャッチー」を更新しました

先日公開したゲーム「キャッチー」ですが、 友人と遊んだところ、面白いところが全く見つからなかったのでルールおよびプログラムを更新しました。

最新版はGitHubからダウンロードできます。

github.com

相変わらずIP解決のサーバは持っていないので、ローカルでテスト、または友人同士でしか遊ぶことができません。

以下ルールをコピペ。

キャッチー

  • タイピング+キャッチボールがコンセプトのゲームです
  • 通信対戦ができます
  • 端末で動きます
  • ルール
    • enemyが白くなると相手の手番です。
      • その間なにもできません
    • youが白くなるとあなたの手番です。
      • 相手と同じ文字列+余分な文字(0文字以上)を入力しましょう

実行方法について

環境

  • Rubyを使います。ver2.4.0で動くことを確認済みです
  • 通信に8888番ポートを使います。空けておきましょう。
    • ポートの変更をする場合はプログラムのport変数を書き換えましょう
  • cursesライブラリを使っています。導入されていない場合は各自対応をお願いします
    • 一番簡単なインストール方法はgem install cursesです

各プログラムについて

client.rb

  • クライアント側のプログラムです
  • ruby client.rb destで実行します
  • destには127.0.0.1またはlocalhostのようにサーバ側のIPアドレスを入力しましょう
  • サーバ->クライアントと実行後ゲーム開始です

server.rb

  • サーバ側のプログラムです
  • ruby server.rbで実行
  • サーバ側を必ず先に実行しておきましょう

エラーについて

  • 突貫で作ったため通信周りに多数のエラーが残っています
  • 用法用量を守って使用しましょう

test.rbの中身は見ないで。

端末ゲーム「キャッチー」をGitHubに公開しました

端末ゲーム「キャッチー」をGitHubに公開しました。

GitHub - be116/catchy: タイピング+キャッチボールがコンセプトの通信対戦ゲームです。端末で動きます。

以下、readmeをコピペ。

キャッチー

  • タイピング+キャッチボールがコンセプトのゲームです
  • 通信対戦ができます
  • 端末で動きます
  • ルール
    • type?と聞かれたら適当な文字列を入力しましょう
    • これがボールを投げることにあたります
    • retype?と聞かれたらtype->と同じ文字列を入力しましょう
    • これがキャッチにあたります
    • 相手に投げる文字列はキャッチした文字列よりも長くなければなりません
    • 長すぎてもダメです。追加する文字長は5文字以内に収めてください
  • 以上で概要は終わりです。

実行方法について

環境

  • Rubyを使います。2.4.0で動くことを確認済みです
  • 通信に8888番ポートを使います。空けておきましょう。
    • ポートの変更をする場合はプログラムのport変数を書き換えましょう

プログラムについて

client.rb

  • クライアント側のプログラム。こちらが先攻でボールを投げます
  • ruby client.rb destで実行します
  • destには127.0.0.1のようにサーバ側のIPアドレスを入力しましょう
  • サーバ->クライアントと実行後ゲーム開始です

server.rb

  • サーバ側のプログラム。こちらは後攻でボールのキャッチから始まります
  • ruby server.rbで実行
  • サーバ側を必ず先に実行しておきましょう

エラーについて

  • 突貫で作ったため通信周りに多数のエラーが残っています
  • 用法用量を守って使用しましょう

ツイートをプロフィールの一番上に固定する(for Android)

AndroidTwitterアプリからツイートを固定します。

手順1

f:id:be116:20170212112007j:plain:w300

手順2

f:id:be116:20170212112001j:plain:w300

手順3

f:id:be116:20170212111957j:plain:w300

これでツイートが固定されたよー!わーい! やったー!

f:id:be116:20170212111953j:plain:w300

ちなみにツイートはこれだよー!

ホームページつくったんだよー! すごいでしょー! たーのしー!

OpenMPIをGitHubからインストールする手順(for winBash, Ubuntu)

OpenMPIの最新版をインストールしたい。 tarなんちゃらをwgetするんじゃなくってGitHubからソースを引っ張ってきてインストールしたい。

環境は以下の通り。

環境 : Bash on Ubuntu on Windows

要はUbuntuと変わらない。

OpenMPIのリポジトリこちら。

https://github.com/open-mpi/ompi

インストールの詳細はルートディレクトリにあるファイルINSTALLに記述されている。

以下は、簡単なインストール手順。

  1. git clone https://github.com/open-mpi/ompi # ソースのダウンロード
  2. cd ompi #ディレクトリ移動 1../autogen.pl # configure生成
  3. ./configure --prefix=$HOME/usr# Makefile生成
    • (prefixを指定しない->usr/localに)
    • $HOME/usrを指定した理由 qiita.com
    • (flexがない->sudo apt-get install flex)
  4. make all install # インストー

サンプルを使って実行できるか試してみよう。

  1. cd exsample
  2. mpicc ring_c.c # コンパイル
  3. mpirun -np 4 ./a.out # 実行
mpirun -np 4 ./a.out
Process 0 sending 10 to 1, tag 201 (4 processes in ring)
Process 0 sent to 1
Process 0 decremented value: 9
Process 0 decremented value: 8
Process 0 decremented value: 7
Process 0 decremented value: 6
Process 0 decremented value: 5
Process 0 decremented value: 4
Process 0 decremented value: 3
Process 0 decremented value: 2
Process 0 decremented value: 1
Process 0 decremented value: 0
Process 0 exiting
Process 2 exiting
Process 3 exiting
Process 1 exiting

わーい!やったー!すごーい! このプログラムは『send a trivial message around in a ring 』するんだって! すごーい! ちなみにhello_cはエラーが出てコンパイルできなかったよ!なんでー? oshmem_*のコンパイルにはshmem.hが必要なんだってー!すごーい!

ちなみにMPIのバージョンは1.6.5。 バージョン確認にはompi_infoを使うよ。

就活のためにpaizaはじめました

自分は18卒就活生です。

自分は今、自己分析なり、企業分析なりを淡々とやっています。 もうすでに面接に入られている方、内々定をもらっている方っているのでしょうか。 そんな人いたらうらやましいなーと思いつつ、日々を消化しています。

というわけで、就活のためにpaizaはじめました。 paizaはプロコン的なことをしてコーディング力を企業にアピールしようって就活サイトです。 ランクDからランクSまで問題が散りばめられているのですが、 2時間つかってランクCまでいきました。 ちなみにランクCは初心者級です。 誰でも解けます。 AtcoderビギナーコンテストA問題くらい簡単です。

プロコンではc++でコーディングするのが一般的ですが、今回はpython3の勉強を兼ねてpython3で頑張っています。

次の問題はランクB、中級らしく平均所要時間48分、2時間の猶予が与えられています。 1時間近く使うのかーと思いながら別スレッドで頑張っていこうかと思っておきます。

ちなみにpaizaはここだよ。

paiza.jp

以上、解散!