【課題】
[PROBLEM: NO IDEA ABOUT HOW TO IMPORT AU ONE MAIL INTO OTHER MAIL CLIENT]
au oneはgmailサービスを援用してau oneメールサービスを展開しています。
gmailはpopでメールを転送するサービスを提供していますので、
au oneももちろんできるはずです。
私は、auからdocomoに変えてしまったので、
もうau oneは使いません。
いつも使っている別のgmailアカウントに、昔のauのメールをインポートしたくなりました。
でも、どうやってもpopでauoneアカウントにログイン出来ません。
【解決方法】
[METHOD: SETTING AUONE POP PASSWORD]
なぜかがわかりました。
auoneはメールアカウントのパスワードとは別にpop転送サービスのパスワードを設定しなくてはいけないようです。
やり方。
1.auoneメール画面の右上、「設定」→「アカウント設定を変更:Googleアカウントの設定」→「セキュリティ:パスワードを変更」→「メールパスワードの設定」で下記サイトに到着。
https://sec.auone.jp/mail/pc/modpwdsel/
2.パスワードを設定
3.クライアント側を下記サイトに従い設定(popサーバはpop.gmail.com、など)
http://home2.mail.auone.jp/help/contents/pc/Ph=a00d.html
【結果】
[RESULT: PASSED]
なんとかメールを転送することができました。これで晴れてauとおさらばできます。
子供たちが絵を描くようにプログラムを書いたりDJしたり作曲したりして遊ぶアプリを作ろうとしています。今はAndroidで鋭意製作中。 (c) Hiroyuki Osaki [since 2000]
Saturday, February 05, 2011
Monday, January 10, 2011
unixbenchとsysbench II
ubuntuにsysbenchを入れようとしています。
sysbench自体はsourceforgeからダウンロードできそうです(下記)
参考にしたページでは、mysql-develが必要となっています。
でも、ubuntu 64bitバージョンでは普通にapt-getでmysql-develを探してもうまくいきません。
このページを参考にすると、ライブラリ名が違っていることがわかります。
【正解】
【予告編】次はここでつまずいています。
sysbench自体はsourceforgeからダウンロードできそうです(下記)
wget http://sourceforge.net/projects/sysbench/files/sysbench/0.4.12/sysbench-0.4.12.tar.gz
参考にしたページでは、mysql-develが必要となっています。
でも、ubuntu 64bitバージョンでは普通にapt-getでmysql-develを探してもうまくいきません。
apt-get install mysql-devel
-->Error
このページを参考にすると、ライブラリ名が違っていることがわかります。
【正解】
apt-get install libmysql++-dev
【予告編】次はここでつまずいています。
hiro@ubuntu:~/sysbench/src/sysbench-0.4.12$ libtoolize --force --copy
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'.
libtoolize: copying file `config/ltmain.sh'
libtoolize: You should add the contents of the following files to `aclocal.m4':
libtoolize: `/usr/share/aclocal/ltversion.m4'
libtoolize: `/usr/share/aclocal/ltsugar.m4'
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.ac and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
unixbenchとsysbench
マイマシンではubuntu desktopの64bit版を仮想アプライアンス化し、
vmware player上で起動して、Go開発環境としています。
//Goはとてもインスパイアされる言語です。
//Goでは直感的なマルチスレッド化が可能で、私が目指している
//「子供たち向けプログラム」を作る上でも直感性は必須なので、参考にさせていただいています。
Goのプログラムがコンパイルされて実行される時間が早いのか遅いのかを考えるために、
ベンチマークテストをやってみるとどうなるのかが知りたかったので、
unixbench、sysbenchをやることにしました。
まずはunixbenchの結果から。
[やり方]
こちらを参考にさせていただきました。http://goo.gl/wdP5T
unixbenchの結果はこちら。
そこそこいい結果みたいなので、満足しています。
チューニングなどは今後おいおいやっていきます。
vmware player上で起動して、Go開発環境としています。
//Goはとてもインスパイアされる言語です。
//Goでは直感的なマルチスレッド化が可能で、私が目指している
//「子供たち向けプログラム」を作る上でも直感性は必須なので、参考にさせていただいています。
Goのプログラムがコンパイルされて実行される時間が早いのか遅いのかを考えるために、
ベンチマークテストをやってみるとどうなるのかが知りたかったので、
unixbench、sysbenchをやることにしました。
まずはunixbenchの結果から。
[やり方]
こちらを参考にさせていただきました。http://goo.gl/wdP5T
unixbenchの結果はこちら。
========================================================================
BYTE UNIX Benchmarks (Version 5.1.2)
System: ubuntu: GNU/Linux
OS: GNU/Linux -- 2.6.32-25-generic -- #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010
Machine: x86_64 (unknown)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz (6383.6 bogomips)
x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
04:09:42 up 8 days, 4:00, 2 users, load average: 0.16, 0.21, 0.18; runlevel 2
------------------------------------------------------------------------
Benchmark Run: Mon Jan 10 2011 04:09:42 - 04:37:47
1 CPU in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 33669499.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 4066.7 MWIPS (9.9 s, 7 samples)
Execl Throughput 4711.2 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 887767.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 307965.2 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1596808.8 KBps (30.0 s, 2 samples)
Pipe Throughput 2302810.2 lps (10.0 s, 7 samples)
Pipe-based Context Switching 418146.4 lps (10.0 s, 7 samples)
Process Creation 14305.6 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 6419.8 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 802.4 lpm (60.0 s, 2 samples)
System Call Overhead 4276356.3 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 33669499.9 2885.1
Double-Precision Whetstone 55.0 4066.7 739.4
Execl Throughput 43.0 4711.2 1095.6
File Copy 1024 bufsize 2000 maxblocks 3960.0 887767.4 2241.8
File Copy 256 bufsize 500 maxblocks 1655.0 307965.2 1860.8
File Copy 4096 bufsize 8000 maxblocks 5800.0 1596808.8 2753.1
Pipe Throughput 12440.0 2302810.2 1851.1
Pipe-based Context Switching 4000.0 418146.4 1045.4
Process Creation 126.0 14305.6 1135.4
Shell Scripts (1 concurrent) 42.4 6419.8 1514.1
Shell Scripts (8 concurrent) 6.0 802.4 1337.3
System Call Overhead 15000.0 4276356.3 2850.9
========
System Benchmarks Index Score 1625.6
そこそこいい結果みたいなので、満足しています。
チューニングなどは今後おいおいやっていきます。
Saturday, January 08, 2011
Android/ グラデーションを描画する(GradientDrawable)
前回、SurfaceViewでの描画でつまずいたに続きまして、
またまたAndroidの描画でつまずいてみましたのでご報告。
[PROBLEM: NO IDEA TO DRAW GRADATION]
【つまずき】
グラデーションをどのように描画すればいいのですか?
【解決プロセス】
GradientDrawableを使えば良さそうなことはさすがにドキュメントからわかりました。
でも、いろんな開発者が「これじゃわかんないよ」と言っているようで、僕にはこのドキュメントから使い方を読み解くことはできませんでした。
そこで、こちらを参考にしました。http://softwareobjects.net/technology/other/how-to-create-android-live-wallpaper/
【先に結果をば】
[RESULT: PASSED]

