タグ

ブックマーク / zariganitosh.hatenablog.jp (26)

  • コマンド履歴の達人を目指してみる - ザリガニが見ていた...。

    ターミナルのコマンド履歴をインクリメンタルに検索して実行するにはControl + R - Macの手書き説明書 自分も知らなかった...。まだまだ知らないことって、いっぱいある。 それにしてもコマンド履歴というのは、自分はよく使う。直接入力するより、過去の履歴を探し出して、必要な修正してからコマンド実行するパターンが多い。長〜いファイルパスやオプション指定のあるコマンドなんて、ほとんどがコマンド履歴の修正と実行である。コマンド履歴が使えるからこそ、快適なコマンド操作ができると思っている(自分の場合)。 コマンド履歴は質実剛健なコマンドの世界に、選択して実行するというGUI的なゆるい操作感を与えてくれる。コマンドを忘れる心配や、スペルを間違う心配から、救ってくれる。それほどまでにコマンド履歴に頼りきっている状況なのに、今日も上下の矢印キーを激しく連打するしかない自分は、一体どうしたら良いも

    コマンド履歴の達人を目指してみる - ザリガニが見ていた...。
  • タブを閉じてもログアウトしても実行し続けるジョブにしておく - ザリガニが見ていた...。

    前回までにバックグラウンドでジョブを複数管理できるようになった。ところで... ターミナルでタブを開く度に、あるいはsshでどこかの端末にログインする度に、 シェルが起動して、コマンドを入力・実行・出力する環境を整えてくれる。 そして、タブを閉じたり、ログアウトすると、シェルは終了する。 と同時に、通常はそのシェル上で実行されていたジョブも終了してしまう。 不要なバックグラウンドジョブを漏れなく終了できるので、多くの場合これで良いのだけど、 稀に、シェルが終了しても処理を続けて欲しい状況もある。 特にsshでログインして時間のかかる処理(ダウンロードとか)をしている時などは、 一旦ログアウトしたいんだけど、処理はそのまま続けて欲しいことが多い。 そんな時は、nohupコマンドを使うと幸せになれる。 環境 MacBook Pro Retina15 OSX 10.9.5 $ bash --ve

    タブを閉じてもログアウトしても実行し続けるジョブにしておく - ザリガニが見ていた...。
  • 裏と表のジョブを使い分ける - ザリガニが見ていた...。

    かつて... 今どきのターミナルはタブやウィンドウをいくつでも開けるから、 フォアグラウンドでコマンド実行中に何か別のことがしたくなったら、新たにタブを開いて、そこでコマンドを実行すれば十分用が足りる。 バックグラウンドでコマンドを実行できることも知っているけど、体系的に理解してないのでうっかりミスを繰り返した。 うっかりバックグラウンドで処理していることを忘れていた...。 処理中だと思っていたら停止していた...。 終了したと思っていたら停止していた...。 停止中のプロセスを再開するにはどうする? やっぱり終了したいんだけど、どうすればいいのか? そんなうっかりを繰り返すうちに、見えないバックグラウンドで実行して悩むくらいなら、常に状態が見えるフォアグラウンドにしておいた方が益し。 好きなだけタブを開いてしまえ、という方針になってしまった。 しかし... 何かの補佐で一時的にバックグ

    裏と表のジョブを使い分ける - ザリガニが見ていた...。
  • Rubyのハッシュにメソッドでアクセスするには?やらない方がいい? - ザリガニが見ていた...。

    JavaScriptな脳状態でRubyを触り始めると、ハッシュにアクセスする時にエラーで怒られる。 h={abc:123} => {:abc=>123} h.abc NoMethodError: undefined method `abc' for {:abc=>123}:Hash from (irb):15 from /usr/bin/irb:12:in `<main>' いかん、いかん、Rubyのハッシュはメソッド呼び出しではなく、[:abc]のように指定するのだ。 h[:abc] => 123 Rubyのハッシュは、キーとメソッドを明確に区別することで、�キーの自由度はとっても広がった。 メソッド名と同じキーも使えるし、 シンボルや文字列に限らず、あらゆるオブジェクトがキーとなる。 irb(main):022:0> require 'date' => true irb(main):0

    Rubyのハッシュにメソッドでアクセスするには?やらない方がいい? - ザリガニが見ていた...。
  • rbenvは何をしているのか? - ザリガニが見ていた...。

    ~/.rbenv/以下に複数のRubyバージョンをインストールして、それぞれのRuby環境を切り替える仕組みを提供する。 ~/.rbenv/ (rbenvがRubyを管理するルートフォルダ) ~/.rbenv/shims/ (rubyやgemがインストールするコマンドへのラッパーを保存しておくフォルダ) ~/.rbenv/version (global環境のRubyバージョンを記録するファイル) ~/.rbenv/versions/ (Rubyの各種バージョンをインストールするフォルダ) Ruby環境の構造 例えば、rbenvがインストールしたRuby-1.8.7-p375は、以下のような構造となっている。 ~/.rbenv/versions/1.8.7-p375/bin/(実行コマンドを含む:erb gem irb rake rdoc ri ruby testrb) ~/.rbenv/v

    rbenvは何をしているのか? - ザリガニが見ていた...。
  • bundle gemは何をしてくれるのか? - ザリガニが見ていた...。

    必要最小のgemパッケージの作り方は大体理解できた。 rubyコードをlib/とbin/に振り分けて、 .gemspecファイルに設定を記述して、 gem build、gem installしてテスト、 問題なければgem pushで公開。 とっても簡単である。 初回のみ.gemspecファイルの追加とRubyGems.orgへの登録が必要だが、手間はかからない。 一旦公開してしまえば、コード修正して、gem build、gem install、gem pushの繰り返しだ。 これ以上何を求めてbundlerを使うのか?探ってみた。 bundle gemが生成するもの sampleという名のgemプロジェクトを始めてみる。 $ bundle gem sample create sample/Gemfile create sample/Rakefile create sample/LICEN

    bundle gemは何をしてくれるのか? - ザリガニが見ていた...。
  • 必要最小のgemの作り方とインストール - ザリガニが見ていた...。

    gemは、Rubyのライブラリ管理のコマンド。Rubyのライブラリを検索・インストール・アップデート・削除など、苦労最小で操作する仕組みを提供してくれる。今までgemを使って、多くの素晴らしいライブラリをインストールしてきた。しかし、自分が作ったものをgemでインストール可能な形式で公開したことはなかった...。 できることならgemでインストールできるようにしてみたい。では、自作のRubyコードは、どうすればgemでインストールできるようになるのか?果たして、簡単にできることなのか?調べてみた。 作業環境 MacBook Pro Retina15 OSX 10.9.5 Rubyバージョン $ ruby --version ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13] Gemバージョン 最新のG

    必要最小のgemの作り方とインストール - ザリガニが見ていた...。
  • 日本語が使えるirbにしておく - ザリガニが見ていた...。

    OSXに標準インストールされているirbは、残念ながら日語が文字化けする。Rubyの方は標準で日語が使えるようになったのに、何故なんだ? 調べてみると、Ruby自体の日語処理には問題ないのだけど、irbがコマンド入力を受け取る際に使っているライブラリ(libedit)が日語に対応していないのが原因らしい。解決策は、日語対応のライブラリ(readline)に切り替えること。 日語が使えない環境 irbは、"readline"をrequireして、コマンド入力ライブラリを利用している。 requireした"readline"はどこにあるのか? irbを起動して、以下のコマンドを入力してみる。 $ irb irb(main):001:0> puts $LOADED_FEATURES.grep /readline/ /System/Library/Frameworks/Ruby.fra

    日本語が使えるirbにしておく - ザリガニが見ていた...。
  • RubyのOptionParserの底力を知る - ザリガニが見ていた...。

    コマンドは、以下のような書式でオプションと引数を設定して、実行する仕組みになっている。 例: コマンド名 オプション オプション オプション引数 オプション コマンド引数 optparser_test.rb -a -b VALUE --foo FILE_PATH 実際にコマンドを作ろうとすると、オプションの解析には手間がかかると気付く。 そのため、多くの言語環境にはオプション解析用のライブラリが用意されている。 Rubyのoptparserについて、基的な使い方は知っているつもりだったが... Rubyでコマンドの中身を作るまで - ザリガニが見ていた...。 ちょっと気の利いたコマンドにしようとすると、その使い方は謎だらけになった。 どうしたら苦労最小限でオプションを解析できるのか、調べてみた。 基 require 'optparse' OptionParser.new do |op

    RubyのOptionParserの底力を知る - ザリガニが見ていた...。
    clavier
    clavier 2014/08/20
  • ブックマークレット実行時に外部ファイルをロードして使う - ザリガニが見ていた...。

    ブックマークレットの書き方の段階的な発展の仕方の続き。 基 前回の外部ファイルをロードして実行するブックマークレットは、こんな感じだった。 javascript: (function(d,s){ s=d.createElement('script');s.src='//dl.dropboxusercontent.com/u/XXXXXXX/bookmarklet.js';d.body.appendChild(s); })(document) Webページのbodyタグに以下のようなscriptタグを追加して、 シンプルに、たった一つの外部ファイルをロードしているのだ。 <script src='//dl.dropboxusercontent.com/u/XXXXXXX/bookmarklet.js'></script> 複数の外部ファイルをロードする では、外部ファイルを二つ以上ロードし

    ブックマークレット実行時に外部ファイルをロードして使う - ザリガニが見ていた...。
  • ログイン情報を自動入力するブックマークレットの作り方 - ザリガニが見ていた...。

    Webページの入力情報を読み取る 例:https://healthcare.mb.softbank.jp/pc/assets/setup/web_explanation_input.php 上記ページで以下のAppleScriptを実行すると... tell application "Safari" activate do JavaScript "(function(d, s, r, url_key, inputs, options, i){ url_key=d.location.protocol.replace(/[^A-Za-z]/g,'_')+'__'+d.location.hostname.replace(/[^A-Za-z]/g,'_')+d.location.pathname.replace(/\\W/g,'_'); inputs=d.getElementsByTagName(

    ログイン情報を自動入力するブックマークレットの作り方 - ザリガニが見ていた...。
  • なるべく覚えないbashのキー操作 - ザリガニが見ていた...。

    ターミナル&bashでコマンドラインを編集する時、実にいろいろなキー操作がある。便利そうだからと、あれもこれも覚えようと欲張るのだけど、すぐに忘れてしまう...。もっと厳選して覚えておかなくては。自分にとって必要最小限のキー操作を探ってみた。 勝手な方針 OSX環境のキーバインドが使える場合は、そちらを優先する。 ホームポジションの維持にこだわらない。 よって、矢印キー・deleteキーなども遠慮なく使う。 カーソル移動 行頭・行末・単語区切りの移動で、カーソルを素早く動かす。 マウスカーソルで指定すれば、クリックした位置にジャンプする。 control-A・E 行頭・行末へ移動 option-←・→ 1単語ずつ移動 option-クリック クリックした位置へ移動 削除 行頭・行末・スペース・単語区切りの削除によって、修正を楽にする。 control-U・K 行頭・行末まで削除 contr

    なるべく覚えないbashのキー操作 - ザリガニが見ていた...。
    clavier
    clavier 2014/05/27
  • ブロックとProcの世界 - ザリガニが見ていた...。

    Rubyの世界はブロックとProcで溢れている。だのになぜ、自分はそれに精通できないのか?Symbol#to_procとか、関数型Rubyとか、そんな発想は自分には到底できそうもない。そればかりか、自分の頭の中はRuby1.8で止まっている。その状態では、Ruby1.9以降に追加された新たな記法が、謎の記号に見えてしまう...。 発想はできないけど、そうゆうコードを読んで感動できる読解力は持ち続けたい。調べてみた。 環境 MacBook Pro Retina15 OSX1 0.9.2 irb(main):001:0> RUBY_VERSION => "2.0.0" $ ruby -v ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] ブロックとは何か? do ... end、あるいは{ ... }で

    ブロックとProcの世界 - ザリガニが見ていた...。
  • テトリスの作り方 - ザリガニが見ていた...。

    前回からの続き。 Star Rubyのインストール - ザリガニが見ていた...。 Star RubyでHello World! - ザリガニが見ていた...。 前回までにStar Rubyでスカッシュゲームを作ったのだけど、たった60行のシンプルなゲームであった。ほとんど全ての処理を、Game.runブロックの中に書いていた。 今度はもうちょっと格的なゲームを作ってみたい。そうだ、テトリスを作ろう!テトリスはサンプルコードの中に含まれているのだけど、敢えて自分の頭で考えて独自の実装をしてみるのだ。落ちものパズルゲームの元祖。果たしてちゃんとできるだろうか? 前回のスカッシュのように、すべての処理をGame.runブロックの中に書いてしまうと、長過ぎるループに惑わされて、たぶん破綻しそう。部品ごとにどのように処理を分担するべきか、テトリスワールドに踏み込んで考えてみた。 作るテトリスの仕

  • ファイル末尾の改行を自在にコントロールする - ザリガニが見ていた...。

    テキストファイルとは、いくつかの行の集合である。そして、行とは改行コードで区切られるまでの、一連のテキストデータの連続である。 ところで、すべての行の末尾は改行コードで終わるかと言えば、そうとも限らない。改行コードが1つもないテキストファイルも作れるし、最後の行だけ改行コードなしにすることもできる。POSIX基準では、すべての行は改行コードで終わると定義されているようだが、現実のテキストファイルは必ずしもそうなっていないのだ。 ちゃんと改行コードで終わっているか、終わっていないかの違いによって、処理環境によっては思わぬ不具合を誘発してしまうことがある。どちらかに統一する技を覚えておきたい。 改行コードで終わらない場合の不具合 readコマンドは、改行コードで終わらない行を読み取ってくれない...。 $ echo -ne 'ABC\nDEF\n' | while read LINE; do

    ファイル末尾の改行を自在にコントロールする - ザリガニが見ていた...。
    clavier
    clavier 2013/12/29
  • なるべく書かないawkの使い方 - ザリガニが見ていた...。

    awkという、古くからのスクリプト言語がある。(1977年生まれ。読み方は「オーク」である。エイ・ダブリュ・ケイではない)man awkをPDFに変換してみると、たったの3ページ強しかない。 $ man -t awk|pstopdf -i -o ~/Downloads/awk.pdf とてもシンプルな言語仕様ではあるが、awkには必要十分な表現力がある。特にテキストを処理する場面においては、最小限のシンプルな記述で、気の利いた処理を素早くこなす。無駄のないawkワンライナーを見ると、ある種の感動を覚える。awk以降に生まれたスクリプト言語は、少なからずawkの影響を受けていると思われる。 awkを知ることで、間違いなく幸福度は上がると思う。いつかきっと「知ってて良かった」と思える時が来るはず。もっともっと、awkを知りたくなってきた。 基動作 awkの基動作は、とってもシンプルである。

    なるべく書かないawkの使い方 - ザリガニが見ていた...。
  • rubyのワンライナーに見る驚きの省略記法 - ザリガニが見ていた...。

    rubyには、省略されたコードが隠されていることがある。その省略されたコードをちゃんと理解しておかないと、rubyの中で何が起こっているのか?見失ってしまう...。調べてみた。 一般的なソースコードの中では、可能な限り省略せずに書いた方が良いと思われる。 きっと、他人を悩ますか、1カ月後の別人の自分が悩む。 しかし、直接タイプすることが多いワンライナーでは、素早く、簡潔に入力できる省略表現は便利である。 無駄に$や!を入力しないので、エスケープの問題で悩むことも少なくなると思われる。 作業環境 OSX 10.9 Mavericksである。 GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13) ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin

    rubyのワンライナーに見る驚きの省略記法 - ザリガニが見ていた...。
  • プロセス・パイプ・リダイレクション・ファイルディスクリプタの実体を見に行く - ザリガニが見ていた...。

    プロセス置き換えとか、名前付きパイプとか、とても便利な機能なのだけど、その仕組みはどうなっているのだろう?断片的な知識ばかりでは、その核心にはなかなか辿り着けない。サンプルコードの真似はできるけど、それ以上の発想はできない...。もっと根的なところからちゃんと理解しておかないと、いつまでたってもコマンドの使い方の質が理解できないと感じた。プロセスとは何か?パイプとは何か?リダイレクションとは何か?ファイルディスクリプタとは何か?可能な限りその質を探ってみようと思う。 UNIXのプロセス UNIXでは、複数のユーザーがログインした状態で、同時に複数の処理を依頼される状況が多々ある。 ところが、どんなに高性能なCPUであっても、ある瞬間に処理できるのはたった1つの処理だけである。 そんな時OSは、それぞれの処理に必要なメモリ領域を割り当てて、CPUをタイミングよく切り替えながら同時並行的

    プロセス・パイプ・リダイレクション・ファイルディスクリプタの実体を見に行く - ザリガニが見ていた...。
  • アンチエイリアスとの戦い - ザリガニが見ていた...。

    最近は、shadowコマンドのアンチエイリアス部分の処理を改善する方法がないか、四六時中考えていた。影とアンチエイリアス処理された部分の色が「混ざっちまっているんだからどうしようもないじゃないか」と最初は諦め気分だったのだが、考え続けているといろいろな作戦が思い浮かんでくるものである。 以下は影付き画像から、影の部分だけをいかに美しく取り除くことができるか、その試行錯誤の記録である。 ことの経過 だらしなく無駄に広がるOSXのウィンドウのスクリーンショットの影。 影付きウィンドウのスクリーンショットをそのままブログに使うと、影の部分が大き過ぎて、肝心のウィンドウ内部の絵が小さくなってしまう。 そうかといって、影なしの画像ではメリハリのない印象で、何か足りない気がする。 無駄に広い影をスリムな必要最小限の影にしたい! また、AppleScriptやAutomatorなどから手軽に利用できる仕

    アンチエイリアスとの戦い - ザリガニが見ていた...。
  • 音楽ファイルから好みの部分を切り出すサービス - ザリガニが見ていた...。

    以前Visionを連続視聴する時に、ffmpegを使って余分なCMをカットして、聴きたい部分だけの音楽ファイルに編集した。その時はコマンドラインで操作していたのだけど、意外と便利なのでAutomatorサービスに登録してみた。 作業環境 MacBook Pro Retina15 OSX 10.8.2 ffmpeg $ ffmpeg -version ffmpeg version 1.1 built on Jan 10 2013 16:57:58 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/1.1 --enable-shared --enable-gpl --enable-ver

    音楽ファイルから好みの部分を切り出すサービス - ザリガニが見ていた...。