Archive for the 'Mac' Category

9月 11 2009

Snow LeopardにMySQLをインストールする

Published by Eiji under Mac

Mac OS XをSnow LeopardにしたらPHPが5.3になってて、PartuzaやShindigを使うのにentropyを入れなくても済んで、とても素敵です。

しかし同環境でMySQLを使うのに、ちょっとごにょごにょしなければならなかったのでメモを残しておきます。(2009年9月現在の情報です)

MySQLをダウンロード

MySQLのバイナリをこちらからダウンロードします。このページの下の方にあるMac OS X(package format)の中から、(Snow Leopardは10.6ですが)Mac OS 10.5(x86_64)を選びます。

MySQLをインストール

インストールはGUIでできます。環境設定項目とスタートアップアイテムもインストールしちゃいます。パスも切っておきましょう。

~/.bash_profileを作るか、既にあれば下記を追記します。

PATH=$PATH:/usr/local/mysql/bin
export PATH

さらに

> source ~/.bash_profile

とかやれば、即時反映できます。

ごにょごにょする

ここからがポイント。

>  cd /usr/local/mysql
>  sudo ./script/mysql_install_db

そんで

>  sudo cp /etc/php.ini.default /etc/php/ini
>  sudo vim /etc/php.ini

とかやって、

mysqli.default_socket = /var/mysql/mysql.sock

の部分を

mysqli.default_socket = /tmp/mysql.sock

に書き換えます。

これで、MySQLを立ち上げ直せば、オッケー。環境設定からMySQLをスタートすれば、PHPでMySQLが使えるようになったはず。

追記

ちなみにこの設定はPartuzaの動作を確認したのみですので、他のことをやる場合はもう少しいじる必要があると思います。

View Comments add to hatena hatena.comment (8) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 8

1月 08 2009

FriendConnect向けあしあとガジェット公開とコード解説

FriendIntroducerはFriendConnectを試すことに主眼を置いて作ったガジェットだったため、それほど実用的なものではありませんでした。そこで、本格的に使えるガジェットとして、MyBlogLogやgooあしあと、Yahooログール的ガジェットとしてFootprintsを作りました。

Footprintsとは?

Footprintsは、サイトメンバーの訪問を記録するガジェットです。百聞は一見にしかず、このブログの左ペイン一番下にあるガジェットをご覧ください。もしこのサイトのFriendConnectに登録していなければ、Joinしてみてください。ログインしていない場合はしてください。 Footprints1 ご想像通り、ログインした状態でブログを訪問すると、あしあととして訪問記録が残ります。ほかの人が見ると、どのくらい前に訪問したかが分かります。また、最近流行の(?)あしあとを消す機能も実装済みです。 ガジェットXMLはhttp://devlab.agektmr.com/OpenSocial/FriendConnect/Footprints.xmlになりますので、欲しい方はご自由にお持ちください。貼り方はこちらを参考にしてください。

コードと動作の解説

FriendConnectとはいえ、中身はただのOpenSocialガジェットです。OpenSocial本も発売間近、mixigooホームのOpenSocial対応も近いということで、今回はサンプルコード付きでガジェットの内容を解説してみたいと思います。

基本的な動作

まず、あしあとの記録方式ですが、FriendConnectは残念ながらmakeRequest未対応のため、外部サーバーのDBに保存、なんてことはできません。AppData(Persistent API)を使って保存しています。AppDataはガジェット+ユーザーの組み合わせごとに存在するのですが、残念ながらOWNERであるブログ自体のAppDataには保存できないことが判明しました。この辺りはPermissionが絡んでくるのですが、一般的なOpenSocialとは事情が異なるため、特殊な権限の割り振りになっていると思われます。 この問題を解決するために考えたのが、VIEWERごとに自分のAppData領域にデータを保存する、という技。OWNERの友達のAppDataをまとめて取得すれば、似たような状況が作れるはずです。今回はこの方式でうまく実現することができました。 つまり、1つのデータ領域に配列であしあとを記録して行くのではなく、メンバーごとに最終アクセス日時をあしあととして記録し、Persistent APIのnewFetchPeopleAppDataでメンバー全員分をまとめて取得しています。

