[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

selfに関するtaraoのブックマーク (31)

  • 再帰的な構造のデータの同値性判定はどうしたらいいか - 貳佰伍拾陸夜日記

    数日前にTwitterで, JavaScriptのオブジェクトに対する===の挙動が初心者には難しいみたいな話を見かけた. 発端や周辺の議論をちゃんと追いかけてないからとくに出典は貼らない. たぶん元々の話は「へぇ, こういう挙動なんだ, 簡単ではないね」くらいの話だったのかもしれない. 自分のタイムラインの観測範囲では「そうだそうだ, (参照の同一性ではなく)同値性にしとけばいいのに」と思っている人もそれなりにいそうに見えた. 個人的にも同値性が簡単に確認できるとよい気はするものの, 「なんでそうしないんだ, オブジェクトの中身を確認していくだけだろ!」みたいな簡単な話ではないことも知っているため, 以下のようなツイートをしたのだった. JavaScriptのオブジェクトの同値性、再帰的な構造とか作るとぜんぜん自明じゃないんだよなぁ。リンクの構造は違うけどプロパティを辿ったときのパスはど

    再帰的な構造のデータの同値性判定はどうしたらいいか - 貳佰伍拾陸夜日記
    tarao
    tarao 2021/08/23
    言語の利用者が循環するオブジェクトを悪とするのは勝手ですが、循環参照を簡単に作れる言語設計で、かつ同値性判定も言語仕様に含むなら、循環する場合も当然うまく同値性判定できる言語設計にすべきと思います。
  • Elasticsearchクラスタを再構築し、無停止で切り替えるベストプラクティス - Hatena Developer Blog

    はてなブックマークチームのid:taraoです。はてなブックマークでは、以前はオンプレミスなElasticsearchクラスタを運用していましたが、AWS上にAmazon Elasticsearch Serviceのクラスタを構築して切り替えました。この切り替えではクラスタの再構築に限らず、アップグレードやマッピングの変更にも使える一般的な方法を採用しました。 この記事では、その具体的な方法を紹介します。 一般的な方法を採用したい目的と背景 検討したクラスタ再構築や切り替えの方法 1. ローリングアップグレード 2. スナップショット・リストア 3. クラスタ横断レプリケーション 4. Reindex API 5. アプリケーションコードによる再インデキシング 目的・条件による取りうる方法のまとめ 採用した再インデキシング手法の詳細 ダブルライトをどのように実現するか 非同期ダブルライトの

    Elasticsearchクラスタを再構築し、無停止で切り替えるベストプラクティス - Hatena Developer Blog
  • Caskはもう古い、これからはEl-Get - いまどきのEmacsパッケージ管理 - 貳佰伍拾陸夜日記

    秘伝のタレとなったEmacsの設定をgitで管理するなどして, 複数の環境で同じ設定を使うようにするのはかなり一般的になってきました. ただ, 使っている非標準パッケージも含めてきちんと管理しようと思うとけっこう大変です. とくに, 以下のような点はぜひとも実現したいところですが, (これまでは)なかなか難しい部分もありました. 使っているパッケージのインストールを自動化したい いろいろな配布元(GitHub, Emacs Wiki, 個人Webサイト, etc.)からインストールしたい きちんと動くことがわかっているパッケージバージョンに固定したい 新しいパッケージを簡単に試したい パッケージと設定の対応をわかりやすくしたい この目的のために, 最近はCaskを使うのが流行っているようですが, 上に挙げたポイントをすべて解決しているわけではありません. 筆者のまわりでも, Caskを使っ

    Caskはもう古い、これからはEl-Get - いまどきのEmacsパッケージ管理 - 貳佰伍拾陸夜日記
  • Emacsでプレフィックスキーにもコマンドを割り当てる - 貳佰伍拾陸夜日記

    Emacsでは, たとえばC-c C-jにコマンドが割り当たっているとすると, C-cまで打った時点では入力待ちになる. 慣れてくるとC-c C-jは素早く打てて, C-cを押して次が何のキーだったか迷うようなことはなくなってくるので, C-cを押してしばらく(0.5秒とか)経った場合は続けて別のキーを入力するつもりはないものとして扱って, C-c単体に別のコマンドを割り当てられるようにしてもよいのではないか. もっと深刻な話としては, たとえばESC xというキー列はM-xと同等に解釈されてしまうので, ESCそのものにコマンドを割り当てることはできない. もしもM-xはAlt+xでしか打たないというのであれば, M-xのときにはESCとxが同時に入力されるはずなので, ESCの入力があってからほんの少しでも(0.01秒とか)入力待ちになったら, それはESC単体の入力とみなしても問題は

    Emacsでプレフィックスキーにもコマンドを割り当てる - 貳佰伍拾陸夜日記
  • C++のテンプレートでラムダ計算と型推論 - 貳佰伍拾陸夜日記

    C++のテンプレートを, コンパイル時に走るプログラムを記述するための言語だと思うと, この言語はチューリング完全なので, 当然ラムダ計算のインタプリタを実装できるし, そのラムダ計算の項の型を推論することもできる. できるからと言って馬鹿みたいにやってしまったという話. ソースコードは末尾. テンプレートメタプログラミング テンプレートをプログラミング言語だと思うと, 構文はともかく, 副作用がなく関数(っぽいもの)を淡々と定義してパターンマッチして再帰呼出しして, という感じでとても関数型っぽい. 関数と返り値 テンプレートメタプログラミングではテンプレートクラスを関数だと思って使う. そして返り値はtypedefして返す. たとえば任意の型S, Tを受け取って前者を返す関数firstは template<typename S, typename T> struct first { t

    C++のテンプレートでラムダ計算と型推論 - 貳佰伍拾陸夜日記
  • Emacsで状態に応じてモードラインの色を変える - 貳佰伍拾陸夜日記

    モードラインの色を自動的に切り替えるためのマイナーモードをだいぶ前に作ってあったので, 使用例とともに紹介. マイナーモードのソースコードと基的な使い方 ソースコード https://raw.github.com/tarao/elisp/ed1af2b55f9ce0a6a4882cf23cbcca4f27567efb/mode-line-color.el 使い方 マイナーモードを有効にする (require 'mode-line-color) (mode-line-color-mode) 色切り替えの定義を追加する (defun my-set-mode-line-color (setter) (unless mode-line-color-color ;; この定義よりも優先して色設定している定義があったら何もしない (cond (条件1 (funcall setter 色1)) (条件

    Emacsで状態に応じてモードラインの色を変える - 貳佰伍拾陸夜日記
  • Rubyで関数型プログラミング - 貳佰伍拾陸夜日記

    Rubyでの快適関数型プログラミングライフを追求するあまり, 使えるのか使えないのかよくわからないものを作ってしまったという話. Rubyに不慣れな人や関数型プログラミングに不慣れな人に対して酷なのはまだわかるとしても, C++(というかboostでの関数型プログラミング)に不慣れな人も全力で置いてきぼりにする誰得記事になってしまった...... 経緯 そもそもRubyはだいぶLispっぽくて, ブロックとイテレータを使うだけで関数型プログラミングになってしまう. たとえばこんな感じで: %w|1 2 3 4 5|.map{|x| x.to_i} %w|1 2 3 4 5|は'1'から'5'までの文字列からなる配列で, その配列のメソッドArray#map*1に対して, 受け取った引数を整数化するブロックを渡してやると, 1から5までの整数からなる配列が得られる. たとえば関数型プログラミ

    Rubyで関数型プログラミング - 貳佰伍拾陸夜日記
    tarao
    tarao 2011/08/19
    たいへんなものをつくってしまった
  • Vimperatorのコマンドラインで自動的にIMEをオフにする - 貳佰伍拾陸夜日記

    VimperatorのコマンドラインでIMEがオンになっていると, f等でヒントを選択できなくて困ることがある. 32ビットのWindows XPを使っていたときは, ime_controller.jsを使うことでコマンドラインや挿入モードでは自動的にIMEをオフにすることができたけれど, 他の環境でうまく動作しなくて困っていた. ime_controller.jsが動かないのはFirefoxにおけるCSSのime-modeプロパティの動作環境が限られているのが原因で, Firefoxに限らずたとえばIME and DiMENSiONもうちの環境(Windows 7 64ビット)では動作が不完全(たまにIMEの状態が反映されない, IMEのオン・オフを制御できない)だったりして, IMEをアプリケーションから制御すること自体が難しいらしい*1. そんな中で, Linux上のVimperat

    Vimperatorのコマンドラインで自動的にIMEをオフにする - 貳佰伍拾陸夜日記
  • GNU screenのattach時に環境変数を自動的に引き継ぐ - 貳佰伍拾陸夜日記

    GNU screenを使っていれば, 作業の途中でログアウトするときにdetachしておいて, 作業を再開するときにattachすれば, 作業途中の端末の状態がそのまま維持されるのでとてもべんり. たとえば, 最初作業していたのとは別のホストからsshでログインしてattachなんてこともできる. ただし, 最初にscreenを立ち上げたのとは別の端末でattachすると, screenは最初に立ち上げた端末の環境変数のままになっていて, 別のホストから接続していることを認識できず面倒な思いをすることがある. 今回はこれをなんとかしたという話. 問題の詳細 話を簡単にするために, DISPLAY環境変数を例にとって説明しよう. DISPLAY環境変数は, 基的には現在ログイン中の環境で使うべきXサーバを指し示している*1. 最初はホストAに直接ログインしているとする. DISPLAY環境

    GNU screenのattach時に環境変数を自動的に引き継ぐ - 貳佰伍拾陸夜日記
  • Yet another icomplete - 貳佰伍拾陸夜日記

    icompleteの縮小版のようなものを作った. 動機 anything-find-fileもIdoも肌に合わないし, Iciclesなんてもう初期状態のインタフェースが見辛すぎてカスタマイズする気にもなれなかったので, http://d.hatena.ne.jp/mooz/20101003/p1は非常に素晴らしかった. さらにインクリメンタルに補完できれば, auto-fu.zshのようにできそう. ただ, icomplete-modeをそのまま有効にしたのではいろいろ競合してうまくいかなかった. そもそも別バッファに候補一覧を出したいのに, icompleteはミニバッファにすべてを詰め込もうとする. 候補一覧の表示方法は従来通りで, 表示のトリガだけ入力に連動して欲しい. そんなわけで, 新たにicompleteもどきを実装した. 機能 入力に応じて自動的に補完候補バッファを表示 曖

    Yet another icomplete - 貳佰伍拾陸夜日記
  • オペレータが入力されたら相対行番号を表示 - 貳佰伍拾陸夜日記

    Yokohama.vimの行削除のスライドみてて、オペレータが入力されたら、その行から相対的行番号を一時的に左側に表示すればいいんではないかと思った。Vimスクリプトでそんなことできるかどうかは知らんけど。 https://twitter.com/m2ym/status/25606822787 という話があったので, Vimpulseでやってみた. 必要なもの Emacs 22以上(動作確認は24.0.50) Vimpulse Gitリポジトリの最新版推奨 linum.el (Emacs 23からは標準で入っているので不要) linum+.el (相対行番号表示のためのマイナーモードを提供) 設定 .emacsのどこかで以下のようにする. (require 'vimpulse) (require 'linum+) (add-hook 'vimpulse-operator-state-hoo

    オペレータが入力されたら相対行番号を表示 - 貳佰伍拾陸夜日記
    tarao
    tarao 2010/09/27
    早速できた
  • マルチモニタ環境でウィンドウが画面外にはみ出すのを防止 - 貳佰伍拾陸夜日記

    最近はディスプレイも安いので, ディスプレイを複数台並べて広い作業環境を確保している人も多いはず. うちの自宅環境も, 24インチワイドディスプレイの隣に21.5インチワイドディスプレイを縦置きにしている. 縦置きする理由は, Webブラウザを最大化表示してなるべくスクロールせずに済ますため, 論文などA4サイズのPDFを1画面におさめるため, など. この環境自体には大変満足しているけれど, 少々変則的な配置のため特定のアプリケーションのウィンドウが画面外に表示されてしまって難儀した. それをなんとかしたという話. 困りどころ Linuxのサーバ上で起動したアプリケーションのウィンドウを, マルチモニタ環境のWindows上のXmingで表示したときに問題が起きた. 問題が起きるのは一部のアプリケーションの一部のウィンドウだけで, たとえばInkscapeでPDFファイルを開いたときの"

    マルチモニタ環境でウィンドウが画面外にはみ出すのを防止 - 貳佰伍拾陸夜日記
  • auto-fu.zshでコマンドを確定するときに不完全な補完サフィックスを無視する - 貳佰伍拾陸夜日記

    auto-fu.zshのちょっとした改善. 動機 auto-fu.zshを使っていると, TABを押さなくても自明な補完候補はカーソルの後ろに表示される. たとえば, directory-with-very-long-nameというディレクトリの中身を見たいときに $ ls -l dir まで打てば(他にdirではじまるディレクトリが無ければ), $ ls -l directory-with-very-long-name/ という感じに補完されて, このままEnterを押せば目的のディレクトリがlsされる. これはとてもべんり. ただ, 個人的にはEnterを押さずにTABを押してしまうことがよくある. たとえば, directory-with-very-long-nameの中に01, 02というファイルがあり, 他には何もなかったとすると, TABを押したときには次のようになる. $ l

    auto-fu.zshでコマンドを確定するときに不完全な補完サフィックスを無視する - 貳佰伍拾陸夜日記
    tarao
    tarao 2010/08/23
  • Emacs (Viper/Vimpulse)で日本語の文節を扱う - 貳佰伍拾陸夜日記

    というか、Emacsだとうまく文節ごとに削除してくれたりするんだろうか。それだったらすごいな。 http://twitter.com/tyru/status/19890157313 という話があったので, どうなっているか調べてみた. まず移動に関して, Emacsの単語移動コマンドforward-word/backward-word (M-f/M-b)は, 日語の場合は文節(のようなもの)に働くらしく, 動作を見る限りは, 漢字の連続+ひらがなの連続をひとまとまりと見なしている感じ. 完全な文節ではないけれど, カーソル移動の単位として用いるには問題ないレベル. 実際にどういう処理をしているのか調べようと思ったけれど, forward-wordはEmacs LispではなくCで書かれているようで, ソースコードを読むのは面倒なので諦めた. Emacs上に実装されたViエミュレータである

  • スマートポインタのつくりかた - 貳佰伍拾陸夜日記

    2年ちょっと前にC++で書いた非侵入的参照カウント方式のスマートポインタ実装を発掘した. スマートポインタの実装にはC++の様々なマニアックな実装手法が隠れていて面白い. せっかくなので, 解説つきで晒すことにした. このスマートポインタはboost::shared_ptr (以下単にshared_ptr)相当のもので, 当時C++のコードを書かないといけない状況下で「boost使っちゃらめぇぇぇ!」とか言われたために, せめてshared_ptrだけでも抜き出して使おうとしたものの, 依存しているファイルの数が思ったより多くて面倒になったので, 1ファイルで完結する簡易実装を自分で書くことにした, という経緯で生まれたもの. 似たような状況では有用かも知れないし, shared_ptrのソースコードを読む助けにはなるかも知れないけれど, 基的にはboostが使えるなら素直にshared

    スマートポインタのつくりかた - 貳佰伍拾陸夜日記
    tarao
    tarao 2010/07/24
  • Emacs (Vimpulse)でtextobj-between - 貳佰伍拾陸夜日記

    textobj-between 書いた - 永遠に未完成のtextobj-betweenをEmacs+Vimpulseでも使えるようにしてみた. i"やa"がvimpulse-quote-rangeとして実装されていて, クォート文字を任意に指定できるようになっていたので, 1文字read-charしてそれをvimpulse-quote-rangeに渡すようにするだけでできた. ただし, vimpulse-quote-rangeは内部でscan-sexpsを呼んでいて, どうやらこれがクォート文字が特定の記号の場合に動作を妨げるようなので, 一時的にadviceで無効化している点があまりイケてない. .emacsに以下のように書いておくと, ciF,で「,」に挟まれた範囲を変更したり, viF|で「|」に挟まれた範囲を選択したりできる. (defadvice scan-sexps (aro

    Emacs (Vimpulse)でtextobj-between - 貳佰伍拾陸夜日記
  • Emacs (Vimpulse)でtext-objectでも使えるコメントアウトoperator - 貳佰伍拾陸夜日記

    EmacsでviをエミュレートするViperを強化してVimをエミュレートするようにしたのがVimpulse. ここ最近開発が活発で, 設計もかなりスマートになって, ゆくゆくは家Viperを置き換えることを目指すまでになっている. 入れる場合は最新版をgit cloneする. ぼちぼち散歩 Vimでoperator-userを使って他のプラグインをoperatorとして使えるようにしてみたを見て, Vimpulseでもコメントアウト/アンコメントするoperatorがあったら便利そうなので作ってみた. 実はVimpulseの中のvimpulse-operator.elに道具は揃っている. リージョンに対してなにかするコマンドがあれば, それをvimpulse-convert-to-operatorマクロに渡すだけでoperatorが出来上がる. たとえば.emacsで以下のようにしてお

    Emacs (Vimpulse)でtext-objectでも使えるコメントアウトoperator - 貳佰伍拾陸夜日記
  • zshの履歴検索にanything.elを使う(ターミナル版) - 貳佰伍拾陸夜日記

    anything.elを使ってzshの履歴検索をする - http://rubikitch.com/に移転しましたを参考に, ポップアップせずにターミナル内で動くようにしてみた. デモ 使い方 anything.el一式をインストールする anything.el anything-config.el anything-match-plugin.el anything-complete.el shell-history.elをインストールする shell-history.el (setq shell-history-file "~/.zsh_history") しないとダメかも 下記のanything-zsh-history.elを.emacsで読み込むようにする 下記のanything-history.zshrcを.zshrcで読み込むようにする emacsやzshを終了 zshを実行 e

    zshの履歴検索にanything.elを使う(ターミナル版) - 貳佰伍拾陸夜日記
  • 複数のメジャーモードを文脈に応じて切り替え - 貳佰伍拾陸夜日記

    multi-mode.elを使うと, 一つのバッファ内で文脈に応じてメジャーモードを切り替えることができる. けれど, カーソル位置を受け取って, 切り替えるべきメジャーモードとその有効範囲を返す関数を定義しないといけなくて, 使い方が難しい. そこで, 開始・終了の正規表現と, その範囲内で有効になるメジャーモードを指定するとmulti-modeに渡すべき関数を作って登録してくれる関数を書いた. 例 まず, (multi-mode-init) すると, バッファ内でmulti-modeを使う準備ができる. さらに, (multi-mode-install-chunk-finder "^>|javascript|$" "^||<$" 'javascript-mode) とすると, ">|javascript|"だけが書かれた行と"||<"だけが書かれた行に挟まれたテキストにカーソルが移動し

    複数のメジャーモードを文脈に応じて切り替え - 貳佰伍拾陸夜日記
  • 最小限のJavaで素数を列挙(Javaで無限リスト) - 貳佰伍拾陸夜日記

    以前書いた「ラムダ計算基礎文法最速マスター」では, ラムダ計算に自然数やデータ構造, 条件分岐, ループが用意されていないため, これらをラムダ項を使って模倣する方法を紹介しました. このようなことはどんなプログラミング言語でも起きうることで, たとえば, アセンブリ言語にforループが無いために, C言語で書かれたプログラムをアセンブリ言語にコンパイルするときには条件ジャンプ命令とラベルでforループを模倣する, というのも同じことです. 今回は, Javaを最小限の機能だけに制限した純粋オブジェクト指向言語で, 以下のものを実現してみます. 真偽値と条件分岐 自然数と四則演算 リスト 無限リスト さらに, これらすべてを用いて任意個の素数を列挙するプログラムを書いてみます. 完全なソースコードは一番最後にあります. 最小限のJava Javaはそれ自体純粋なオブジェクト指向言語ですが,

    最小限のJavaで素数を列挙(Javaで無限リスト) - 貳佰伍拾陸夜日記