2009-03-31

Redmine 本を注文した

「入門 Redmine」を Amazon で注文しちゃった。

Redmine は Ruby on Rails で書かれたバグ管理システム (Bug Tracking System / Issue Tracking System)。同種のソフトウェアに Trac がある。

今まで、ぼくは Trac を使っていたのだけど、Trac は複数リポジトリーに対応していない。バージョン管理システムに Subversion を使ってるうちはまだ良かったのだけど、最近 git (というか repo) に手を出すやうになって、どうにも Trac ではプロジェクト管理が出来なくなって来た。Redmine は複数リポジトリーにも対応しているし、Git も OK という話を聞いたので注文した次第。といふわけで、このブログにも Redmine ネタが多くなるかもしれない。

入門Redmine Linux/Windows対応

2009-03-26

iPhone の GPS のスピードと精度を上げる方法

iPhone で「Wi-Fi をオン」にすると、GPS が受かるまでの時間と精度が上がる。この時、どこかの Wi-Fi に接続する必要はない。Wi-Fi 未接続でも全然 OK。

きっかけ

先日、銀座の町で軽く迷子になった。自分がどこにいるかを知りたかった。iPhone のマップ・アプリを立ち上げたら、自位置が捕捉されない。いつまで待っても「この辺り」ってのが分かる程度で、あのピンポイントに「ココ」って教えてくれるところまで集束しない。

ダメ元で Wi-Fi を ON にしたら、少し待った後、あっけなくマップに青い玉が現れた。Wi-Fi を ON にしただけで、どこの Wi-Fi 環境にも繋げていないのに!

試しに Wi-Fi を OFF にしたら、青い玉は消えた。再び「あの辺り」って輪っか表示になった。

結局、「Wi-Fi ON」で目的地まで歩いて行った。

GPS

GPS は GPS 衛星の信号を受け取って自分の位置を測定する。この信号の受信に、だいたい 3 分〜 5 分位いかかる。

これでは時間がかかりすぎるので、AGPS (Assisted GPS) という仕組みが使われている。iPhone の説明ページを引用しませう。

iPhoneには、GPSがさらに進化したA-GPS(Assisted GPS)を搭載しています。携帯電話ネットワークから得た情報を使って一番近い人工衛星をすばやく見つけ、現在地の確定をスピードアップします。

アップル - iPhone - 特長 - GPS より引用

この説明の通りなら、3G モードで AGPS が動いているはず。Wi-Fi モードをオンにする必要はない。

実は iPhone は、携帯電話ネットワーク以外からも、GPS を補正する技術を持っている。

iPhoneには、A-GPSのほかにも、iPhoneならではの位置特定テクノロジーが組み込まれています。iPhoneは、GPS衛星、Wi-Fiホットスポット、携帯電話基地局からの信号を使って、最も正確な位置をすばやく割り出します。

アップル - iPhone - 特長 - GPS より引用

Wi-Fi を ON にすると、iPhone は Wi-Fi のホットスポットを探しに行く。で、iPhone はホットスポットの場所情報のデータベースを持っているんでせう。「接続可能なホットスポット一覧」を作ったら、そのデータベースを使って自位置を決定、もしくは GPS 情報の補正に使っているんではないかしらん。

メリット・デメリット

位置検出のスピードと精度を上げたければ、Wi-Fi をオンにすればいい。

デメリットも考えておきませう。Wi-Fi をオンにすると、電力消費が増える。バッテリーの持ちが悪くなる。

自分の位置を知りたいのか、それともバッテリーを持たせたいか。十分吟味しませう。

ちなみに、ぼくはかうしてる。

  1. 3G の精度で十分なら、3G を使う。
  2. 3G の精度に不満な時だけ、Wi-Fi を ON にする。
  3. Wi-Fi の精度が必要なくなったら、すぐに 3G に戻す。

追記

「GPS のスピードと精度が上がる」んじゃなくて「位置検出のスピードと精度が上がる」という指摘を受けました [Thanks: eggman さん]。文中の記述を修正しました。タイトルは一応そのままに m(_ _)m

2009-03-24

