タグ

ブックマーク / blog.tmtms.net (35)

  • 転職した - tmtms のメモ

    これは「Rubyist近況[1] Advent Calendar 2021」の6日目の記事です。 adventar.org 自称 Rubyist なので近況を書きます。 2021年10月末で30年ほど勤めた富士通グループを退職しました。 11月からは SmartHR という会社で働いてます。 3年ほど Ruby仕事ではあんまり使ってなかったのですが、また Ruby仕事で使うようになりました。 会社から配布された PC は Core i7 メモリ32GB の MacBook Pro なんでかなり人権がある感じなんですが、人生Mac で1ヶ月位経ってもまだ慣れなくて、VM で Ubuntu Desktop 入れようか迷ってます。 近況は以上です。以下は富士通グループの入社〜退職までのメモ。長いので読まなくていいです。 1991〜 設立7年目の今はなき「富士通長野システムエンジニア

    転職した - tmtms のメモ
    seiunsky
    seiunsky 2021/12/06
    当時、cgi.rbをゴリゴリやるパッケージ製品のカスタマイズを請け負う側だったのですが、10数年を経て同僚になる日が来るとは……!
  • MySQLと「令和」その2 - tmtms のメモ

    MySQLでは異なる字が等しいと見なされることがあるということを書きました。 tmtms.hatenablog.com この動きはMySQLが独自に変なことをしているわけではなく、Unicodeの規則に従っています。 MySQL 8.0 のデフォルトのCollationは Unicode 9.0.0のUnicode Collation Algorithm(UCA) に従っています。 文字にはそれぞれ Weight という値が設定されていてソートに使用されています。この値が同じなら等しい文字とみなされます。 Collation utf8mb4 のデフォルトの Collation は utf8mb4_0900_ai_ci という名前ですが、これは次のような意味です。 名前の要素 意味 utf8mb4 charset名 0900 Unicodeバージョン9.0.0 ai アクセントの違いを無視

    MySQLと「令和」その2 - tmtms のメモ
  • Ruby 2.6 の変更点 - 言語仕様その2 - tmtms のメモ

    Ruby2.6アドベントカレンダーの2日目の記事です。 qiita.com 言語仕様 キーワード引数のハッシュのキーがシンボルでない場合はエラー 変数名と同じブロックパラメーターでの警告を削除 原因となった例外も出力 言語仕様 キーワード引数のハッシュのキーがシンボルでない場合はエラー https://twitter.com/yukihiro_matz/status/1022287578995646464 def hoge(*a, **k) end hoge("a"=>1, a: 1) # 2.6ではエラー non-symbol key in keyword arguments: "a" (ArgumentError) 変数名と同じブロックパラメーターでの警告を削除 https://bugs.ruby-lang.org/issues/12490 2.5 では次のように実行すると警告が出てい

    Ruby 2.6 の変更点 - 言語仕様その2 - tmtms のメモ
    seiunsky
    seiunsky 2018/12/05
    例外の変更、めちゃ便利
  • Ruby 2.6 の変更点 - Array - tmtms のメモ

    Ruby2.6アドベントカレンダーの3日目の記事です。 qiita.com Array Array#union 追加 Array#difference 追加 Array#filter, Array#filter! 追加 Array#to_h にブロックを渡すとキーと値を変換できる Array Array#union 追加 https://bugs.ruby-lang.org/issues/14097 引数に指定した配列を結合した新しい配列オブジェクトを返します。重複した要素は削除されます。 ary1 = [1, 2, 3] ary2 = ary1.union([2, 3, 4, 5]) ary1 #=> [1, 2, 3] ary2 #=> [1, 2, 3, 4, 5] 複数の配列を指定できること以外は Array#| と同じ。 Array#difference 追加 https://b

    Ruby 2.6 の変更点 - Array - tmtms のメモ
    seiunsky
    seiunsky 2018/12/05
    ハチャメチャに便利機能だ
  • 「かんたんRuby」 - tmtms のメモ

    すがわらまさのり さんが上梓された「かんたんRuby」を頂戴いたしました。 なんとサインです。何故かぼかしていますが、当にサインです。 このRubyの入門書ですが、帯に「いちばんやさしいプログラミングの入門書」とある通り、プログラミングの入門書でもあります。 開発環境の構築方法や変数とは何か?オブジェクトとは何か?から説明されていて、プログラミング未経験者でも理解できるような構成になっています。 初心者向けと言っても、文字コード、テスト、Rake、RubyGems、Bundler等の説明もちゃんとあります。それぞれの説明はそんなに詳しいわけではないですが、取っ掛かりとしてまず使ってみるには十分なレベルだと思います。 自分はRubyを使い始めてもう20年もたつので、正直なところ初心者の気持ちはもうわからないところがあって、プログラミング未経験な新しい人にRubyをどうやって教えよう

    「かんたんRuby」 - tmtms のメモ
    seiunsky
    seiunsky 2018/07/09
    レビューを書いていただきました!コスパ◎
  • そろそろMySQLのutf8について一言いっとくか - tmtms のメモ

    MySQLのutf8 charsetは、やれ「罠」だの「絵文字が入らなくて使えない」だの「utf8という名前はutf8mb4の別名にすべき」だの、散々な言われようでディスられてかわいそうな charset なんだけど、というか主に私がそう言ってる気もするんだけど、そろそろ utf8mb3 のエイリアスとしての utf8 は消え去ろうとしてるみたいなので、ここでちょっと勝手にフォローしておく。 UTF-8 エンコーディングの RFC は RFC3629で、ここで UTF-8 は最大4バイトと書かれている。 しかし、この RFC3629 の前のRFC2279では6バイトだった。 RFC3629 の日付は 2003/11 なので、つまり 2003/11 よりも前は UTF-8 の1文字のバイト数は最大6バイトだったのだ(少なくともRFC上では)。 MySQL が Unicode に対応したのはバ

    そろそろMySQLのutf8について一言いっとくか - tmtms のメモ
    seiunsky
    seiunsky 2018/06/23
    勉強になる
  • MySQL Innovation Day Tokyo で MySQL 8 の文字コードについて話した - @tmtms のメモ

    MySQL Innovation Day Tokyo に参加して10分ほど喋ってきました。 ひさびさに巨大サキラちゃん登場。人曰く5年間ほど倉庫に隠れてたそうです。 昼ごはんは今半のすき焼弁当でした。豪華! 会場の様子。百数十人で満員でした 以下わたしの発表内容。スライドはこちら https://tmtm.github.io/mysql-innovation-tokyo/ MySQL恒例「RCとはいったい…」案件 utf8の指定でwarningが出るようになった mysql> set names utf8; Query OK, 0 rows affected, 1 warning (0.00 sec) Warning (Code 3719): 'utf8' is currently an alias for the character set UTF8MB3, which will be

    MySQL Innovation Day Tokyo で MySQL 8 の文字コードについて話した - @tmtms のメモ
    seiunsky
    seiunsky 2018/05/25
    utf8mb4_0900_as_cs 覚えておこう
  • Ruby 2.5 の変更内容 その1 - tmtms のメモ

    Rubyは毎年クリスマスにバージョンアップされます。 今年も12/25にRuby 2.5がリリースされました。 https://www.ruby-lang.org/ja/news/2017/12/25/ruby-2-5-0-released/ https://docs.ruby-lang.org/en/trunk/NEWS.html を元に変更内容を調べてみました。 前に書いたのは 2.5.0 preview1 時点のものでしたが、それから結構変わっています。 長くなったので3つにわけてます。 全般 - このページ 組み込みライブラリ 標準添付ライブラリ 個人的にはブロック内の rescue/else/ensure に begin, end を書かなくてよくなったのが嬉しいです。 言語仕様 トップレベル定数参照 rescue/else/ensure 節 文字列内式のRefinement U

    Ruby 2.5 の変更内容 その1 - tmtms のメモ
  • Ruby 2.5 の変更内容 その2 - 組み込みライブラリ - tmtms のメモ

    https://docs.ruby-lang.org/en/trunk/NEWS.html を元に Ruby 2.5 の変更内容を調べてみました。 長くなったので3つにわけてます。 全般 組み込みライブラリ - このページ 標準添付ライブラリ いろいろ便利になっていますが、個人的には Hash#slice, Kernel#pp が嬉しいです。 配列/ハッシュ/Enumerable Array#append, #prepend 追加 Enumerable#any?, #all?, #none?, #one? が引数で判定 Hash#transform_keys, transform_keys! 追加 Hash#slice 追加 数値 Integer.sqrt 追加 Integer#allbits?, #anybits?, #nobits? 追加 Integer#pow 追加 Integer#

    Ruby 2.5 の変更内容 その2 - 組み込みライブラリ - tmtms のメモ
  • Ruby 2.5 の変更内容 その3 - 標準添付ライブラリ - tmtms のメモ

    https://docs.ruby-lang.org/en/trunk/NEWS.html を元に Ruby 2.5 の変更内容を調べてみました。 長くなったので3つにわけてます。 全般 組み込みライブラリ 標準添付ライブラリ - このページ 個人的には coverage の分岐カバレッジ取得に SimpleCov とかが対応してくれるのを期待してます。 bigdecimal BigDecimal::VERSION 追加 BigDecimal.new, .ver が deprecated BigDecimal#clone, #dup が同じオブジェクトを返す coverage Coverage が分岐カバレッジ、メソッドカバレッジをサポート drb DRb の ACL::ACLEntry.new が IPAddr::InvalidPrefixError を無視しない erb ERB#res

    Ruby 2.5 の変更内容 その3 - 標準添付ライブラリ - tmtms のメモ
  • Rubyのbundlerをアップデートしたらプログラムが動かなくなった話 - tmtms のメモ

    Rubybundler を 1.13 から 1.15 にアップデートしたら今まで動いたプログラムが動かなくなりました。 こんな感じ: % bundle _1.13.7_ exec ruby -r./hoge.rb -e Hoge.new % % bundle _1.15.4_ exec ruby -r./hoge.rb -e Hoge.new hoge.rb:3:in `initialize': uninitialized constant Hoge::Timeout (NameError) Did you mean? Time from -e:1:in `new' from -e:1:in `<main>' この hoge.rb の中味はこんな感じで、 class Hoge def initialize Timeout.timeout(5){sleep 1} end end

    Rubyのbundlerをアップデートしたらプログラムが動かなくなった話 - tmtms のメモ
  • 実行中プログラムのイメージを得る - tmtms のメモ

    Twitter見てたらこんなこと言ってる人がいました。 Unix で実行中の実行ファイルのパスを確実に得る方法はない、というのは FAQ だと思うけど、実際にやりたいことは自分自身を別プロセスで新たに立ち上げたいということなので、メモリにロード済の自分自身から別プロセスを作る手段はないんだろうか— Yusuke Endoh (@mametter) 2017年10月25日 昔自分もそんなこと考えたなーと思いつつ、Linuxなら /proc/<pid>/exe が実行ファイルへのリンクになってるんで、 環境によるような気もするけど、自分の実行ファイルのパスは /proc/pid/exe から取れないですかね。— とみたまさひろ (@tmtms) 2017年10月25日 と言ってみたら、 Linuxならその手が使えますが、現在実行中の実行ファイルでも削除できちゃいますから、パス名を得る完璧な方法

    実行中プログラムのイメージを得る - tmtms のメモ
    seiunsky
    seiunsky 2017/10/26
    へーーそうなのか
  • Gemの作り方 - tmtms のメモ

    RightCSVで久々にGemを作ったので、最近のGemの作り方をメモっときます。 GitHub上にリポジトリを作って git clone 別に最初にやらなくてもいいですけど、どうせ GitHub で公開するのなら最初にやっといた方が楽です。READMEやLICENSEファイルも作ってくれますし。 % git clone git@github.com:tmtm/rightcsv.git bundle gem で雛形を作る % bundle gem rightcsv --test Creating gem 'rightcsv'... create rightcsv/Gemfile create rightcsv/lib/rightcsv.rb create rightcsv/lib/rightcsv/version.rb create rightcsv/rightcsv.gemspec cr

    Gemの作り方 - tmtms のメモ
    seiunsky
    seiunsky 2017/08/25
    bundlerを利用したgemの作り方が載っているパーフェクトRuby第二版もよろしくね(便乗)
  • Rubyのエンコーディング - tmtms のメモ

    Ruby 1.9 から文字列や正規表現オブジェクトはそれぞれエンコーディング(いわゆる文字コード)を保持するようになりました。 たとえば 0xB1 0xB2 という2バイトは EUC-JP エンコーディングでは「渦」、SHIFT_JIS エンコーディングでは「アイ」という文字になります。つまり同じバイト列でもエンコーディングが異なれば異なる文字として解釈されます。 1.8 では文字列はただのバイト列でした。なので、それがどのような文字を表しているのか、つまりエンコーディングが何なのかはプログラムが知っている必要がありました。 1.9 では文字列オブジェクト自身が自分が何のエンコーディングかを知っています。同じ 0xB1 0xB2 というバイト列でも、それが EUC-JP の「渦」なのか SHIFT_JIS の「アイ」なのかは、文字列自身が知っています。 スクリプトエンコーディング スクリプ

    Rubyのエンコーディング - tmtms のメモ
  • Crystal - tmtms のメモ

    前に Crystal の記事を書いて、 tmtms.hatenablog.com このスライドの中で、 と書いたんですが、現在は条件分岐中のメソッド定義はエラーになるようになっています。 if true def hoge end end % crystal hoge.cr Error in ./hoge.cr:2: can't declare def dynamically def hoge ^~~~ これは、次の Issue で変更されたのですが、 github.com "Seen here" で私のスライドが参照されているという…。しかもスライド公開した翌日に。 Qiita の Crystal の日語の記事も読んでるみたいだし、Crystal 作者さんすごいな。 その後、Crystal を触ってて気づいたことなど: インスタンス変数の型 class A def hoge @str =

    Crystal - tmtms のメモ
  • Software Design 9月号の特集の記事を書きました - tmtms のメモ

    Software Design 9月号の特集の記事を書きました。もう三週間も前に発売になってますが…。 ソフトウェアデザイン 2015年 09 月号 [雑誌] 出版社/メーカー: 技術評論社発売日: 2015/08/18メディア: 雑誌この商品を含むブログ (3件) を見る 第1特集「正規表現・SQL・オブジェクト指向 苦手克服のベストプラクティス」の正規表現の記事と、第2特集「メールシステムの教科書」の第1章と第2章を書きました。第2特集の第4章は NSEG 仲間の佐藤さんが書いてます。 正規表現もメールも基的なことしか書いてませんが、何か参考になれば幸いです。 ところで正規表現の記事の方には誤りがあります。 p.27〜28 誤 任意の50文字のあとに文字列末尾があるような位置に適合します。つまりこの位置以降の文字数が50文字であることを指定できるのです。 正 任意の5〜10文字のあと

    Software Design 9月号の特集の記事を書きました - tmtms のメモ
    seiunsky
    seiunsky 2015/09/09
    “月に1本くらいなら普通に書けると思うんで”
  • RSpec をやめて Test::Unit に戻る - tmtms のメモ

    最近の RSpec は、それまで obj.stub(hoge: value) と書けたものが、 allow(obj).to receive(:hoge).and_return value と書かないといけなくなったりとか、正気の沙汰とは思えないような変更をしたりするので、何年かぶりに Test::Unit を使ってみようとリハビリ中です。 RSpec は、テストケースを入れ子にできたり、テストケースや example がクラスやメソッドではなく、文字列で自由に書くことができたりしたのが良かったのですが、最近の Test::Unit ではそれもできるようになっています。 [ruby-list:48926] [ANN] test-unit 2.5.2 このリリースはとみたさんに使ってもらえるように改良したリリー スです。新しく追加した--locationはRSpecの--line_number

    RSpec をやめて Test::Unit に戻る - tmtms のメモ
  • Ruby, MySQL のうるう秒の扱い - @tmtms のメモ

    2015/7/1 にうるう秒が挿入されるということで、うるう秒の話題が盛り上がってるようなので自分も書いてみます。 Linux 上のプログラムが時刻で60秒を刻むには、うるう秒対応のタイムゾーンを使う必要があります。 通常はうるう秒を考慮していないタイムゾーンが使用されているので、60秒を含む時刻になることはありません。 60秒を含む時刻を扱うには、right/Japan のように right/ を前につけたタイムゾーンを指定します。 前回のうるう秒は 2012/7/1 08:59:60 (JST) だったので、これで試してみます。 % TZ=Japan date --date='2012-07-01 08:59:60' date: `2012-07-01 08:59:60' は無効な日付です % TZ=right/Japan date --date='2012-07-01 08:59:6

    Ruby, MySQL のうるう秒の扱い - @tmtms のメモ
    seiunsky
    seiunsky 2015/01/12
    なぜかブクマしてなかった
  • Rubyでシェルもどきを作る - tmtms のメモ

    Ruby でシェルのようなものを作ってみると、Ruby とシェルやシステムコールの理解ができて、研修の課題とかにいいんじゃないかと10年くらい前に思ってたのを、ふと思い出したので書いてみます。 基 シェルの動作を簡単に説明すると次のような感じです。 プロンプトを出力 標準入力からコマンドラインを読み込む 読み込んだコマンドを実行する コマンドの終了を待つ 1 に戻る これをそのまま Ruby で書いてみます。 while true print '-> ' # プロンプト表示 cmd = gets or break # コマンド入力 cmd.chomp! # 末尾の改行削除 pid = Process.fork do # 子プロセス生成 Process.exec [cmd, cmd] # コマンド実行 end Process.waitall # 子プロセスの終了待ち end Process

    Rubyでシェルもどきを作る - tmtms のメモ
  • Padrino のエラー処理と後処理 - tmtms のメモ

    最近 Padrino というウェブアプリケーションフレームワークを触ってます。 Padrino ではコントローラーのアクションを実行する前後に処理を実行することができます。 before do 前処理 end after do 後処理 end get :hoge do 処理 end また、エラー時に表示されるページを指定することができます。 error 403 do render 'errors/403' end error 404 do render 'errors/404' end error 500 do render 'errors/500' end ですが、エラー時に after が実行されない場合があったので調べてみました。 その1. コントローラーが見つからない場合 コントローラーが見つからない場合は、404 Not Found エラーになるのですが、error 404 は実

    Padrino のエラー処理と後処理 - tmtms のメモ