2011年08月16日

プログラム教階層図

「プログラマのクラスチェンジ表(草稿)(http://blog.mwsoft.jp/article/29852520.html)」を受けてプログラマディスの観点から「プログラム教階層図」を書いてみた。


・コーダー
 入信者。まだプログラム教に入って日が浅いため、教典の一部しか理解できない。

・コピペプログラマ
 教典の基本的な部分は理解出来たため、写経しながら勉強している。
 
・プログラマ
 世間的には、効率を上げるためのプログラムだが、プログラム自体に価値があると信じてしまった人の総称。
 
・マニア
 教典を短くするために暗号化する人たち。比較的高位。
 
・アーキテクト
 プログラム教にお布施を持ってくるパトロンを見つける人々。
 
・スーパープログラマ
 もう現世には戻ってこれない人。
 
・クラッカー
 狂信者。
 
・ギーグ
 高位の僧。修行している。
 
・ウィザード
 教典を書くことを許された人々。世界を複雑にすることでプログラム教入信者を増やすとともに、抜け出せない迷宮に誘い込んでいる。
 
・グル
 プログラム教教祖。ウィザードたちを操り、新しい教典を次々に世界へばらまいている。キリスト教の聖書なんかよりもプログラム教の教典の方がベストセラーになっていることは言うまでもない。

2011年01月05日

Windows on macbookでのキーボードの操作

パソコンが壊れまして、macbookを買ったばかりなので流石にもう一台買う余裕はありません。

元が安いパソコンだけに修理代も(割合的に)高そうでしたので、うわさのboot campを使ってWindowsをmacbookにインストールしました。

Proじゃないmacbookの場合、64bit版は正式にはサポートされておりません。

Proじゃないmacbookはどうせ4GBまでしかメモリもサポートしていないので、32bit版を使うことにしました。

で、インストール自体はmacの中にあるboot campアシスタントから簡単にインストールできました。

そこからが問題です。

キーボードが結構違うため、操作がわかりません。ツイッターで詳しい人に聞きながら何とか覚えることができましたので、キー操作をブログにアップしておこうと思います。

 あくまでキーボードを交換できないノート型macの場合ですので、デスクトップ型MacはWindowsのキーボードを使えばいいかと思います。


■Windows on macbookの操作

・日本語入力モード
 半角/全角キーがないので、IMEのバー → ツール → プロパティ → 編集操作 → キー設定 → 変更で好きなキーに変更します。
 デフォルトは日本語入力モードはShift+かなキー。

・Delete → Fn+Del
・BackSpace → Deleteキー
・PrintScreen → Fn+左Shift+F11

・Home → Fn+←
・PgUp → Fn+↑
・PgDn → Fn+↓
・End → Fn+→

・F1~F12 → Fn+F1~F12

・Windowsキー → Commandキー
・Ctrl → Windowsで言うCapsLockキーのところにある。
・Alt → Optionキー

・右クリック → タッチパッドに指二本載せてクリック
・右ボタンドラッグ → 指二本乗せて、三本目の指でドラッグ(難しい!)

2010年10月14日

どうしてもデータマイニングが必要なんで、英語の論文を読もうと思う。


■タイトル:Map-Reduce for Machine Learning on Multicore

> Map-Reduceって言うのはGoogleで使われている分散型ファイルシステムのこと。Machine Learningは機械学習。マルチコアは訳す必要ないかな。
> つまり、この論文はマルチコアとMap-Reduceは大前提なわけですな。
> その辺、聞きかじりの知識しかありませんが、頑張ってみましょう。

> 以下は書いた人たち。スタンフォードすげー。

Cheng-Tao Chu ?
chengtao@stanford.edu
Sang Kyun Kim ?
skkim38@stanford.edu
Yi-An Lin ?
ianl@stanford.edu
YuanYuan Yu ?
yuanyuan@stanford.edu
Gary Bradski ?y
garybradski@gmail
Andrew Y. Ng ?
ang@cs.stanford.edu
Kunle Olukotun ?
kunle@cs.stanford.edu
?. CS. Department, Stanford University 353 Serra Mall,
Stanford University, Stanford CA 94305-9025.
y. Rexee Inc.

■Abstract:概要

 We are at the beginning of the multicore era. Computers will have increasingly many cores (processors), but there is still no good programming framework for these architectures, and thus no simple and unified way for machine learning to take advantage of the potential speed up.
 In this paper, we develop a broadly applicable parallel programming method, one that is easily applied to many different learning algorithms.
 Our work is in distinct contrast to the tradition in machine learning of designing (often ingenious) ways to speed up a single algorithm at a time.
 Specifically, we show that algorithms that fit the Statistical Query model [15] can be written in a certain “summation form,” which allows them to be easily parallelized on multicore computers.
 We adapt Google’s map-reduce [7] paradigm to demonstrate this parallel speed up technique on a variety of learning algorithms including locally weighted linear regression (LWLR), k-means, logistic regression (LR), naive Bayes (NB), SVM, ICA, PCA, gaussian discriminant analysis (GDA), EM, and backpropagation (NN).
 Our experimental results show basically linear speedup with an increasing number of processors.

> 大体、タイトルから内容の推測はできると思う。それを前提において読んでいくよ。

『マルチコア時代が始まったよ! コンピュータが持っているコアは沢山増えていってるさー、でも、まだ良いマルチコア対応のプログラムフレームワークが出てねーじゃん? だから機械学習がマルチコアのスピードの利点を活かすことは簡単にはできないんだよね。
 この論文で、汎用性があって機械学習用の並行処理プログラム処理を開発するよ。これは色々な学習アルゴリズムを簡単に適用できるんだ。
 うちらの仕事は、伝統的なそのときの単一アルゴリズムをスピードアップさせる機械学習の設計方法とは本当に対照的だよ。
 きっぱりというよ。マルチコアコンピュータ上で並列処理を簡単に出来る「summation form」で書けるStatistical Query model(統計クエリーモデル)を見せてあげる。
 Googleのmap-reduceパラダイムをこの並列処理のスピードアップ技術で、(色々な)機械学習アルゴリズムへ適用してくよ!
(色々なアルゴリズム例:locally weighted linear regression (LWLR), k-means, logistic regression (LR), naive Bayes (NB), SVM, ICA, PCA, gaussian discriminant analysis (GDA), EM, and backpropagation (NN).)
 うちらの実験結果から基本的にCPUを増やすのと比例してスピードアップできることが分かったよ。

> 概要を読んだ結果、超当たり前なことがかかれているだけだった。分散コンピューティングを適用したフレームワークを作っただけとも言える。
> この時点で読む気は失せたのでイカは英文のまま転載。

どうしてもデータマイニングが必要なんで、英語の論文を読もうと思う。の続きを読む

2010年07月27日

プレゼンはプレゼンテーションじゃなくて、プレゼンス。

 私が前職にいた頃、プレゼンの資料と言えば、箇条書きの文字が並ぶ無味乾燥……はっきり言ってしまえば「下手くそ」なものばかりでした。
 その中でも私はテンプレートを標準のものから自社商品をイメージしたものに変更したりして、まだマシなほうでした。
 しかし、会社が変わって私のプレゼン資料のレベルの低さを思い知らされます。

 まず、日本語に難が出たw
 別に日本語が通じないわけじゃないのです。

「文章だと先方に伝わりにくいから図にして説明してほしい」

 と要求を受けただけですが「言葉を図にする」作業をしたことがなく、そのスキルを身につけるのは非常に難しかったです。
 でも、とにかく既存のプレゼン資料を勉強しようと思って集めたのが下記のサイト群です。
(本当は上げたサイトの10倍以上は読んでいるわけですが、役に立ったもののみ厳選しております)


■ビジネス系


「1枚企画書」のすすめ PowerPoint大胆活用術
経営改革・新サービス企画書――実例で学ぶ「5枚プレゼン」

☆上記の2つは本を買ったほうがいいですが、上記の記事だけでも非常に参考になります。
☆プレゼン資料の中のストーリーや記入すべきポイントがよく整理されており、この内容を使えば一夜漬けでもそれなりにプレゼンできます。


■ゲーム系


誰か買ってよ「勇者死す。」
  ゲームデザイナー:桝田省治さん
  →携帯電話で発売。

メテオス-ひそかにレポート
  ゲームデザイナー:桜井政博さん
  →DSで発売。

メイキング・オブ・大玉
  ゲームデザイナー:斎藤由多加さん
  →ゲームキューブで発売。

☆上記の3つは実際に発売されたゲームの企画書です。
☆特にメテオスの企画書は、企画書の作成・プレゼンからゲームの制作の過程がつぶさに書かれていて企画書プレゼン後のことについても非常に参考になります。

■ヨコオタロウの日記
宇宙で2番目にダメなゲーム企画書の書き方

☆私が多分に影響を受けたゲーム企画書作成のチュートリアルです。
☆素材の集め方や加工の仕方、企画の見せ方など、今の仕事で使っている技術の大半をここで学んで身に着けました(※Google chromeだとなぜか見れません)


 勉強した仕上げに自分の趣味でやっているゲームのプレゼン資料を作ってみることにしました。
 できあがったのがこれです。

■特捜検事えくれあ!
etclair.png

※クリックで完全版PDFダウンロードできます。
☆すでに始まっている企画の新規スタッフを募集するための企画書になります。
☆未だ形になっておりませんが、鋭意作成中です。


 もしご意見やご質問がありましたらツイッターでお気軽にどうぞ。
 →@ririnblackstar

2010年07月01日

cassandra(悲劇の預言者)がTimeoutする。

 cassandraを使えるようになりまして、PHPからも使いこなせるようになりました。
 しかし、どうもうまく動きません。
 よくタイムアウトしてしまいます。

TSocket: timed out reading 4 bytes from localhost:9160

 このようなメッセージが表示されて止まるわけです。
 これを調べるとThriftで出力されたPHPに問題があると下記のURLに載っていました。

https://issues.apache.org/jira/browse/THRIFT-347

 このページにあるdiffの通り修正します。
 しかし、少し登録し始めるとやっぱり同じエラーで止まってしまいます。
 むむむと思ってエラーメッセージから逆順で追っていってみるとTimeout時間が短いのではないかという仮説に突き当たりました。


if ($this->persist_) {
$this->handle_ = @pfsockopen($this->host_,
$this->port_,
$errno,
$errstr,
$this->sendTimeout_/*/1000.0*/);
} else {
$this->handle_ = @fsockopen($this->host_,
$this->port_,
$errno,
$errstr,
$this->sendTimeout_/*/1000.0*/);
}

 すでにコメントアウトされていますが、この部分でタイムアウトを1/1000にしています。
 それを外すとばっちり動作しました。

 ローカルマシンで動作させているので、負荷が高まってタイムアウト時間内に処理がおわらなかったみたいです。

2010年06月29日

cassandra(悲劇の預言者)をPHP5で使ってみる。

cassandraのPHP用のソースはPHP4用らしく、実行時に以下のようなエラーが出ることがあります。

Object of class cassandra_ColumnOrSuperColumn could not be converted to string in ~~~

これはPHP4では自動で呼び出されていた__toString()メソッドがPHP5ではエラーとして扱われるようになったことから起こるエラーです。

なので、該当クラス(この場合はcassandra_ColumnOrSuperColumn)に__toString()メソッドを追記してあげればいいようです。

私は暫定的に以下のようなコードを追記しました。


//追加
public function __toString(){
if ($this->column->name != null){
return $this->column->name;
}
if ($this->super_column->name != null){
return $this->super_column->name;
}
}

2010年06月25日

cassandra(悲劇の預言者)に過去データを覚えてもらう。


 さて、1300万レコードを覚えてもらうわけですが、その前に。
 この大量のレコードは情報の極ごく一部です。これはテスト用に貰った5日分データであり、本番は365日×事業者数のデータ量になります。
 なので、この時点で指数乗的に検索時間が増えて行くRDBでは無理になってしまったのです。
 それがcassandraなら比例的な検索時間の増加で済む(らしい)です。

 でもcassandraは「LIKE検索」とか「WHERE検索」とか出来ません(たぶん)
 飽く迄Keyと列で指定された行のValueを取得するだけです。

 じゃあ、どうすればいいのか?というところですが、以下のページがそこそこ分かりやすく説明してくれています。
 
Cassandraで登録しているカラムデータの検索方法(Cassandra:inverted indexの翻訳)

 私がざっくり説明すると「自分で検索用インデックスを作ってね」ということです。
 
 なんということでしょう!
 
 データベースの一部の機能を自前で用意する必要があるのです。
 これはデータベースマニアには堪らないですね。
 でも、残念ながら私はデータベースマニアではないので、あまりうれしくありません。

 それでもここを考えないと進みませんので仕方ないですが、考えます。
 
■1レコードの情報
・オブジェクトID
・時刻
・月
・日
・時
・曜日
・休日フラグ
・天気
・ステータス(%)

 時刻とその他の情報が重複しておりますが、この辺はあとで検索に使いたいので必要になります。
 例えば、「あるオブジェクトIDの日曜日の14時~18時のステータスの平均」とかそういう指定で集計する必要があるのですね。

 まずはインデックス以外のデータ部分を考えます。
 Keyとして登録する必要があるのは「オブジェクトID+時刻」となります。
 データ部分は「月~ステータス」まで普通に登録しましょう。

 次にインデックスをどの情報で持つかを考えます。

■検索するためのインデックス条件
・オブジェクトID
・月
・日
・時
・曜日
・休日フラグ
・天気

 これらに1つずつ登録してもいいのですが、これだと「AND検索」したときにアプリケーション側ですることが多すぎます。
 それに月だけ指定して取得した場合、確実に1300万レコードとか拾ってきそうです。
 仮にどんなに良いマシンを使っても処理が終わる気がしません。

■登録するインデックス
・月→12通り
・日→31通り
・時→24通り
・曜日→7通り
・休日フラグ→2通り
・天気→晴れ、曇り、雨、雪の4通り

 となり、これらの検索条件としてKeyに「Month=7」と指定したレコードを別途作るわけですね。
 で、カラムに「day=12」としたものを作り、valueに「オブジェクトID+時刻」でデータを登録しておき、データ全体を呼び出せるようにしておくわけですね。
 これならば2通りまでの組み合わせなら対処できそうです。
 あとは事前にcassandraの設定が必要になりますが、ColumnFamilyを設定すれば更に3通りの組み合わせに対処できます。
 
 いずれの場合もほぼ自動でインデックス作成ルーチンを組むことが可能です。
 
 Keyspace1.ColumnFamily1.SuperColumn1['key']['column']

 となっているので、実際には、以下のような指定で値をセットしたり、取得したりします。
 
 Keyspace1.Month=04.Day=15['ObjectID=ID0001']['Kindofday=Mon']=【IDリスト】
 
 うーむ、Column名に「=」が使えるのか。
 また取得範囲が広い場合は、絞り込むことも可能だそうです。そこは実際にデータを入れてから取得するときに考えたいと思います。

2010年06月24日

cassandra(悲劇の預言者)をPHPで使ってみる。


 さて、さっきのページはJavaから使う前提で書かれていましたので、私のホームグラウンドであるPHPで使う方法を調べます。
 なぜPHPで作る必要があるかというと生産性が段違いだからです!
 I/FはWEBブラウザになる予定なので、HTMLタグを使いやすくするためです。
 また集計作業は複雑なものではないので、PHPの関数だけで十分です。Javaとかバイナリファイルを使わない限りあまり必要はありません。
 
 PHPで使うにはまずはthriftというフレームワークをインストールする必要がありそうです。
 
cassandraに挑戦 その8 thriftのインストール

 でも、ここに書いてあるのも他のページに書いてあるのもLinuxが前提です。
 Windowsでthriftをインストールできないものか……。
 Cygwinでビルドとか嫌です。そもそもWindows用にビルドしなおすとか文化があいません(キリ
 で、探していたらコンパイル済みのバイナリを見つけましたw

WindowsでThriftコマンドを使用する

 次はPHP-APCをインストールする必要があります。
 PHPのアクセラレータの1つらしいですね。これもLinuxなら簡単なのですが、Windowsでは安定的な方法がなかなかない。
 いくつかのページを調べてみると、以下のようなバイナリファイルと設定が見つかりました。

PHP APC for Windows Download


①上記のページのファイルをダウンロードし、php_apc_3_0_19.dllをphp5/extフォルダへコピー
②php.iniに以下の設定を書き加えます。

[apc]
extension=php_apc_3_0_19.dll
apc.enabled=1
apc.shm_segments=1
apc.shm_size=48
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=NULL
apc.enable_cli=1


 が!しかし。xamppにはすでにAPCがインストールされていたことが判明。
 php.iniのextension=php_apc.dllを有効にします。

 さて、これで準備は整いましたのでPHPからcassandraを使ってみたいと思います。
 まずはcassandraのサーバーを起動。

cassandraに挑戦 その10 PHP Clientを動かしてみる

 の中にあるテスト用のコードをダウンロードします。
 そして、一番最初にある
 
$GLOBALS['THRIFT_ROOT'] = '/usr/share/php/Thrift';

 をWindows用に書き換えます。

$GLOBALS['THRIFT_ROOT'] = 'C:/Thrift';

 あ、でもその下にある「Thrift.php」がそのフォルダにないな……。
 調べてみるとThrift自体のソースコードに含まれている模様。
 
 http://ftp.riken.jp/net/apache/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz
 
 からダウンロードしました。
 
 ~~Downloads\thrift-0.2.0\lib\php\srcフォルダの中身をC:\Thriftフォルダへコピーします。
 まだ足りないww
 package/cassandra/Cassandra.phpもありません。
 
Using Cassandra with PHP

 の「4.Build the PHP Thrift interface for Cassandra:」をすればできそうです。
 
 C:\Thrift>Thrift -gen php C:\cassandra/interface/cassandra.thrift
 
 Windows用になおして実行!
 C:\Thrift\gen-php\cassandraフォルダが出来たのでこれをC:\Thrift\packagesフォルダへコピーします。
 
 これで「整いました~」
 
 C:\xampp\php>php cassandra_test.php
 
 CLIでエラー……。
 なぜでしょうか?
 
 http://localhost/cassandra_test.php

 を実行してみたら普通に通りました。動きましたよ!
 これでよしにしておきましょうw

cassandra(悲劇の預言者)をPHPで使ってみる。


 さて、さっきのページはJavaから使う前提で書かれていましたので、私のホームグラウンドであるPHPで使う方法を調べます。
 なぜPHPで作る必要があるかというと生産性が段違いだからです!
 I/FはWEBブラウザになる予定なので、HTMLタグを使いやすくするためです。
 また集計作業は複雑なものではないので、PHPの関数だけで十分です。Javaとかバイナリファイルを使わない限りあまり必要はありません。
 
 PHPで使うにはまずはthriftというフレームワークをインストールする必要がありそうです。
 
cassandraに挑戦 その8 thriftのインストール

 でも、ここに書いてあるのも他のページに書いてあるのもLinuxが前提です。
 Windowsでthriftをインストールできないものか……。
 Cygwinでビルドとか嫌です。そもそもWindows用にビルドしなおすとか文化があいません(キリ
 で、探していたらコンパイル済みのバイナリを見つけましたw

WindowsでThriftコマンドを使用する

 次はPHP-APCをインストールする必要があります。
 PHPのアクセラレータの1つらしいですね。これもLinuxなら簡単なのですが、Windowsでは安定的な方法がなかなかない。
 いくつかのページを調べてみると、以下のようなバイナリファイルと設定が見つかりました。

PHP APC for Windows Download


①上記のページのファイルをダウンロードし、php_apc_3_0_19.dllをphp5/extフォルダへコピー
②php.iniに以下の設定を書き加えます。

[apc]
extension=php_apc_3_0_19.dll
apc.enabled=1
apc.shm_segments=1
apc.shm_size=48
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=NULL
apc.enable_cli=1


 が!しかし。xamppにはすでにAPCがインストールされていたことが判明。
 php.iniのextension=php_apc.dllを有効にします。

 さて、これで準備は整いましたのでPHPからcassandraを使ってみたいと思います。
 まずはcassandraのサーバーを起動。

cassandraに挑戦 その10 PHP Clientを動かしてみる

 の中にあるテスト用のコードをダウンロードします。
 そして、一番最初にある
 
$GLOBALS['THRIFT_ROOT'] = '/usr/share/php/Thrift';

 をWindows用に書き換えます。

$GLOBALS['THRIFT_ROOT'] = 'C:/Thrift';

 あ、でもその下にある「Thrift.php」がそのフォルダにないな……。
 調べてみるとThrift自体のソースコードに含まれている模様。
 
 http://ftp.riken.jp/net/apache/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz
 
 からダウンロードしました。
 
 ~~Downloads\thrift-0.2.0\lib\php\srcフォルダの中身をC:\Thriftフォルダへコピーします。
 まだ足りないww
 package/cassandra/Cassandra.phpもありません。
 
Using Cassandra with PHP

 の「4.Build the PHP Thrift interface for Cassandra:」をすればできそうです。
 
 C:\Thrift>Thrift -gen php C:\cassandra/interface/cassandra.thrift
 
 Windows用になおして実行!
 C:\Thrift\gen-php\cassandraフォルダが出来たのでこれをC:\Thrift\packagesフォルダへコピーします。
 
 これで「整いました~」
 
 C:\xampp\php>php cassandra_test.php
 
 CLIでエラー……。
 なぜでしょうか?
 
 http://localhost/cassandra_test.php

 を実行してみたら普通に通りました。動きましたよ!
 これでよしにしておきましょうw

cassandra(悲劇の預言者)をWindowsで使ってみる。

 あれです。
 現在テストで1300万を超えるレコードを一括処理する必要が出てきています。
 集計作業をするにしてもデータベースに入れようものならデータベースから1分経っても反応が返ってこなくなります……。
 できればこれをリアルタイムで集計したいのです。使える環境は4年前現役だったノートパソコン1台。これがお金を取る仕事だったら断っていますが、空いた時間にやる投資的なお仕事なので、超時間を掛けてやってみようと思います。

 まずはMySQLの1テーブルに突っ込んでみました。
 ……phpMyAdminが応答がなくなり、最終的にはタイムアウトエラーを吐く様になりました。
 タイムアウトしないようにすればいいのですが、1分以上待つような処理も嫌だなと考え、その案は保留にいたします。
 
 次はMySQLに1万テーブルぐらいに分けて登録してみました。
 テーブル名を表示する時点でタイムアウトエラーを吐くようになりました。もっと酷くなったw

 ここまででRDBでは無理な問題だと気がつきます。
 というか、別段RDBである必要はどこにもありません。1レコードに登録された列ごとの関係を集計できればいいだけなので、SQLも極単純な集計しかしません。
 JOINなんか一切必要ないです。

 これが1ヶ月ほど前のことです。
 で、調べていくうちにGoogleのBigTableというのに行き当たり、その技術や思考に感心しながら「これならできるんじゃね?」的な感触を受けました。
 でも、BigTableは一般のヒトは使えない。GAEを使えばいいのですが、Giga級のデータを転送することを考えると費用が嵩みそうです。
 
 自前で作ろうかどうか考えていると、オープンソースのBigTableがすでに使える状態にあることがわかりました!
 それがApacheのトップレベルプロジェクト【cassandra】だったわけですね!
 
 
 さて、環境はWindowsなので、それで設定する方法を探しました。
 先人がすでにやってくれてましたので、参考にします。
 
Windows で Cassandra を動かしてみる
 
 この手順のうち、

「コマンドプロンプトより Cassandra を展開したディレクトリに移動し、「bin/cassandra.bat」を実行します。」

 ではやくもエラー。

「JAVA_HOME environment variable must be set!」

 設定しないとダメだそうです。

JAVA_HOMEの設定

 を見て設定しました。

 再度「bin/cassandra.bat」を起動すると動きました!
 同様にしてクライアントも起動すると動作しているようです。
 
 コマンドも無事通りました。
 cassandraの設定は完了のようです。
 設定で色々苦労すると思っていただけにこのセットアップの簡単さはいいですね。流石トップレベルプロジェクトです。plaggerもこれぐらいに便利になればいいのに!

2010年05月18日

WEB情報ハンドリングの基本はHTMLスクレイピング!

 WEB情報を取り込んで加工してデータベースにしたり、APIの提供されていないサービスをプログラムから自動で使用したりする場合、HTMLのスクレイピングは必須になります。
 とは言ってもHTMLのスクレイピングを自分で実装するのは非常に難しく、閉じていないタグの処理とか、解釈できないタグとか、属性情報とか、そういうのの細かな扱いはコードを足しても足しても足りません。
 そこで何か良いライブラリがないかと探してみると、ありました!
 取得したHTMLをSQL文で解析できるPHPライブラリです。
 
 これを使うと簡単にリンクリストを抽出したりできます。 
 
SQL のように HTML を解析できる htmlSQL
htmlSQL

 proxyに対応していたり、ライブラリを覗くとパラメータを変更するだけで、様々な環境に対応できるようです。

2010年05月07日

うわさのtogetter.com

うわさのtoggeter.comを使ってみました。
日ごろから「空目」だけ集めて見れたら面白いなぁと思っていたので、それを纏めてみました。
超使いやすかったです。このツールは単純ながらも操作性がすごいなぁと感心しました。

2010年05月06日

Retweetシンクロ率判定機(仮)の開発 第一歩 OAuthドキュメントの翻訳

 Twitterでリツイートを見ていて思ったのですが、同じものをリツイートする人なら相性がいいはず! と新たな出会いを支援するための機能を思いつきました。
 実際に作ってみることに。

 色々検討した結果、OAuth認証を取らないとツイートとリツイートを取得できないことが分かったので、OAuth認証が必須に。Google App Engineを使おうと思ったけど、Java以外にストレージの使い方が特殊なことが分かる。今回は別にすっごいユーザー数を見込んでいるわけでもないし、GAEは諦め。
 そこで使い慣れたPHPを使おうと思ったけど、OAuth認証のライブラリが英語の説明しかない。
 じゃあ、と思ってまずは下記のドキュメントを翻訳することにしました。

PHP OAuthドキュメント

以下翻訳
TwitterOAuth documentation.
ツイッターOAuth認証ドキュメント

GET THE CODE
コードの取得
====================
You can pull the latest development version using git:
gitを使って最終開発版を取得することができます。
git clone git://github.com/abraham/twitteroauth.git

Or you can download the latest release by visiting:
または、下記のページで最終リリース版をダウンロードできます。
http://github.com/abraham/twitteroauth/downloads


FLOW OVERVIEW
TwitterAPIが使えるようになるまでの流れ(概要)
====================
1) Build TwitterOAuth object using client credentials.
1) クライアント証明書を使ってTwitterOAuthオブジェクトを構築します。

2) Request temporary credentials from Twitter.
2) Twitterから一時的な証明書を取得します。