Ubuntu Linux で Google Chrome (pre-alpha)

Ubuntu Linux に Google Chrome のパッケージが提供されるやうになった。

ぼくの環境 (Ubuntu 8.04 Hardi) では日本語が表示できない (Ubuntu 8.10 Intrepid では日本語表示に成功したとのコメントもあり)。オプション設定画面が開かない、ブックマーク (Ctrl+b) にアクセスできない、等々の不具合もある。でも、英語ページの表示は激速。面白い。

インストール方法

Ubuntu Linux 8.04 でのインストール方法

  1. 「システム > システム管理 > ソフトウェア・ソース」をクリック
  2. 「サードパーティのソフトウェア」タブをクリック
  3. 「追加」ボタンをクリックして、下記のリポジトリーを追加 (intrepid, jaunty の利用者は「hardy」の部分を intrepid, jaunty に書き換えられたし)
    deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu hardy main
    deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu hardy main
     
  4. コマンド・ラインで次のコマンドを入力
  5.  $ sudo aptitude install chromium-browser
     

起動

$ chromium-browser

起動後の画面はこんな感じ。pre-alpha っていう警告。

Google Chrome on Linux (Start)

ぼくのブログを見ると、日本語がバケバケ (日本語表示はどうすればいいのかな?)

Google Chrome on Linux - Japanese Page

Queue コードを書いてみた

C 言語の勉強で Queue (キュー) のプログラムを組んでる友達がいる。

先日、「@aka なら、15 分位いで queue のプログラムを書けるよね?」と振られたので、「15 分は無理だけど 1、2 時間で作れると思う」と返した。それで気付いたんだけど、ぼくは Queue のプログラムを書いたことがない。せっかくなので、ちょっと挑戦してみた。

int 型のデータを enqueue/dequeue するだけのプログラム。とってもシンプル。

大雑把なコードを書くのに 30 分。バグ潰しに 1 時間。ブラッシュアップに 1 時間。

ソースコードは gist で管理している。ライセンスは GPL (ってほどのコードでもないけど)。fork はご自由に。

ソースコード

ソースコードも一応貼っておく。C99 のソースコード。gcc でコンパイルする時は、-std=c99 オプションが要る。

queue.h

#ifndef __QUEUE_H__
#define __QUEUE_H__
 
typedef struct node_tt
{
  struct node_tt* prev;
  int n;
} node_t;
 
typedef struct
{
  node_t* head;
  node_t* tail;
} queue_t;
 
queue_t* new_queue(void);
bool enqueue(int n, queue_t* queue);
int dequeue(queue_t* queue);
void del_queue(queue_t* queue);
 
#endif /* __QUEUE_H__ */

queue.c

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "queue.h"
 
/* ---------------------------------------- *\
Function declaration
\* ---------------------------------------- */
static bool is_empty(queue_t* q);
 
/* ---------------------------------------- *\
Functions
\* ---------------------------------------- */
queue_t* new_queue(void)
{
  queue_t* q = (queue_t*)malloc(sizeof(queue_t));
  if (q == NULL){
    fprintf(stderr, "Allocation Error: queue\n");
    return NULL;
  }
  q->tail = NULL;
  q->head = q->tail;
 
  return q;
}
 
/* Return TRUE if succeeded to malloc NEW node, else return FALSE. */
bool enqueue(int n, queue_t* queue)
{
  node_t* new = (node_t*)malloc(sizeof(node_t));
  if (new == NULL){
    fprintf(stderr, "Allocation Error: node\n");
    return false;
  }
  new->n = n;
  new->prev = NULL;
 
  if (is_empty(queue)){
    queue->tail = new;
  } else {
    queue->head->prev = new;
  }
  queue->head = new;
 
  return true;
}
 
/* Return 0 if queue is empty, else return dequeued value */
int dequeue(queue_t* queue)
{
  node_t* last = queue->tail;
  if (is_empty(queue)){
    fprintf(stderr, "QUEUE is empty\n");
    return 0;
  } else {
    queue->tail = last->prev;
  }
 
  int n = last->n;
  free(last);
  return n;
}
 