コード解説

        init:function() {
          // データリクエストオブジェクトを生成
          var req = opensocial.newDataRequest();
          // 閲覧者(viewer)の情報を取得
          var params = {};
          params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [opensocial.Person.Field.PROFILE_URL];
          req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER, params), 'viewer');
          // メンバー(OWNERの友達)のAppDataをまとめて取得
          var idspec = opensocial.newIdSpec({'userId':opensocial.IdSpec.PersonId.OWNER,
                                             'groupId':opensocial.IdSpec.GroupId.FRIENDS});
          req.add(req.newFetchPersonAppDataRequest(idspec, 'footprint'), 'footprint');

          // 上記2つの取得リクエストをまとめて投げ、callback関数で受け取ります
          req.send(function(response) {
            if (!response.get('viewer').hadError()) {
              fp.viewer = response.get('viewer').getData();
            }
            if (response.get('footprint').hadError()) {
              fp.footprints = [];
            } else {
              var footprints = response.get('footprint').getData();
              var exist = false;
              // AppDataはユーザーごとに返ってきますので、ループで回します
              $.each(footprints, function(footprint) {
                // AppDataは文字列しか受け付けませんので、取得時にJSONオブジェクトに戻してやります
                var json = gadgets.util.unescapeString(this.footprint);
                var foot = gadgets.json.parse(json);
                if (fp.viewer !== null) {
                  // 閲覧者と一致した場合は上書き
                  if (foot.id == fp.viewer.getId()) {
                    exist = true;
                    foot.id = fp.viewer.getId();
                    foot.name = fp.viewer.getDisplayName(),
                    foot.thumbnail = fp.viewer.getField(opensocial.Person.Field.THUMBNAIL_URL),
                    foot.profile = fp.viewer.getField(opensocial.Person.Field.PROFILE_URL),
                    foot.timestamp = (new Date()).getTime();
                    // 新しいあしあとをAppDataに記録
                    fp.setFootprint(foot);
                  }
                }
                fp.footprints.unshift(foot);
              });
              if (!exist && fp.viewer !== null) {
                // 今まで一度もあしあとを記録したことがない人の場合、追加します
                var foot = {'id':         fp.viewer.getId(),
                            'name':       fp.viewer.getDisplayName(),
                            'thumbnail':  fp.viewer.getField(opensocial.Person.Field.THUMBNAIL_URL),
                            'profile':    fp.viewer.getField(opensocial.Person.Field.PROFILE_URL),
                            'timestamp':  (new Date()).getTime()};
                fp.footprints.unshift(foot);
                fp.setFootprint(foot);
              }
              // 時系列でソート
              fp.footprints.sort(function(a, b) {
                return b.timestamp - a.timestamp;
              });
              // レンダリングします
              fp.showFootprints();
            }
          });
        },

ユーザーごとにAppDataを保存する部分は下記のコードです。

        setFootprint:function(foot) {
          // あしあとのデータオブジェクトを文字列に変換
          var str = gadgets.json.stringify(foot);
          var req = opensocial.newDataRequest();
          // 閲覧者のAppDataに記録
          req.add(req.newUpdatePersonAppDataRequest(opensocial.IdSpec.PersonId.VIEWER, 'footprint', str));
          req.send();
        },

OpenSocial的に役立ちそうな部分のみ抜粋していますが、上記コードで基本的な動作を行っています。ソースコード全体を読みたい方はこちらから。

まとめ

FrienConnectの特殊な環境としては、前述のPermission問題。それからmakeRequestの問題が分かってきました。いずれもプライバシーの重要性に配慮した結果と思われます。 Permissionについては、一般的なSNS上のOpenSocialでは、VIEWER自身がガジェットをインストールしているかどうかで挙動が変わりますが、FriendConnectではOWNERが常に仮想人格であることから、そもそもその前提がなりたたないため、特殊な動きをしているようです。 makeRequestについては、技術的な問題は既に解決済みのはずですので、特殊なPermission下で取得されたプライバシーに関わるデータを外部サーバーに安易に保存されることを避ける狙いがあるのではないでしょうか? 何はともあれ、このガジェットを使うと、「ああ、ブログをコミュニティに変えるってこういうことなのか」と、(少しだけ)感じることができます。ぜひお試しください。

View Comments add to hatena hatena.comment (6) add to del.icio.us (0) add to livedoor.clip (1) add to Yahoo!Bookmark (0) Total: 7

6月 03 2008

Mac OS XのちょっとマニアックなTips

Published by Eiji under Mac

ことえり変換

変換中に

  • Ctrl + j : ひらがなに変換
  • Ctrl + k : カタカナに変換
  • Ctrl + l : 全角英数に変換
  • Ctrl + ; : 半角英数に変換

カーソル移動等

Vimと違うので使いやすくはないけど・・・

  • Ctrl + p : 上
  • Ctrl + n : 下
  • Ctrl + b : 左
  • Ctrl + f : 右
  • Ctrl + k : 行削除
  • Ctrl + y : ペースト
  • Ctrl + a : 行先頭に移動
  • Ctrl + e : 行末に移動