3) Build authorize URL for Twitter.
3) Twitterへ移動させるための認証URLを構築します。

4) Redirect user to authorize URL.
4) ユーザーを認証URLへ転送します。

5) User authorizes access and returns from Twitter.
5) ユーザーはアクセスを認証(許可)し、Twitterから戻ります。

6) Rebuild TwitterOAuth object with client credentials and temporary credentials.
6) クライアント証明書と一時的な証明書を使ってTwitterOAuthオブジェクトを再構築します。

7) Get token credentials from Twitter.
7) トークン証明書をTwitterから取得します。

8) Rebuild TwitterOAuth object with client credentials and token credentials.
8) クライアント証明書とトークン証明書を使ってTwitterOAuthオブジェクトを再構築します。

9) Query Twitter API.
9) Twitter APIにクエリーを発行します(使えるようになったぜ!)

TERMINOLOGY
用語
====================
The terminology has changed since 0.1.x to better match the draft-hammer-oauth IETF RFC.
用語は、0.1.xからドラフト・ハンマー・認証 IETF RECへよりマッチするように変更されています。

You can read that at http://tools.ietf.org/html/draft-hammer-oauth. Some of the terms will differ from those Twitter uses as well.
http://tools.ietf.org/html/draft-hammer-oauthで確認できます。用語のいくつかがTwitter用途と異なります。