void del_queue(queue_t* queue)
{
  if (!is_empty(queue)){
      node_t* last = queue->tail;
      queue->tail = last->prev;
      free(last);
  }
  free(queue);
}
 
static bool is_empty(queue_t* q)
{
  return q->tail == NULL;
}
 

#ifdef DEBUG
/* ---------------------------------------- */
int main(void)
{
  queue_t* q = new_queue();
 
  enqueue(5, q);
  enqueue(4, q);
  enqueue(3, q);
  printf("%d\n", dequeue(q));
  printf("%d\n", dequeue(q));
  printf("%d\n", dequeue(q));
  // queue is empty
 
  // dequeue error check when queue is empty
  printf("%d\n", dequeue(q));
 
  enqueue(2, q);
  printf("%d\n", dequeue(q));
  // queue is empty
 
  del_queue(q);
  return 0;
}
#endif /* DEBUG */

2009-03-18

Openomy サービス終了

オンライン・ストレージ・サービスの openomy がサービスを終了する。

サービス終了のアナウンスは、2009-03-14 に出た。サービスが終了するのは 2009-03-24。この 10 日のうちに、openomy に保存したファイルを各自ダウンロードするやうに、とおふれが出ている。

サービス終了の理由は何だらう。

This is obviously a bittersweet post for me to write, but we are moving on to new things and it's the right time to do so. (中略) but that time has come to an end.

(訳) こんなことを書くのは辛い (bittersweet) ことだけど、(openomy 以外の) 新しいことを始めようと思う。今がその時だと思う。(openomy) を終わらせる時が来てしまった。

openomy blog: Openomy is closing down March 24, 2009 より引用

競合ひしめきあうオンライン・ストレージ・サービスから撤退して、何か別のことを始めたがっているやうに見える。

openomy の思い出

思い返せば、openomy と出会ったのは 2005 年の 12 月だった。

2005 年当時、オンライン・ストレージというと数十 MB しか保存できないサービスがかった。そんな中、1 GB のストレージ容量を持つサービスが、現れたのが 2005 年末だった。Openomy も、そんな波の中で生まれたサービスの一つだった。

Openomy は、タグでファイルを管理するという手法を取る、非常にシンプルなサービスだった。

面白かったのは、Linux を早くからサポートしていた点 (2006/02 時点でサポート済)。これは、ウェブ・ブラウザーで対応しているという意味じゃなくて、ファイラーから普通にアクセスできるようになっていた。

ギークで尖ったサービスだったけど、個人ベースの開発ってのが大変だったのかもしれない。少し残念な結果になってしまった。

PS

開発者の Ian Sefferman さんはお疲れ様。次に期待してるよー。

iPhone OS 3.0 の発表イベント開かれた

2009-03-18 午前 2 時、iPhone OS 3.0 の発表が行なわれた。

まずは、最近の現状。iPhone が 1,370 万台売れたとか、iPod Touch が 1,700 万台売れたとか。おめでとう。その後、アプリ開発者向けに 3.0 API の説明と API を使ったアプリの紹介、最後にユーザー向け新機能の紹介だった。

3.0 API

大きな新機能は 5 つ。

    アプリの中で販売
    P2P 接続のサポート
    iPhone / iPod 用アクセサリーとの通信機能
    iPhone 搭載の Maps (Google Maps)
    Push 通知 (バックグラウンド処理)
アプリの中で販売

有料アプリの中で、更に追加機能を販売できるようになる。例えば、パズル・ゲームで 1〜10 面は最初から付けといて、20 〜 30 面にはもう 100 円。30 〜 40 面はもう 100 円という風な価格設定ができるやうになる。

この仕組みを使うと、RPG ゲームで有料アイテムを配布したり、有料コンテンツを配信したり、オンライン雑誌を毎月 150 円で売るとかも出来るやうになるのかな?

ちなみに、アプリ内での販売機能はフリー・アプリでは使えない。ユーザーとしては、「無料アプリと思ってたら、主要機能は追加購入しないといけなかった」なんて騙しを心配しなくていいので、この配慮は嬉しい。

P2P 接続のサポート

