$(window).width() と $(document).width() や
$(window).height() と $(document).height() がどういう時に違う値を返すかわからなかったので検索したら Stack Overflow に簡潔でわかりやすい説明がされてたので紹介します。
When you have a scrollbar on the webpage.
(スクロールバーが表示されてる時)
わかりやすいですね。一応念のために書いておくと window が「ブラウザの表示領域」で、document が「ページ全体」です。
参考 jquery – When can $(document).width() and $(window).width() show different values? – Stack Overflow
http://stackoverflow.com/questions/8134741/when-can-document-width-and-window-width-show-different-values
lispでmapに初めて触れた時は「何、このめんどくさい関数?」と感じ、正直な話あまり触れたくもなかったのですが慣れてくるとこいつはとても便利な賢いやつです。
さてjavascriptでもmapが使えるか調べてみたらjQueryで提供されてました。
mapを使えば配列全部に関数を適用させて、返り値を配列で受け取れます。for文なんて使わなくてもええんやっ!!
使い方の例 定番の累乗を求めるサンプル。
arr = [1,2,3]; arr = $.map(arr, function(n,i){return n*n;}); for(i=0;i<arr.length;i++){ alert(arr[i]); } サンプルには良く使われるけど、実際にプログラミングしてて累乗が必要になったことがないですね。まあサンプルなんで実用性よりも分かりやすさが重要だから当然といえば当然の話しですね。
とりあえずこんな感じの動作がmapはできます。
要素をまとめて取得 たとえばこんなhtmlがあって
<div>1</div> <div>2</div> <div>3</div> 配列で[1,2,3]が欲しいとする。
そんな時もこの map を使えば一発解決さ!(深夜の外人がやってる通販のノリで)
arr = $("div").map(function(){ return $(this).text(); }).get(); これでとれる。注意点は最後の get()。これがなくても配列っぽいのが返ってくるんだけども、これはjQuery-wrapped arrayというものらしく別物とのこと。
for文で実行したり arr[0] で要素のアクセスしたりはできるけどもjoinすると上手く行かない。このjoinがうまくできないのにはまってだいぶ時間を食われました。
arr.constructor でクラスを調べたら
function Array() { [native code] } となるべき所が
function (a, b) { return new e.fn.init(a, b, h); } になってました。この「get() すればよい」という情報を得るためにどれだけ遠回りしたことか…。
とはいえこれで安心してmapをjavascriptでも使えるようになったのでガシガシ使っていこうと思います。
参考 http://api.jquery.com/map/
こんな感じでHTMLを書いたらFirefoxで背景がうまく表示されなかったので調べてみた。ほげ ほげほげ
何でそうなるかは下の「参考」のリンク先でわかったのだけれども対策がめんどくさい。なのでこうする事にしました。ほげ ほげほげ
マナーはあんまりよくないですね。書きやすさ優先です。
参考 CSSでfloatを指定したボックスを含むボックスの背景が出なくなる件
http://www.fsiki.com/archive/css-doc/float.html
機能 xyzzyで”wŏ shì rìbĕn rén” などが、そこそこ簡単に打てるようになります。
インストール方法 NetInstallerで以下のパッケージを追加して、”ton input”をインストールして下さい。
http://ironsand.net/xyzzy/packages.l
再起動すると有効になってます。
再起動せずに有効にできそうですが、よくわかりませんでした。
NetInstallerが何かわからない人はこちらを読んでください。
http://xyzzy.s53.xrea.com/wiki/index.php?QuickTour%2Fext%2FNetInstaller
使い方 C-F9 (Controlキーを押しながらF9キーを押す)で Ton Input モードに入ります。
“wo” を打った時点で数字の”3″を押すと “wŏ” になります。
1,2,3,4 でそれぞれの声調に、”0″で声調無しに変化します。
“xian” の最後でキーを押せば一番最後に入力された母音の “a” に声調がつきます。
Ton Input モードを終了させるには、もう一度 C-F9 を入力します。
注意点 Ton Input モード中は数字(0~4)を入力しようとしても入りません。
謝辞 ありがとうございます。 ありがとうございます。
マイナーモードの作り方 [silog]
http://white.s151.xrea.com/wiki/index.php?memo%2Fxyzzy%2Fminor-mode
netinstaller 対応メモ
http://d.hatena.ne.jp/bowbow99/20090710/1247182818
そして、lispでわからないことを教えてくれた2chのxyzzyの名無しさん達がいなければ途中で作るのを諦めてたと思います。 みなさんに感謝を。
xyzzy の lisp の関数 backward-word, previous-word, forward-word, next-word の動作の違いがよくわからなかったので、試してみた。
黒背景白文字が移動前のカーソルの位置で、灰色背景太字が移動後の場所。
backward-word
123 456 789
123456 789
123 456 789
previous-word
123 456 789
123456 789
123 456 789
forward-word
123456 789
123456789
123 456789
next-word
123 456 789
123456 789
123 456 789
backward-word と previous-word は同じ動作で forward-word と next-word は動作が異なるらしい。 あってんのかな、これ。
PythonかRubyのスクリプトを常駐させたかったので調べてみたらRubyの方が簡単そうだったので試してみた。
環境 OS:Windows 7
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
gem 1.3.4
Portableバージョンを使ってます。
Win32-ServiceのインストールC:>gem install win32-service するだけです。
ただうちの環境ではこんなエラーが出てしまいました。P:/Dropbox/bin/RailsPortable/App/Rails/bin/ruby.exe extconf.rb checking for strncpy_s()… yes creating Makefile nmake Microsoft(R) Program Maintenance Utility Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. P:\Dropbox\bin\RailsPortable\App\Rails\bin\ruby -e “puts ‘EXPORTS’, ‘Init_api’” > api-i386-mswin32.def cl -nologo -I. -I. -IP:/Dropbox/bin/RailsPortable/App/Rails/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -O2b2xg- -G6 -DHAVE_STRNCPY_S -c -Tcwin32/api.c cl : コマンド ライン warning D9035 : オプション ‘Og-’ の使用は現在推奨されていません。今後のバージョンからは削除されます。 cl : コマンド ライン warning D9002 : 不明なオプション ‘-G6’ を無視します api.
Xyzzy Wiki の [ソースからビルドしてみる3][1] を参考に xyzzy をソースからビルドしてみました。 ファイルを取ってきたり、めんどくさいことが多かったので以下のステップでできるように簡略化。
[xyzzysrc-0.2.2.235-pack][2]
これをダウンロードしてあとは01README.txtを見てください。
1 Microsoft Visual C++ 2008 Express Edition インストール
2 env.vbs を叩く (環境変数のセットとafxres.hのコピー)
3 cd xyzzy/src
4 nmake (デバッグ版は nmake CFG=d)
5 ぽけーと待つ
6 できあがり
以上です。 何かおかしいところあったら連絡ださい。 俺は何もわかっていませんので。
Unicode Consortium のファイルも同封してますが、ライセンスの確認はとってます。
2011/05/28追記
2chで指摘されて気づいたのですが、env.vbs で c:\Program Files\ 配下にファイルの移動を行ってるので UAC が入っているとエラーになります。 UACを一時的に切ってenv.vbs を実行してください。
一度実行してしまえば次回以降ビルドするときにはUAC がオンでも問題ありません。
Xyzzy上で新規作成した javascript とか ruby のバッファに毎回モード設定をするのがめんどくさかったので書いた。 siteinit.l か ~/.xyzzy のどこかに貼りつけて使ってください。
※同じ拡張子に複数のモードが紐付けられていると、古い方に設定されるようになっていたので修正;ファイル保存時に拡張子をチェックして適切なモードに変更する。 ;リネーム時にしたかったけど、hookが用意されてないので断念。 (defun set-buffer-mode () (block sbm (mapcar (lambda (l) (when (string-matchp (car l) (get-buffer-file-name)) (funcall (cdr l)) (return-from sbm)) ) *auto-mode-alist*))) (add-hook ‘*after-save-buffer-hook* ‘set-buffer-mode)
PythonのGUI,Tkinterを使おうとこのページの一番上のサンプルを動かそうとすると動かず第一歩をくじかれる。
http://www.pythonware.com/library/tkinter/introduction/hello-tkinter.htm
エラーメッセージはこんなの。
ImportError: No module named Tkinter
環境はWindows7でPython3.0.1 Portable。
エラーメッセージで検索しても「yumを使ってモジュールインストールしろ。」とかLinux向けの情報しか出てこない。 適当にあさってやっと見つけた解決策はこれ。
from Tkinter import *
を
from tkinter import *
に変える。 どうも Python3からmodule名の大文字小文字が変更されたのが原因だったようだ。
MSのブラウザ選択のバグに関する説明が、全くわかってない人が書いてるとしか思えない内容だったので javascript の sort について少し解説をしようと思う。
MS、Webブラウザ選択画面にアルゴリズム上のバグか - @IT JavaScriptの配列の並べ替え(sort)は比較関数を渡すことで柔軟な並べ替えが行える。ここではMath.rand()で半々の確率で正負の値を返しているので、隣り合う要素の並べ替えはランダムに起こる。これで結果もランダムになるように思えるが、実際に意味のある並べ替えを行うためには、並べ替えた後の配列が一定の基準に従っている並べられていることが不可欠で、例えば「a>b」であれば「b<a」、「a<bかつb<c」であれば「a<c」でなければならない。これは、隣り合う要素同士をただランダムに入れ替えるだけでは達成できないのだという。 この「並べ替えた後の配列が一定の基準に従っている並べられていることが不可欠」という意味の分からない部分はおそらく下記を訳した物と思われる。
Doing the Microsoft Shuffle: Algorithm Fail in Browser Ballot Sorting requires a self-consistent definition of ordering. The following assertions must be true if sorting is to make any sense at all: だから正しい訳は「並べかえには首尾一貫した”大小の定義”が必要である。」になる。
実際にどのようなバグがあったかを説明するにはコードで示すのが一番わかりやすいので直接書いていこう。 問題の、 javascript の sort関数では引数に比較関数を取れる。例えばfunction comp(a, b){ return a < b; //降順で並べる } function sortnum(){ return [0,3,5,6,-6].sort(comp); } //=>6,5,3,0,-6 function comp(a, b){ return a < b; //昇順で並べる } function sortnum(){ return [0,3,5,6,-6].