client credentials - Consumer key/secret you get when registering an app with Twitter.
クライアント証明書 - あなたがTwitterにアプリを登録するときに得る「公開鍵/秘密鍵」

temporary credentials - Previously known as the request token.
一時的証明書 - 以前は要求トークンと呼ばれていました。

token credentials - Previously known as the access token.
トークン証明書 - 以前はアクセストークンと呼ばれていました。


PARAMETERS
パラメーター
====================
There are a number of parameters you can modify after creating a TwitterOAuth object.
TwitterOAuthオブジェクトを構築する前に、修正できるパラメータを紹介します。

Switch to XML instead of JSON.
JSONの代わりにXMLを使う場合、以下のようにします。

$connection->format = 'xml';


Stop auto decoding JSON.
JSONの自動デコードをやめる場合、以下のようにします。

$connection->decode_json = FALSE;


Custom useragent.
ユーザーエージェントを変更する場合、以下のようにします。

$connection->useragent = 'Custom useragent string';


Verify Twitters SSL certificate.
TwitterのSSL証明書を確認する場合、以下のようにします。

$connection->ssl_verifypeer = TRUE;


There are several more you can find in TwitterOAuth.php.
他にもいくつかありますが、TwitterOAuth.phpをご覧ください。


EXTENDED FLOW USING EXAMPLE CODE
例のコードを使用した詳細なフロー
====================
To use TwitterOAuth with the Twitter API you need TwitterOAuth.php, OAuth.php and client credentials. You can get client credentials by registering your application at
https://twitter.com/apps.

 Twitter APIを使ってTwitterOAuthを使用するために、あなたはTwitterOAuth.php、OAuth.php、およびクライアント証明書を必要とします。あなたのアプリを「https://twitter.com/apps.」で登録することにより、クライアント証明書を取得できます。