【コードと解決手段】
[SOLUTION: USE GradientDrawable]
手順1.GradientDrawableを作る(その時、グラデーション方向や色を指定)
手順2.GradientDrawableで描画する領域の境界をRect型で指定する
手順3.GradientDrawableのdraw関数を呼び出して描画する
[FYI: HERE IS A SAMPLE CODE]
コードは下記です。
またまたAndroidの描画でつまずいてみましたのでご報告。
[PROBLEM: NO IDEA TO DRAW GRADATION]
【つまずき】
グラデーションをどのように描画すればいいのですか?
【解決プロセス】
GradientDrawableを使えば良さそうなことはさすがにドキュメントからわかりました。
でも、いろんな開発者が「これじゃわかんないよ」と言っているようで、僕にはこのドキュメントから使い方を読み解くことはできませんでした。
そこで、こちらを参考にしました。http://softwareobjects.net/technology/other/how-to-create-android-live-wallpaper/
【先に結果をば】
[RESULT: PASSED]

【コードと解決手段】
[SOLUTION: USE GradientDrawable]
手順1.GradientDrawableを作る(その時、グラデーション方向や色を指定)
手順2.GradientDrawableで描画する領域の境界をRect型で指定する
手順3.GradientDrawableのdraw関数を呼び出して描画する
[FYI: HERE IS A SAMPLE CODE]
コードは下記です。
GradientDrawable mGradient = new GradientDrawable(
Orientation.LEFT_RIGHT,
new int[] { 0xff303030, 0xff777777 });
mGradient.setBounds(new Rect(0,0,getWidth()/2,getHeight()));
mGradient.draw(canvas);
Wednesday, January 05, 2011
Android/ SurfaceView内のThreadから描画するときはHandler不要
兼ねてよりの夢であった子供用プログラミング環境をつくろう!と、
Androidプログラミングをこの正月に本格的に始めました。
Androidプログラミングのほとんどは、ウィンドウ(Activity)の制御からスレッド制御までJavaで記述します。
今日は、Androidプログラミングでの私の間違いIを紹介します。
開始から一週間ですが、一日数回はつまずいております。
Androidならではだと思われる作法があったためです。
最たるものとして下記があるでしょう。
この制約から解き放たれマルチスレッドからView制御をしたい場合は
を守らねばなりません。
これは、いくつかのブログを参照して得た情報でした。
そこでこんなコードになっていました。
minghaiさんのブログは参考にさせていただいてますが、そこの記述では
ということでした。
【間違い1】SurfaceViewではHandlerはいらない
【間違い訂正後】
ということで下記のようになります。
Androidプログラミングをこの正月に本格的に始めました。
Androidプログラミングのほとんどは、ウィンドウ(Activity)の制御からスレッド制御までJavaで記述します。
今日は、Androidプログラミングでの私の間違いIを紹介します。
開始から一週間ですが、一日数回はつまずいております。
Androidならではだと思われる作法があったためです。
最たるものとして下記があるでしょう。
Viewを制御できるのはシングルスレッド
この制約から解き放たれマルチスレッドからView制御をしたい場合は
Handlerというキューを作る。そこにView制御をキューイングしておく。
を守らねばなりません。
これは、いくつかのブログを参照して得た情報でした。
そこでこんなコードになっていました。
Thread th = new Thread() {
public void run() {
mHandler.post(new Runnable() {
public void run() {
Canvas canvas = getHolder().lockCanvas();
if (canvas != null) {
onDraw(canvas);
getHolder().unlockCanvasAndPost(canvas);
}
}
});
}
};
minghaiさんのブログは参考にさせていただいてますが、そこの記述では
http://goo.gl/vXLg8 通常のViewではHandlerを用いて画面更新を依頼することになるのですが、SurfaceViewでは自分で用意したThreadの中でCanvasを取得して画面領域をロックして、描画を終わったら一気に更新ということが可能です。
ということでした。
【間違い1】SurfaceViewではHandlerはいらない
【間違い訂正後】
ということで下記のようになります。
Thread th = new Thread() {
public void run() {
Canvas canvas = getHolder().lockCanvas();
if (canvas != null) {
onDraw(canvas);
getHolder().unlockCanvasAndPost(canvas);
}
}
};
Friday, November 19, 2010
golangのsliceコピー
goパッケージのアップデートがどうやら激しいようで、
hg updateかけないと仕様のページ書いてあることも実行でないようです。
今日は、goパッケージのアップデートにより使用可能となりました、
copy(dst, src []T)についてご説明。
go言語の「スライス」がもっと便利になればいいのに!
そう思っていた人も多いはず。
そこで、まずappendが使用可能になりました!
これで使用頻度は5割増しだ。
文法は
append(アペンドされるスライス, アペンドするオブジェクト)でございます。
var a []int{0,1,2}
b := append(a, 3)
// b == []int{0, 1, 2, 3}
次にcopyが可能になりました。
早速スライスをコピーして別のスライスを用意していじって見ましょう。
文法は
copy(コピー先スライス, コピー元スライス)でございます。
【まずは失敗作1】
var a []int{0,1,2}
b := a
edit(a); output(a); output(b)
ぉ、スライスはポインタであるらしいことを忘れていました!
だから、ポインタをコピーしても、元のaとbは同じものを参照しているのです。
【次に失敗作2】
var a []int{0, 1, 2}
b := a
copy(a, b)
edit(a); output(a); output(b)
もちろんこれでもだめ。
bはただのaのコピーロボット。
aの実体が編集されればbも編集されているということ。
【成功例】
var a []int{0, 1, 2}
b := make([]int(len(a))
copy(b, a)
edit(a); output(a); output(b)
これでaとbは違う実体を持つことができる。
これでこそコピー
hg updateかけないと仕様のページ書いてあることも実行でないようです。
今日は、goパッケージのアップデートにより使用可能となりました、
copy(dst, src []T)についてご説明。
go言語の「スライス」がもっと便利になればいいのに!
そう思っていた人も多いはず。
そこで、まずappendが使用可能になりました!
これで使用頻度は5割増しだ。
文法は
append(アペンドされるスライス, アペンドするオブジェクト)でございます。
var a []int{0,1,2}
b := append(a, 3)
// b == []int{0, 1, 2, 3}
次にcopyが可能になりました。
早速スライスをコピーして別のスライスを用意していじって見ましょう。
文法は
copy(コピー先スライス, コピー元スライス)でございます。
【まずは失敗作1】
var a []int{0,1,2}
b := a
edit(a); output(a); output(b)
ぉ、スライスはポインタであるらしいことを忘れていました!
だから、ポインタをコピーしても、元のaとbは同じものを参照しているのです。
【次に失敗作2】
var a []int{0, 1, 2}
b := a
copy(a, b)
edit(a); output(a); output(b)
もちろんこれでもだめ。
bはただのaのコピーロボット。
aの実体が編集されればbも編集されているということ。
【成功例】
var a []int{0, 1, 2}
b := make([]int(len(a))
copy(b, a)
edit(a); output(a); output(b)
これでaとbは違う実体を持つことができる。
これでこそコピー
Saturday, November 06, 2010
[Go]パッケージを作る
Goにおいて、「パッケージ=外部のgoソースファイルから参照できる関数や構造体などの集合」です。
関数をパッケージにする、つまり関数を外部から参照させるには、
下記の作業をします。
1.ファイル先頭に"package <パッケージ名>"を挿入。
(package mainと書いてある既存ソースなら、mainを<パッケージ名>に置換)
2.関数の名前の先頭を大文字にする。
これだけです。
既存ソースからの改変を例にすると、
既存ソースが下記であれば
パッケージ化するとこのようになります。
これを外部ファイルから参照するときは
1.import <パッケージ名>を追加
2.<パッケージ名>.<関数名>で参照
以上です。簡単です。
関数をパッケージにする、つまり関数を外部から参照させるには、
下記の作業をします。
1.ファイル先頭に"package <パッケージ名>"を挿入。
(package mainと書いてある既存ソースなら、mainを<パッケージ名>に置換)
2.関数の名前の先頭を大文字にする。
これだけです。
既存ソースからの改変を例にすると、
既存ソースが下記であれば
package main
func test() {
//これをパッケージ化
return
}
パッケージ化するとこのようになります。
package test
func Test() {
//これをパッケージ化
return
}
これを外部ファイルから参照するときは
1.import <パッケージ名>を追加
2.<パッケージ名>.<関数名>で参照
以上です。簡単です。
Sunday, February 07, 2010
goroutine強制終了
最近goにはまっています。
チャンネルという新しい同期、非同期通信の仕組みや関数の複数値返し、
待ってたものがやっときたという感じです。
ずんWiki - golang/逆引き/goroutineを終了するには
goで遊んでいてわからなくなったポイントがありました。
go func()で簡単に走らせることができるgoのスレッド、goroutine。
自分のスレッドを強制的に終わらせるために用意された、グローバルな関数がありました。
runtime.Goexit()
上記を参照しました。
下記のようなときに使えます。
例:チャンネルを使ってgoroutineが終わるのを待ちますが、
強制終了されちゃうとチャンネル受信ができないので終われません。
ひたすら待ち続けてプロセスが死んじゃいます、という例:
出力:エラー吐いてプロセス死亡・・・
出力:Stop goroutine1
チャンネルという新しい同期、非同期通信の仕組みや関数の複数値返し、
待ってたものがやっときたという感じです。
ずんWiki - golang/逆引き/goroutineを終了するには
goで遊んでいてわからなくなったポイントがありました。
go func()で簡単に走らせることができるgoのスレッド、goroutine。
自分のスレッドを強制的に終わらせるために用意された、グローバルな関数がありました。
runtime.Goexit()
上記を参照しました。
下記のようなときに使えます。
例:チャンネルを使ってgoroutineが終わるのを待ちますが、
強制終了されちゃうとチャンネル受信ができないので終われません。
ひたすら待ち続けてプロセスが死んじゃいます、という例:
package main
import (
"fmt";
"runtime"
)
var ch= make(chan int, 1);
func main() {
go func() {
func() {
fmt.Printf("Stop goroutine1\n");
runtime.Goexit();
}();
ch <- 1;
}();
<-ch;
}
出力:エラー吐いてプロセス死亡・・・
package main
import (
"fmt";
// "runtime"
)
var ch= make(chan int, 1);
func main() {
go func() {
func() {
fmt.Printf("Stop goroutine1\n");
// runtime.Goexit();
}();
ch <- 1;
}();
<-ch;
}
出力:Stop goroutine1
久しぶりのラーメン
晩御飯に、近くのラーメン屋さんに行きました。
いきなりラーメンを食べたいなどと妻が言うもので、
自分もすっかりラーメン気分になり、
開店前にお店についてしまう始末。
そこは、webでは結構評判がよかったお店。
食べた後、妻は「麺はよかったがスープは微妙」とのこと。
自分はスープが冷たかったのが微妙と思いました。
今日は、ゆったりの土曜日でした。
いきなりラーメンを食べたいなどと妻が言うもので、
自分もすっかりラーメン気分になり、
開店前にお店についてしまう始末。
そこは、webでは結構評判がよかったお店。
食べた後、妻は「麺はよかったがスープは微妙」とのこと。
自分はスープが冷たかったのが微妙と思いました。
今日は、ゆったりの土曜日でした。
Wednesday, December 30, 2009
win7に触った
電車の中でのメモ用にネットブック購入。
さっそく使い倒してます。
今回初めてのwindows7にはとまどいっぱなしです。
とくに、タスクバーの変わり方は激しい・・・
通知アイコンもすっきりしすぎて、最初は物寂しい感じに見えます。
ウィンドウ最小化表示も、これまでよりだんぜんすっきりさっぱり。
同じアプリケーションの複数ウィンドウは最初っから1個のタブにまとまっていて、
あれ?あのウィンドウどこ?
1個にまとまってるけど、わざわざ開けてまた探すの?
という感じでした。
でも、使っていたら、違和感なくなってきます。
つまりは、これまでのwindowsがいかに無駄なものを画面に出しっぱなしにしていたか、
ということだと思います。
少し非力なCPUでもaeroの動きはまったく問題ありません。
ネットブックの種類はいろいろ考えました。
最終的には、AcerのAspire one AOD250-bp18
決め手はキーボード。
108キーボードでばりばり打ち込むためには、
キーボードサイズは小さすぎてはだめ・・・
工人舎のPAやシャープのnetwalkerも機能面で
要件を満たしていたが、最後はキーボードサイズでした。
重さは、持ち運びにはぎりぎりの1.2kgです。
ちょっと試したことを列記しておきます。
・win7の提供機能はvistaとほぼ同じ。
・キーマップの変更も同じレジストリいじる感じ
・firefoxやら秀丸で動きをチェック。vistaとまったく変わらない。
・ユーザの権限管理が厳しくなった気がする
また気づいたことを報告します。
さっそく使い倒してます。
今回初めてのwindows7にはとまどいっぱなしです。
とくに、タスクバーの変わり方は激しい・・・
通知アイコンもすっきりしすぎて、最初は物寂しい感じに見えます。
ウィンドウ最小化表示も、これまでよりだんぜんすっきりさっぱり。
同じアプリケーションの複数ウィンドウは最初っから1個のタブにまとまっていて、
あれ?あのウィンドウどこ?
1個にまとまってるけど、わざわざ開けてまた探すの?
という感じでした。
でも、使っていたら、違和感なくなってきます。
つまりは、これまでのwindowsがいかに無駄なものを画面に出しっぱなしにしていたか、
ということだと思います。
少し非力なCPUでもaeroの動きはまったく問題ありません。
ネットブックの種類はいろいろ考えました。
最終的には、AcerのAspire one AOD250-bp18
決め手はキーボード。
108キーボードでばりばり打ち込むためには、
キーボードサイズは小さすぎてはだめ・・・
工人舎のPAやシャープのnetwalkerも機能面で
要件を満たしていたが、最後はキーボードサイズでした。
重さは、持ち運びにはぎりぎりの1.2kgです。
ちょっと試したことを列記しておきます。
・win7の提供機能はvistaとほぼ同じ。
・キーマップの変更も同じレジストリいじる感じ
・firefoxやら秀丸で動きをチェック。vistaとまったく変わらない。
・ユーザの権限管理が厳しくなった気がする
また気づいたことを報告します。
Monday, November 23, 2009
windowsでプログラミング(makeで・・・
java関連で、windows環境のmakeについて、些事。
makeをしたいだけなのにcygwinのmakeがうまくいかなかったです。
どうやら、cygwinはmakefileに書かれた、もしくは環境変数に設定された
ドライブの文字(C:, D:, etc)を読めないらしいです。
[GNU make w32 v3.81]
$(realpath)と言う関数を使いなさいという、リファレンスあり。
しかし、自分の技術力と理解力が足りないので、できませんでした。
裏技、っていうか、タダ強引に、MinGW+MSYS(最小パッケージを謳う
windows上のコンソール環境)をダウンロード、インストールしてmakeしました。
MinGWについてくるmakeはうまくうごかないので、
MSYSのmakeを換わりに使いました。
具体的には、環境変数を書き換えて、MSYS直下を優先的に参照するようにします。
そうしたら、やっとmakeが通りました。
・・・
cygwinとmake勉強しなおそう。
makeをしたいだけなのにcygwinのmakeがうまくいかなかったです。
どうやら、cygwinはmakefileに書かれた、もしくは環境変数に設定された
ドライブの文字(C:, D:, etc)を読めないらしいです。
[GNU make w32 v3.81]
$(realpath)と言う関数を使いなさいという、リファレンスあり。
しかし、自分の技術力と理解力が足りないので、できませんでした。
裏技、っていうか、タダ強引に、MinGW+MSYS(最小パッケージを謳う
windows上のコンソール環境)をダウンロード、インストールしてmakeしました。
MinGWについてくるmakeはうまくうごかないので、
MSYSのmakeを換わりに使いました。
具体的には、環境変数を書き換えて、MSYS直下を優先的に参照するようにします。
そうしたら、やっとmakeが通りました。
・・・
cygwinとmake勉強しなおそう。
Java備忘録 Rを使う
JavaプログラミングでR(統計ソフト)を使う
→JRIをインストールする・もしくはRserveをインストールする
(Rserveが簡単、おすすめ)
JRIでR
Java から R の機能を呼び出し (Rserve を使用)
BugTrack-R備忘録/14 - Rのお部屋::あーるのおへや
→JRIをインストールする・もしくはRserveをインストールする
(Rserveが簡単、おすすめ)
JRIでR
Java から R の機能を呼び出し (Rserve を使用)
BugTrack-R備忘録/14 - Rのお部屋::あーるのおへや
Saturday, November 21, 2009
Tuesday, September 01, 2009
閑話:javascriptは読みやすいのか
プログラムのソースコードを読む作業は、はっきり言って地引網を手繰るようなものだとおもう。
ソースコードは漁場で、読む人の能力は地引網だ。
ソースコードなんてものは、作った人が「あー、あーしてこーして」って気ままに書いたメモのようなもんだとおもう。
もちろん、書き方をちゃんと知ってる人が書けば、誰でも読めるものにはなる。
手入れをしっかりした養殖場で地引網を引けば、だれでも獲物を引っ掛けられる。
読む人によっては、網がとっても広いので、たくさんの情報を一気に得られる。
どんな漁場でも、網を操る人がすばらしければ、それなりの勘で獲物を引っ掛けちゃうもの。
でも、普通の人はねぇ。
javascriptのソースコードってのは、なんていうか、膨大な海全体なようです。
どこを狙えばいいのかわかんないよ。
ヒントがないんですよ。
ぐちってもしょうがないな。firefoxのプラグインかなんかに読みやすくしてくれるツールあったりすんのかな?
ソースコードは漁場で、読む人の能力は地引網だ。
ソースコードなんてものは、作った人が「あー、あーしてこーして」って気ままに書いたメモのようなもんだとおもう。
もちろん、書き方をちゃんと知ってる人が書けば、誰でも読めるものにはなる。
手入れをしっかりした養殖場で地引網を引けば、だれでも獲物を引っ掛けられる。
読む人によっては、網がとっても広いので、たくさんの情報を一気に得られる。
どんな漁場でも、網を操る人がすばらしければ、それなりの勘で獲物を引っ掛けちゃうもの。
でも、普通の人はねぇ。
javascriptのソースコードってのは、なんていうか、膨大な海全体なようです。
どこを狙えばいいのかわかんないよ。
ヒントがないんですよ。
ぐちってもしょうがないな。firefoxのプラグインかなんかに読みやすくしてくれるツールあったりすんのかな?
jQueryプラグイン勉強II
さらにjQueryプラグイン作成の勉強。
というよりJavaScriptの勉強。
JavaScriptは、どんな形のオブジェクトも、宣言なしで作れるようです。
オブジェクト初期化子(Object Initialiser) {} - bnote
「いきなり定義もしていないクラスのインスタンスを作るのか?」
と、C++とJavaを経験してきた私としてはかなりびっくりな初期化ですね。
多くのプラグインの中で多用されています。
なんでこんなことができるのか、はこちらを参照したほうがよさそうです。
JavaScriptは、オブジェクトというものに、とても自由度を持たせているようです。
JavaScript: オブジェクト指向の手法によって高度な Web アプリケーションを作成する
というよりJavaScriptの勉強。
JavaScriptは、どんな形のオブジェクトも、宣言なしで作れるようです。
オブジェクト初期化子(Object Initialiser) {} - bnote
JavaScriptには、少し変わった式がある。オブジェクト初期化子を使用することで 指定した名前のプロパティに初期値を持つオブジェクトを返します。
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}上記例では、{}で囲まれたCreateプロパティの部分が該当します。
「いきなり定義もしていないクラスのインスタンスを作るのか?」
と、C++とJavaを経験してきた私としてはかなりびっくりな初期化ですね。
多くのプラグインの中で多用されています。
なんでこんなことができるのか、はこちらを参照したほうがよさそうです。
JavaScriptは、オブジェクトというものに、とても自由度を持たせているようです。
JavaScript: オブジェクト指向の手法によって高度な Web アプリケーションを作成する
JavaScript オブジェクトはディクショナリであるC++ や C# では、オブジェクトというとクラスや構造体のインスタンスを意味します。オブジェクトにはプロパティやメソッドが含まれていますが、それらはオブジェクト がどのテンプレート (クラス) からインスタンス化されたかによって異なります。このようなことは JavaScript オブジェクトにはありません。JavaScript では、オブジェクトは名前と値のペアの集まりに過ぎません。
jQueryプラグイン
jQueryのプラグイン作成のため、javascriptの勉強中。
なぜプラグインのソースが
(function($){....})(jQuery)
で始まるのかがなぞだった。
下記サイトを参照して解明。
1.無名関数の仮引数に実引数を代入する方法↓
(function(str){alert(str)})("hoge")
2.これを使ってjQueryのプラグインをセキュアに作成する。
jQueryは、$という変数をjQueryのエイリアスとして用いる。
でも$はprototypeでも使用するエイリアス。
だから、混同するのを回避するため、プラグイン内だけでも
"$ = jQueryなんですよ"と明示したい。
そのとき、1.の無名関数が使える。
コードブロック内で$を規定して、混同を回避しちゃうのだ。
jQueryと他のライブラリを同時に使用する方法 [ jQuery ] - StackTrace
なぜプラグインのソースが
(function($){....})(jQuery)
で始まるのかがなぞだった。
下記サイトを参照して解明。
1.無名関数の仮引数に実引数を代入する方法↓
(function(str){alert(str)})("hoge")
2.これを使ってjQueryのプラグインをセキュアに作成する。
jQueryは、$という変数をjQueryのエイリアスとして用いる。
でも$はprototypeでも使用するエイリアス。
だから、混同するのを回避するため、プラグイン内だけでも
"$ = jQueryなんですよ"と明示したい。
そのとき、1.の無名関数が使える。
コードブロック内で$を規定して、混同を回避しちゃうのだ。
jQueryと他のライブラリを同時に使用する方法 [ jQuery ] - StackTrace
また、無名関数の引数に jQuery を渡し、仮引数に $ を使用すれば「(function($) { ... })(jQuery);」、そのコードブロック内で jQuery の $ 関数を使用することが可能です。(そのコードブロック内では、他のライブラリの $ 関数は使用できなくなります。)
Sunday, August 30, 2009
windows vistaのファイルパーミション変更(CLI)
icaclsコマンドを使うらしい。
参考:http://pasofaq.jp/windows/command/other.htm#nameicacls
参考:http://pasofaq.jp/windows/command/other.htm#nameicacls
Wednesday, August 19, 2009
mebius has good touch pad
im looking forward to Mebius's next version.
Lighter, please. (1.47kg seems heavier than other netbooks)
And Windows 7 compatibility.
from twitter
Lighter, please. (1.47kg seems heavier than other netbooks)
And Windows 7 compatibility.
from twitter
Subscribe to:
Posts (Atom)