タグ

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

  • 第6回「オブジェクト指向設計実践ガイド」読書会に参加しました - tmtms のメモ

    11/15 NSEGの「オブジェクト指向設計実践ガイド」読書会の第6回に参加しました。参加者3名でした。寂しい。 nseg.connpass.com 今回は第6章を読みました。 第6章は継承の話でした。 普段あんまり意識せずになんとなく実装していたのですが、明文化されるとなるほどなーと。 継承関係にあるクラス間であっても、オブジェクト間と同様に依存を少なくすべきという感じの話でした。 super を使うのではなく、親クラスからサブクラスのメソッドを呼ぶようにするというのは、たしかに良いかもしれないけど、post_initialize メソッドを作るってのはどうかなぁ。個人的には initialize メソッドについては super 使ってもいいと思いました。 あとは、Rubyではsuperとsuper()の括弧の有無で振る舞いが変わるというような話もしました。

    第6回「オブジェクト指向設計実践ガイド」読書会に参加しました - tmtms のメモ
    stealthinu
    stealthinu 2017/11/16
    super.merge({...})というコードがあって、superが返すハッシュにハッシュをmergeしてるのだけどruby目が育ってないので最初、superオブジェクトのmergeメソッド呼んでる?となりました。
  • 実行中プログラムのイメージを得る - tmtms のメモ

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

    実行中プログラムのイメージを得る - tmtms のメモ
    stealthinu
    stealthinu 2017/10/26
    いろいろ面白かった。緑の怪獣さんすごい。しかしこの知識、いつの日か使えるのだろうか。
  • Rubyおもしろい - tmtms のメモ

    Rubyは括弧をつけなくてもメソッドを呼び出せます。メソッド名は普通は英小文字で始まります。ローカル変数も英小文字で始まります。 こんなRubyプログラムを実行すると(ifの条件部で代入しているのはtypoではありません)、 def hoge 123 end p hoge x = 456 if hoge = x p hoge end p hoge こういう出力が得られます。 123 456 456 途中でhogeがメソッド呼び出しから変数参照に変わったのがわかります。 変数宣言後は括弧「()」をつけない場合はメソッド呼び出しではなく変数参照になります。 def hoge 123 end p hoge # hogeメソッド呼び出しなので123 x = 456 if hoge = x # hogeにx(456)を代入。その結果は真なのでif内を実行 p hoge # ここでのhogeはローカル

    Rubyおもしろい - tmtms のメモ
    stealthinu
    stealthinu 2017/10/17
    rubyで通常のifと後置ifで動きが違っちゃうというネタ。
  • 第3回「オブジェクト指向設計実践ガイド」読書会に参加しました - tmtms のメモ

    10/4 NSEGの「オブジェクト指向設計実践ガイド」読書会の第3回に参加しました。参加者11名でした。盛況ですね。 nseg.connpass.com 今回は第3章を読みました。 コード例が単順すぎて、より良い設計として挙げられてるコードがいまいちピンとこないところもありましたが、なんとなくわかった気がします。 「自身より変更されないものに依存しなさい」は、なるほどなーと思いました。 引数を一つのHashで受けつけるというのは、訳注にもありましたが今はキーワード引数を使うのが良いですね。 の「はじめに」に「で説明する概念を理解するために Ruby を知っている必要はありません」とありましたが、コード例を読み解くにはやっぱりRubyの知識が必要です。Rubyの構文についての説明が一切ないので。 私は前回の第2章には不参加だったのですが、attr_reader とか @変数 とかが何の説

    第3回「オブジェクト指向設計実践ガイド」読書会に参加しました - tmtms のメモ
    stealthinu
    stealthinu 2017/10/05
    とみたさんの説明聞いてなるほどrubyは黒魔術使えるわ…と思った次第。
  • reveal-ck - tmtms のメモ

    ここ半年くらいプレゼンのスライドはreveal-ckというのを使ってます。 github.com reveal-ck は、ブラウザ上のプレゼンツール reveal.js を簡単に使えるようにしたものです。 LinuxでもFirefoxが色付き絵文字を使えるようになったのをきっかけに、Markdownで書けてブラウザ上で動くプレゼンツールもいいかなーと。細かい調整とかもCSSで自由にできますし。 以下、まとめとかないと忘れるのでメモです。 インストール % gem install reveal-ck スライド作成 % mkdir hoge % cd hoge % touch slides.md % reveal-ck generate Generating slides for 'slides.md'.. % reveal-ck serve これでブラウザから http://localhos

    reveal-ck - tmtms のメモ
    stealthinu
    stealthinu 2017/08/29
    reveal-ckというreveal.jsベースのプレゼンツール。自分もプレゼンはmarkdown+pandoc+reveal.jsでやってるので使ってみたい。
  • 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 のメモ
    stealthinu
    stealthinu 2017/06/20
    ちょっと微妙な日本語コレーションのutf8mb4_ja_0900_as_csはunicode規格に従ってるからってことだった。なかなかつらい。
  • MySQLユーザ会会 in 長野 を開催しました - tmtms のメモ

    5/13(土)に「MySQLユーザ会会 in 長野」を開催しました。 nseg.connpass.com 「会」が2つあるのは仕様です。「MySQLユーザ会」の会合で「MySQLユーザ会会」です。 開催経緯はこんなかんじです。 自分もMyNAとかに気軽に遊びに行きたい。— とみたまさひろ🍣🍺 (@tmtms) 2017年1月5日 @tmtms 遊びに行きましょう! っていうか「俺がMyNAだ!」くらい言ってくれてもいいんじゃないでしょうかw— 坂井 恵(SAKAI Kei) (@sakaik) 2017年1月5日 @sakaik 「俺がMyNAだ!みんな長野に来い!」— とみたまさひろ🍣🍺 (@tmtms) 2017年1月5日 @tmtms 長野まで行きますよ!いつ行けばいいですか?— 🐬🍣🍻 (@RKajiyama) 2017年1月5日 この発言から早3ヶ月経ちましたが、5

    MySQLユーザ会会 in 長野 を開催しました - tmtms のメモ
    stealthinu
    stealthinu 2017/05/22
    とみたさん主催で「MySQLユーザ会」会をやったののまとめ。これもNSEGの活動扱いなので5月は3連チャンになってる。
  • Linuxのメモリまわり - tmtms のメモ

    ちょっと前から groonga を使うとプロセスサイズが肥大化するのが気になっていて、メモリ関係を色々調べていたのですが、そこでわかったことなどを書いときます。 malloc() しただけではOSのメモリは使用されない メモリを1GB獲得するだけのこんなプログラムを作って実行してみます。 #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char *p; char buf[1024]; int i; p = malloc(1024*1024*1024); gets(buf); for (i=0; i<1024*1024; i++) memcpy(p+i*1024, buf, sizeof(buf)); pause(

    Linuxのメモリまわり - tmtms のメモ
    stealthinu
    stealthinu 2017/04/13
    今日とみたさんに教えてもらったLinuxのメモリはmallocしただけでは実際に確保されるわけじゃない話、2010/10のとみたさんのブログに書いてあったのね。6年半遅れだったか…
  • ZIP中のファイル名の文字化け(Ruby編) - tmtms のメモ

    tmtms.hatenablog.com という記事を書きましたが、今回はRubyZIPファイルを作る時の話を。 RubyZIPファイルを作るには、rubyzip というライブラリを使います。 % gem install rubyzip 次のようにしてZIPにファイルを追加できます。 require 'zip' Zip::File.open('hoge.zip', Zip::File::CREATE) do |zip| zip.add('いろはにほへと.txt', '/path/to/いろはにほへと.txt') end Zip::File#add の第一引数はZIP内に記録されるファイル名、第二引数は実際のファイルのパスです。この二つのファイル名は同じである必要はありません。 ただし、この場合はUTF-8フラグがセットされません。つまりWindowsの標準機能で開くと文字化けしてしまい

    ZIP中のファイル名の文字化け(Ruby編) - tmtms のメモ
    stealthinu
    stealthinu 2017/04/10
    rubyでzip作る時に文字コードの指定方法とUTF-8フラグの立て方。そもそも日本語ファイル名使わければいいのだけど、クライアントの要請でそう出来ないことも多いので。
  • ZIP中のファイル名の文字化け - @tmtms のメモ

    こんな記事がありました。 gihyo.jp これはMacユーザー用の書籍の宣伝記事らしいのですが、「Windowsを使ってる人のためにMac側がひと手間かけてあげよう」なんて殊勝なことをマカーが言うとは時代も変わったもんです。([追記] はてブのコメントを見たらさすがマカーという意見が並んでて安心しました) まあ私はWindowsユーザーでもMacユーザーでもないのでどうでもいいのですが、文字化けなネタなのでいついてみます。 記事中に、「付物出稿.zip」というファイルを開いた時の画像が載ってます。 文字の並びからして、UTF-8文字列をシフトJIS(CP932)とみなして表示してしまった文字列でしょう(「繧ォ繝上y繝シ繝輔か繝ォ繧ソ繧・」の元の文字は「カバーフォルダ」で、「蟶ッ繝輔か繝ォ繧ソ繧・」は「帯フォルダ」)。 つまり、Macはファイル名をUTF-8ZIPに書き込み、Wi

    ZIP中のファイル名の文字化け - @tmtms のメモ
    stealthinu
    stealthinu 2017/04/06
    とみたさんの文字化けソムリエぶりには… なんであれ読めるんだ。ブ米にMacでUTF-8フラグ付くというコメントと付かないというコメントとあり、なんかMacってだけじゃない条件がありそう。
  • MySQL の "Illegal mix of collations" エラーについて - tmtms のメモ

    MySQL で「Illegal mix of collations」というエラーが出ることがあります。テーブルの charset と接続の charset 等、すべてを utf8 などで統一してれば出ないので、あまり見ることはないかもしれません。 私はカラム毎に charset を指定することがあるので、時々このエラーにハマります。 たとえば、次のようなテーブルを作ったりします。 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, email VARCHAR(320) CHARSET ascii UNIQUE, name VARCHAR(30) CHARSET utf8 ); メールアドレスの規約は、ローカル部が最大64バイト、ドメイン部が最大255バイト、それと @ の1バイトで合計最大320バイトなので、 VARCHAR(32

    MySQL の "Illegal mix of collations" エラーについて - tmtms のメモ
    stealthinu
    stealthinu 2017/03/14
    僕の知りたいことはすでに@tmtmsさんが調べてくれてる件。しかしconvertではbinaryは使えてもutf8_general_ciは使えないのかな。試したがダメだった。binaryは特殊なcharsetと書いてあるし。
  • Sequelのトランザクション内でタイムアウトするとCOMMITされてしまう - tmtms のメモ

    ちょっと前にハマったのでメモ。 Sequelでトランザクションを使う時は次のように transaction メソッドにブロックを渡します。 require 'sequel' require 'logger' db = Sequel.connect('mysql2://user:passwd@localhost/test') db.loggers = [Logger.new($stdout)] db.transaction do db[:test].insert(id: 123) end I, [2017-03-12T22:34:51.946849 #27932] INFO -- : (0.000119s) SET @@wait_timeout = 2147483 I, [2017-03-12T22:34:51.947047 #27932] INFO -- : (0.000133s) SET

    Sequelのトランザクション内でタイムアウトするとCOMMITされてしまう - tmtms のメモ
    stealthinu
    stealthinu 2017/03/14
    これはこわい罠だ… ひっかかった後に調べるのが大変そう。
  • 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 のメモ
    stealthinu
    stealthinu 2017/02/07
    MySQLのcharset名でEUC-JPがujisという名前になったのはとみたさん由来だったとは… 人に歴史ありだな。あと「パ」と半角「ハ゜」が=だと一致するのにLIKEだと一致しないというのは罠だな。
  • Firefoxで絵文字が白黒で表示される - tmtms のメモ

    Firefox 50 で絵文字に色がつきました。 次のようなテキストファイルを表示すると 🍣と🍺 次のように表示されるようになりました。 ですが、Ubuntu で次のファイルを表示すると 🐭🐮🐯🐰🐲🐍 次のように「🐭」と「🐮」だけ白黒で表示されてしまいました。 どうやら、OSのフォントに該当する文字があればそれが優先されるようです。 Dejavu Sans フォントに該当するフォントが入ってるようなので、それを読ませないようにすればいいようです。 % sudo apt purge fonts-dejavu-core ちゃんと色付きで表示されるようになりました。 なお、fonts-dejavu-core を削除すると、合わせて xubuntu-core や xubuntu-desktop も削除されてしまいますが、これらはメタパッケージなので特に問題ありません。 それが嫌

    Firefoxで絵文字が白黒で表示される - tmtms のメモ
    stealthinu
    stealthinu 2016/12/01
    Dejavu Sansフォントには白黒のネズミと牛のアイコンが入っているためそこだけそっちのフォントが使われてしまうと。解決するためには該当フォントの削除かchmod 000
  • 相手がいないのに 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 のメモ
    stealthinu
    stealthinu 2016/11/08
    MySQLで片方だけESTABLISHEDになってMySQL側はみんなsleepになってるという問題が発生してぐぐったら@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 のメモ
    stealthinu
    stealthinu 2016/09/07
    MySQLではutf8とutf8mb4と名前似てるからって混在させるとめちゃくちゃになるという話。utf8mb4を使うのが吉と。とみたさんホッテントリ。
  • Ruby の文字列データの複製について - tmtms のメモ

    Ruby で String オブジェクトを複製しても、文字列データは複製されません。 data = "a"*10*1024*1024 system "grep ^VmSize /proc/#$$/status" t1 = Time.now a = [] 100.times do |i| a.push data.dup end t2 = Time.now system "grep ^VmSize /proc/#$$/status" printf "%.6f\n", t2-t1 実際に10MBの文字列を作って、100回dupする前後でプロセスのメモリサイズを比較してみても変わってません。 % ruby hoge.rb VmSize: 56140 kB VmSize: 56140 kB 0.000164 複製後に文字列を変更すると、そこで文字列データも複製されます。 data = "a"*10*

    Ruby の文字列データの複製について - tmtms のメモ
    stealthinu
    stealthinu 2016/05/30
    rubyでは文字列を「コピー」したときじゃなく変更した時に実際にコピーが作られるが部分文字列取り出した場合でもコピーが作られると。追記がまたよい。
  • MySQL Shell / X DevAPI / X Protocol - @tmtms のメモ

    MySQL 5.7.12 で突如登場した MySQL Shell とか X DevAPI とか X Protocol とかが面白そうだったので調べてみました。 Document Store とかも同じ文脈で語られてて、それぞれの用語が何を表してるのかややこしかったので、まずその辺から。 X Protocol mysqlx プラグインを使用することで追加されるサーバー/クライアントプロトコル。ポート番号は 33060。 詳細→ https://dev.mysql.com/doc/internals/en/x-protocol.html X DevAPI 各プログラミング言語用の新しいAPI。Document Store用のAPIも含む。今のところ、MySQL Shell JavaScript, MySQL Shell Python, Java, .Net, Node.js 用の API があ

    MySQL Shell / X DevAPI / X Protocol - @tmtms のメモ
    stealthinu
    stealthinu 2016/05/11
    MySQLをドキュメントDBとして使えるようにするために新しいプロトコルと触るための新しいインターフェイスと新しい対話型インターフェイスが作られた、っぽいとのこと。
  • MySQL ソケットピア証明書認証プラグイン - tmtms のメモ

    全然知らなかったんですが、MySQLに「ソケットピア証明書認証プラグイン」というのがあるのを知りました。 http://dev.mysql.com/doc/refman/5.6/ja/socket-authentication-plugin.html これを使うとOSのログインユーザーと同じ名前のMySQLユーザーであれば、パスワード無しでMySQLに接続することができます。ただしローカルホストでUNIXソケット経由での接続のみ。 試してみます。 % mysql -uroot mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so'; mysql> CREATE USER tommy@localhost IDENTIFIED WITH auth_socket; % whoami tommy % mysql mysql> SELECT

    MySQL ソケットピア証明書認証プラグイン - tmtms のメモ
    stealthinu
    stealthinu 2016/04/25
    mysqlでunixユーザ名と同じユーザ名のmysqlユーザが作られていたらパスワード無しで入れるのだそう。mysql5.5.10以降。独立だと思ってたのでこれはびっくり。これセキュリティ的に注意が必要になる場合あるかも。
  • Twitter からの文字化けメール - tmtms のメモ

    Twitter を名乗るメールアドレスからメールが届いたのですが、Subjectが文字化けしていました。 Subject: ã¨ã¿ãŸã¾ã•ã²ã‚さん、Twitterからの感謝のメッセージです。 いまのTwitterがあるのは、皆さんのおかげです。 10年前の今日、ひとつのツイートからすべてが始まりました。 そのときから、Twitterは驚くべきことを皆さんと一緒に行いました。<BR> この瞬間にも何百万人の人々がつながり、それぞれの思いを自由に語り、<BR> かつては想像もできなかったインパクトを世界中に与えています。 Twitterの誕生日に、皆さんにあらためて感謝いたします。<BR> これまで支えてくださり、ありがとうございます!<BR> そして次の10年に向けてもよろしくお願いいたします。 Subject が文字化けしていることだけでなく、文中に「<BR>」がそのまま入って

    Twitter からの文字化けメール - tmtms のメモ
    stealthinu
    stealthinu 2016/03/23
    『「C2 xx」や「C3 xx」が繰り返されているのは、たいてい Latin-1(ISO8859-1) を UTF-8 に変換した時のバイト列』さすがは文字化けソムリエ!