タグ

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

  • GitLab Pages - tmtms のメモ

    GitHub Copilot がなんか気味悪いんで、GitLab に移行しようかなーと。 まあ、もともと前職で GitLab を使ってて GitHub よりも良かったんで、そのうち移行しようと思ってたので良い機会ではある。 とりあえず GitHub Pages で管理してた tmtms.net のコンテンツを GitLab Pages に移行してみる。 GitLab Pages GitHub Pages はリポジトリの Pages の設定から UI でシュッとできるんだけど、GitLab Pages は CI で設定する必要があるんでちょっとだけ面倒。 基的には GitLab Pagesで静的ウェブサイトを公開する方法 | GitLab.JP に書いてあるとおり。 ユーザー用のトップページは GitLab 上で ユーザー名.gitlab.io という名前のリポジトリにしておく。 リポジト

    GitLab Pages - tmtms のメモ
  • 転職した - 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 のメモ
  • Ruby 2.4 の変更内容 その1 - tmtms のメモ

    Ruby 2.5 がリリースされたので、そろそろ Ruby 2.3 から 2.4 にしようかと思う今日この頃です。 この前 Ruby 2.5 の変更内容の記事を書きましたが、Ruby 2.4 についてちゃんと調べてなかったので今さらですが調べてみました。 元ネタは https://github.com/ruby/ruby/blob/v2_4_3/NEWS です。 長くなったので3つにわけてます。 全般 - このページ 組み込みライブラリ 標準添付ライブラリ 条件式中での多重代入が可能 メソッド引数で rescue 修飾子が有効 トップレベルで return 可能 Refinements Symbol#to_proc で Refinements が有効 BasicObject##__send__ で Refinements が有効 Module#refine の引数にモジュールを指定可 Mo

    Ruby 2.4 の変更内容 その1 - tmtms のメモ
  • 本当はこわいMySQLプロトコル - tmtms のメモ

    11/28 に Haskell で MySQL の Xプロトコルを実装したという話が聴ける Club MySQL というイベントがあったので参加してきました。 clubmysql.connpass.com MySQLのプロトコルの話ということで、平日の夜とは言え東京で参加者9人(発表者含む)というマニアックな集まりでした。 自分も1年前に RubyMySQL Xプロトコルを実装していたのですが、このツイートを最後に中断していたのでした。 MySQL X Protocol で Collection の追加はできるようになったが、検索がめんどくさい。条件文字列のパースはクライアントで行う必要があるんだな。— とみたまさひろ💎🐬 (@tmtms) 2017年2月20日 今回話を聞いて、無理に謎条件式文字列をパースするんじゃなくて、処理系で書きやすいように書けばいいんだという方式に目から

    本当はこわいMySQLプロトコル - tmtms のメモ
  • 実行中プログラムのイメージを得る - tmtms のメモ

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

    実行中プログラムのイメージを得る - tmtms のメモ
  • MySQL の max_connections, table_open_cache, open_files_limit の関係 - tmtms のメモ

    昔書いた記事を久々に見てみたら何書いてあるかさっぱりわからなかったので、最新情報で書き直してみます。 tmtms.hatenablog.com 以下は MySQL 5.6, 5.7 について書かれています。 MySQL の max_connectoins, table_open_cache, open_files_limit パラメータは相互に依存して動的に値が設定されます。 パラメータ名 デフォルト値 最小値 最大値 max_connections 151 1 100000 table_open_cache 2000 1 524288 open_files_limit 5000 0 4G わからないと言われたので追記。 my.cnfやコマンドラインオプション等で設定された値(またはデフォルト値)を初期値として、open_files_limit → max_connections → ta

    MySQL の max_connections, table_open_cache, open_files_limit の関係 - tmtms のメモ
  • MySQLの日本語コレーション - tmtms のメモ

    4月にMySQLの日語コレーションについて語り合う場に呼ばれていろいろ話を聞いてきました。すぐにブログを書こうと思ったんですが、はや2ヶ月経過…。 ときどき、自分がMySQLの文字コードに関して発表する際に、次のようなスライドをいれてるんですが、 MySQL 8.0 でとうとう日語コレーションが入ることになったのに、なんか期待してたのと違いました。 で、その辺の話を聞きました(2ヶ月も経ってるのでうろ覚え)。 Q. わざわざ日語ロケール作るんだったら日人が扱いやすいロケールにしてほしい utf8mb4_ja_0900_as_csはMySQLが独自に考えたものではない。Unicode規格に従っている。過去にいろいろ独自にやって失敗してきてるので、もう独自にやるのは避けたい。 ai(accent insensitive)で「ハ」=「パ」=「バ」になるのも、ci(case insensi

    MySQLの日本語コレーション - tmtms のメモ
  • MySQLの文字コード事情 - tmtms のメモ

    この前 MySQL Casual に登壇して、「MySQLの文字コード事情」と称して発表してきました。 終電の都合で途中退席しましたが楽しかったです。また機会があれば参加したいです。 発表スライドはこちら MySQLの文字コード事情 2017版 from Masahiro Tomita www.slideshare.net 以下、補足のような何か。 「Charset≒エンコーディング (MySQLに限らない)」 英語版のWikipediaでもcharsetは Character encoding にリダイレクトされます。 自分がcharsetという用語に出会ったのはおそらくメールのContent-Typeヘッダが初めてだったと思います。 今ではメールだけではなくHTTPのヘッダでも使用されています。 なお、CharsetはInternet Assigned Numbers Authorit

    MySQLの文字コード事情 - tmtms のメモ
  • MySQL で utf8 と utf8mb4 の混在で起きること - tmtms のメモ

    MySQLUTF-8 で使おうと思ってハマりがちなのは charset utf8 を指定してしまうことです。 MySQLUTF-8 には歴史的事情により utf8 と utf8mb4 の二つあります。 UTF-8 は1バイト〜4バイトで1文字が構成される文字コードですが、MySQL の utf8 は4バイト文字を扱うことができません。ハマりたくなければ utf8mb4 を使いましょう。 utf8 を使ってしまった場合に4バイト文字がどのように扱われるか、自分でもうろ覚えだったのでメモしておきます。 登録 接続が utf8mb4 でカラムが utf8mb4 あたりまえですが、そのまま登録されます。 mysql> insert into utf8mb4 (c) values ('美味しい🍣と🍺'); mysql> select * from utf8mb4; +--------

    MySQL で utf8 と utf8mb4 の混在で起きること - tmtms のメモ
  • Ruby の Timeout の仕組み - tmtms のメモ

    Ruby で長い時間掛かるかも知れない処理のタイムアウトを行うにはこんな感じにします。 require 'timeout' begin Timeout.timeout(3) do # 3秒でタイムアウト hoge # 何かの処理 end rescue Timeout::Error puts 'なげーよ' # タイムアウト発生時の処理 end Timeout.timeout はブロック開始時にスレッドを作成し、そのスレッドで指定された秒数だけ sleep して、sleep から復帰してもまだブロックが終わってなければ作成元のスレッドに対して Timeout::Error 例外を発生させます。 指定時間以内に処理が終わる場合: timeout(X) │ スレッド作成 ─┐ │ │ ブロック実行 sleep X │ │ スレッドkill→ 🕱 │ timeout復帰 指定時間以内に処理が終わら

    Ruby の Timeout の仕組み - tmtms のメモ
  • 文字化けメールその2 - tmtms のメモ

    スパムメール…というかフィッシングメールが送られてきたのですが、文字化けしていました。 文字化けメール研究家としては(ry メーラーで見ると Subject と文が次のようになっていました。 From: 【りそな_y行】 <mp@resona-gr.co.jp> Subject: 人_J_^サ_`ビス 文字化けとしてはちょっと珍しい感じでなので、ソースを見てみます。 From: =?GB2312?B?ob6k6qS9pMrjedDQob8=?= <mp@resona-gr.co.jp> Subject: =?GB2312?B?sb7Iy9VK1F6ltalgpdOluQ==?= これを素直にデコードすると、「【りそな〓y行】」「人〓J〓^サ〓`ビス」となります。「〓」は変換に失敗した部分です。 charset が GB2312 となっています。GB2312 は中国で使われている文字エ

    文字化けメールその2 - tmtms のメモ
  • 文字化けメール - tmtms のメモ

    DELL にユーザー登録したらメールが送られてきたんですが、そのメールが文字化けしてました。 文字化けメール研究家としては解析せざるを得ません。 メーラーで見ると Subject が次のようになっていました。 デルアカウントに$4EPO?$$$?$@$-!"$"$j$,$H$&$4$6$$$^$9! メールのソースを見ると次のようになっていました。 Subject: =?iso-2022-jp?Q?=1B=24B=25G=25k=25=22=25=2B=25=26=25s=25H=24K?= =?iso-2022-jp?Q?=244EPO=3F=24=24=24=3F=24=40=24=2D=21=22=24=22=24j=24?= =?iso-2022-jp?Q?=2C=24H=24=26=244=246=24=24=24=5E=249=1B=28B=21?= この Subject の

    文字化けメール - tmtms のメモ
  • MIMEヘッダエンコーディングは複雑すぎてつらい - tmtms のメモ

    これは NSEG Advent Calender の7日目の記事です(内容は NSEG とも長野とも関係ありませんが…)。 www.adventar.org メールの送信者(From)や件名(Subject)は来ASCII(の一部の文字)しか書くことができないんですが、MIME(RFC2047)の登場によって日語等の非ASCII文字を記述することができるようになりました。 とは言ってもメールアプリから見て日語が表示できているだけで、内部的にはASCII文字にエンコードされています。MIMEヘッダエンコーディングと呼ばれています。 たとえば、「日語」という文字列は =?utf-8?b?5pel5pys6Kqe?= や =?iso-2022-jp?b?GyRCRnxLXDhsGyhC?= に変換されています。 この処理が実は非常に複雑で、正しくエンコードされてない場合がかなりあります。

    MIMEヘッダエンコーディングは複雑すぎてつらい - 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 のメモ
  • Postfix の main.cf のフォーマットについて - tmtms のメモ

    これは Postfix Advent Calendar 2014 の2日目の記事です。 Postfix が登場する以前、MTA と言えば Sendmail でした。Sendmail の設定ファイル sendmail.cf は人間が読むことも書くことも難しくて、設定ファイルを簡単に書くためのツールがいくつかあるくらいでした。それに比べたら Postfix の設定ファイルはかなり簡単です。 Postfix の重要な設定ファイルは主に2つあります。master.cf と main.cf です。 今回は main.cf のフォーマットについて詳しく書いてみます。 基形式 基は次の形式です。簡単です。 パラメータ名 = 値 「=」の前後の空白はあってもなくても構いません。また行末の空白文字は無視されます。 コメント 「#」で始まる行はコメントです。 # コメント 「#」は必ず行頭になければなりま

    Postfix の main.cf のフォーマットについて - tmtms のメモ
  • MySQLユーザーがPostgreSQLを触ってみたメモ - tmtms のメモ

    最近なぜか MySQL を使う Ruby アプリを PostgreSQL に対応する羽目になっているのですが、今までほとんど MySQL 以外の RDBMS を触ってなかったので、色々ハマったりしたのでメモっときます。 なお PostgreSQL 歴が浅いので間違ってること書いてるかもしれません。 API プログラムから MySQL にアクセスするには Ruby/MySQL を使っていたのですが、PostgreSQL 用の API を新たに覚えるのは面倒だったので、Sequel を使って書き直しました。 mysql.query("select col1, col2 from table where col3='xxx'") ↓ db[:table].where(col3: 'xxx').select(:col1, :col2) …みたいな感じです。 今までプログラム中に突然 SQL が現れ

    MySQLユーザーがPostgreSQLを触ってみたメモ - tmtms のメモ
  • 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 のメモ
  • メールアドレスの正規表現 - tmtms のメモ

    たまにメールアドレスの形式を正規表現で表すのは不可能とかというのを目にするのですが、そんなことはありません。入れ子がなければたいていの文字列の形式は正規表現で表すことができます。 ということで、RFC5321, 5322 からメールアドレスの正規表現を書いてみました。 /\A([0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+(\.[0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+)*|\"([\x20\x21\x23-\x5b\x5d-\x7e]|\\[\x20-\x7e])*\")@[0-9a-z]([0-9a-z-]*[0-9a-z])?(\.[0-9a-z]([0-9a-z-]*[0-9a-z])?)*\z/i ちょっと長いですけど、最近の Ruby だと (?<hoge>) と \g<hoge> を使うことで、同じ正規表現の繰り返しを簡単に書くことができる

    メールアドレスの正規表現 - tmtms のメモ
  • 相手がいないのに ESTABLISHED になってる TCP ポート - tmtms のメモ

    最近 ParallelServer というライブラリを作ったのですが、その最中に奇妙な状態になってる TCP ポートを見つけたので、メモっておきます。 Ruby では TCP サーバーは次のような感じで作ることができます。お手軽ですね。 require 'socket' Socket.tcp_server_loop(12345) do |socket, client_addr| socket.puts "Your IP address: #{client_addr.ip_address}" name = socket.gets socket.puts "Hello, #{name}" socket.close end これは 12345 ポートでクライアントからの接続を待ち、接続されたらクライアントのIPアドレスとクライアントからの入力をクライアントに送信して切断するだけの簡単なプログラム

    相手がいないのに ESTABLISHED になってる TCP ポート - tmtms のメモ
  • Gitで最初のコミットをどうにかする - tmtms のメモ

    最初のコミットの内容を変更したい Gitで最初のコミットの内容を変更したいと思って git rebase -i <最初のコミット> とやっても、最初のコミットは出てきません。 % git log --oneline 4f4f42c 二番目のコミット 9d4876c 最初のコミット % git rebase -i 9d4876c pick 4f4f42c 二番目のコミット このような場合は git rebase -i --root を指定すると良いようです。 % git rebase -i --root pick 9d4876c 最初のコミット pick 4f4f42c 二番目のコミット 最初のコミットの前に別のコミットを入れたい さっきと同様に git rebase -i --root で開いて、最初のコミットを edit にします。 % git rebase -i --root edit

    Gitで最初のコミットをどうにかする - tmtms のメモ