Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | BOM付きUTF-8のCSVファイルを出力してExcelで開けるようにする

概要

BOM付きUTF-8CSVファイルを出力してExcelで開けるようにする

詳細

BOM付きUTF-8CSVファイルを出力してExcelで開けるようにします

サンプル

# encoding: utf-8

class File
  def self.insert_bom(input_filename, output_filename)
    src = File.read(input_filename)
    File.open(output_filename, "w:UTF-8") do |f|
      src = '   ' + src
      src.setbyte(0, 0xEF)
      src.setbyte(1, 0xBB)
      src.setbyte(2, 0xBF)
      f.print src
    end
  end
end

file = $*[0]
exit unless File.exists? file

File.insert_bom(file, "#{File.basename(file, '.csv')}_bom.csv")

処理対象ファイル

タイトル1,タイトル2,タイトル3
行1_1,行1_2,行1_3
行2_1,行2_2,行2_3

実行

$ ruby bom_csv.rb unbom_csv.csv
$ ls unbom_csv*
unbom_csv.csv  unbom_csv_bom.csv

unbom_csv.csvExcelで開いたところ

unbom_csv_bom.csvExcelで開いたところ

Ruby | Windows環境でクリップボードを操作

概要

Windows環境でクリップボードを操作

詳細

Windows環境でクリップボードを操作します。

準備

win32-clipboard gemをインストールします。

gem i win32-clipboard
サンプル
# encoding: utf-8
require 'tbpgr_utils'
require 'win32/clipboard'
 
str =<<-EOS
いちぎょうめ
にぎょうめ
さんぎょうめ
EOS
Win32::Clipboard.set_data(str, Win32::Clipboard::UNICODETEXT)
puts Win32::Clipboard.data(Win32::Clipboard::UNICODETEXT)
出力
いちぎょうめ
にぎょうめ
さんぎょうめ

Ruby | ObjectSpace

概要

ObjectSpace

詳細

全てのオブジェクトを操作するモジュール、ObjectSpaceについて。

RailsActiveSupportのsubclasses.rbを読んでいる最中にObjectSpaceをはじめてみた。
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/class/subclasses.rb

サンプル

# encoding: utf-8
require 'pp'
require 'tbpgr_utils'

class Hoge
  def hoge
    "hoge"
  end
end

class HogeChild < Hoge
  def hoge
    "#{super}_child"
  end
end
h = Hoge.new
h2 = Hoge.new
hc = HogeChild.new

# オブジェクト解放時の処理を登録
ObjectSpace.define_finalizer(h) {puts "finalize"}

# オブジェクトを種類ごとにカウントした結果を Hash として返す
p ObjectSpace.count_objects

# Object#kind_of?の関係にあるオブジェクト全体への操作
ObjectSpace.each_object(Hoge) do |hoge|
  puts hoge.hoge
end

出力

{:TOTAL=>30690, :FREE=>277, :T_OBJECT=>1907, :T_CLASS=>498, :T_MODULE=>25, :T_FLOAT=>7, :T_STRING=>18451, :T_REGEXP=>78, :T_ARRAY=>4871, :T_HASH=>153, :T_STRUCT=>2, :T_BIGNUM=>9, :T_FILE=>13, :T_DATA=>1112, :T_MATCH=>34, :T_COMPLEX=>1, :T_NODE=>3227, :T_ICLASS=>25}
hoge_child
hoge
hoge
finalize

ActiveSupport | Class#subclasses

概要

Class#subclasses

詳細

Class#subclasses について

Class#subclasses

サブクラスを取得する。

サンプル

# encoding: utf-8
require 'active_support/core_ext/class/subclasses'
require 'tbpgr_utils'

class A;end
 
class B < A;end
class D < A;end
 
class C < B; end

bulk_puts_eval binding, <<-EOS
A.subclasses
B.subclasses
C.subclasses
EOS

__END__
下記はTbpgrUtils gemの機能

