Emacs入門 #1 インストール

in Emacs

少し踏み込んでコンピューターを使うようになってくると、標準のテキストエディターとは別にお気に入りのテキストエディターというのができてくると思います。 私の場合はGNU Emacsで、振り返ってみると人生の3/5ぐらいの間このテキストエディターを使い続けています。

それほどお世話になっているエディターですが改めて紹介したことがなかったので、このブログでも気が向いたときにEmacsについて書いていこうかなと思います。

Mac OS Xにインストールする方法はいくつかありますが、私はMacPortsを利用するのがここ数年の常です。 その場合はこのようにしてインストールします。

sudo port install emacs-app
起動してみましょう。
open /Applications/MacPorts/Emacs.app
Screen Shot 2014-11-23 at 10.14.19

無事インストールすることができたようですね。

実はMac OS Xには標準でコマンドライン版のEmacsがインストールされています。

/usr/bin/emacs
Screen Shot 2014-11-16 at 02.28.44

でもどうせならグラフィカルユーザインタフェース版をインストールして使う方がいいでしょうね。

次回はできれば最低限の設定などについて書いてみたいと思います。 ではでは。


Can I Swift? その2 – 変わる変数、変わらない変数

in Swift

プログラムで値を一時的に保持するためにローカル変数というものが用いられますが、私はこの変数の用途は大きく2つあると思っています。 変わる変数としての用途と変わらない変数としての用途です。 変わる方はいいとして変数なのに変わらないなんて矛盾した呼び方ですね。 具体的なコードで見ていきたいと思います。

変わらない変数 in Objective-C

次のコードは実際にLadioCastにあるクラスメソッドで、エラーメッセージをダイアログボックスとして表示する部分です。

+ (NSInteger)alertUserInfo:(NSDictionary *)userInfo {
	// close current alert panel
	[NSApp abortModal];
	if (userInfo == nil) {
		return 0;
	}
	// show new alert panel
	NSString * const messageText = [userInfo objectForKey:NSLocalizedDescriptionKey];
	NSString * const informativeText = [userInfo objectForKey:NSLocalizedRecoverySuggestionErrorKey];
	NSAlert * const alert = [[[NSAlert alloc] init] autorelease];
	alert.messageText = messageText;
	alert.informativeText = informativeText;
	alert.alertStyle = NSCriticalAlertStyle;
	NSInteger const response = [alert runModal];
	
	return response;
}

コードの8,9,10,14行目でローカル変数を定義していますが、全部にconstという修飾子がついています。 constというのは設定された初期値から値を変更できないようにする修飾子で、いわゆる定数を宣言するためのものです。 一般にプログラムで定数というとプログラムを書いた時点で既に値が定まっているようなものが典型的です。 それとは対照的にconstがついたローカル変数は、その処理が実行される間だけ存在しかつその間だけ値が変わらないものになります。 つまりここで使われているローカル変数は全て最初から最後まで値を変えずに役目を終えるわけです。

実際のプログラムにおいてローカル変数に保持された値が最初から最後まで変更されない場合は意外なほど多く、これらは変数といえどもある値に扱いやすい名前、いわば別名を割り当てているだけ、といえます。 変わらない変数という考え方は、このような別名を割り当てているだけの変数を通常の変数と意識して区別しよう、という考え方です。 変わらないものとして区別することでプログラムがより理解しやすくなり、プログラマの精神的な負担が軽減されます。 この区別をObjective-Cの場合はconst修飾子の付加で行うことができましたが、さてSwiftの場合ではどうでしょうか。

変わらない変数 in Swift

うれしいことにSwiftではこの区別をよりはっきりつけることができます。 前出のコードをSwiftで書き直してみましょう。

class func alertUserInfo(userInfo:NSDictionary!) -> Int {
	// close current alert panel
	NSApp.abortModal()
	if !userInfo {
		return 0
	}
	// show new alert panel
	let messageText:String = userInfo.objectForKey(NSLocalizedDescriptionKey) as String
	let informativeText:String = userInfo.objectForKey(NSLocalizedRecoverySuggestionErrorKey) as String
	let alert:NSAlert = NSAlert()
	alert.messageText = messageText
	alert.informativeText = informativeText
	alert.alertStyle = .CriticalAlertStyle
	let response:Int = alert.runModal()

	return response
}

Swiftでは変わらない変数をletで定義することができます。 (それに対して変わる変数はvarで定義します。)

私はあるプログラミング言語が使える言語かどうか仕様を見る際、このように変わる変数と変わらない変数を区別して書けるかどうかを重要項目の1つとしてチェックします。 その意味でSwiftはこのチェックに難なく合格してくれました。

次回はもう少しこのテーマを掘り下げてみたいと思います。 ではでは。


らじおぱバージョン2.0.3リリース

in Ladiopa

iOSアプリらじおぱを更新しバージョン2.0.3としてリリースしました。 このリリースでの変更点は以下のとおりです。

  • アーカイビング中の動作を改善しました。

具体的にはらじおぱがフォアグラウンドで動作していてかつアーカイビングを実行している間はスクリーンロックに移行しない処理を追加しました。

別途iOS 7の機能についてその後開発者チケットを使ってApple担当者と直接やりとりしたりしてらじおぱに必要な修正を要望し続けていますが、今後の展開は未だに不透明な状況です。

ではでは。


