edy hub

プログラミングやライフスタイルについて書き綴っています

営業について

はじめに

社内勉強会で営業担当から必勝方法を学んだ

内容

Q&Aでトークセッション形式

営業のスタンス

  • 営業のNo.1は狙っていたか?
  • YES

  • 何をしていた? 社内のすごい人にひたすら聞き込みをした 的確なレスポンスを返してくれる人にひたすら聞いていた 誰がなにが得意なのかを社内にの中でも聞きまくっていた

目的と価値貢献

提案金額を上げたときに お客様と自社のどちらも価値貢献をしていた

営業としてわすれてはならないこと

お客様と案件のことは僕が一番知っているという状態でいる 言えるかどうか →これはエンジニアでも言えると思った 自分が開発している内容を社内で一番把握している状態

提案に必要な情報とは?

何人採用したいんですか? そして、ペルソナを発掘していく 課題と解決策がズレていないかを徹底

課題として上がっている単語の本当の意味を知る

課題の根本が何なのか? 文言の背景にある本当の思いはなんなのか?

ちゃんと失注する

なんで? ケリをつけることのメリット

脳内メモリを食わずに済む

各論でやっていること

  • スケジュールの可視化を行う
  • 採用背景(そもそもなんで採用をするのか?)を徹底的に洗い出す。

8月に入社を決めたい
7月には会社に退職報告をする
6月には入社決定
5月には母集団形成を行う必要あるよね?

てことは今でしょ!!!!というクロージング

結論

想像力とファクト獲得力と胆力が大事! 愛嬌とか分析力、トーク力、スピードは武器の一つとして備えておくと良い。

最後にオススメの書籍を教えていただきました! https://www.amazon.co.jp/dp/B0081WMSMM/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

Railsのフォームでenumを用いた複数個のラジオボタンを生成する

はじめに

enumの値ごとにラジオボタンを作るのが面倒だったので、どうにかまとめられないかというのが起点。

collection_select_boxみたいなものがあればという淡い期待のもと調査をしてみます。

元のコード

= form_for object do |f|
  = f.radio_button :status, 'good'
  span
    | Good
  = f.radio_button :status, 'normal'
  span
    | Normal
  = f.radio_button :status, 'bad'
  span
    | Bad

まとめる

        = collection_radio_buttons(@object, :status, Object.statuses, :first, :first) do |b|
          .m-form-checkbox__item
            = b.radio_button + b.label

bundle install時にmysql2のインストールでエラーになる

はじめに

bundle installすると、

Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

// 中略

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/edayuki/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-17/2.6.0-static/mysql2-0.5.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/edayuki/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/mysql2-0.5.2 for inspection.
Results logged to /Users/edayuki/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-17/2.6.0-static/mysql2-0.5.2/gem_make.out

An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before bundling.

mysql2あたりでbundle installが失敗してるっぽい。 これをやってみろと書いてある。

`gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'`

指定されたコマンドを入力してみる

`gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'`

これでも無理だ、、、

調査してみると

Xcodeコマンドラインツールをインストールするのが吉なようです。

$ xcode-select --install

このあとに、改めて先程のコマンドを入力してみます。

$ sudo gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'

※sudoつけないと権限で弾かれるので、付与しました。

結果として、

Building native extensions. This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

となり、mysql2をインストールすることができました!

最後にbundle install

改めてbundle installすると、綺麗にインストールできました! めでたし!

Rubyのバージョンを2.5.3に上げる〜Docker編〜

はじめに

Dockerfileを編集

rubyのバージョンを2.5.3に変更

$ docker-compose up --build

はいエラー bundlerのバージョンがよろしくないみたいですね。

docker-image

bundlerのバージョンを変更

-  gem 'bundler', '1.15.4'
+  gem 'bundler', '1.17.2'

Gemfile.lock内の古いバージョンの記述も変更します。 基本的にbundlerでgrepしてあげたら良いですが、最下部にある BUNDLED_WITH の変更も忘れないように。

 BUNDLED WITH
-   1.15.4
+   1.17.2

これでDockerのビルドが成功しました。

Redis ObjectsをRailsで使ってみる

はじめに

これはRedis導入後に、Redis Objectsの使い方を学ぼうと思った一人の若者の備忘録です。

GitHubリポジトリを参考にしています。

GitHub - nateware/redis-objects: Map Redis types directly to Ruby objects

Gemの導入

はじめに、Gemfileにgemを追加します。

gem 'redis-objects'

モデルクラスに組み込んでみる

Redis::Objectsをモデルクラスにインクルードします。 Redis::Obejcetsは ユニークな値を返すメソッドであるid を備えているクラスであれば効果的に活用できます。 そして、自動的に各オブジェクトに対してユニークなキーを発行してくれたりします。

例:下記のようなフォーマット

