はてなキーワード: インターフェイスとは
http://d.hatena.ne.jp/kyoumoe/20070712#1184206015
こういうアンバランスな評価はどう解釈していいのか。
kyoumoeの曰く
まず、褒めることしかできないということ自体意見の偏重だよなぁ。
別に褒めること自体はいいと思うが、それを強制させてどうするんだよ。
強制されてない。
そういう人は☆を消したいと思うんじゃないの?
何で意地になって表示させてるのか理解できない。
あと、インターフェイスとしても未熟。
とりあえず7割くらいでサービスインしてそのかわりに意見を素早く反映するのがはてな(というかウェブサービス一般)のやりかた。
褒めるのが☆って何だよ。
すてきじゃないか。☆。
javascriptで存在するほとんどのオブジェクトの実体はハッシュだよ。
var arr = [0,1,2,3];
とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。
これは
var has = {0:0,1:1,2:2,3:3};
と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。
ためしに
arr[4] = 4; arr['x'] = 'string'; arr[-1] = -1;
としてみよう。
Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。
でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。
それどころかarr.xで'string'がかえってくるんだ。
別の例を見てみよう。
var fx = function(){}; fx[0] = 'somestring';
こうするとfx[0]に'somestring'が束縛される。
つまりfunctionも一つのハッシュだったんだ。
これでほとんどのものがハッシュだということが解ってくれたかな?
ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。
ハッシュへはhash[name]でアクセスすることが出来る。
それ以外にもnameが演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。
これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。
関数には名前を付けなくても使用可能だよ。
function(x){return x+x}(2); -> 4
関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?
function funcname(args){ do something};
でもこれはsystax sugerだってことを知ってほしい。
上でも使ってるんだけど。
var funcname = function(args){ do something};
と等価になる。もちろんどちらの書き方でもかまわないよ。
ただ、(無名)関数を宣言してそれをfuncnameに束縛しているっていうことを理解しておくと便利だよ。
javascriptはレキシカルスコープを採用してるんだ。
レキシカルスコープなんていうと難しく感じるかもしれないけど、結構単純なんだ。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){var x = 'local';return x}
これの実行結果は以下になるよ。
fx1() -> 'global' fx2() -> 'local' fx1() -> 'global'
fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。
でも以下のような場合に注意してほしいな。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){x = 'local';return x}
fx1() -> 'global' fx2() -> 'local' fx1() -> 'local'
fx2は自分のスコープに変数xがないからその外側スコープに探しに出かけたんだ。
つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。
別の場合を見てみようね。
var x = 'global'; var fx1 = function(){ var x = 'local'; return function(){return x} }; var fx2 = fx1();
x -> 'global' fx2() -> 'local'
この例だとfx2()の値がlocalになってるね。
なぜなら外側スコープっていうのは関数を評価した場所じゃなくて、関数を定義した場所の外側なんだ。
一つ上の例では実際に関数を返り値にしているね。
var fx1 = function(){ var x = 0; return function(){ x = x+1; return x; } }; var fx2 = fx1(); var fx3 = fx1();
fx2() -> 1 fx2() -> 2 fx2() -> 3 fx3() -> 1 fx3() -> 2
fx2とfx3の値が違うのはそれぞれ別の関数が作られるからだよ。
こんな風に関数が状態を持つことも出来るんだ。クロージャーとよんだりするよ。
関数がハッシュを使って複数の関数を返すとこんなことも出来るよ。
var fx = function(){ var x = 0; return { 'up':function(){ x = x+1; return x; }, 'down':function(){ x = x-1; return x; } } }; var obj = fx();
obj.up(); -> 1 obj.up(); -> 2 obj.down(); -> 1 obj.down(); -> 0
thisという機能があるよう。ちょっとだけつかってみるね。
var x = 0; var add = function(n){this.x = this.x + n; return this.x}; var mul = function(n){this.x = this.x * n; return this.x}; var obj = {'x':0,'do':add};
add(1); -> 1 add(1); -> 2 mul(2); -> 4 obj.do(); -> 1 obj.do(); -> 2 obj.do = mul; obj.do(); -> 4
thisは評価された場所によって値がかわるよ。
objの中にいるときはobj.xを扱うし、グローバルにいるときはグローバルのxを扱うんだ。
http://anond.hatelabo.jp/20070620200618を改訂してみたよ。
このぶんしょうがjavascriptを覚える上の一助になるとうれしいんだ。
あとここでつかってるハッシュは伝統的な意味。連想配列のことね。
突っ込みも大歓迎だよ。
javascriptで存在するほとんどのオブジェクトの実体はハッシュだよ。
var arr = [0,1,2,3];
とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。
これは
var has = {0:0,1:1,2:2,3:3};
と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。
ためしに
arr[4] = 4; arr['x'] = 'string'; arr[-1] = -1;
としてみよう。
Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。
でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。
それどころかarr.xで'string'がかえってくるんだ。
別の例を見てみよう。
var fx = function(){}; fx[0] = 'somestring';
こうするとfx[0]に'somestring'が束縛される。
つまりfunctionも一つのハッシュだったんだ。
これでほとんどのものがハッシュだということが解ってくれたかな?
ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。
ハッシュへはhash[name]でアクセスすることが出来る。
それ以外にもnameが演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。
これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。
javascriptはレキシカルスコープを採用してるんだ。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){var x = 'local';return x}
これの実行結果は以下になるよ。
fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'global'
fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。
でも以下のような場合に注意してほしい。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){x = 'local';return x}
fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'local'
fx2は自分のスコープに変数xがないからその外側スコープに探しに出かけたんだ。結果fx
つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。
関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?
function funcname(args){ do something};
でもこれはsystax sugerだってことを知ってほしい。
上でも使ってるんだけど。
var funcname = function(args){ do something};
と等価になる。もちろんどちらの書き方でもかまわないよ。
関数は返り値として関数はハッシュを指定できるよ。次のハッシュを返す関数を見てみよう。
var fx = function(){ var x = 0; return { 'x':x, 'add1':function(y){this.x = this.x+y;return this.x}, 'add2':function(y){x = x+y;return x} } } var obj = fx();
実行結果を見てみよう
obj.x -> 0 obj.add1(0) -> 0 obj.add1(0) -> 0 obj.x -> 0 obj.add1(1) -> 1 obj.add1(0) -> 0 obj.x -> 1 obj.x -> 1 obj.add1(0) -> 1 obj.add1(2) -> 2 obj.x -> 1
となる。
add1はthis.xにたいして演算をしている。つまり返された値が変化しているんだ。
add2は関数fxに閉じ込められた値に対して演算している。つまりこれらは別の値なんだ。
とここまでかいたら疲れた。
読んでくれた人ありがとう
ちゃんとまとめてなかったし、自分のブログに描いても見てくれる人はいないから増田に書いてみたよ。
ほかの言語や技術についても同じような解説が欲しかったら何らかの方法で言及してくれるとうれしいな。
ここまではてブが300突破してるみたいだけどいま、自分のブログへリンクを張ったら増田に書く意味がなくなるんじゃないかと思うんだ。
やらないけど。
こんなのもかいてみたよ、増田で。 http://anond.hatelabo.jp/20070621153600
同意。Firefox の ruby 非対応も死ね。拡張機能で回避してるけど。
同意。ウェブの黎明期に HTML と CSS が分離してて、CSS を自由に変更できるわかりやすい UI がブラウザに搭載されてたら、今の状況はもっと違うものになってただろうね。自分の好きな CSS を持ち込んでサイトを見れるというような。
あと、よく CSS を JavaScript で変更できるようにしてるサイトあるけどさ、あれをもう W3C が仕様として定義しちゃうってのはどうかな。サーバーに複数の CSS 置いといて、ブラウザから好きなものを選ぶだけ、みたいな。
同意。まあでもそれはブラウザーの不備というより、OS 側のフォーム実装に拠るところが大きいけどね。ただでさえ機能の複雑化したブラウザに加えてただの入力欄を再開発しろとは言いづらい。少なくとも一番後でやることだ。
Firefox の拡張機能でよければ bbs2chreader ってのはあるけど YouTube のブラウザはないなあ。動画をダウンロードするのならあるけど。まあ YouTube ブラウザが何するのかがそもそもわからない。2ch ブラウザだったら Firefox 以外も壷を使えばいける。
あー、まあ、わからんでもない。再生、一時停止、シークなんかをブラウザー側で標準的に持っておいて、仮に新しいコンテナや圧縮形式が出ても裏のプラグインだけを更新したり追加したりすればいいってことね。現状は各プラグインが自前でインターフェイス作ってるからなあ、あれは確かに嫌だ。
ただ、YouTube は話がちょっと違う。プラグインのインストール状況を考えてみた時に Flash Player だけが圧倒的に普及してたから Flash で再生できるようにしたってだけだ。おそらく全ブラウザが動画再生用の UI を自前提供してても、結局何らかの動画形式に対するプラグインが普及してなかったのなら YouTube は Flash でのインターフェイスを実装してたはずだ。
こりゃ無理だなあ。というか意味がない。多分今やってもみんな不幸になる。
たとえば現在動画形式が乱立してるのにも理由があって、新しいコンテナ、新しい圧縮形式に対応できるようになってるんだよ。たとえば AVI と QuickTime ぐらいしかない頃にその頃の考え方を盛り込んでウェブ用に機能拡張した動画形式を W3C が提唱したとする。そのあと Matroska が出てきても、そこにある複数音声、字幕、頭出しはウェブ用動画形式のバージョンが上がるまでウェブでは使えないということになる。これじゃあ話にならない。
じゃあどうすればいいかというと、動画・音声・画像のコンテナ・圧縮・再生のためのプラグインは各種サードパーティーに勝手に作らせといて、ウェブではそれをラップするしかない。じゃあラップするためのファイル形式を W3C が提唱すればいいかというとそうでもない。
まず、機能的な動画・音声・画像形式っつったって結局は他の動画・音声・画像やウェブページへ機能的に飛べなければ意味は無い。あくまでもウェブサイトのコンテンツの一部だから単純なリンクではだめだ。複雑な情報を、視覚的に優れた形で提供できなければならない。
次に、動画・音声・画像をアップロードするためにわざわざラップ用のファイル形式をエンドユーザーが覚えなければならず、またただでさえ複雑化した HTML、CSS、JavaScript などのパース・レンダリングに手一杯のブラウザ開発側が機能的な動画・音声・画像形式に対応しなければならない、世界全体を巻き込んだ莫大な負担増を許容させなければならない。しかもその内容は HTML で充分に代用が効く。
流石にこれを肯定できるだけの主張を僕は思いつかないよ。機能的な動画・音声・画像形式の標準化は無理だ。Opera だけが使える形式があっても意味ないし、結局は HTML への埋め込みにしかならないと思うよ。
http://anond.hatelabo.jp/20070429155517
えー、IME 任せは微妙だなあ。めんどくさくてもオンオフぐらいしようよ。状況に応じた大文字小文字の選択もしづらい(できない?)し微妙だよ。少なくともそういう入力方法を叩くプログラマーは少なくないと思う。
19世紀はgoto文の時代だと思ってましたよ。
goto文不要論なんてもう何十年も議論され続けてるよ。大体 90年代終盤にはそこそこ普及してた Java は既に goto が実装されてなかったでしょ。今でも実装されないままだし。
それから Amazon.co.jp で「オブジェクト指向」を検索して「出版年月日が新しい順番」にソートして一番ケツに飛ぶと 80年代のオブジェクト指向本なんて山程出てくる。
というかあまりオブジェクト指向のプログラムってみたことないかも。
なんかこのご時世におすすめないかな?
学生さんかなんかかな。もしオブジェクト指向の利点がまだ理解できてないなら、この話の増田ツリーのどっかにあったと思うけど、
ぐらいの経緯を辿ればまあオブジェクト指向の基本は掴めると思う。当然ある程度の大きさのプログラム(あんまり行数で言いたくないけど、せめて 1000行以上)を書かないと、各プロセスの絶望を知ることはできないと思うけど。必要は発明の母。あとは平行して適当に Amazon.co.jp で評価のいい本を読めばいい。
インターフェイスの概念については、一般に知られているものだと C のストリームで理解できると思う。
FILE *fp; fp = fopen("log.txt", "w"); fprintf(fp, "Starting log...\n"); fclose(fp);
これは log.txt ってファイルにログを吐いてるのね。でも fprintf() ってのは次のような使い方もできる。
fprintf(stdout, "Starting log...\n");
stdout ってのは標準出力で、そこに fprintf でデータを渡すと(Windows の場合)コマンドプロンプトに文字列を表示する。ファイルと標準出力は全く違うものだけど、インターフェイスが同じだから全く同じように出力処理を書けてるでしょ。これを発展させれば、
FILE *stream; if (log_kind == LOG_FILE) { stream == fopen("log.txt", "w"); } else if (log_kind == LOG_STDOUT) { stream == stdout; } fprintf(stream, "Starting log...\n"); /* この時点で stream の種類を知る必要が無い! */ if (log_kind == LOG_FILE) { fclose(stream); }
と書くことができる。年賀状と大学受験合格通知は違うものだけど、初期化(書き方)が違うだけでインターフェイス(ポストに投函)は同じ、みたいな。それよりよく考えたら C を知ってるとは限らんよな。めんどくさくなってきた。あとはしりません。
大元のエントリでは、
ことが「ゾクゾクするほど素晴らしい」と書かれている。
私はそれに対して「それほど素晴らしくはない、良いことだとは思えない」と言っているに過ぎない。
なんでそんなキレてるんだろう。
別にRSSを廃止しろと主張しているわけではないよ。
これは間違いなくweb2.0の原則のひとつ。
多くの人々に使いやすいインターフェイス
レッシグのこのエントリでは動画やイメージについて語ってるんだと思うけど
WIKIにも同じことが言えるわけで、ここまではサイトとかアプリとかスクリプトっていう人間外の、モノ側、機械側の話。
上記のようなコンテンツの構築の方法に特化した
素早く効率的にハックとリミックスが可能な、人間の脳というか思考というか意識、精神のあり方。
それは本読んだり喋ったりっていう従来の情報の出し入れの方法に特化した現代人のそれとは違うのでは。
新しいコミュニケーション方法、新たな環境に特化した知性の集約方法、
集団((かつては地理的地域が主だった))の知恵の構築と保護の方法を
研究し獲得する
新しい道具、メディアに合った、知性、知的情報のインプット、アウトプットの回路、それを具現化する言語体系とそれを扱う能力ってのが
必要になってくると思ってるのって俺だけ?
まだ地下2階をうろうろしているところだけど、予想以上によくできてる。おもしろいおもしろい。DSというマシンの制約上、演出面などはチープな部分もあるけれども、初代 Wiz を遊びまくった人間にとっては全然オッケー。あと、絵は慣れます。
仕事場にノートパソコン(VersaPro.VY22X/RX-L)が持ち込まれる。使用OSはWindows XP Pro.
起動するとWindows XPのロゴ表示の後「SHELL32が見つかりません。」と表示され、次に「ライブラリ SHLWAPI.DLL から見つかりませんでした。」と出て、最後にはメッセージ「ログオンユーザーインターフェイスDLL MSGINA.DLLを読み込めませんでした。システム管理者に問い合わせてDLLを置き換えるかまたは元のDLLを復元してください。」となる。[再起動]ボタン表示で唯一の選択肢が示される状況。リブートしてセーフモード起動を試すもログオン画面の手前で上記メッセージが表示され同じ状況に。
毎度の事ながら今回も「Windows回復コンソール」のお世話になって復旧を試みる。とりあえずWindowsXPのCD-ROMからブートし、R[復旧]を選んで回復コンソール起動、C:\WINDOWS\SYSTEM32に入ってみると「dir shell32.dll」を実行しても「ファイルが見つかりません」という表示。そこで健康な別PCからのSHELL32.DLLの移植を試みる。ついでにSHLWAPI.DLLとMSGINA.DLLも壊れている可能性が高いので一緒にコピーする事に決定。
方法としてはKNOPPIX5.0.1-CDから起動、/dev/hda1 が /media/hda1にオートマウントされているので、右クリック-プロパティのメニュー内で「Read Only」にチェックが入っているのを外し、別WindowsマシンでFATフォーマットして上記3つのDLLを放り込んでおいた手持ちのUSBメモリ(128M)を差し込んで、/dev/sda1から/media/hda1にコピー(作業を簡便にしたいのと面倒くさいのでルートフォルダに)
KNOPPIXはログオフ-シャットダウンし、Windows XP CD-ROMに入れ替えて再び「Windows回復コンソール」にて以下を実行。
cd \windows\system32 ren msgina.dll msgina.bak ren shlwapi.dll shlwapi.bak cd \ copy SHELL32.DLL c:\windows\system32 copy MSGINA.DLL c:\windows\system32 copy SHLWAPI.DLL c:\windows\system32 EXIT
これで無事起動できれば御の字だったのだが。改善されたのは「SHELL32.DLL…」のエラーメッセージのみで後2つは相変わらず。ログオン画面へ移行せず再起動の選択肢しか無い状態は変化なし。
いろいろ考えあぐねた末、「元々の正常起動時のバージョンと同一のDLLをコピー」してやる事で解決した。具体的には、起動しなくなったPCは「Windows XP Pro. Service Pack 1」だった(!)ので、移植するDLLは最新の「SP2」でもWindows XP CD-ROMの中の「無印」でも駄目だという事だったようだ(無事にログオン画面が表示されてもその後フリーズ)。たまたま過去に作成していたWindowsXP-SP1統合インストールCD-Rを発掘し、そこからSHELL32.DLL、MSGINA.DLL、SHLWAPI.DLLを抽出、移植作業をやり直し再起動すると「何事も無かったかのように」ようこそ画面が表示されて元通りのデスクトップ画面を復活させる事ができた。
※追記:公式情報で既出だったようだ。無駄に 時間を 浪費していた かもしれない。
Windows Update Web サイトから Windows XP の更新をインストールすると、エラー メッセージが表示される