サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Switch 2
www.lifeaether.com
PT3 等のチューナーを使うことで Linux で TV を視聴・録画することができ、 epgrec 等の環境を導入することで、録画予約も手軽に行うことができます。大変便利そうな epgrec なのですが、残念ながら LAMP 構成を要求するなど、ただ録画したいだけなのになぜ WEB サーバーが必要なのか、みたいな気分になってきます。そこで、自動で録画するスクリプトを自作することにしました。 目標 条件にマッチした番組を自動で録画します 番組表を自動更新し、自動で録画予約を追加します システムは可能な限りシンプルに構成します 必要なもの recpt1 – Linux でテレビを視聴できる用意 epgdump – TS から番組表を XML で出力します xsltproc – XSLT を処理します sqlite3 – データベース ほか、crontab 等を使用しますが、普通は最初から入っ
先日リリースされた Mavericks を iMac にインストールしていたのですが、インストールの途中でインストールに失敗してしまいました。その後もう一度インストールしたところ、インストールに成功して問題もないようですが、復旧するのがなかなか大変だったので、メモ代わりにそのレポートを書きます。 0. インストール前の状態 iMac(2009,Late) です。10.6 からアップデートし続けて 10.8 の OS が入っている状態です。HDD のリコールがありましたが、メールが届いてから交換期間が1ヶ月もなかったことと、特に異常はみられなかったので交換していませんでした。 1. Mavericks のインストールに失敗 Mavericks のアップデートを App Store から行い、インストールため再起動します。そこからは何も操作せずともインストールが進行していきますが、途中でエラー
Luaスクリプト言語はC言語と親和性が高く、C言語のプログラムにLuaスクリプトを組み込むことによってLuaの関数が呼べたり、逆にLuaからC関数を呼び出すことも可能となっています。前回は、Luaだけでオブジェクト指向を実現するコードを書いてみましたが、今回は、LuaにC++のクラスを公開するコードを書いてみました。 C++のコード: #include <stdio.h> #include "lua.hpp" #include <iostream> #include <string> using namespace std; class CObject { string m_Name; public: CObject(string name); ~CObject(); string description(); string getName(); }; CObject::CObject(s
なぜ Objective-C は気持ち悪いのか分析してみる企画。これまで、見た目やクラスについての気持ち悪さを考えましたが、最後に全体的に気持ち悪くしている要素を探ろうと思います。 参照カウンタ方式 Objective-C をはじめて最初に躓くのが、このメモリ管理だと思います。わかってしまえば、非常に簡単なルールで管理されていることが理解できるのですが、理解するのが少し難しく感じる方も多いようです。また、Javaの人から見ればガベージコレクションないの?C++の人から見れば、スマートポインタないの?なぜいまどき、煩わしそうな参照カウンタ方式を採用しているのだろうか、と思われることでしょう。しかし、実際には、それほど煩わしいものでもなく、ガベージコレクションよりはパフォーマンスはいいので、デメリットしかないわけではありません。2.0からは、ガベージコレクションを有効にもできます。 nilが無
なぜ Objective-C は気持ち悪いのか分析してみる企画。前回はコードの見た目について考えましたが、今回はクラスについて考えてみます。 動的な生成のみ Objective-C は、静的なインスタンスを生成することはできず、必ず動的なインスタンスを生成しなければなりません。常にポインタで扱うことになるので、高速な反面、メモリ管理の煩わしさが常につきまといます。通常、インスタンスの生成、破棄は次のようにします。 id object = [[NSObject alloc] init]; [object release]; NSObject に対して alloc メッセージを送り、インスタンスのメモリ領域を生成します。そのあとに、それに init メッセージを適用し、インスタンスを初期化します。ほとんどの場合、alloc, init はペアにして実行します。なぜなら、alloc しても in
iPhone OS 向けのアプリケーション開発で注目を浴びている Objective-C 言語ですが、Objective-C についてあまりいい噂を耳にしないので、なぜそうなってしまうのかという分析をしてみることにしました。記事が長くなりそうだったので、今回は見た目編です。 1. 見た目 プログラミング言語において、見た目というものは重要な要素のひとつです。Objective-C 言語はオブジェクト指向言語でありますが、実際のコードをみてみると、ほかのメジャーな言語とはちょっと違った構文がとられています。 メッセージ式 Objective-C では、メソッド呼び出しをメッセージ式で記述します。以下は、anObject に message というメッセージを送る例です。 [anObject message]; [anObject message:arg1]; [anObject messag
Live2D + FaceRig 練習用に作成したモデル Web カメラで撮影された人の顔に連動してリアルタイムにアニメーションする Live2D + FaceRig で自分で描いたイラストに乗り移れるのが楽しそうだったのでやってみました。大変参考になり、きっかけにともなった配信動画はこちらです。まずはじめに観ましょう。 【りむとまき】バーチャル受肉布教!白紙からFaceRigで動かす!~キャラデザイン編~ 【りむとまき】バーチャル受肉布教!白紙からFaceRigで動かす!~LIve2D・FaceRig編~ こちらの動画で Live2D でモデルを作成する方法は十分にわかりました。しかし Live2D から FaceRig に渡す方法が古めの資料しか検索でヒットしなかったので、その辺りの情報をまとめておきます。おまけにいくつか個人的にわかりにくかったところがあったのでついでに書いておきます
NSPredicate の話を求めて、このブログへ訪れる方が多いようなので、NSPredicate の使い方を紹介しようと思います。 NSPredicate は、NSArray で要素をフィルターするための条件を表したり、Core Data で取ってくるデータの条件を表すためのクラスです。 NSPredicate を作成する方法として最も簡単なものが、predicateWithFormat です。これを用いると、NSPredicate 独自の記法ではありますが、自然な記述で条件を書くことができます。 Predicate の条件式の基本形は、”keyPath operator literal” です。それぞれには、次のようなものが入ります。 keyPath キー値コーディングのキーパス。この値が条件の判定に利用されます。self 指定すると、そのオブジェクト自体の値が利用されます。(self
Objective-C でよく使われるパターンとして、デリゲートがあります。C# などの言語では、デリゲートは言語の機能としてありますが、Objective-C では、言語としてデリゲートの機能があるわけではありません。 概要 Objective-C でのデリゲートとは、あるインスタンスに送られたメッセージを、そのまま別のあるインスタンスに受け流し、そのインスタンスにメソッドの実行を委ねることです。Objective-C では、メッセージの転送が容易に可能なので、このようなデリゲートの実現がされています。 上の図は、sender が receiver に message: を送信したところ、 receiver の delegate インスタンスにメッセージ転送が起きた図です。 デリゲートの実例 Cocoa Application において、デリゲートはさまざまなところで利用されています。代
Objective-C が奇妙に見える大きな要因のひとつは、明らかにメッセージ式の存在だと思います。なぜ Objective-C はメッセージ式という奇妙な式を用いてメソッドを呼び出すようになったのでしょうか? Objective-C の作者にどういった意図があったのかは知りませんが、私なりに Objective-C がメッセージ式でなければいけない理由を見つけていますので、そのお話をしようと思います。 まず、他の多くの言語で採用されている、 . によるメンバアクセスによるメソッド呼び出しを考えてみましょう。 anObject.method( ); みなさんはこれをどう解釈するでしょうか? インスタンス anObject の method メソッドを実行する。そう解釈するのが普通だと思われます。なぜなら、 . は、多くの場合メンバへのアクセスを意味するもので、 anObject のメンバで
Objective-C のメモリ管理やオブジェクトのオーナーシップは、Objective-Cを始めるプログラマにとって、少なからず理解に苦しむこともあるようですが、今回はある程度理解したプログラマ向けの、 retain と copy の使い分け方を書こうと思います。 実は、この retain と copy の使い分け方は、Cocoa基礎ガイドにも載っています。 copyとretainの使用面における違いは、前者の場合、新しい所有者による単独使用のためにオブジェクトが要求されることです。新しい所有者は、コピー元に関係なく、コピーしたオブジェクトを変異させることができます。通常、オブジェクトを保持するのではなくコピーするのは、オブジェクトが値オブジェクトの場合、つまり何らかのプリミティブな値をカプセル化している場合です。このことは、オブジェクトがNSMutableStringなどのように可変(
Mac OS X の話です。 アプリケーションを作ったら、一度はメモリリークを調査しておきたいものです。そんなときは、leaks コマンドと Instruments を使って調査しましょう。leaks コマンドは、引数にプロセスIDを与えることで、そのプロセスのメモリリークの状況を表示してくれます。ここでリークが0であれば、全く問題ないので、ここで調査は終了です。 プロセスIDは、アクティビティモニタやpsコマンドで調べることができます。 実行結果:メモリリークがないとき Process 171: 31663 nodes malloced for 2375 KB Process 171: 0 leaks for 0 total leaked bytes. もし leaks コマンドでリークが見つかった場合は、さらに詳細な状況を Instruments を使って調べることができます。 Ins
Mac OS X 用 Social IME のクライアントソフトウェアを公開します。 Social IM – Mac OS X 用 Social IME クライアント ローマ字入力でSocialIMEを使ったかな漢字変換ができます。かな入力と予測変換はまだ搭載していません。 アプリケーション名が思いつかなかったので、暫定的に Social IM という名前にしています。 クライアントソフトウェアの開発に夢中で、Social IME について何も触れていなかったので、ここで簡単に。 言葉というのは流動性のあるものなので、このような集合知を利用して変換を行うというのは、至極もっともな感じがします。内蔵辞書で変換する方式では、新しい言葉を共有する事ができません。もともと言葉というものは、共有してこそ意味のあるものであるので、Social IME によって入力メソッドも一歩人間近づいたんじゃないか
このセクションでは、ストリームの概念について解説します。普段馴染みの無い概念かもしれませんが、コンピュータではよく使われる概念です。 - 目次 - ストリームとは、データの流れを作るパイプのようなものです。データの流れには、ファイルから文字列へ、文字列からファイルへ、などといったものがありますが、他にも基本型のストリームへのデータの入出力がサポートされています。 ストリームは、データを繋ぐパイプのような働きをするような物もありますが、データの変換をするような働きを持ったストリームも存在します。また、この両方の性質を持ったストリームも存在します。図は、ファイルからデータを読み取り、文字列に変換する一連の流れを持ったストリームの例です。
Cocoaからコマンドライン型のプログラムを実行したい時は、NSTaskを使います。NSTaskを使うと、かなり簡単に外部のプログラムを実行することができます。単に実行するだけならば、おそらくリファレンスを見るだけですぐ使い方がわかると思いますので、出力を読み取る方法を説明します。 単に読み取る場合、次のようにします。 NSTask *task = [[NSTask alloc] init]; NSPipe *pipe = [[NSPipe alloc] init]; [task setLaunchPath:@"/bin/ls"]; [task setStandardOutput:pipe]; [task launch]; NSFileHandle *handle = [pipe fileHandleForReading]; NSData *data = [handle readDataT
動画にコメントを付けられるサービスで有名なニコニコ動画ですが、以前からコメントのデータには少々興味があり、分析してみると面白いのではないかと考えています。そのためには、まずコメントのデータをダウンロードしなければならないのですが、いろいろ調べた結果、HTTP通信で取得できることがわかりました。 具体的には、動画のURLを”http://www.nicovideo.jp/watch/sm******”とすると、まず、”http://www.nicovideo.jp/getflv?v=sm******”を開きます。すると、メッセージ用のスレッドIDとメッセージサーバーのURLを取得することができます。それぞれ、thread_idとmsの値がそれです。 次に、メッセージサーバーにHTTPリクエストをしますが、POSTメソッドを使用し、次のような書式のxmlを”http://msg**.nicov
Objective-Cは大変面白い言語です。こんな問題を用意してみました。このプログラムのNSLogで出力される文字列は、いったいどうなるでしょうか。すべてクラス名が出力されます。 #import <foundation /Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *string1 = [NSString stringWithString:@"http://dev.activebasic.com/"]; NSString *string2 = [string1 stringByAppendingPathComponent:@"OverTaker"]; NSLog( [string1
Mac OS X Leopardでは、開発環境も大きく変わりました。Mac OS X標準のCocoaアプリケーションを作成する開発環境のXCode,GUIを設計するInterfaceBuilder、そして開発言語のObjective-Cすべてがメジャーバージョンアップされています。その中でも、特にInterface Builderの使い方が少なからず変わって、少し戸惑うところもあるので、Interface Builder2.0を使っていた人のための、Interface Builderの使い方を書こうと思います。 今回は、Interface Builderでコントローラーオブジェクトの作り方を説明します。ここでいうコントローラオブジェクトとは、MVC(Model-View-Controller)のControllerオブジェクトのことです。このあたりのワークフローが、特に旧Interface
iPhone SDK beta3がリリースされましたが、beta2からカスタムインストールだけではPowerPCのMacでiPhoneのアプリケーションをビルドできなってしまいました。しかし、少し設定ファイルを編集することで、beta3でもiPhoneアプリケーションをビルドできることがわかりました。これでIntel Mac同様にPPC MacでもiPhone SDKを楽しむことができます。 その方法はこちらのブログに書かれています。 iPhone SDK Beta 2 PPC Fix 最も簡単な方法は、iPhone SDKをカスタムインストールした後、上のリンク先のブログで配布されている設定ファイルを上書きする方法です。 まず、iPhone SDKをPPC Macにインストールする方法を見て、iPhone SDKをカスタムインストールしてください。以前の記事ではAspen…のパッケージを
iPhone SDKのreadmeには、”NOTE: iPhone SDK will run on Intel-based Macs running Mac OS X v10.5.2 and later. “と書いてありますが、ググってみるとPPC MacでもSDKをインストールする方法が見つかりました。 Don’t Have An Intel Machine But Want To Code For The iPhone Anyway? Follow These Steps 実際iPhone SDKをインストールしてもXcode 3.1だけインストールされて、iPhone SDKはインストールされないのですが、ダウンロードしたiphone_sdk.dmgの中に入っているPackagesフォルダの中の”Aspen..”から始まる名前のインストーラーを個別に実行していけば、iPhone SD
Core Dataに慣れるためにサンプルアプリケーションを作っていた訳ですが、Core Dataを使うとサンプルアプリケーションが立派なアプリケーションになってしまうようです。CocoaプログラマはCore Dataを習得するべきでしょう。 この前のNSPredicateの記事で使ったアプリケーションに追加して作りました。左下の「+」「-」は、コメントファイル(ニコニコ動画)の追加と削除です。追加すると、上の画像のように表示されます。Core Dataアプリケーションのテンプレートは、アプリケーションの終了時に、自動的にデータモデルを保存、アプリケーション開始時に復元を行ってくれるので、上の画像のようにデータがある状態でアプリケーションを終了すると、次立ち上げた時もそのままの状態で立ち上がります。 このアプリケーションのデータモデルは次のようになっており、XCode付属のツールで編集します
ここ数日忙しくて久しぶりの更新ですが、しばらくこの状態が続くので、楽しみにしてくれている方がいらっしゃるのなら、更新が滞ってしまって残念です。 CocoaでのWEBページを取得する方法はいくつかありますが、最も簡単な取得の仕方はNSStringやNSDataのstringWithContentsOfURL:やdataWithContentsOfURLを使う方法です。これはメソッドひとつで手軽にWEBページを取得できます。 NSURL *URL = [NSURL URLWithString:@"http://www.lifeaether.com/overtaker/blog/"]; NSString *string = [NSString stringWithContentsOfURL:URL]; NSLog( [string description] ); もうひとつは、NSURLDown
Mac OS Xのユニークな機能として、システムサービスというものがあります。私はそれほど使っていませんが、便利といえば便利なものなので、ぜひ自分の作成したアプリケーションにも取り入れたいものです。そういうわけで、今回はサービスメニューへの対応の仕方を紹介しようと思います。 ちなみに、今回はサービスのみのアプリケーションについては説明しません。また、説明が結構適当になっているので、Appleのドキュメントとあわせてみるとより効果的だと思います。英語が苦手な方は、Cocoa Break!さんのところに日本語訳が置いてあります。 0. 概要 まずは一通り簡単な説明から行いましょう。サービスメニューはペーストボードを拡張したようなもので、データはペーストボードを経由し、アプリケーションへ渡されます。サービスメニューへ対応するために行う作業は主に2つあり、1つはOSヘサービスメニューがあることを知
さくらのVPS新プランに移行中、うっかり既存のプランの方のサーバーをセットアップしてしまい、ここ最近のブログデータと画像を消去してしまいました。 画像データはバックアップが無かったかもしれないので、現在どのようにするか検討中です。。。 古い情報はあまり役に立たなくなってきているので、そろそろ一度区切りを付けてもいいかもしれません。 以前、nConverterというソフトを作ってとりあえずリリースしましたが、その後、自分が使わないので放置し続けていて、OS X 10.6 でうまく動作しない状態でした。 最近なんとなく気が向いたので、うまく動かない部分を修正していっているのですが、主な修正箇所は NSCollectionView がうまく表示されないという謎な箇所でした。ログに unlockfocusなんとか と出るだけで、かなり謎でしたが、NSCollectionViewItem の Vie
Cocoa基礎ガイド>Cocoaオブジェクト>オブジェクトの作成 (apple developer connection) Objective-Cは、名前から見てもオブジェクト指向言語ということが伺えますが、実は、オブジェクト指向でよく見かけるコンストラクタ,デストラクタの仕組みはありません。ただし、Cocoaを使う場合には、Cocoaがそれとほぼ同様の仕組みを、全てのオブジェクトのルートクラスであるNSObjectで実装しているので、コンストラクタとデストラクタはあると言ってよいでしょう。 上記のリンク先では、それらをイニシャライザ,deallocメソッドと呼んでいるようです。deallocメソッドは、オブジェクトが破棄するときに呼ばれるような仕組みになっていますが、イニシャライザは自分でメソッドを実行しなければなりません。一般的に、このようにしてオブジェクトを生成し、イニシャライザを呼
このページを最初にブックマークしてみませんか?
『www.lifeaether.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く