Ruby

openssl.so でエラー

gem update で、opensslが2.1.1、2.1.2になると、 127: 指定されたプロシージャが見つかりません。 - 〜〜/gems/openssl-2.1.2/lib/openssl.soというエラーになる。 対応としては、gems\openssl-2.1.0\lib\openssl.so を、gems\openssl-2.1.2\lib\openssl.so…

ライフゲーム

data = <

RubyInstaller2.4.1

出ないのでは無いかと言われていたRubyInstaller2.4が出た。ネイティブgemsのインストール用に、従来はDevKitというパッケージが用意されいていたが、今回からはインストーラーにMSYS2のインストーラーが含まれている。メニューで1,2,3と選べるようになって…

Windows標準付属ゲームのスコア履歴を記録する

スコアがどこに入っているかを調べると、%APPDATA%\Microsoft Games の下のゲーム毎のフォルダーに格納されている。 ソリテアだと、%APPDATA%\Microsoft Games\Solitaire\SolitaireSettings.xml ゲーム名のフォルダーは、Explorerから見ると「ソリテア」と片…

Windowsで google-api-client を使うと一瞬コマンドプロンプトウィンドウが出る

google-api-clientを使ったスクリプトをRubyw.exeで動かしているが、起動時に一瞬だけコマンドプロンプト画面が出る。本当に一瞬なので何が出ているのかも見えない。 ということで、少しずつ実行してみて原因が分かった。 \google-api-client-0.10.1\lib\goo…

サイトの更新チェック

サイトの一部が更新されたかどうかのチェック。 cronからの起動を想定。 #!/usr/local/bin/ruby require "nokogiri" require "open-uri" def check(url:, xpath: nil, css: nil, file:) doc = Nokogiri::HTML.parse(open(url).read) text = doc.search(xpath…

Ruby2.4のInteger

Ruby2.4で、FixnumとBignumの区別が無くなったけど、実際にはあると言う話。 def is_fixnum(n) n.equal?(n.to_s.to_i) end p is_fixnum(1000) #=> true p is_fixnum(10000000000000000000000000) #=> false

MS Exchange/Outlook のカレンダーとGoogle Calendarの同期 (続編)