The example files are explained below.
例に使用したファイルは下記で説明されています。

0) Users start out on connect.php which displays the "Sign in with Twitter" image hyperlinked to redirect.php. This button should be displayed on your homepage in your login section. The client credentials are saved in config.php as CONSUMER_KEY and CONSUMER_SECRET. You can save a static callback URL in the app settings page, in the config file or use a dynamic callback URL later in step 2. In example use http://example.com/callback.php.

0) ユーザーは「Sign in with Twitter」と書かれた画像に付けられた「redirect.php」へのハイパーリンクを表示するconnnect.phpから開始します。ログインページにこのボタンを配置します。クライアント証明書は「CONSUMER_KEY」「CONSUMER_SECRET」としてconfig.phpへ保存します。アプリ設定ページに、コンフィグファイルに固定のコールバックURLを保存します。または動的なコールバックURLを使うには後述のステップ2を見てください。例では固定のコールバックURL「http://example.com/callback.php.」を扱います。


1) When a user lands on redirect.php we build a new TwitterOAuth object using the client credentials. If you have your own configuration method feel free to use it instead of config.php.
1) ユーザーがredirect.phpに来たら、クライアント証明書を使って新しいTwitterOAuthオブジェクトを構築します。もしあなたが自分の環境を使いたいと感じたら、config.phpの代わりにそれを使ってください。

これを
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);// Use config.php client credentials

こういう風に変更
$connection = new TwitterOAuth('abc890', '123xyz');

2) Using the built $connection object you will ask Twitter for temporary credentials. If you wish to have a dynamic callback URL for each user you can do pass a URL as a parameter.

2) $connectionオブジェクトを構築するにあたり、Twitterへ一時的な証明書を問い合わせてください。もしユーザーごとに変更される動的なコールバックURLを使いたいと思ったら、URLをパラメータとして渡すこともできます。

これを
$temporary_credentials = $connection->getRequestToken(); // Use applications registered callback.

こういう風に変更
$temporary_credentials = $connection->getRequestToken('http://example.com/callback.php?');


3) Now that we have temporary credentials the user has to go to Twitter and authorize the app to access and updates their data. You can also pass a second parameter of FALSE to not use Sign in with Twitter: http://apiwiki.twitter.com/Sign-in-with-Twitter.

3) 一時的な証明書を手に入れたら、ユーザーをTwitterへ移動させます。そして、アプリがアクセスしたり、更新したりするのを許可してもらいます。2番目のパラメータを「FALSE」にすることで、Twitterへサインインすることなしに使えます。

これを
$redirect_url = $connection->getAuthorizeURL($temporary_credentials); // Use Sign in with Twitter

こういう風に修正
$redirect_url = $connection->getAuthorizeURL($temporary_credentials, FALSE);


4) You will now have a Twitter URL that you must send the user to. You can add parameters and they will return with the user in step 5.

4) ユーザーを送り込むTwitter URLを手に入れました。パラメータを追加すると、ユーザーはそのパラメータと共にTwitterでステップ5を行います。

これを
https://twitter.com/oauth/authenticate?oauth_token=xyz123

こういう風に変更
https://twitter.com/oauth/authenticate?oauth_token=xyz123&info=abc // info will return with user


5) The user is now on twitter.com and may have to login. Once authenticated with Twitter they will will either have to click on allow/deny, or will be automatically redirected back to the callback.

5) ユーザーはTwitter.comでログインします。Twitterで許可か、拒否のどちらかをクリックして認証を行います。その後、自動的にコールバックされてきます。


6) Now that the user has returned to callback.php and allowed access we need to build a new TwitterOAuth object using the temporary credentials.

6) callback.phpにユーザーが戻ってきて、かつ必要なアクセスが許可されていたら、一時的な証明書を使って新しいTwitterOAuthオブジェクトを構築します。

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'],
$_SESSION['oauth_token_secret']);


7) Now we ask Twitter for long lasting token credentials. These are specific to the application and user and will act like password to make future requests. If a dynamic callback URL was used you will also have to pass the oauth_varifier parameter. Normally the token credentials would get saved in your database but for this example we are just using sessions.

7) 次はTwitterに長く使えるトークン証明書を問い合わせます。アプリとユーザーを特定し、パスワードを使ってリクエストしたかのように振舞います。もし動的なコールバックURLを使われていたら、oauth_varifierパラメータも渡さなければなりません。

$token_credentials = $connection->getAccessToken(); // Used applications registered callback URL
$token_credentials = $connection->getAccessToken($_REQUEST['oauth_verifier']);

7a) After getting the token credentials we redirect the user to index.php.

7a) トークン証明書を取得した後に、ユーザーをindex.phpへ転送します。


8) With the token credentials we build a new TwitterOAuth object.

8) トークン証明書を使って新しいTwitterOAuthオブジェクトを構築します。

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $token_credentials['oauth_token'],$token_credentials['oauth_token_secret']);


9) And finally we can make requests authenticated as the user. You can GET, POST, and DELETE API methods. Directly copy the path from the API documentation and add an array of any parameter you wish to include for the API method such as curser or in_reply_to_status_id.

9) 最後に、ユーザーとして認証されたリクエストを作成します。GET,POST,DELETE APIメソッドを使えます。直接APIドキュメントからパスをコピーして、APIメソッドのためのカーソルやin_reply_to_status_idなどのパラメータ配列を加えて使います。

$content = $connection->get('account/verify_credentials');
$connection->post('statuses/update', array('status' => 'Text of status here',
'in_reply_to_status_id' => 123456));
$content = $connection->delete('statuses/destroy/12345');


2010年01月16日

NEC Lavie R LR300/8D の修理

修理をした後にまだ「STOP ERROR 0x0000008E」が出ました。

検索するとこの「STOP ERROR 0x0000008E」はメモリ関連のエラーだということが分かりました。

しかし、以前に増設メモリははずしてテストをしているんですが、STOPエラーが発生することは確認しております。

じゃあ、最初からついているメインメモリが問題っていうことですよね。

どこについているのか分解記事はありませんでしたが、CPUを交換する手順を行い、真ん中あたりについている基盤をゆっくりとはずしてみると・・・・・・ありました!

このメモリを増設メモリと交換して動作を確認してみることに。

今のところ問題ないようです。

2010年01月10日