同じアプリ同士での通信が可能になる。同じアプリを動かしてる人を、自動で Bluetooth で探してくれもする。

これは、将棋ゲームとかの対戦ゲームを簡単に作れるってことなのかな。

iPhone / iPod 用アクセサリーとの通信機能

iPhone のドック・コネクターに接続した機器を、アプリから制御できるやうになる。

例えば、外部スピーカーの音量をコントロールするとか、FM ラジオ・アンテナから FM ラジオを聞けるやうにするとか。やろうと思えば、iPhone 対応万歩計とか体重計とか、温度計とか気圧計とか作れるってことなんでせう。これは、アクセサリーを作ってるメーカーさんには朗報かも。

iPhone 搭載の Maps (Google Maps)

iPhone は「地図」として Google Maps を使ってる。この Google Maps を、アプリの中に組み込めるようになる。

今まで iPhone で「地図」を使ったアプリは、いくつかあった。例えば、Y! 地図とか、いつもナビとか、楽天トラベルとか、食べログとか。でも、こういったアプリは地図を自前で用意していた。お金のある企業が作ってるアプリだからこそ、出来ることでせう。

地図を用意するなんて、一般の開発者には出来ない。今回の機能拡張で、誰でも手軽に地図アプリを作れるやうになる。

Push 通知 (バックグラウンド処理)

Push 通知は、外部サーバーを使って実現される。アプリ開発者は、まずサーバーを用意する。サーバーから Apple Push Notificiation Service に通知を送ると、その通知が iPhone に送られるという仕組み。通知の受け取り口を一つに絞ってしまうことで、iPhone バッテリー消費を少なくするんでせう。

この仕組みを使うと、一種のバックグラウンド処理が出来る。バックグランウドで行なうべき処理を、iPhone アプリで行なうんじゃなくて、外部サーバーでやってしまうといふことね。

なので、おそらく音楽をバックグラウンドで流す、という処理は出来ないと思う。

新機能

コピー & ペーストが出来るやうになる。例えばコピーのやり方はこんな感じ。

  1. テキストをダブル・タップする
  2. 単語が選択されて、範囲指定用の「丸」が現れる
  3. 範囲を指定したら --- 「cut/copy/paste」という吹き出しがあるので --- 「copy」をタップする

iPhone を振ると Undo できるらしい。すごい!

その他の新機能は以下の通り。

  • Photo を複数選択できるやうになる
  • 横向き (landscape) キーボードが、どのアプリでも使えるやうになる
  • メッセージ・アプリで、複数のメッセージを forward したり delete できるやうになる
  • MMS をサポートする (Wikipedia に iPhone 3.0 が MMS すると、もう書かれてる!)
  • contact の追加
  • Voice Memo 機能
  • CalDAV と .ics カレンダー形式の対応
  • Stocks: ニュースを画面下に出す機能
  • 検索機能の拡張
    • メール・アプリ: from, to, subject 及び全てのヘッダーから検索可能
    • カレンダー・アプリ: 予定を検索
    • iPod アプリ: 曲名、アルバム、アーティストを検索
    • ノート・アプリ: タイトルと本文を検索
    • Spotlight: 上記検索を横断的に行なってしまうアプリ? home screen?
  • YouTube アカウント & YouTube subscriptions
  • Wi-Fi 自動ログイン
  • Proxy サポート
  • 振ってシャッフル
  • ステレオ Bluetooth
  • Auto-fill

最後に

開発者向けベータは、今日公開。iPhone OS 3.0 が一般ユーザーに公開されるのは、今年の夏! iPhone 3G ユーザーには、全員無償配布。iPod Touch には $9.95 (千円) で、アップデートを提供。

夏が待ち遠しい!!

2009-03-16

NHK BS が twitter を取り上げる

今日 (2009-03-16 Mon)、NHK BS が twitter を取り上げる。

最近、twitter がニュース・ソースとして注目を集めている。手軽に書き込めるので、速報性の高い。重要なニュース・ソースは複数から書き込みがあるので、誤報が淘汰され易い。そういった所が、注目を集める要因でせう。今回の NHK BS の話にしても、取材依頼を受けた kengo さんが tweet (Twitter に投稿すること) して、Twitter ユーザーの関心を買った。ぼくにとって、正に Twitter が情報のソースだった。