id:otn:20150901 「MS Exchange/Outlook のカレンダーとGoogle Calendarの同期」のその後。google-api-client が 0.9 になってそのままでは動かなくなった。0.8のまま使っていたのだが、認証がおかしくなった(毎回認証しないとタイムスタンプがおかしいとい…

RubyInstaller2.2をインストールしてgem関連でエラー

RubyInstallerで2.2.1が出たのでインストールした。前のバージョンはRuby213にリネームして残しておく。SSL3問題(Windowsでgem install出来ない問題)については、Rubyディレクトリの外に正しい証明書ファイルを置いて、環境変数 SSL_CERT_FILE でそれを指し…

簡易メーリングリストマネージャ

メーリングリストを運用したいので、FML を使おうとしたのだが、機能が多すぎでいまいち使いにくい。 ということで、最小限の機能を持ったマネージャを作ってみた。機能としては、これくらい。 ・1メーリングリスト1スクリプト ・メンバー以外からの投稿は拒…

ISO-2022-JPのメールが送れない(送りにくい)

標準添付ライブラリの net/smtp を使って ISO-2022-JP でメールを送ろうとすると、エラー。 require "net/smtp" Net::SMTP.start("localhost", 25, "example.com") do |smtp| smtp.send_message(<<-EOS.encode(Encoding::ISO_2022_JP), "me@example.com", "t…

@ITのRuby入門記事の間違い

RubyのRangeクラスと範囲オブジェクト、範囲演算子、イテレーターの使い方 (1/3):若手エンジニア/初心者のためのRuby 2.1入門(4) - @IT の内容間違いについて。 入門記事なんだから実装内部のことなど書く必要ないのに、書いて間違っている。 2ページ目…

Google API と文字コード

id:otn:20140901 の「MS Exchange/Outlook のカレンダーとGoogle Calendarの同期 」の続き。 ふと、Rubyをデバッグモードで実行してみると、 Exception `ArgumentError' at D:/Ruby/lib/ruby/gems/2.0.0/gems/multi_json-1.10.1/lib/multi_json/adapter.rb:3…

pry で文字色変更されず ESC とか表示される

gem の pry で、文字色が変わるべき表示で、ESC[31m などと ESC が英文字として表示されてしまうという現象が起きていた。 設定が何かおかしいだろうけど、色とか別にいいので、~/.pryrc で、Pry.config.color = false にして回避してた。 ふと、less が原因…

MS Exchange/Outlook のカレンダーとGoogle Calendarの同期 その4

仕様再掲。 Exchange側をマスターとして、Google Calendarへ一方方向で反映 前後30日分だけチェックして追加・変更・削除を反映 Exchange側から反映したのでないGoogle Calendar上で直接登録したイベントには触らない 3つめの仕様のために、Google Calendar…

MS Exchange/Outlook のカレンダーとGoogle Calendarの同期 その3

id:otn:20140829 の続き。 どういうときに、ExchangeのイベントとGoogle Calendarのイベントを等しいと判断するか。 考慮が必要なのは3点。 文字列の内容 タイトル、内容、場所など文字列の文字コードがCP932か、utf-8かの違い。これはutf-8に揃えることにす…

MS Exchange/Outlook のカレンダーとGoogle Calendarの同期 その2

id:otn:20140827 の続き。 Exchangeからのデータ取得は以前調べてVBScriptで書いたものをRubyで書き直す。 元のVBScriptを書くときに参考にしたサイトがちょっと見つからない。 結果の取得は、FindNextしながらwhileループしていたので、Enumeratorに変換す…

MS Exchange/Outlook のカレンダーとGoogle Calendarの同期 その1

Google Calendar Syncのサービスが2014-08-01に停止された。今まで使っていたので、困ってしまい、代替を調べたが認証proxy越えがうまくいかないので、自分で作ることにした。 仕様としては、 Exchange側をマスターとして、Google Calendarへ一方方向で反映 …

Ruby2.1インストールと、make check

Ruby 2.1のインストール。今まで、Rubyのソースからのインストールは、 $ ./configure $ make $ make test $ sudo make install とやっていたのだが、ふと README.jp を見て、 $ make check をやってみた。しかし、VPS上でやるとネットワーク関係のテストで…

Mechanizeでのsubmit時の問題点

ADSLモデム(NEC WAPRSTAR)の再起動をMechanizeでやろうとした。ところが、エラーにはならないのだが、再起動しない。 IEでの送信データと比較してみると、送信データが足りない。 <INPUT TYPE=submit NAME=No00420000 VALUE='登録'> というsubmitボタンだが、IEでやると送信データに No00420000=%93o%98%5E が…

覚えていない環境変数 SSL_CERT_FILE

SSL_CERT_FILE=D:\xxxx\xxx\ca-bundle.crt という環境変数設定をしているのだが、何故そういう設定をしたのか思い出せない。 Ruby関係だと思うのだけれど。ca-bundle.crtはおそらくLinuxから持ってきたもの。 2014-08-12追記 ちょっと思い出した。デフォルト…

Ruby2.1の数値リテラル

Ruby2.1で、リテラルの表記が拡張されて、虚数や有理数がそのまま書けるようになっている。 irb(main):001:0> 1/3r * 9 => (3/1) irb(main):002:0> (2+3i)*1i => (-3+2i) 従来は、Rational(1,3)とか、Complex(2,3)のように書く必要があった。複素数が 2+3i …

Hikiインストール

http://hikiwiki.org/ja/ から、1.0.0.zip をダウンロードして、/opt/hiki で解凍。 # mkdir /opt/hiki # cd /opt/hiki # wget https://github.com/hiki/hiki/archive/1.0.0.zip # unzip 1.0.0.zip # mkdir log apacheでVirtual Hostの設定。 # vi /etc/http…

4桁の数字で10を作る

1桁の数字4つに対して四則演算を行って10を作るという頭の体操がある。プログラムを作ってみた。 #!/usr/local/bin/ruby X = %w{ 1 1 9 9 } #対象の数字 OP = %w{ + - * / )+ )- )* )/ +( -( *( /( )+( )-( )*( )/( } # 間に挟み込む演算子、括弧の有無と組…

Yahooファイナンスの株価時系列をテキストに

Yahooファイナンスの株価時系列をタブ区切りテキストにして、Excelで開きやすくするスクリプト。 下記例は、日経225(998407.O)を2001年1月から2012年12月まで。ページをめくりながらなので、日付逆順になってしまう。いったん全部をArrayに入れてsortしよう…

prog1

Rubyに、Lispの prog1 のような物があるといいなと思っていたけど、begin ~ ensure ~ end が使えるとは! begin 式1 ensure 式2 式3 式n end しかし、かさばり感が満載なので使いづらい。 p [ 式1, 式2, 式3, 式n ][0] って、評価順序は保証されているんだっ…

Mechanize2.4 の add_auth

Mechanize2.4になって、 agent.auth("username","password") が、警告を出すようになった。複数のサイトを渡り歩くときに、意図しないサイトへも(401を返されると)ユーザIDとパスワードを送ってしまうというのが脆弱性として認識されたのでそれの改善と言う…

puts と print の Array に関する違い

リファレンスを見ると、 puts(*arg) -> nil 引数と改行を順番に 標準出力 $stdout に出力します。引数がなければ改行のみを出力します。 引数が配列の場合、その要素と改行を順に出力します。配列や文字列以外のオブジェクトが引数として与えられた場合には…

to_s が String を返さなかったら?

puts すると String じゃないと to_s が呼ばれるが、to_s が String を返さなかったらどうなるか?さらに to_s が呼ばれて無限ループと言うことは無いだろうけど。 class Foo def to_s self end end puts Foo.new #=> #<Foo:0x0000000dcc2858> Foo#to_s が String じゃないと Objec</foo:0x0000000dcc2858>…

Mechanize2.1リリース

Mechanize2.1がリリースされた。id:otn:20110924 や id:otn:20111107 で書いた、Cookie周りの不具合は直っているようだ。 ということで、それぞれに書いたパッチが不要になった。 今回増えた依存ライブラリは、domain_name, ntlm-http, unf, unf_ext。 domai…