Plaggerが動かない理由

 Plaggerはインストールも難しいがインストール後も難しい。
 私が遭遇したPlaggerが動かない理由と解決方法をメモします。


①WindowsVISTAからWindows7にアップグレードしたらVirtualBoxが動かなくなった・・・
 →再インストールする羽目に・・・
  Plagger関係ないけど。

②YAMLファイルの記述方法が違う
 →YAMLはインデントにも意味があり、「半角スペース2つ」で1インデント
  タブや半角スペース2つ以外では別の意味になってしまう。

 例:
____config:
____feed:


____config:
______feed:
は異なる意味になる。

※ここでは「_(半角アンダーバー)」が半角スペース1つ分の意味。

③プラグインが足りない
 →プラグインを別途ダウンロードして、/usr/share/perl5/Plagger/Plugin/フォルダなどに入れる。
  もしくは自分で定義してインクルードするプラグインフォルダ

2009年12月23日

NEC Lavie RX LR300/8Dの修理

以前に故障したLavieRX LR300/8Dを修理してみました。

現象はしばらく使うとブルースクリーンになるというものです。

アイスパックとかでCPU周りを冷やして使うと普通に使えることからCPUの熱に問題があることはわかっていました。

対処したのは以下の項目です。

・シリコングリスを塗りなおしてみた。 → 効果なし

・分解掃除してみた。 → 最初からほこりなかった

・OS再インストール → 再インストール中に落ちる

・CPUの温度を測ってみた → 69℃ 熱い!

・CPUを取り替えようと思うが、その前にSpeedSwitchXPでCPUの周波数を抑えてみようと思う

・冷やしながら再インストール → SpeedSwitchXPでも落ちる

・分解するときに熱の伝わる先を考えてみると、CPUクーラー以外にも上部のキーボードに熱が移っていることを発見。

・キーボードを貼り付けていた粘着テープが弱ってキーボードが浮いていることを発見

・粘着テープを両面テープに張り替えて使ったところ


   安定動作!!!

 いや、長かったけど、こんな原因で解決するとはー

 よかったよかった。

2009年09月27日

Plaggerインストール後にエラー

Plagger使っていろいろしようと思ってUbuntuをVirtualBoxにインストールしました。
そして、Plaggerをインストールしたのですが、Debian用パッケージだったため、ダミーパッケージを追加する必要があることに気がつかず、時間がかかり、Plaggerのパッケージをインストールした後も下記のエラーが発生。
これを解決するのが大変でした。

plagger.jpg

インストールがうまくいっていないようなのでXML系のパッケージをインストールしました。

しかし、解決しない。

フォルダを良く見てみるとどうやらRSS.pmがさらに下のFormatフォルダにコピーされていて、読みこめていない様子。
とりあえず、

cd /usr/share/perl5/XML/Feed/Format
sudo cp RSS.pm ../

を実行して動作するようになりました。

Plagger、噂にたがわずインストールが難しいですね。

VirtualPC vs VirtuaBoxl

新しいパソコンを買ったので仮想マシン上に何か作ろうと思いました。

やっぱりUbuntuを使うとPlaggerが設定しやすいので、Ubuntu9をダウンロードしました。

で、使い慣れたVirtualPC2007をインストールして使おうと思ったのですが、インストール時にVistaHomeには対応していないと出ます。それでもインストールは終了するので、Ubuntuをインストールしましたが、どうしてもインストーラーが起動する前にフリーズします。

原因を調べていると、原因自体はわからなかったのですが、「VirtualBox」というSunが出しているオープンソースの仮想マシンがある様子。そちらならWindowsVistaHomeでも大丈夫だし、UbuntuというかLinuxをサポートしている仮想マシンのようです。

さっそくダウンロードしてインストール。

使い心地はVirtualPCとあまり変わりません。WEB上の評判によればVirtualPCよりも早いらしいです。

現在Ubuntuをインストールしていますが、ちゃんとインストーラーも起動してインストールできるようです。

良かったよかった。

設定が終ったらPlaggerをインストールしようと思います。

2009年09月12日

MySQLのrootのパスをリセットする

新しいパソコンを買ってxamppをインストールしました。
で、LAMP用アプリケーションのソースを移動させて動作させたところ、下記のエラーが・・・

Fatal error: Call to undefined method DB_Error::query()

PEAR/DBもインストール済みだし、phpMySQLAdminも起動する。
いろいろ試したところ、本当はDBに接続できないことが判明。

どうやらmysqlのrootのパスワードが違っているみたいです。
で、rootのパスワードを設定しなおそうと思ったら、今度はrootのパスワードがわからなくなってしまいました。

rootのパスワードをクリアーしたくてWEBを探していると以下のコマンドを発見。
実行してrootのパスワードを設定しなおして正常に動作しました。


1. MySQLのデーモンプロセスを停止する
2. --skip-grant-tables オプションをつけてmysqldを再起動
3. mysql -u root でMySQLクライアント立ち上げ
4. UPDATE mysql.user SET password=PASSWORD('password') WHERE user='root';
5. FLUSH PRIVILEGES; の実行

2009年08月27日

POPFileは秘書機能付き!

 ベイズ理論を応用したスパム対策ソフトとして有名なPOPFileですが、スパムメールを振り分ける以外にも使い方があります。
 基本的には自由にふりわけることができますので、「private(プライベート)」「business(ビジネス)」というバケツ(POPFileでは、タグとかフォルダをバケツと呼ぶ)を作って、何日か手動で振り分け方を教えてあげれば、すぐに間違えなくなります。
 これを利用すれば、メールをフォルダへ振り分ける手間がなくなり、時間短縮につながります!
 まるで秘書が事前にメールを振り分けてくれているみたいですねー。

 これを利用すれば、「この論文は良い」とか「このラブレターはひどい」とかいう判断もできるようになってくれるのかしらと思うのでした。

■POPFile
http://getpopfile.org/docs/jp

2009年08月02日

MySQLで DB error: unknown error と出て日本語を含むSQLが正しく動作しない現象の解決方法

 デスクトップPCに日本語環境でWindows, Apache, MySQL, PHP環境を構築しました。

 しかし、PHPからMySQLへ日本語を含むSQLを発行すると「DB error: unknown error」と出てきます。
 アンインストールしてインストールしなおしても、設定を変更しながらいろいろ試してみても同じエラー。
 ただ、日本語を含まないSQLを発行すると正常に動作します。

 何が原因なのか分からずにいましたが、調べてみると同じことで悩んでいる方が!

 どうやらMySQLのmy.iniに下記の太字の部分を追加すれば解決する様子。

[mysqld]
skip-character-set-client-handshake
# The TCP/IP Port the MySQL Server will listen on
port=3306

 さっそく追加して、MySQLを再起動(パソコンを再起動)しました。

 おお、動く! 動きますよ!!

 これで開発を進めることができます。
 このエラーで丸一週間かかりました。長かった・・・。

2009年07月24日

編集不可、コピー不可、印刷不可のPDFをどうにかする!!

 編集できるソフトというのは有料のものがほとんどです。
 下に有名なソフトをラインナップしておきます。
 活用してください。

■PDF編集ソフト

■コピーしたい人

http://www.bravaviewer.jp/reader.htm

このソフトをインストールして、PDFを表示すると、コピー不可のデータもクリップボードへコピーできるようになります。

■印刷不可

iTextFront

 このソフトを使うと、表示した上で印刷できるようになります。
 ちなみに古いソフトなので不具合などで全部表示できなかったりするかもしれません。


 PDFにセキュリティ機能が付くことは賛成なのですが、自治体の資料などに不用意にセキュリティをつけて、資料としての有用性を低くすることには反対です。
 セキュリティを使うときにはどのように使われるか想定した上で使っていくべきだと思いました。

 みなさんもソフトを有効活用して、正しい使い方をした上で頑張ってくださいね。 

2009年07月23日

地理的分析を行うためのツール

 最近、あるリストから地理的分布を分析したいと思うことがありました。
 要は日本地図に分布状況に合わせて棒グラフを作りたいと思ったんですね。

 たぶん、誰か先人がそれを行っていると思い、インターネットで検索していると、いました。
 人口分布の分析を行っている人が。
 どうやら、KML(またはKMZ)というファイル形式を作ればGoogleEarth上に表示できるらしいことが分かりました。

■メッシュデータをKML出力
http://standardization.at.webry.info/200804/article_17.html

 でも、そこで使っているソフトは有料ということ。
 ならば自分で作れないかと思い、出力されたKMZをダウンロード。
 このKMZというのはKMLファイルをZIP形式で圧縮したファイル形式ということが分かり、早速拡張子をZIPに変更して解凍。みごとKMLファイルを取り出せました。
 で、KMLファイルを調べてみると、どうやらXMLの仲間ということなので、メモ帳で開き、中を分析。案外簡単な仕組みでした。とりあえずは座標部分を書き換えれば□の位置や高さを変更できる模様です。

 ファイルフォーマットは分析できたので、次は座標をメッシュに変換する工程です。
 ここは少し苦労しました。日本では標準メッシュというものがあるのですが、その計算方法がなかなか見つからず苦労しました。