取材依頼の詳しい流れは、観測気球さんが丁寧にまとめていらっしゃる。

Twitter ユーザーの人は是非、是非。

そして、テレビのほうも是非、是非。

番組名は NHK BS の「きょうの世界」。時間は 23 時台。10:50〜11:40 の間で放映されるらしい。

ちなみに、うちは BS が入らないので見れない。グゥ。

PS. よければ Twitter / at_aka を Follow して下さい。

2009-03-15

CEC CD3300R が戻って来た

昨日、修理に出していた CD プレーヤー CEC CD3300R が戻って来た。おかえりっ。二週間ぶり!

修理

どうやら、CEC のサポート・センターでは音跳び症状が再現しなかったらしい。それでも、ドライブ・メカは交換してくれたとのこと。戻って来た CEC CD3300R で問題のディスクを聞いても、確かに音跳びしなくなっていた。CEC さん、ありがとう。

あと、原因についての所見もついていた。CD ディスクに原因があるのでは? とのこと。HF 値やジッター値の測定データが付いていて、普通の CD の半分位いの値だったと書かれていた (ちゃんと調べてくれたんだねぇ。ありがとうございます!)。

音跳びのしたカラヤンのオペラ・セットは CD (コンパクト・ディスク) のロゴ・マークが付いていない。EMI の公式盤のはずなのに。安い CD を出してくれることはありがたいけれど、最低限の品質保証は欲しいと思った。

あとがき

CEC の CD プレーヤーの修理中、友達が Denon の CD プレーヤーをぼくに貸してくれた。ぼくの持ってる CD プレーヤーの 2 倍位いする CD プレーヤーをね。目論見としては、CD プレーヤーが戻って来て両者の音の差を味わえば、愕然として「更に上の CD プレーヤー」を買いたくなるはず、ということらしい。

修理から戻って来た CEC CD3300R は、確かに Denon の CD プレーヤーより、音の明解さが足りない。いろいろと心動くものもある。

けれども、ぼくは踏み留まった。

踏み留まれなかったのは友人の方で、TEAC の CD プレーヤーを中古で買っていた。ミイラ取りがミイラになってるよ!。

2009-03-14

Mercurial 本を買った

入門Mercurial Linux/Windows対応

昨日、Git 本を予約しちゃったのに続いて、Mercurial の本も注文しちゃった。Git も Mercurial も最近、はやりのバージョン管理ソフトね。

入門 Mercurial

「入門 Mercurial」は、CVS も Subversion も触ったことがない人にも分かるように書かれている。なので、バージョン管理の説明も懇切丁寧。ソースコードを過去に戻せる「タイムマシン」のようなもの、と説明している。その解説は間違っていないのだけど、git や bzr に慣れ親しんでいて subversion などとっくに卒業している身には、少々くどい。Mercurial は、それなりに Geek なツールなので、もう少し対象を Geek に見積もってもよいのではないかと思った。

全体的に「入門」の名にふさわしい内容。初めて Mercurial を触ってみる人。分散型バージョン管理をいじってみたい人に十分な内容だと思う。ssh の解説が多いのも良かった (ssh は別 PC にリモート・リポジトリーがある時に使う)。

付録あたりに、Emacs や Trac との連携が入っていたら、と思うのは望み過ぎかな。。。

2009-03-13

Git 本を注文しちゃった

最近、バージョン管理ソフトの git が楽しくてしょうがない。で、日本語の解説本がないかと探しているんだけど見つからない。

カッとなったんで、Amazon で洋書を注文しちゃった。O'Reilly から出る「Version Control With Git: Powerful Tools and Techniques for Collaborative Software Development」という本。発売は 2009/05 (2 か月後かな?)。定価は 3,564 円。中身も見ずに予約しちゃったけど、O'Reilly だし外れはないよね?

Version Control With Git: Powerful Tools and Techniques for Collaborative Software Development