ターミナルが文字化けした時の対処方法

Screen Shot 2014-02-08 at 7.46.36 PM

朝起きたら、ログを表示していたターミナルがエラい事に・・。
上のスクショのようにアルファベットさえ文字化けしてしまう事ってたまにありますよね。
例えば、バイナリファイルを開いてしまった時とか。
この状態になると、いつもターミナルを一旦閉じて開き直していました。

が。

ターミナルを開き直さなくても元に戻せる方法があったのです!!
方法は簡単。

#!bash
echo ^[c

エスケープシーケンスのcを入力するので、下記のようなキーボード入力を行います。

echo <ctrl -V><esc>c<enter>

ほら!!
なおりましたね 🙂
tmux内のttyでも有効なので、お試しあれ^^

Sublime TextからSnippetをGistに保存する方法

sublime+gist

みなさん、コードのスニペットとか作業ログの破片ってどう管理してますか?
僕はいままでファイルに保存するという面倒な方式を取っていたんですが、ついに耐えきれなくなりました(笑)

個人的には:

  • iMacとMacbook Airの2台でSnippetをCRUD&共有したい
  • 検索したい
  • タグ付けで分類出来れば尚いい

そこでGistを検討してみました。これならプライベートでコードをクラウドに保存出来ます。
バージョン管理まで出来るオマケ付き!
ただ、いちいちブラウザでページを開くのは面倒。
ここに手軽に保存できれば便利ですね!

調べてみたところ、Sublime TextにGistへCRUD出来るプラグインがあるとの事。
ショートカットで即アップできるしチョー便利そう!
早速、使ってみましょう。

Gistとは?

GitHubが提供する、コードのスニペット保存サービスです。

Sublime Package Controlを入れる

プラグインを入れるには、Sublime Package Controlをインストール必要があります。
下記ショートカットキーを押して、コンソールを開きましょう:

Ctrl + `

sublime-text-01

https://sublime.wbond.net/installationからインストール用コマンドを入手して、貼付けてEnter
数秒ほどでインストールが完了するかと思います。

sublime-text-02

Gistプラグインをインストールする

Command + Shift + Pを押してコマンドパレットを呼び出し、「Install」と入力してみてください。
Package Control: Install Package という項目が出るはずです。
これを選択してください。

sublime-text-03

パッケージ一覧の読み込みが開始され、しばらくすると表示されます。

sublime-text-04

ここで、gistと入力して絞り込みます。下の画像のようにハイライトされているGistという名前のパッケージを選択します。

sublime-text-05

しばらくするとインストールが完了します。
再度、Command + Shift + Pでコマンドパレットを呼び出してください。
そして、gistと入力すると、Gist用のコマンドが出てくる事を確認します。

sublime-text-06

GitHubアカウントを設定する

次に、あなたのgistアカウントと紐付けます。
メニューからPreferences -> Package Settings -> Gist -> Settings - Defaultを選択します。

sublime-text-07

下図のように設定が開かれます。
GitHubのアプリ設定画面でPersonal Access Tokensを発行します。
発行したトークンを設定ファイルのtokenという項目に入力して保存します。

sublime-text-08

これで準備は完了!

使い方

基本はコマンドパレットから実行します。
それでも面倒!!という方には、ショートカットがあります!

ショートカットキー 動作
Command + K, Command + P プライベートGistを保存
Command + K, Command + I パブリックGistを保存
Command + K, Command + O 保存したGistを開く
Command + K, Command + S Gistを上書き保存

タグ付けにはGistBoxがオススメ

gistbox

http://www.gistboxapp.com/

Evernoteみたいにフリーフォームでタグを入力できないのが少し不便だけど、オーガナイズ機能はイケてる!

Ruby on RailsとTwitter Bootstrap 3でパンくずリストを追加する方法

breadcrumbs

breadcrumbs_on_railsがオススメ

breadcrumbs_on_rails はbootstrapに限らずパンくずリスト(Breadcrumbs)の実装が簡単に出来るのでオススメです。

インストール方法

Gemfileに下記を追記:

gem "breadcrumbs_on_rails"

$ bundle installでサクっとインストールしましょう。

基本の使い方

controllerに記述する

class MyController

  add_breadcrumb "home", :root_path
  add_breadcrumb "my", :my_path

  def index
    # ...

    add_breadcrumb "index", index_path
  end

end

app/controllers/application_controller.rbに追加する事で、サイト全体でデフォルトのパンくずアイテムを追加出来ます。
「ホーム」みたいな項目はそっちに記述するといいかと思います。

viewに記述する

slimだと以下のような感じでOK:

- title "タイトル"
- add_breadcrumb title, request.fullpath

controllerで指定したものの後に追加されます。
viewに書く方がMVCアーキテクチャにより適合していますね。

出力する

app/views/layouts/application.html.slimなどの任意の行に下記を追記しましょう。

= render_breadcrumbs

Bootstrap 3で使う

上記の手順でパンくずリストを出力すると、下記のように単純にaタグの羅列になります。

<a href="http://odoruinu.net/">Home</a> > <a href="/blog">Blog</a> > <a href="/blog/page">Page</a>

ここでは、bootstrap 3のスタイルで書きたいので下記のように出力して欲しいところ:

<ol class="breadcrumb">
  <li><a href="http://odoruinu.net/">Home</a></li>
  <li><a href="/blog">Blog</a></li>
  <li class="active">Page</li>
</ol>

Bootstrap用ビルダーを作る

breadcrumbs_on_railsではカスタムなフォーマットでパンくずリストを出力するための方法が用意されています。
これを Builder と呼びます。

さっそくBootstrap用のBuilderを作ってみましょう。
以下のような内容をlib/bootstrap_breadcrumbs_builder.rbに作ります:

class BootstrapBreadcrumbsBuilder < BreadcrumbsOnRails::Breadcrumbs::Builder
  def render
    @context.render "/application/breadcrumbs", elements: @elements, b: self
  end

  def compute_name(element)
    case name = element.name
    when Symbol
      @context.send(name)
    when Proc
      name.call(@context)
    else
      name.to_s
    end
  end

  def compute_path(element)
    case path = element.path
    when Symbol
      @context.send(path)
    when Proc
      path.call(@context)
    else
      @context.url_for(path)
    end
  end
end

そして、app/views/application/_breadcrumbs.html.slimに以下のようなファイルを作ります。

- unless elements.length==1 && current_page?( b.compute_path(elements[0]) )
  ol.breadcrumb
    - elements.each do |element|
      li class=( "active" if current_page?( b.compute_path(element) ) )
        =link_to_unless_current b.compute_name(element), b.compute_path(element), element.options

最後に、レイアウトのファイルに以下のように追記すればOK!

#!slim
= render_breadcrumbs builder: ::BootstrapBreadcrumbsBuilder

Breadcrumbs

バッチリ!

Google ChromeでDNSキャッシュをクリアする方法

ドメインを持っている人は、DNSレコードの設定がなかなか反映されなくてやきもきした事が一度はあるはず。
nslookupコマンドではしっかり反映されているのになんで??と思う事もしばしば。

実は、Google Chromeはホスト・リゾルバのキャッシュ機構があります。
このキャッシュをリセットする方法をご紹介します!
下記URLにアクセスしてください:

chrome://net-internals/#dns

Google Chrome Host Resolver Cache

ずらずらっと、キャッシュされているホスト情報が表示されるかと思います。
このページの、”Clear host cache”というボタンをクリックするだけ!
キャッシュされていたホスト情報が一掃されましたね!

[Objective-C] 任意のクラスのサブクラスをランタイムで列挙する方法

objective-c

プラグイン的なアーキテクチャでファクトリ部が肥大化する問題

複数種類のファイルを取り扱うようなアプリを思い浮かべてみて下さい。
対応するファイル形式を柔軟に増やせるようなアーキテクチャを、Objective-Cではどう構築するのが良いでしょう?
各形式を取り扱うモジュールがあって、それらは定型化された仕様に則って振る舞うような一般的なsubclassingモデルと、ファクトリパターンが良さそうです。

しかし、取り扱える種類が増えると、モジュールを統括する部分(ファクトリ部)の実装が肥大化する問題が発生します。
例えば、指定した拡張子に対応するクラスのインスタンスを返す関数とか。
更に、新しい形式を追加した時に、ファクトリ部への追加実装の手間も後々に負担となったり、実装漏れが生ずる可能性があります。

モジュールをランタイムで列挙してスッキリさせる

ファクトリ部をスッキリさせるには、通常のsubclassingモデルよりももう少し粗結合な実装方法を検討してみると解決するかもしれません!
それは、基底クラスのサブクラスの列挙部をハードコーディングするのではなく、ランタイムで列挙する方法です。
サブクラスに、ファクトリ部で取り扱いが必要な情報を提供するGetterメソッドやプロパティを持たせます。

これなら、新モジュールの登録忘れや一貫性を崩す心配を軽減できます!

ランタイムAPIを使って実現

NSObjectに対してメソッドを追加するカテゴリを紹介します。
追加されるメソッドの+ classNamesForSubclasses を、あるクラスをレシーバにして呼び出すと、その子クラスの名前がNSArrayで返ります。
チョー簡単ですね!

ヘッダファイル(NSObject+AutomaticFactory.h):

#!objectivec
#import &lt;Foundation/Foundation.h>

@interface NSObject (AutomaticFactory)

+ (NSArray*) classNamesForSubclasses;

@end

ソースファイル(NSObject+AutomaticFactory.m):

#!objectivec

#import "NSObject+AutomaticFactory.h"
#import &lt;objc/runtime.h>

@implementation NSObject (AutomaticFactory)

+ (NSArray*) classNamesForSubclasses;
{

    int numClasses = 0, newNumClasses = objc_getClassList(NULL, 0);
    Class *classList = NULL;

    while (numClasses < newNumClasses) {
        numClasses = newNumClasses;
        classList = (Class*)realloc(classList, sizeof(Class) * numClasses);
        newNumClasses = objc_getClassList(classList, numClasses);
    }

    NSMutableArray *classesArray = [NSMutableArray array];

    for (int i = 0; i < numClasses; i++) {
        Class superClass = classList[i];
        do {
            // recursively walk the inheritance hierarchy
            superClass = class_getSuperclass(superClass);
            if (superClass == [self class]) {
                [classesArray addObject:NSStringFromClass(classList[i])];
                break;
            }
        } while (superClass);
    }

    free(classList);

    return classesArray;
}
@end

プラグイン的な実装をしている場合は、検討してみてはいかがでしょうか?

参考ページ: Automagic Factories in Objective-C

XCConfigを複数ファイル構成にする方法

xcode-configsettings_Icon

XCConfigは、XCodeのConfiguration Settings Fileの事で、DebugやReleaseで異なるプロジェクト設定を適用する事が出来る優れモノです。
下記のように、ファイルの新規作成画面の項目として出てくるやつですね。

Screen Shot 2014-01-07 at 3.25.50 AM

CocoaPodsとか使っていると、自動生成されたXCConfigに手を加えたい時があります。
でも、pod installする度に書き換えるのは面倒ですよね。
実は、XCConfigには#includeディレクティブが用意されているので、この悩みを簡単に解決できます。
includeディレクティブはC言語と全く同じ構文です。

#!c
#include "別のxcconfigへのファイルパス"

これを使って、以下のような構成にすれば、万事うまく行きます!

XCConfig composition example

[WordPress] Markdownで記述した記事内のソースコード部分をハイライトする方法

WordPress

この辺は至る所で既に書かれた話題だと思いますが、自分にあった方法の備忘録という事でご紹介します!
WordPressで楽しく記事を書くにあたって、僕の要件は下記の通りです:

  • Markdownで書きたい
  • 記事内で紹介したプログラムのソースコードのシンタックスをハイライトしたい
  • ハイライトのカラースキーマにSolarized-darkを使いたい

Solarizedの配色は見やすいしカッコイイのでマジでおすすめです。

これらは、以下の二つのプラグインを使用する事で実現できます:

しかし、ここで一点問題があります。
highlight.jsは、記述するプログラムの言語をタグのクラス名で明示的に指定出来ます。
指定しなければ、自動で言語を検出してくれますが、その精度はイマイチです。
残念な事に、Markdownの記法ではクラス名を指定出来ません。
だからといって、HTMLを部分的に書くなんて気持ちよさが半減です!
以下のプラグインがこの悩みを解決してくれました:

このプラグインで、Markdown記法でも言語を明示できるようになります!
以下のようにして、コードの最初の行に#!に続いて言語の名前を記述すればOK。

#!ruby
class Foo < Bar
  def hello
    puts "Hello World!"
  end
end

結果:

#!ruby
class Foo < Bar
  def hello
    puts "Hello World!"
  end
end

objectivecbashjavaなどhighlight.jsで対応している言語の名前を指定できます。
快適!

蛇足

もう少し調べたら、GitHub Flavored Markdown for WordPressというのがあって、three backticksでコードブロックが使えるようになるらしい。
現状で割と満足なので、また気が向いたらトライしてみよう。