■緯度・経度とメッシュコードを変換するスクリプト
http://www.itt-web.net/modules/xeblog/?action_xeblog_details=1&blog_id=528

 上記のサイトのJavaScriptコードを参考にメッシュデータへの変換に成功しました。
 ちなみにGoogleEarthは世界測地系なので日本測地系を使っている場合は座標変換が必要になります。
 日本測地系から世界測地系に変換するコードは下記のサイトを参考にしています。

■Mac・GPS・Perl
http://homepage3.nifty.com/Nowral/02_DATUM/02_DATUM.html

 これで出揃いましたのでC#を使って変換ソフトを自作しました。
 この辺は別に大したことしていないので省略しますが、できあがったデータをGoogleEarthで見るとちょっと感動。
 色々な履歴などを重ねて表示することで相関関係がわかるようになり、住所の一覧などを見ているだけでは発券できなかった事実を掘り起こすことができるようになりました。
 これにGPSロガーなどを使っていろいろ出来れば、ちょっと面白いことになりそうです。
 いつもGPSロガーを携帯していれば日本で行った事のないエリアなんかを視覚的に認識して、日本中をエリア制覇するような野望もできるかもしれませんね。

2009年07月01日

Googleカレンダーに不具合発生!!

 Firefox 3.5にアップデートしたと同時にGoogleカレンダーにアクセスできなくなりました。
 カレンダーにアクセスすると自動転送を繰り返し、永遠ループしています。
 過去の対処方法(キャッシュクリア・Cookie削除)を試してもダメ。IE6でも同じようになりました。
 しかたないので、Firefoxをアンインストールし、個人情報まで削除して再度インストールしましたが、結果は同じ。
 何度やってもダメだったので検索してみるとリアルタイムでGoogleの質問が増えていきます。
 これはGoogle側に何かあった模様。
 早く直らないかなぁ。カレンダーは携帯電話のほうで見れるのですが、PCで見れないとやっぱり不便です。

2009/7/1 19:00追記
 どうやら、19:00には不具合は復旧したようです。
 これに懲りて予定表はバックアップ取れる環境にしようと思いました。


■Googleカレンダーヘルプ
質問: カレンダーに入れません(cookieを削除しても入れません) (couragerj9さん)
http://www.google.com/support/forum/p/calendar/thread?tid=40c42c67d1b47e88&hl=ja
質問: PCからカレンダーにログインできなくなった(ryom256さん)
http://www.google.com/support/forum/p/calendar/thread?tid=48a43dd1ebcc086c&hl=ja
質問: カレンダーにアクセスしようとすると、「転送中」となったまま動きません。スケジュールをグーグルのカレンダーで管理しているので、本当に困っています。 (riyuさん)
http://www.google.com/support/forum/p/calendar/thread?tid=0bd534428e7b0678&hl=ja
質問: カレンダーにアクセスできない(hori7070さん)
http://www.google.com/support/forum/p/calendar/thread?tid=7e7b4b05d792e53a&hl=ja
質問: グーグルカレンダーが使えません。(interlle.tさん)
http://www.google.com/support/forum/p/calendar/thread?tid=19381e13d2049b33&hl=ja
質問: google カレンダーにログインできません。 (hitoshim75さん)
http://www.google.com/support/forum/p/calendar/thread?tid=02eb6cbdb67908fb&hl=ja

■Yahoo!知恵袋
googleカレンダーに繋がらない(runpeisisyouさん)
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1127829376

2009年06月30日

Windows 7で技術革新はあるのか?

 Windows VISTAがこけてWindows 7で挽回しそうなMicrosoft。OSに求められるものは「堅牢性」から「軽快性」に変わりつつある。当然ユーザーの要求は「安全性」をベースにおいているから、OS選びは次のステージに移行していると思って間違いない。
 また分かりやすさを求めているユーザーが多いことも確かで、Windows VISTAのときには、コンシューマ向けのOSが2つあることで混乱を来たしたように思う。今回は基本的にはプレミアムに統一して、ベーシックはネットブック向けになるようだ。
 価格もVISTAより10%ほど安くなっており、今後はWindowsXPからの移行が進んでいくと思われる。ちなみにWindows 7の先行予約なら半額になったが、こちらは開始から1週間待たずに約3万本が完売している。

 買い替えには理由が必要だが、今回はWindowsXPのサポートが終了するということで1つ、マルチタッチ技術の普及が進むことで2つ目の理由が用意されることになる。
 今までキーボードとマウスが必須に入力インターフェースは、タッチパネルのみが必須になるというシンプルな端末になる。iPhoneで成功しているのでリスクは特にないと思われるが、唯一タッチパネルを提供するメーカーがN-tringのみになっているというところが心配の種といえば種だろうか。


■Windows 7に無料でアップグレード:HP、Windows 7の優待アップグレードキャンペーンに参加
http://www.itmedia.co.jp/enterprise/articles/0906/26/news027.html

■元麻布春男のWatchTower:期待が膨らむWindows 7に対するアレコレ
http://plusd.itmedia.co.jp/pcuser/articles/0906/25/news090.html

■「Windows Mobile 7」端末は2009年第1四半期に登場か?
http://japan.zdnet.com/sp/feature/07microsoft/story/0,3800083079,20375773,00.htm

■上限7万5000本:Microsoftの無料セキュリティ「Security Essentials」β、限定公開
http://www.itmedia.co.jp/news/articles/0906/24/news025.html

■古田雄介のアキバPickUp!:Windows XPがもうすぐアキバから消える? 「とりあえず再入荷はこれで最後かも」
http://plusd.itmedia.co.jp/pcuser/articles/0906/22/news033.html

■Windows 7、値下げと無償アップグレードで大ヒットなるか?
http://www.itmedia.co.jp/news/articles/0906/30/news029.html

■半額のWindows 7、週末で完売 限定3万本  「予想を超える注文」
http://www.itmedia.co.jp/news/articles/0906/29/news034.html

■「深夜販売は気合い入れるよ」――アキバに見るWindows 7の評判は?
http://plusd.itmedia.co.jp/pcuser/articles/0906/29/news029.html


2009年01月13日

Winnyの恐怖

なにはともあれ、下記の記事をご覧ください。


■IT media 会社に潜む情報セキュリティの落とし穴:Winny利用の果て――家族崩壊した銀行マンの悲劇
http://www.itmedia.co.jp/enterprise/articles/0901/13/news010.html


どうでしたか?

どんなに気をつけていてもセキュリティは万全ではないということがわかります。

この話を読んだときに積み上げてきた信頼は簡単なことで壊れてしまうんだなと改めて実感しました。

みなさんも、「ちょっとぐらい」と思わず、会社の定めたセキュリティ条項より厳しく気をつけてもらえればと思います。

2009年01月03日

結局のところ、Debianに挫折し、Ubuntuへ

DebianにFireFox3.0をインストールしようとしたけど、GTK+のバーンジョンを上げるために依存関係にあるモジュールをバージョンアップしなければならず、ATKモジュールのバージョンをアップグレードできなくて撃沈。

定期的にメンテナンスが入るUbuntuへ乗り換えることにしました。

Ubuntu8.0をインストールしようとしたけれど、古いノートパソコンのためハードディスクに障害があり、パーティションを変更するときにエラーが発生し、なかなかできませんでした。

しかし、UbuntuをCDから起動し、その状態でデスクトップにあるインストールアイコンでインストールすると成功。

ついにUbuntuを起動できます。

Ubuntuを起動するとFireFoxのバージョンを確認。

すでに3.0でした。

あとは無線LAN環境を構築する必要があったのですが、設定方法がよくわかりません。

ネットで検索するとちょうどNECのWL54AGの無線LANカードを使った接続方法を発見。

ドライバを早速ダウンロードし、make installを実行して、システム>システム設定>Network Configurationから無線LANを設定することができました。

(ネットワーク・ツールを開いて設定するところが見つからないと30分以上悩んでいたのは内緒です)

■Binsan's Cafe 「ubuntuで無線LAN」
http://fish1091.com/wordpress/archives/354

■Linux Wireless
http://www.linuxwireless.org/en/users/Download

インストール手順
http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2をダウンロード
②/tmpフォルダへ解凍(日本語が入っているパスだとエラーでmakeできません)
③アプリケーション>アクセサリ>端末を起動
④「su」と入力し、ENTER。パスワードを入力する
  認証に失敗したら「システム管理>ユーザーとグループ」でrootのパスワードを変更
⑤「cd /tmp/compat-2.6」でフォルダを変更
⑥「make install」と入力し、ENTER。
⑦インストール完了。

2008年08月07日

新しいモジュールを追加しても、見ることができない - SugarCRM

いったん本題とはずれ、トラブルの解決方法です。

新しいモジュールを追加しましたが、どうもユーザーからアクセスすることができません。

英語「You do not have access to this area. Contact your site administrator to obtain access.」
日本語「このエリアにアクセスできません。アクセス権を取得するには管理者に連絡してください。」

これは困ったなと思っていたところ、下記のようなページを発見。

■can't access new custom modules (新しいカスタムモジュールにアクセスできません)
http://www.sugarcrm.com/forums/showthread.php?t=28618

どうやら、「管理(Admin)」の中にある「リペア(再構築)(Repair)」を行えばよいようです。

