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

Rubyの組み込みクラスの一覧を表示してみる

Ruby

組み込みクラスの一覧を表示してみたいと思い立った。

考えたのは

  1. Objectの定数一覧取得
  2. それぞれの定数からクラスを得る
  3. そのクラスがClassであれば、組み込みクラス
[8] pry(main)> puts Object.constants.select { |x| Kernel.const_get(x).class == Class }
Object
Module
Class
BasicObject
NilClass
Data
TrueClass
FalseClass
Encoding
String
Symbol
Exception
SystemExit
SignalException
Interrupt
StandardError
TypeError
ArgumentError
IndexError
KeyError
RangeError
ScriptError
SyntaxError
LoadError
NotImplementedError
NameError
NoMethodError
RuntimeError
SecurityError
NoMemoryError
EncodingError
SystemCallError
UncaughtThrowError
ZeroDivisionError
FloatDomainError
Numeric
Integer
Fixnum
Float
Bignum
Array
Hash
Struct
RegexpError
Regexp
MatchData
Range
IOError
EOFError
IO
File
Dir
Time
Random
Proc
LocalJumpError
SystemStackError
Method
UnboundMethod
Binding
Enumerator
StopIteration
RubyVM
Thread
ThreadGroup
ThreadError
ClosedQueueError
Mutex
Queue
SizedQueue
ConditionVariable
Fiber
FiberError
Rational
Complex
TracePoint
StringIO
Monitor
Delegator
SimpleDelegator
PrettyPrint
PP
Pry
Slop
Tempfile
Pathname
Insertion
SymbolHash
OpenStruct
OptionParser
OptParse
Logger
StringScanner
ScanError
=> nil

うまくいっている模様。*Errorは例外クラスと
Errorは例外クラス。
普段見慣れないものもかなりある。

Windows版Rubyでp メソッドが文字化けする件の回避(-Uオプション)

Ruby

いわゆるprintfデバッグに相当する pメソッドなのだが、漢字が正しく表示されない。
例えば

class Tel
  def initialize(number, name)
    @number = number
    @name   = name
  end
end

kyoto = Tel.new('075', '京都市')
p kyoto

を実行すると、ruby 1.9からだったと思うが、

> ruby  tel.rb                                            
#<Tel:0x2dcb764 @number="075", @name="\u4EAC\u90FD\u5E02">

のように悲しい結果になる。
試行錯誤の結果、どうやらEncoding.default_internal の問題の模様。
実際に

def show_enc                                               
  %i(default_external default_internal).each do |enc|      
    puts "Encoding.#{enc} => #{Encoding.send(enc).inspect}"
  end                                                      
end                                                        

class Tel
  def initialize(number, name)
    @number = number
    @name   = name
  end
end

kyoto = Tel.new('075', '京都市')
p kyoto

show_enc

とすると

> ruby tel.rb                                             
#<Tel:0x2dbb79c @number="075", @name="\u4EAC\u90FD\u5E02">
Encoding.default_external => #<Encoding:Windows-31J>      
Encoding.default_internal => nil                                                   

となっている。
そこで、-U オプションを付けてやると

> ruby -U tel.rb                                     
#<Tel:0x2f1ab10 @number="075", @name="京都市">          
Encoding.default_external => #<Encoding:Windows-31J> 
Encoding.default_internal => #<Encoding:UTF-8>       

と幸せになれるという次第。
環境変数RUBYOPTに-Uを設定しておくと手間もかからない。

ただし、Rubyinstallerのruby.exeだと何故かエラーになることがある。
環境にもよるようだが、ASRだと今のところ問題なし。

廉恥 - 今野敏

読書

いつもの今野敏
出てくる人物像は似通ったものだが、それはそれで良し。

中ほどに出てくる

昔は、「恥を知れ」と、よく言われたものだ。それが日本人の美徳だったと思う。
罪を犯すかどうかについて、一神教の世界では「神が見ている」という抑止装置があると言われる。
日本では、「恥を知る」という精神が同様の抑止装置であったのではないだろうか。

という下りは、一神教というかキリスト教の特徴でよく出てくる話か。
欧米では宗教(キリスト教)が人の精神構造に与える影響が大きいとか。

廉恥

廉恥

陽気なギャングが地球を回す - 伊坂幸太郎

読書

久しぶりの伊坂幸太郎
各節の最初にある辞書がなかなかおもしろい。

陽気なギャングが地球を回す (ノン・ノベル)

陽気なギャングが地球を回す (ノン・ノベル)

凍りの掌 - おざわゆき

絵柄と内容とギャップが大きい。

第二次大戦末期におけるソ連の日本に対する動きは

  • 日ソ不可侵条約を一方的に破棄
  • 日本の占領地へ侵攻。北方領土もその対象
  • 捕虜を強制労働させていた

のようなおぼろげな知識しかないのだが、国際法の常識(といったものがあるとして)から見て、避難されてしかるべき内容ではないかと思う。
しかし、戦勝国の一つであったことから、その不適切さは無視されているのか。

凍りの掌

凍りの掌

マンガでJavaScriptがわかると思っているのかお前は

JavaScript

良いなこれ。
次が楽しみ。是非続けてほしい。

www.comico.jp

はてなブックマーク Firefox拡張Add-onサイドバーの問題

Firefox

はてなブックマークサイドバーを常用しているのだが、いつからかタグをクリックしてもブックマーク一覧が変わらなくなった。ブックーマーク下部の「全体から検索」で掘り起こすことはできるが、使い勝手が頗る悪い。
Firefoxのブックマークに移行を試すが、複数タグの絞り込みができず、こちらもNG。

幸いGithubに載っているので自力解決を試み、なんとか解決。Firefox 45でも問題なく動作している。
未検証にはなるが、こちらのxpiファイルでインストールできるようにはなった。

この結果はHatena Bookmark :: Add-ons for Firefoxのレビューにも書いたのだが、何故かレビューが非表示になってしまっている。自分のプロフィールには残っているが、編集して投稿してもだめ。ひょっとしてリンクがあるとだめ?
一旦削除、リンクなしで新規投稿するとまた表示されるようにはなった。

修正内容は、タグクリックで呼ばれる関数を修正したのだが、

  • その関数から他の関数を呼び出すのが失敗している
  • 呼び出されるはずの関数から更に別の関数を呼び出しているが、そもそもそれは存在しない(ように見える)

という状態。

README に従ってPull Requestは出しておいたが、採用されるかどうかは不明。

しかし、JavaScriptを触ったのは10年振りくらいだなぁ。