bulk_puts_eval

詳しくは下記参照
https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

A.subclasses # => [B, D]
B.subclasses # => [C]
C.subclasses # => []

書籍 アジャイルレトロスペクティブズ | レトロスペクティブのリード

概要

レトロスペクティブのリード

アクティビティの管理

アクティビティの説明、導入を管理する。
アクティビティについては後半の章にて。

初めて行うアクティビティについては、内容を説明し、
実践の際の先導者となる。

集団ダイナミクス

全員が参加できるように配慮する。具体的には・・
・話すぎるエンジニアへの対応
・おとなしい人に話題をふる
など。
また、責任論に及ぶような発言をしないこと。
主語をあなたから私に変えることを意識させる。

before:「あなたがバグを出したから、リリースできなかった」
after:「私はバグによって、リリースが延期された原因と対策を考えたい」

あるある。

感情

・泣く
・部屋を出ていく
・怒鳴る
・おどけ
・静寂
・表面下(何かひそひそと話している様子を見逃さない)
などへの対応。
実際こういうことがあるから困る。

表面下とかは、管理社が厳しすぎる時に顕著ですね。
私は非常に緩い上司・チームリーダーだったりしまして、横の目線で接していることもあり
重要な事実をさらっと教えて貰えることが多いです。
そういう意味でも厳しすぎるリーダーって、あまり良い効果を生まないと思ってます。

時間の管理

振り返りがだらだらと長引かないように管理する。

発展

慣れたらリーダーとしての振り返りのためのツールを増やす。

TbpgrKnowledge | 人に教える機会を作る

概要

人に教える機会を作る

教える機会の循環を生むまで

まずは
・日々の仕事で信頼を得る
・困っている人がいたら助ける
・この人はこの分野に強い、と分かってもらう
・質問されやすい雰囲気作り
あたりで下地作りをします。

実力的に上の人が相手でも得意分野が異なる場合なら
アドバイス出来る事はある。

例えば目の前のチームの全然知らない別の協力会社の人達が
Web開発をやったことがないのに、Web開発のチームにアサインされて
いて何やら困っている声が聞こえてきました。
自分が知っている内容だったので、声をかけて答えを教えました。
それ以降、そのチームの人から質問を受ける事が増えました。

協力会社が大勢集まる開発チームに参画した際は、1メンバーとして参加したのですが
自社の同僚1名だけではなく、全メンバー別け隔てなく色々と教えました。
そして気づけば事実上のチームリーダーになっており、最終的には正式に
体制図上もリーダーになっていました。

こうやって、地道に実績を積むうちに色んな人から日々質問されることになります。
こうなれば色々なメリットがでてきます。

教えるメリット

・自己の学習になる
・チームや組織全体の能力向上に貢献する
・発言力が上がる => 自分のやりたいことができる範囲が広がっていく
・色んな人から色んな開発の情報を聞ける
・トラブルシューティングの能力が上がる

TbpgrUtils | 追加要件 Array#together_fillを追加

概要

追加要件 Array#together_fillを追加

詳細

追加要件 Array#together_fillを追加します

仕様

・Array#fillのtogether版。
・以下のaliasを持つ
tfill

※より詳細についてはGitHubのREADMEおよびテストケース参照

リリースバージョン

0.0.28

TbpgrUtils | 追加要件 File.insert_bomを追加

概要

追加要件 File.insert_bomを追加

詳細

追加要件 File.insert_bomを追加します。

目的

UTF-8CSVファイルをExcelで開くためにBOMを追加したい

仕様

UTF-8のファイルの先頭にBOMを追記する
・insert_bom(input_file, output_file)
・output_fileを指定した場合は、output_fileにBOM付きの結果を出力
・output_fileを省略した場合はinput_file自身のファイルを上書き

※より詳細についてはGitHubのREADMEおよびテストケース参照

リリースバージョン

0.0.28