私の場合「ロールをリペア(Repair Roles)」で直りました

よかった~(^^;

2008年07月21日

PHP 5.2.6 のインストール

サーバー上にPHPプログラムを置く必要があり、Apache・MySQL・PHPをインストールしました。

ApacheとMySQLは特に問題なくインストールできました。

PHPではPEARなるものをインストールしないとDBへのアクセスが難しいとのことで、とりあえず全部インストールしてみました。

インストールした後、phpを「>php infophp.php」で起動してみると「指定されたモジュールが見つかりません。」的なエラーが出て、どうやら拡張機能が正常に設定されていない様子。

PHP 5.2.6 のインストールの続きを読む

2008年07月18日

顧客基本情報を拡張する②-SugarCRM

さてモジュールビルダーを使ってみるのですが、「管理」>「モジュールビルダー」を起動します。

どこから始めたらいいのかわからないですね……。

私がいろいろ試したところ、画面の左下にある「スタジオ」が現在使われているデータベースの拡張、「モジュールビルダー」がデータベースのパッケージを作っていく機能のようです。

sugarcrm_modulbuilder.png


顧客基本情報を拡張する②-SugarCRMの続きを読む

2008年07月17日

顧客基本情報を拡張する①-SugarCRM

さて、要件定義のまねっこは終わったので、次に1つずつのテーブルをどう扱うかを考えていかねばなりません。

SugarCRMの日本語版では顧客情報は「取引先」というところに集めるようです。

では、この「取引先」はどんな項目があるんでしょうか?

顧客基本情報を拡張する①-SugarCRMの続きを読む

2008年07月16日

さて何をしたいのか。-SugarCRM

さて、今まで使えていた機能が使えなくなってしまっては導入効果を計ることすらできなくなってしまいます。

今までの顧客データベースクライアントでは何が出来ていたのか拾い出してみます。


さて何をしたいのか。-SugarCRMの続きを読む

オープンソース「SugarCRM」 顧客管理への道

顧客データベースのクライアントツールのソースコードが紛失されてしまい、これ以上の修正は望めない状態になりました。

はっきり言えば、すぐに困ることは何もないのですが、大問題です。

しかし、前向きに考えれば今までの顧客管理で問題があった点を修正し、改善するチャンスでもあります。

そこでSugarCRMへ乗り換えることを検討しようと思います。

SugarCRMは、オープンソースのWEBインターフェース型CRMソフトで、ちょっと欲しかったSalesForceと似ています。

SalesForceもSugarCRMも顧客中心に考えられたグループウェアと考えて差し支えないと思います。

オープンソース「SugarCRM」 顧客管理への道の続きを読む

2008年06月05日

Windows7

新しいWindowsのデモムービーが公開されました。

このデモムービーでマルチタッチで動作しているWindowsを見ることができます。

このマルチタッチはかなり直感的な操作ができ、しかもマウスという制限の多いユーザーインターフェースからの脱却できるものだと思います。

iPhoneやiPodでも使われていますが、画面が小さいのと動作が遅いのでいまいち実用的に見えませんでした。

次のWindowsの発売はWindowsVistaの3年後、つまり2年後みたいですが、非常に楽しみになりました。


■WIRED VISION
http://wiredvision.jp/news/200805/2008052922.html

2008年05月08日

Windows XP SP3の実力

5/6に出たWindows XP SP3をインストールしてみました。

ちょっと使った感じではフォルダやファイル回りが速くなったように感じます。

私のパソコンはファイル回りがとても遅かったので、この改善はちょっとうれしいです。

Windows Vista SP1も同様の修正が加えられているとのうわさですので、そろそろVistaへの乗り換え時期かもしれません。

購入はこちらから 【送料無料】Microsoft Windows Vista Ultimate SP1

2008年04月15日

未来型デバイス

ついにディスプレイの未来型が現実に出てきました。

目の網膜に画像が投影されるため、外から画像が見えません。

驚きの技術です。

自分だけが画像を見ているとなると、どことなくサイバーな雰囲気が出てきます。

しかし、アプトプットデバイスの進化にインプットデバイスの進化が付いてきていないような気がします。

特に検索エンジンのインターフェースにはもっとがんばって欲しいものです。


■ITメディア
網膜に映像を投影する眼鏡型ディスプレイ、ブラザーが開発

2008年03月31日

結局、デュアルブートに変更

Debian Linuxを無事Virtual PCで動作させることができるようになりましたが、速度面で満足がいかなかったため、デュアルブートにしようと考えました。

手順としては、

①パーティションが1つしかないので、2つにする
②2つ目のパーティションにDebian Linuxをインストールする

です。

結局、デュアルブートに変更の続きを読む

2008年03月29日

長かった旅路 Debian Linuxのインストール

Debian Linuxのインストールをしてみました。
インストール自体はフル機能でインストールしてみようと思っていたのですんなりでしたが、インストール後、Ubuntuでもなった「画面が横長になりバグる」現象が発生。

・・・・・・調べてみると画面の解像度の設定ファイルをいじればよいとのこと。

しかし、それにはviエディタが必要です。

そして、このviエディタの習得に1時間もかかろうとは・・・・・・

長かった旅路 Debian Linuxのインストールの続きを読む

2008年03月23日

Debian Linux に挑戦!

さて、パソコンを1台増やしましたので、Debian Linuxに挑戦することにしました。

とは言ってもVirtual PC上でのことです。

まずはDVDで4枚にもなるイメージファイルをダウンロードしなければなりません。

以前にダウンロードしようとしたときは、HTTPを使ったので何日もかかってダウンロードした上にダウンロードソフトのエラーで0KBに戻る始末(ρ_;)ヒックヒック

今回はBitTorrentというソフトを使ってダウンロードしてみました。

・・・げ! 速い!!

なんと4時間で16GB全部ダウンロードできてしまいました。

どういう仕組みなんでしょう? BitTorrent恐るべし。

で、インストールは次会に続きます。

2008年03月17日

Windows Vista SP1の登場

 WindowsVistaSP1が登場しました。

 ファイル検索や圧縮が早くなっているとのことです。

 私もWindowsVistaがほしいときがあります。
 それは使いもしないファイル検索や圧縮が早くなったからではなく、「画面に手書きできるから」の1つに限ります。

 現状私が使っているメモはほとんどがデータです。
 携帯からだったりノートパソコンからだったりします。
 しかし、手書きが必要になった場合、どうしても紙のノートに書かなければなりません。
 イラストを描くほど高性能でなくてもいいので、WindowsVistaの機能で十分です。
 手書きができるようになれば、全部データになるので、あちらこちらに行かなくてもよくなります。

 あちこちに書いちゃうと、どっかいっちゃって駄目だんですよね。

■Itmedia
http://plusd.itmedia.co.jp/pcuser/articles/0803/16/news002.html

2008年02月08日

100ドルPC Windows版

 Windows版の100ドルPCが登場しそうだというニュースが載っていました。

 個人的にはWindowsは嫌いでしたが、最近のMicrosoftの行動はどこか崖っぷちに立たされた痛々しさが見える必死さがあって高感度はアップしています。
 逆にYahoo買収に対するGoogleのコメントが腹黒くて、Googleに対する高感度が下がっています。
 別にYahooを買収したからといって競争が激化されるだけで、ユーザーにはいいことだらけなので、今回の買収劇はMicrosoftの味方です。

100ドルPC Windows版の続きを読む

2008年01月22日

CSS - 角を丸くする方法

ホームページを見たときにやっぱりボックス要素のボーダーが四角だと硬いイメージを受けます。
何とかして角を丸く見せたかったのですが、うちのホームページに来る人の大半がIEのため、FirefoxやSafariで使える「-moz-border-radius」や「-webkit-border-radius」は使えません。

いろいろ検索したところ、cssで「角を丸くする」という方法はNifty Cornerで掲載されていました。
でも、このサンプルはボーダーではありません。
背景は一色で塗られています。

なんとかして背景に画像を入れたかったため、背景画像を入れられるように作り変えました。


■出来上がり。


サンプルコードは続きを見てね^^

CSS - 角を丸くする方法の続きを読む

2008年01月08日

ソニー PSPにSkype搭載!

 ソニーのPSPはいろいろな機能がつき、ポスト携帯電話を狙っているのではないかと思ったことがあります。

 できないのは通話だけ……と思っていたら、PSPでSkypeが使えるようになるとニュースが流れました。

 SkypeInやSkypeOutは使ったことがありませんが、これがPSP以外の端末にも普及してくればいろいろなものに向かって話しかけている人が増えるかもしれませんね。

■IT media
http://www.itmedia.co.jp/news/articles/0801/07/news021.html

2007年11月27日

OCRが熱い!

私の中だけの話ですが、OCRが今熱いです。
名刺管理ソフトのOCRに大感動。
私の持っていた名刺550枚が1時間もかからずデータベース化されました。
多少間違っている項目もありますが、検索するのは「会社名」か「氏名」なので、そこだけチェックして終わり。
あとは検索後、名刺の画像を見ればメールアドレスや住所などはわかるのでOCRが間違っていても大丈夫です。

そこで考えたのはレシートを読み込んで、OCRで認識し、自動的に家計簿はつけられないものかということです。
探してみましたが、そういうソフトはなかったので、自分で作ろうと思ったのですが、さすがにOCR部分は無理がありますので、ライブラリがないか探しました。
有料のものは少ないライセンスだとすごく高いので、無料またはオープンソースのものを探したのですが……ないですね。
英語ならあるのですが、日本語はないです。

日本語OCRもオープンソースプロジェクトが立ち上がらないかなぁ。
レシートOCRは非常に売れると思うのですが、どうでしょうか。

OCRが熱い!の続きを読む

2007年11月24日

動画共有サイト構築

携帯インフラが整うに連れて動画共有サイトはパソコンから携帯に移り変わってきているようです。
まだまだパソコンでしか見れないFLASHビデオですが、どうやら次期携帯ではサポートされるようです。

■Adobe
http://www.adobe.com/jp/aboutadobe/pressroom/pressreleases/200710/20071031fl3.html

■ITmedia
Flash Videoの再生をサポート──Flash Lite 3が変えるケータイインターネット


Flashビデオは「ニコニコ動画」や「YouTube」などで使用されている形式です。

しかし今現在携帯でビデオを共有するには3GP形式(DOCOMO)、3G2形式(AU)などが必要です。
でも、PCで見るビデオ形式にこんなのはありません。
AVIとかMMVとかそんなのばかりです。

そこで動画形式を別のファイルにする必要があるのですが、へぼい変換ソフトが氾濫しており、変なのを使うと動画の再生時間以上の時間が変換にかかったりします。

動画共有サイト構築の続きを読む

2007年11月20日

レコメンデーションとは?

Amazonに代表されるオススメシステムを「レコメンデーション」と呼ぶそうです。
難しい理論はさておき、このAmazonのシステムはデータベースマイニングの一種です。

データベースマイニングというのは膨大なデータから意味のあるデータを発掘するという手法のことを指しており、現在のWEB販売システムの花形でもあります。
膨大なデータから意味のあるデータを現実的な時間内に呼び出さなければならないというのが、技術者の腕の見せ所でもあります。

レコメンデーションとは?の続きを読む

2007年11月09日

「だからそれはWindowsUpdateが原因です!!」

 うちのコールセンターによく来る問い合わせのうち、「急にソフトが動かなくなったんだけど!」というのがあります。
 それも特定の日に。

 今月は11月14日に発生することが決まっているそれは「WindowsUpdate」です。
 うちのソフトは決して動作は軽くありませんが、うちのソフトと関係なく「WindowsUpdate」のある日はとにかくパソコン全部が重くなります。
 うちのソフトしか使わないユーザーはそれを勘違いして、「急にソフトが動かなくなったんだけど!」と問合せてくるのです。

「だからそれはWindowsUpdateが原因です!!」と言ったところで納得してくれるはずもなく、とりあえず、「明日まで様子見てください」と説明し、待ってもらいます。

WindowsUpdateってなんでそんなに重い処理なんでしょうか。
ファイルチェックしてダウンロードするだけのシステムなのに……ウィルス的な活動をしていないかどうかウィルスチェックソフトが激しくチェックでもしているのでしょうか?^^;

「だからそれはWindowsUpdateが原因です!!」

 うちのコールセンターによく来る問い合わせのうち、「急にソフトが動かなくなったんだけど!」というのがあります。
 それも特定の日に。

 今月は11月14日に発生することが決まっているそれは「WindowsUpdate」です。
 うちのソフトは決して動作は軽くありませんが、うちのソフトと関係なく「WindowsUpdate」のある日はとにかくパソコン全部が重くなります。
 うちのソフトしか使わないユーザーはそれを勘違いして、「急にソフトが動かなくなったんだけど!」と問合せてくるのです。

「だからそれはWindowsUpdateが原因です!!」と言ったところで納得してくれるはずもなく、とりあえず、「明日まで様子見てください」と説明し、待ってもらいます。

WindowsUpdateってなんでそんなに重い処理なんでしょうか。
ファイルチェックしてダウンロードするだけのシステムなのに……ウィルス的な活動をしていないかどうかウィルスチェックソフトが激しくチェックでもしているのでしょうか?^^;

2007年11月06日

Google携帯ついに登場!?

日本は携帯市場の規模が非常に大きく、PCとの割合では携帯の方が断然大きくなっています。
日本は世界で特殊だと思ってきましたが、欧米でも携帯市場は拡大しているようです。

そんな拡大している市場を受けてGoogleがGoogleが携帯電話のプラットフォームを提供ニュースが流れています。

Open Tech Press
Google、携帯電話向けプラットフォームを正式発表へ

記事によると2008年には提供されるとのことでしたので、2009年の初め頃にはGoogleブランドの携帯がお目見えするかもしれません。
GoogleのAPIを携帯電話から自由に使えるかと思うと、いろいろなことができそうです。

2007年10月25日

PDFのパスワード解除

PDFのパスワードがかかっていて、印刷できなかったり、テキストをコピーできないファイルが増えてきました。
スクリーンキャプチャで印刷できてしまうので、印刷に制限を掛けること自体、意味がよくわかりませんが、不便なのでとにかく何とかして解除したいものです。

私が見つけたPDFの制限解除ツールは2つ。
1つは有料でパスワードアタックをかけて制限を解除してくれるもの。
1つは無料で読み込んだPDFを制限なしにして保存してくれるもの。
この両方を使えば、とりあえずは無料で制限を解除できそうです。

iTextFront Ver1.17は無料で制限を解除したPDFを保存してくれるツールですが、私が使ったときは114ページ中、1ページ目だけが白紙でした。
Advanced PDF Password Recoveryはパスワードアタックをかけて解除してくれるツールで有料です。でも、数ページはレジストしていなくても解除してくれるので少ないページでかつパスワードが6文字以内だったら大丈夫そうです。
私が試したときは114ページ中5ページぐらい解除してくれてあとは白紙でした。

上記のような状況なので、2つをあわせればコピーも印刷も全ページ可能になりました。
今はいろいろなツールがあって楽です。

2007年10月21日

オープンアプリ戦記2

サークルでAU用のオープンアプリを作成しているのですが、今までダウンロードすらできなかった事実の中で、先日、ヘッダーに問題があることを発見。
修正してサークルの方の確認待ちでした。

その後、ダウンロードには成功。インストールもでき、タイトル画面まで動作したみたいです。

しかし、キーを押しても反応がない状態のとのこと。

ソースコードを調べてみると、getGameActionでキーイベントをチェックしている様子。
ここが問題なのかと思い、現在修正を提案中です。

WikiにはオープンアプリはMIDP2.0の忠実な仕様の再現を目指しているとありましたが、エミュレータで動作しても実機で動作しないことが多いので、仕様で再現できていない部分が多いのではないかと思います。
私は詳細な仕様書をAUから発表してもらいたいなと思うのでした。

2007年10月17日

オープンアプリ戦記

AUの携帯で遊べるオープンアプリをサークルで作っているのですが、最近まで実機でダウンロードができずにいました。
実機にダウンロードしようとすると、「インストールに失敗しました」とエラーが表示されます。

ところが、ある日、サークルメンバーから「MINEタイプが正しく設定されていないからインストールできないんじゃないか」と指摘を受けて、仕様を確認したところ、あるじゃないですか!その記述が!!

---------------------------
■サーバ設定

Webページを配置するサーバ側にていくつかのヘッダ情報を必須で返却する必要があります。返却されない場合、インストールエラーとなります。
---------------------------

見落としてました(T_T)

そして前に調べたときはなかったMINEタイプを設定して成功したページをググリに成功。
下記のページが分かりやすく解説してくれていました。

モバイルの素

サーバーに設定しましたが、実機が手元にないのでサークルの人の確認待ちです。
去年の1月ぐらいから解決できなかったことですから、解決できるといいなぁ。

2007年06月22日

プログラマという職種

 プログラマは数年前まで特殊な技術を持つ職業でした。
 しかし、今はプログラムができるだけでは利益は上がりません。
 いや、今までも本当ならば利益を上げるには、利益構造と直結する業務の知識が必要だったのですが、プログラムができる人自体が少なかったのでプログラマ自体に価値の比重が置かれて、利益を上げることが可能でした。
 いまやプログラムは誰でもできるものになっています。

 VBAでも、Perlでも簡単にフリーのソースコードをコピーして、少し修正してあげれば誰でもオリジナルのプログラムの作成が可能です。
 私はコールセンター勤務ですが、VBAでパソコンのCPUの速度を調べたり、バージョンを調べることができます。
 昔だったらプログラマに許された特権だったのでしょうが、今ではなんの価値もありません(私からすればですが)

 私の参加するSNSでも16歳とか18歳の平成生まれがすごいプログラムを組んでいることを考えると、あと少しでプログラムができる人は大多数と呼べるレベルまで増加するかもしれません。

 ……まったく恐ろしいことです。

2007年05月29日

WMIっていうスゴイ奴

EXCELのVBAでもコンピュータの電源落としたり、CPUの種類調べたりできるんですね。
・・・最近知りました。

管理がものすごい簡単になったんですが・・・もっとはやく知りたかった^^;

WMI Fun!