キャプチャ

Command + Shift + 3で全画面キャプチャは言うまでもないけど、

Command + Shift + 4で範囲指定キャプチャ。キャプチャしたい範囲をドラッグしながら

  • Space : キャプチャ範囲をそのまま移動
  • Shift : カーソルを動かした方向以外を固定して領域を変形させる
  • Option : 領域の中心を基点に形を変形させる
  • Ctrl : キャプチャ範囲をクリップボードにコピー
  • Esc : キャプチャをキャンセル

QuickLook

画像QuickLookで

  • Option + クリック : 拡大
  • Option + Shift + クリック : 縮小
  • Option + ホイール : 拡大/縮小

PDFQuickLookで

  • Command + プラスキー(Command + Shift + ;) : 拡大
  • Command + マイナスキー : 縮小

Dashboard

Optionを押しながらマウスオーバーでウィジェット削除の×印が出る(いちいち画面左下の+をクリックしなくてよい)

その他

  • Ctrl + Shift + Eject : ディスプレイを切る
  • Command + Option + Esc : 強制終了
  • Command + Option + Ctrl + Eject : OSシャットダウン
  • Ctrlを押しながらマウスホイールをグリグリ : 画面の拡大/縮小(結構感動的)
  • SafariのタイトルバーをCommand + クリック : 同じサイトのURLを上位階層に移動
  • (たぶん全てのアプリで)Command + F1 : 同じアプリのウィンドウを順番に行き来

その他、集めたTipsの参考サイトはこちらに色々あります

View Comments add to hatena hatena.comment (1) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 1

5月 22 2008

Mac OS Xアプリを管理する強力コンボ AppFresh / iusethis.com

Published by Eiji under Mac

最近のMac OS X用アプリには、自動的に更新をチェックしてアップデートしてくれるものも少なくありませんが、常に最新版を使いたい人にとって、そうでないアプリを管理するのは面倒なもの。チェック方法としてVersionTrackerや、デスクトップアプリケーションのLogicielMac Updateといった選択肢がありますが、いずれも今日紹介するコンボと比較すれば、つまらないものに思えてきます。

iusethis.com

iuserthis.comは使っているMac OS X用アプリを登録して共有するSNSです。

サイトにサインアップしてからimakeprofileというアプリを使うと、Macにインストールしてあるアプリを自動的にスキャンして、自分が主に使用しているアプリをiusethis.comに登録することができます。使用しているアプリが未登録の場合は、自分で追加することも可能。

登録したアプリは、サービスが最新版の情報を取得するので、更新が可能かどうかを調べることができます。もちろんレビューや、誰がそのアプリを使用しているのかを確認することもできます。さらには簡易的なSNS機能として、TwitterのようなFollow機能があるので、他の人のアプリ使用状況を追跡することもできます。

ちなみに僕が使用しているアプリはこんな感じ。

Facebookアプリも提供されているので、「俺こんなアプリ使ってんだぜ!」と叫びたいニーズも満たしてくれます。そのうちきっとOpenSocialにも対応してくれるでしょう。

AppFresh

AppFreshiusethis.comと連携して使えるソフトウェア更新ツールです。iusethis.comのデータベースから自動的に最新版を確認して、どれが更新できるかを知らせてくれます。その場でダウンロードからインストールまでまとめて行うこともできますし、ダウンロードのみ行うこともできます。Growlに対応しているので、ダウンロードやインストールが完了すると通知もしてくれます。

まとめ

AppFresh / iusethis.comは、SNSの楽しさで集めたユーザーに、アプリ開発者やサイト管理者の煩雑な作業を集合知として解決してもらうことで、くまなく幅広いアプリケーションの更新情報を提供可能とした最強のコンボと言えるのではないでしょうか。

※ちなみに、アプリの自動更新チェックには、RSS2.0のenclosureにアプリのリソースURLを入れるAppCastなるプロトコルが使われるケースが多いようです。

View Comments add to hatena hatena.comment (2) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 2

3月 27 2008

Safari3.1のオフライン機能

Published by Eiji under Mac

先日Safari3.1から搭載されたオフライン機能について書きましたが、amachangさんが使い方を詳しく解説されています。

Safari 3.1 に実装された「Client-side database storage (SQL API)」とは何か? – IT戦記

詳しく読んでませんが、HTML5からの仕様らしく、既にFirefox3のβ版にも搭載されているとか。

これで、あんなことやこんなことができそうですね・・・

View Comments add to hatena hatena.comment (0) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 0

Next »