Can I Swift? その1 – 前置き

in Swift

現地時間の6月2日に行われたWWDC(The Apple Worldwide Developers Conference)でのAppleの発表で一番の注目点は新プログラミング言語Swiftでした。

Swiftの特徴を簡単にいうと現代的なプログラミング言語の機能をふんだんに取り入れつつ、既存のCocoaフレームワーク(Mac OS X)およびCocoa Touchフレームワーク(iOS)をそのまま利用できるよう意図された言語ということができます。 これまでCocoa, Cocoa Touchフレームワークを利用できる言語はObjective-Cだけだったわけですが、それと並ぶ開発言語になります。 またObjective-Cに対するSwiftの位置付けはAndroidの開発言語Javaとの対比でいうとJavaに対するScalaの位置付けに近い感じがします。 (余談ですがScalaについてはLadiopa for Androidを開発する際に開発言語として使えないか調べ、不可能ではないもののGoogle非公式ゆえのハンディが大き過ぎて断念した経緯があります。)

さて実際のソフトウェア開発にSwiftは本当に使えるのでしょうか。 ちょうどよい機会ですので、私がObjective-Cでプログラムを書く際に常々有用だと考えている書き方を紹介しつつ、それがSwiftでも実現できるかどうかという視点でそれを探っていきたいと思います。

毎回1テーマでおそらく3、4回ぐらいの続き物になるかなと思っています。 ではでは。


MacBookに外部マイクをつなげよう(中編) – LadioCast開発記その73

in LadioCast
MacBookに外部マイクをつなげよう(前編) からまた時間があいてしまいました。 そしてこれは中編ということで今回でもまだ終らないんですね^^。

MacBookの4極ジャックを普通のヘッドホンジャックとマイクジャックに分けるような変換アダプターを手に入れたい。 それをイギリスのebayの商品で見つけることができました。 お店自体は香港にあるようで、値段は日本円で¥670、送料は不要ということで購入しました。 IMG_0035.jpg

数日後に届いてこれで万事解決、と思いきや2つ問題点がありました。 1つ目はマイクを接続してもうまく認識されないんですよね。 テスターで調べてみるとどうも内部で断線している模様、とんだ不良品です。 2つ目はヘッドホンジャックとマイクジャックの間が近すぎて、結局双方がかなり細めのプラグでないと同時に指すことができないんですよね。 これは失敗してしまいました。

やはり自作した方が早いのでしょうか。 実際Webを検索してみると自作されている方は結構いらっしゃるようです。 自作の前にまず4極ミニジャックの電極配置について調べてみることにしましょう。 基本的に4極をどう使うかについて統一規格は無く、2種類ぐらいの規格が使われているようです。 1つは CTIA (Cellular Telephone Industry Association) による規格で先端から順に

  • L(左)R(右)GND(グランド)MIC(マイク)
となっているもので、iOSデバイスとほとんどの携帯電話はこのタイプのようです。 もう1つは Open Mobile Terminal Platform (OMTP) による規格で先端から順に
  • L(左)R(右)MIC(マイク)GND(グランド)
となっているもので、Xperiaなどがこのタイプのようです。 規格の不統一も変換アダプターが存在しにくい理由かもしれませんね。 これで電極配置はわかりました。

さて自作ですが、どうやら百円ショップのダイソーで手に入るステレオ出力分配器をベースにするのが良いようです。
IMG_0106.jpg
確かにケースがネジで止められているので開きやすく、個々のステレオミニジャックもケースに固定されていませんので工作するには持ってこいですね。
IMG_0111.jpg
百円ショップには工夫次第で便利に使える物がいろいろあるんですね。

ダイソーに行った帰りに別の百円ショップであるキャン・ドゥに寄ってみました。 何気なく見ているとこのようなものが目にとまりました。
IMG_0112.jpg
プラグの片方が4極ミニプラグ、片方がRCAピンプラグx3です。 ビデオカメラなどから映像とステレオ音声を取り出すコードのようですね。 裏を見てみるとこのようなことが書かれていました。
IMG_0115.jpg
ビデオ業界でも4極プラグの規格は統一されていないようです。 しかしこの電極配置、何かピンとくるものがあります。 そうです先ほどのiOSデバイスのCTIA規格とアース(グランド)の位置が同じなのです。 他の電極はともかく、アースさえ配置が同じであれば工作をしなくても結線のみで変換することができるのではないでしょうか?! しかも百円ショップですからこのコードもなんと百円です。

ということで次回「MacBookに外部マイクをつなげよう(後編) 」ではこのコードを元に工作無しで変換アダプターができるのかどうか実際に試していきます。 乞御期待。

6 Responses to “MacBookに外部マイクをつなげよう(中編) – LadioCast開発記その73”

  1. kawauso

    こんにちは!
    ヤフオクにありましたか。あとは海外の通販を地道にあたるとかですかねえ。
    なお後編に比較的簡単に手に入るコードの組み合わせで作る方法を載せました。

  2. kawauso

    Hello Ahter!
    Sorry for late reply.
    LadioCast can stream mp3 if and only if it finds libmp3lame.dylib installed in the library paths.
    Also the bit version(32bit or 64bit) should be matched then.
    Cheers.

  3. 匿名

    ヤフオクにそれっぽいケーブルが売ってますね。
    他には、自作以外で入手できるんでしょうか…