サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
liosk.blog103.fc2.com
2008-01-25 カテゴリ: Client Side タグ: Tips JavaScript RFC CSV パーサ 正規表現 ちょっとした理由から、CSVファイルをJavaScriptで読み込むためのパーサを書きたいと思って、先ほどからがんばってみた。 CSVはいろいろな実装があって正式な仕様がなかなかないらしいけど、考えるのが面倒なのと、Excelが吐くCSVを一応処理できるという理由から、Wikipediaで紹介されていたRFC 4180の形式を採用することに決定。 パーサとかレキサみたいなのは書いたことがないからいびつな仕上がりかも。 仕様 RFC 4180の仕様はだいたい↓のような感じ。 fileは改行(CRLF)で区切られた一つ以上のrecordで構成される recordはコンマ(,)で区切られた一つ以上のfieldで構成される fieldにはescaped、または、non
2007-06-29 カテゴリ: Client Side タグ: JavaScript トラックバック Tips ロールオーバー|CSS HappyLife ↑のサイトのコメント欄では少々舌足らずになってしまったので若干の補足を。 JavaScriptはCやJavaに文法が似ているように見えて、実は特有のリテラルが多いから、JavaScriptに不慣れな人にとってはわけがわからないコードになったりする。このエントリーでは、コード読む上で必要になりそうなリテラルを少し解説。 正規表現リテラル 一つ目が正規表現リテラル。JavaScriptには正規表現型(厳密には正規表現オブジェクト)が存在する。 var re = /abcde/i; ↑の記法は↓に等しい。 var re = new RegExp('abcde', 'i'); このオブジェクトは、match()やreplace()の引数として
2008-10-20 カテゴリ: 雑記 タグ: 安易な発想 mixi Vim mixi で見つけた Find Job の広告。 ↑これって Vim の検索コマンド?まさか mixi 上で見るとは思わなかった。
Google Gears を「滑らかに」使うためのライブラリ、Grease for Gears を公開しました 2008-10-11 カテゴリ: Client Side タグ: JavaScript Gears ライブラリ 表題の通り、Google Gears を「滑らかに」使うためのライブラリ、Grease for Gears を公開しました! 最近、Gears を使っていろいろといじっていたんだけど、Gears の API がどうにも使いづらい><JavaScript に慣れた身にはやたらと冗長に感じたり、フレームワークに慣れた身にはやたらと低機能に感じたり>< ということで、LL 脳でフレームワーク脳の僕でも、Gears を滑らかに使えるようになるためのライブラリを書いてみました!ソースは CodeRepos に置いてあります。 root/lang/javascript/Grease
2008-10-04 カテゴリ: Client Side タグ: JavaScript UUID アルゴリズム [追記] UUID.jsの最新版はGitHubで公開されています! (解説記事) UUID (Universally Unique Identifier) を生成する JavaScript ライブラリを作ってみたので公開します。 UUID.js UUID は、128 ビットの長さを持つ識別子です。普段使うときは↓のように 16 進法で表現されて、ところどころにハイフンが入ります。 e8783d5e-90dd-4af9-8aa6-371d43fcbcb4 UUIDは 128 ビットで 2128 = 3.4e+38 通りもあるので、偶然同じ ID が生成されることが (ほぼ) ないんです。だから、ID の一意性を維持するためにわざわざ統制する必要がなくて、面倒くさがりな人間にとっては
2008-09-10 カテゴリ: その他のプログラミング タグ: Haskell アルゴリズム 最近すっかりブログから離れていたので、リハビリがてらにメモ代わりのエントリー。 Haskellで素数の無限リストを生成する関数を3つほど作ったのでメモ。 primes1 = 2:f [3,5..] where f (x:xs) = x:f [y | y <- xs, mod y x /= 0] primes2 = 2:filter f [3,5..] where f n = all ((/= 0) . (mod n)) (takeWhile ((<= n) . (^ 2)) primes) primes3 = 2:f [3] [3,5..] where f (x:xs) ys = let (ps, qs) = span (< x^2) ys in ps ++ f (xs ++ ps) [z |
2008-09-24 カテゴリ: Client Side タグ: Tips JavaScript 以前にも JavaScript の null と undefined に関する記事を書いたことがあったが、またしても性懲りもなく null と undefined の挙動につまずいて、 ECMAScript 3 の仕様書まで調べ直したので、メモ代わりにエントリー化。 Abstract このエントリーの内容をざっくりとまとめると、 something == null がどういう値を返すのかが気になって、ECMAScript 3 の仕様書までさかのぼって調べてみると、 null == null undefined == undefined null == undefined undefined == null のパターンでのみ true を返すということがわかった、という話。細かい経緯は続きで。
2008-09-19 カテゴリ: 雑記 タグ: Vim Tips 特に深い意味はなく、なんとなく憧れたので、gVimを半透明にしてみた。 やり方 香り屋版のVimを使っている場合は簡単で、↓のコマンドを打つだけ。 :set transparency=221 僕は香り屋版を使っていないので、VimTweakというdllを使いました。だいぶ長いこと更新されていないようなので若干不安ですが、vimtweak.dllをgvim.exeと同じディレクトリにコピーした後で、↓のようなコマンドを叩けば無事半透明になります。 :call libcallnr("vimtweak","SetAlpha",221) GUIのウィンドウが初期化されてからこのコマンドを叩いてやらないといけないらしくて、.gvimrcに書き込む場合は、autocmdを使って↓のように書かなければいけないようです (香り屋版の:set
2008-09-18 カテゴリ: Server Side タグ: PHP Tips PHPでは、二重引用符 (") で括った文字列の中で、波括弧 ({}) を使って変数を展開できたりするわけだが、この波括弧記法があまりにも強力すぎて気持ち悪かったので書いてみる。 ↓まずは普通の使い方。これは普通に便利。 echo "{$var} {$arr[0]} {$arr['key']} {$obj->name}"; ↓メソッドを呼び出したパターン。ちょっと気持ち悪いけど便利。 echo "{$obj->getName()} {$obj->getCategory('all')}"; ↓普通に式を埋め込めるのをいいことに、代入したり、グローバル関数を呼んでみたりした例。期待通りに動くが、だいぶ気持ち悪くなってきた。 echo "{$arr[$i = 1]} {$obj->{fn()}} {$obj->m
2007-12-13 カテゴリ: Client Side タグ: Tips JavaScript 安易な発想 関数型 あらかじめ定義しておくと少し便利かもしれない。 function $FN(fn) { return (typeof fn == 'function') ? fn : Function('x', 'return ' + fn); } 引数が関数であればそのまま返し、文字列であれば、function anonymous(x) { return 引数 }という無名関数に変換して返す関数。 簡単な使い方は↓のとおり。 var fn = $FN('x + 1'); window.alert(fn(1)); //2 この例では、function(x) { return x + 1; }が$FN('x + 1')に短縮されたというメリットしか感じ取れないかもしれない。 しかし、単純なコー
2008-08-02 カテゴリ: Client Side タグ: JavaScript Tips Activationオブジェクト周りでちょっと気になって、いろいろとコード書いてみて、ECMAScript 3の仕様書まで読み漁ったので、忘れないうちにメモ。 Activation Object JavaScript使いを魅了してやまないActivationオブジェクト。ActivationオブジェクトはJavaScriptの関数が実行されるときに生成されるオブジェクトで、その関数内で使われている変数・関数や引数についての情報が含まれています。例えば、↓のような関数が定義されていたとして、 function fn(x, y) { var localVar = 'I am a local variable.'; return localVar + ' ' + localFn(); functio
2007-08-29 カテゴリ: Client Side タグ: JavaScript Tips コンテキストが違うのか。 まずは↓のコードを参照。 function func() { window.alert(this == window); } func(); /* true */ new func(); /* false */ newをつけずに普通に関数呼び出しをした場合は、thisはその関数が属しているオブジェクトを参照する。newをつけてコンストラクタとして呼び出すと、thisは新たに生成されたオブジェクトを参照する。 普通に関数宣言した場合は、windowオブジェクトのプロパティとして宣言されるから、newをつけずに呼び出すとthisはwindowオブジェクトを指すようになるようだ。 無名 したがって、 (function() { window.alert(this == wi
2008-07-17 カテゴリ: 雑記 タグ: トラックバック 安易な発想 脊髄反射 泥カン周りで↓のような記事が出ていたので、脊髄反射的にポスト。 「日本IT業界」は比較的泥ではない事を統計的に検証 (西岡Blog) で、このエントリの命綱である「日本IT業界は日本の他の他業種に比べ、賃金など労働条件面では恵まれている」について説明します。そのために3つの統計記事を紹介します。 データを出して検証しているように見えるが、そのソースはひどいだろう。↑のエントリーで提示されているデータのソースは↓の3つ。 IT系は本当に給料が安い? 2万人の年収比較! - @IT自分戦略研究所 "時給・年収・ 満足度ランキング2007:職種別/リクナビNEXT[転職サイト]" IT技術者の4割は月200時間以上労働――IPAが調査 - @IT 「そもそも、調査結果が発表されている時点で、発表者に有利なように
2008-07-02 カテゴリ: 雑記 タグ: Tips MarkScanの使い方まとめ 大学で社会調査とか社会心理学とかを勉強していると、演習で実際に質問紙を配ってデータを取ったりすることがよくあります。そして、だいたいそういう時は、質問紙を回収した後にその内容をコンピューターに入力しなければいけなくて、それがものすごく面倒くさかったりして、鬱になってみたりするわけです。そういうときって、「マークシートで調査できればいいのに!」って本気で思ったりします。 それで、探してみると、意外にも簡単にマークシート処理システムが見つかったりするんです。家庭用のPCと普通のコピー機でマークシート用紙が作れて、普通のスキャナで読み込んで処理することができるものが。 そんな数あるマークシート処理システムの中に、MarkScanというソフトがあります。神奈川県立総合教育センターというところが配布しているソフ
2008-06-30 カテゴリ: 雑記 タグ: Vim 安易な発想 あちこちのPCで.vimrcを同期するのが手間だったので、web上に晒してみた。 .vimrcを晒してみる 正直なところ、vimを使いこなしているとは思えないので、おすすめな使い方とかを教えてもらえたらうれしい。
2008-06-24 カテゴリ: Server Side タグ: PHP トラックバック 久しぶりにPHPの話題。 確かにPHPの配列の加算演算子はとても醜い仕様だと思う。 問. 配列を+(プラス)演算子で加算すると? : アシアルブログ <?php $fruit1 = array('apple', 'banana', 'cherry'); $fruit2 = array('kiwi', 'lemon', 'melon'); $fruit = $fruit1 + $fruit2; ?> $fruitの値は次のA~Cのどれになるでしょうか? A. array('apple', 'banana', 'cherry') B. array('apple', 'banana', 'cherry', 'kiwi', 'lemon', 'melon') C. array('kiwi', 'lemon',
2008-05-17 カテゴリ: Client Side タグ: JavaScript Tips トラックバック 不覚 onclick 属性問題について - IT戦記 これを onclick 属性なしで「神経質に」やると以下のようになる ry もちろん、これはおおげさな例だけど、 onclick 属性を使わないことによって本質的ではないことをたくさん書かないといけない id:amachangの↑を見て、ロールオーバーのスクリプトを思い出した。時々こういう遊びをする人なのかな? というのはどうでもいい話で、僕が関心を持ったのは↓のコード。 onclick 属性問題について - IT戦記 <a id="hoge" href="/hoge" onclick=" var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveX
2008-01-29 カテゴリ: Client Side タグ: Tips JavaScript Perl 正規表現 CSV 正規表現を使ったCSVパーサの続き。 トークン化したCSVを解釈するコードをJavaScriptとPerlで書いた。二つのロジックはほぼ同じ。 それぞれ、第一引数には解釈するCSVテキストを渡し、第二引数ではfield間の区切り文字を指定する。デフォルトはコンマ(,)。戻り値は、CSVを解釈した2次元配列(Perlの場合はリファレンス)。 function parseCSV(text, delim) { if (!delim) delim = ','; var tokenizer = new RegExp(delim + '|\r?\n|[^' + delim + '"\r\n][^' + delim + '\r\n]*|"(?:[^"]|"")*"', 'g');
2008-04-10 カテゴリ: その他のプログラミング XREAのサーバーにMovable Typeを導入するというのは何回もやってきたことなのだが、今回はSSHを使ってやってみた。シェルをほとんど使ったことがなかったから苦戦したが、以前よりもかなり早く導入できるようになった。 今までは、シェルを知らなかったから、↓のようなすごく非効率的なことをやっていた。 MTOSのダウンロードページからZIPをダウンロードする。 ZIPを展開 FTPでアップロード (2000ファイル近くある上に、しばしば失敗する) ちまちまと権限を設定 今回はXREAのサーバーにSSHで接続してやってみた。 SSH接続 XREAの管理画面の「ホスト情報登録」でSSHでアクセスするためのIPアドレスを登録する。 TeraTermでs???.xrea.comにアクセスする。プロトコルはSSH2ではなくSSH。 管理画面
2008-05-07 カテゴリ: 雑記 タグ: JavaScript トラックバック ISO 僕も ISO 8601 形式は大好きなんだけど、 YYYY-MM-DDTHH:MM:SS 形式は思いのほか通用しないので気をつけましょう。 日付と時刻の正しい表現方法 - Web屋のネタ帳 日付と時刻を両方表現したい場合は 2008-05-16T11:25:30+09:00 つまり日付と時刻をTでつなげる。 これが世界的スタンダードとしてISO8601とRFC3339に定められた日付と時刻の表現方法。有名どころの言語やらデータベースその他ミドルウェアはすべてこれに沿った表記を解釈し入出力できるようになっている。 JavaScript とりあえず、JavaScriptではほとんど通用しません。 var timestamp = Date.parse('2008-05-16T11:25:30+09:00
2007-12-22 カテゴリ: Client Side タグ: JavaScript Tips Unicode JSON さっきはPerlにはまるとか言っておきながら結局JavaScript… JavaScriptの文字列を、\uXXXXの形式のUnicodeEscapeSequenceにエスケープする関数を書きました。 JavaScriptの文字列をJSONとかでよく見かける、 \u672c\u65e5\u306f\u6674\u5929\u306a\u308a の形式の文字列に変換する関数です。ソースやサンプルは続きで。 ソース var unicodeEscape = function(str) { var code, pref = {1: '\\u000', 2: '\\u00', 3: '\\u0', 4: '\\u'}; return str.replace(/\W/g, fu
2008-03-31 カテゴリ: Server Side タグ: 安易な発想 DoCoMo PHP ケータイ iモードIDというのが利用可能になったらしい。 「iモードID」が提供開始、一般サイトでもユーザー情報を取得可能に:モバイルチャンネル - CNET Japan NTTドコモが3月31日、一般サイトでもユーザ情報を活用したサイトを制作できる「iモードID」の提供を開始した。NTTドコモのサイトで、iモードIDを利用するための方法が公開されている。 ということで、自分のiモードIDを調べるスクリプトを書いてみた。 http://lab.liosk.net/yourdcmguid.php?guid=ON 携帯で↑のURLにアクセスすれば、自分のIDを見ることができる。↓のQRコードからでもアクセスできます。 中身はたった5行の↓のコード。 <?php if (empty($_GET['
2008-02-27 カテゴリ: その他のプログラミング タグ: ○○で文系論文を書いてみる TeX LaTeX Tips 環境構築 以前、DocBookで文系論文を書いてみるというようなこと言っていたが、結局それは断念してしまった。FOPの日本語組版のレベルが低すぎて使い物にならない上に、DocBook XSLも基本的には英語圏向けであまり日本語環境に向いているとは言えなかったから。なので、結局はTeXを使ってレポートを書くことにした。今さらTeXというのも古臭い感じがして嫌なのだが、他に良い選択肢がないので仕方がない。 ということで、今度はWindows XP上にLaTeX環境を構築するにあたってのメモ書きを残しておこうと思う。 ちなみに、TeXに入門するまでの間に、86世代の人たちにだいぶお世話になった。この場を借りて感謝。 方針 まずは方針。できる限り簡単に使えるようにする。 La
2007-12-05 カテゴリ: Client Side タグ: JavaScript JavaScriptのイベント処理は面倒くさい。 ブラウザごとにaddEventListenerとattachEventを使い分けたり、eventオブジェクトを引数として受け取るかwindow.eventとして受け取るかを考えたり、thisの扱いについて考えたりしなくてはいけないからだ。 ということで、すごく苦手意識を持っていたのだが、↓の関数を書いておくだけでほとんどのケースには対応できるってことに気づいた。 function observe(target, type, listener) { if (target.addEventListener) target.addEventListener(type, listener, false); else target.attachEvent('on'
2008-01-14 カテゴリ: Client Side タグ: Tips JavaScript トラックバック [追記]404 Blog Not Found:javascript - \uXXXXを使わない理由を受けて追記 dankogaiさんはあまりJavaScriptのリテラルに詳しくないのかな? 404 Blog Not Found:regexp - 全角英数字を半角に var fascii2ascii = (function(){ var cclass = '['+String.fromCharCode(0xff01)+'-'+String.fromCharCode(0xff5e)+']'; var re_fullwidth = new RegExp(cclass, 'g'); return function(s){ return s.replace(re_fullwidth,
2007-11-29 カテゴリ: Client Side タグ: Tips JavaScript IE バグ トラックバック 以前、JavaScriptの名前つき関数オブジェクトのスコープについて調べたことがあった。 僕は名前つき関数オブジェクトを使うのが好きだからよく使う。↓のような感じに。 var fn = function self(i) { return (i < 10) ? self(++i) : i; }; ↑の関数はまったく意味がない関数だが、名前つき関数オブジェクトを使えば、var fn = の部分に依存せずに再帰処理が書けることがわかる。つまり、関数定義部分だけ適当にコピー&ペーストして使えるということ。 応用 これをちょっと応用して↓みたいなことをやってみた。 var fn = function self() { return self.staticField; };
2017-11-19 カテゴリ: Client Side タグ: Tips Python Jupyter データ分析 車輪の再発明 最近、データ分析の関係で少しPythonを使うようになったので、改めて環境構築について考えてみた。 ネット上の情報を漁ってみると概ねAnaconda一択というのが最近のトレンドの様子。確かにWindowsならAnaconda一択だろうし、自分自身、色々と説明するのが面倒だから、初心者に教えるときはとりあえずAnaconda入れておけと言ってしまう。 とはいえ、モジュールのインストールにはpipがあるし、仮想環境を使いたいならvenvを使ってしまえばいい。そもそも、今どき開発目的であればdockerなりvagrantなりを使って丸ごと分離してしまう方が筋が良く、データ分析用途であれば手元に最新のPython3環境があれば事足りる。MacでAnacondaを入れよ
2007-11-04 カテゴリ: Server Side タグ: Tips ケータイ mod_rewrite apache PHP Perl 正規表現 HTTP_USER_AGENTの文字列を判断して、PCからのアクセスなのかケータイからのアクセスなのかを判別するというのは、広く使われているテクニック。 例えばDoCoMoのケータイならば、ユーザーエージェントの先頭に必ずDoCoMoの文字列が入ることになっているから、それを見てドコモのケータイだと判断すればよい。 先ほど、各キャリアのユーザーエージェントを調べたのでメモ。 各キャリアのHTTP_USER_AGENT 各キャリアのユーザーエージェントは、必ず次の文字を含む。 DoCoMo DoCoMo KDDI (au, Tu-Ka) UP.Browser SoftBank (including J-PHONE, Vodafone) J-P
2007-07-20 カテゴリ: Client Side タグ: JavaScript Cookie Tips Cookieの有効期限を指定するときって、NetscapeのCookie仕様に従うと、 document.cookie = 'name=value; expires=Thu, 1-Jan-2030 00:00:00 GMT'; のような書式で書かなければいけない。 strftimeのような関数がないJavaScriptでは面倒くさいなーと思って、今まで有効期限を指定するのはあきらめていたのだが、実はDate#toUTCString()の書式を読み込んでくれるみたいだ。 document.cookie = 'name=value; expires=' + new Date(2030, 1).toUTCString(); とりあえず、手元にあるIE6, Firefox2, Opera
次のページ
このページを最初にブックマークしてみませんか?
『LiosK-free Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く