model_name:id:field_name

Userクラスで試してみる

class User
  include Redis::Objects
  counter :my_posts
  def id
    1
  end
end

user = User.new
user.id  # 1

user.my_posts.increment
user.my_posts.increment
user.my_posts.increment
puts user.my_posts.value # 3

user.my_posts.reset
puts user.my_posts.value # 0

user.my_posts.reset 5
puts user.my_posts.value # 5

スタンドアロンな用法

Counters

任意のcounter_nameをキーとしてRedisに保存される仕組み。

@counter = Redis::Counter.new('counter_name')
@counter.increment  # or incr
@counter.decrement  # or decr
@counter.increment(3)
puts @counter.value

Values

シンプルな値も簡単に取り扱えます。

@value = Redis::Value.new('value_name')
@value.value = 'a'
@value.delete

Lists

ListsRubyの配列のような働きをします。 配列を扱う際に登場するメソッドが同じように使えて便利。

@list = Redis::List.new('list_name')
@list << 'a'
@list << 'b'
@list.include? 'c'   # false
@list.values  # ['a','b']
@list << 'c'
@list.delete('c')
@list[0]
@list[0,1]
@list[0..1]
@list.shift
@list.pop
@list.clear
# etc

配列の最大保持数も指定できます。 ※ :maxlengthオプションを使います。最も古い要素を配列外に出します。

# 最大10個の要素だけ保持したいとき。
@list = Redis::List.new('list_name', :maxlength => 10)

Hashes

HashesもRubyのHashのような働きをします。Redis独自の仕様もあります。 RubyのHashとの衝突を避けるために、HashKeyという命名になっています。

@hash = Redis::HashKey.new('hash_name')
@hash['a'] = 1
@hash['b'] = 2
@hash.each do |k,v|
  puts "#{k} = #{v}"
end
@hash['c'] = 3
puts @hash.all  # {"a"=>"1","b"=>"2","c"=>"3"}
@hash.clear

Redis上では、数字は文字列になることに注意してください。

Sets

SetsはRubyのSetクラスのようなものです。 順序立てられたものではないですが、要素の一意性が担保されます。

@set = Redis::Set.new('set_name')
@set << 'a'
@set << 'b'
@set << 'a'  # dup ignored
@set.member? 'c'      # false
@set.members          # ['a','b']
@set.members.reverse  # ['b','a']
@set.each do |member|
  puts member
end
@set.clear
# etc

Sorted Sets

プロパティーの一意性に伴い、Sorted Setsはハッシュと配列の両取りをしたような働きをします。 ハッシュのように割り当てることができ、取り出すときは配列風になります。

@sorted_set = Redis::SortedSet.new('number_of_posts')
@sorted_set['Nate']  = 15
@sorted_set['Peter'] = 75
@sorted_set['Jeff']  = 24

# Array access to get sorted order
@sorted_set[0..2]           # => ["Nate", "Jeff", "Peter"]
@sorted_set[0,2]            # => ["Nate", "Jeff"]

@sorted_set['Peter']        # => 75
@sorted_set['Jeff']         # => 24
@sorted_set.score('Jeff')   # same thing (24)

@sorted_set.rank('Peter')   # => 2
@sorted_set.rank('Jeff')    # => 1

@sorted_set.first           # => "Nate"
@sorted_set.last            # => "Peter"
@sorted_set.revrange(0,2)   # => ["Peter", "Jeff", "Nate"]

@sorted_set['Newbie'] = 1
@sorted_set.members         # => ["Newbie", "Nate", "Jeff", "Peter"]
@sorted_set.members.reverse # => ["Peter", "Jeff", "Nate", "Newbie"]

@sorted_set.rangebyscore(10, 100, :limit => 2)   # => ["Nate", "Jeff"]
@sorted_set.members(:with_scores => true)        # => [["Newbie", 1], ["Nate", 16], ["Jeff", 28], ["Peter", 76]]

# atomic increment
@sorted_set.increment('Nate')
@sorted_set.incr('Peter')   # shorthand
@sorted_set.incr('Jeff', 4)

Rubymineの「typo」警告を特定のワードの場合に無くしたい

どんなケース?

これはtypoに見せかけて、プロジェクト内では列記とした単語なんじゃ!という場合。 毎回警告が出るとうざいですよね。 f:id:yuki-eda0629:20190323150041p:plain

解決方法

該当ワードで右クリック すると、Spellingという項目が出てきます(自分の場合は、トップに出てきました) f:id:yuki-eda0629:20190323150309p:plain

さらに「Spelling」> 「Save '該当ワード' to project-level directory」を選択 f:id:yuki-eda0629:20190323150406p:plain

さいごに

波線と警告がなくなりました!!めでたし! f:id:yuki-eda0629:20190323150603p:plain