chalcedony_htnの日記スマートフォン用の表示で見るchalcedony_htnの日記この広告は、90日以上更新していないブログに表示しています。2014-05-07JavaScriptのArray.sort覚え書きJavaScriptお蔵出しシリーズ3。いつだか忘れたけど昔書いて、2013年5月にリライトしたらしいものをほぼそのまま。いいけどこのシリーズ、タイトルを統一しようとする気持ちがまったく見受けられませんね。基本array.sort(比較関数);配列arrayの要素を、比較関数(省略可)に基づいて並べ替える。並べ替えは破壊的に行われる、つまり配列array自体が並べ替えられて、元の順番は保存されない。配列arrayの各要素を文字列として比較し、辞書順に並べ替える。以下のように処理される。2つの要素が引数として渡され、戻り値に応じてその要素の順序が入れ替えられる。bが前に来るように並べ替えられるという処理が行われる。0;}array.sort(compare);compareを別に定義せず、sortメソッド実行時に指定してもよい。0;});要するに、「こういう基準で要素を並べ替えてね」というのをsortメソッドに教えるためのもの。←数値順aとbどちらも数値であれば減算できる。b」の結果は負の数になるので、そのまま戻り値にしている。18:01JavaScriptのArray.sort覚え書きTweet広告を非表示にするもっと読むコメントを書く2014-04-07JavaScriptのループ文まとめJavaScriptお蔵出しシリーズ2。2008年2月に書いたらしいものに加筆したら原型がなくなりました。ループ文とは通常は上から下に処理が進んでいくプログラムを、一定条件に当てはまるあいだだけ繰り返し処理する制御文。設定して、条件が真であるあいだ、一定の処理を繰り返す命令。正確に言うと条件が偽になったら処理をしないでループを抜ける、ってことになる。ループ用の変数に初期値(数値)を代入して、それを増減してループ回数を制御する。ループ回数が開始前に設定できる場合に使う。繰り返したい処理}式1初期値を設定する式。ループ開始前に一度だけ評価される。毎回のループの最初に評価され、もしも偽(false)だったら{}内の処理を行わずにループを抜ける。式3ループ用の変数の値を増減する式。毎回のループの最後に評価される。式2が偽になった場合はその時点でループを抜けてしまうので、この式は実行されない。ちなみに、式1と式3には複数の式を書くことができる。」の評価時にいちいち配列の要素数を調べることになる。結果:「10」「20」「30」「40」こうすれば、要素数を調べる処理はループ開始前の一回だけで済む。ループ回数が最初に固定できる場合は、採用すると処理が早くなるかも。条件を設定し、それが真である間、一定の処理を繰り返す命令。繰り返したい処理}初期値の設定や後処理がないので、ループ内で条件を変更するか、break(後述)とかでループを抜ける必要がある。ないと無限ループになる。結果:「10」「20」「30」「40」って書くと、for文とまったく同じことができる。式3;}が同じということ。whileでこれをやるくらいなら素直にfor使えばいいと思う。whileの場合、たとえばarrを破壊してしまってもいいなら以下のようなことができる。結果:「10」「20」「30」「40」Array.shift()は配列から最初の要素を取り除き、その要素を返す。」が0(真偽値に変換するとfalse)になるので、ループを抜ける。複数行にわたる文字列を取得して、一行ずつ最後まで処理したい場合なんかに使える。文while文と似てるけど、これは一度は必ず一定の処理を行い、その後、条件が真のあいだだけ同じ処理を繰り返す場合に使う命令。)for文やwhile文の場合、条件式が最初からfalseだったらその時点でループを抜けてしまうので、{}内の処理は一度も行われない。do-while文では、条件式は{}内の処理が行われた後に評価される。条件式の結果がどうであっても、とりあえず一度は必ず処理が行われる。今までこれ使う機会は一度もなかったんだが......break文、continue文ループの途中で処理の流れを中断したい場合に使う命令文。breakの場合は処理を中断し、直ちにループを抜け、次の処理に移る。5」breakでループを抜けた場合、ループ終了時の処理(「i++」の部分)は行われていない。continueの場合は、直ちにその回のループ終了処理を行う。10」while文の場合は、条件の変更前にcontinueを置いてしまうと無限ループになるので注意。for-in文for-in文はfor文から派生した構文。配列の各要素......というか、オブジェクトの各プロパティにアクセスして、同じ処理を繰り返す場合に使う。オブジェクトのプロパティ名(文字列)が入る。数値に見えるけど文字列。例は配列で書いたけど、実はfor-inは配列に使わないほうがいい。わからなければ「使っちゃいけないのねフーン」でいいと思う(よくないけど)。for-in構文は「オブジェクトのプロパティ」にアクセスするので、例えば他のところでArrayオブジェクトが拡張された場合、そのプロパティまで列挙してしまう。}」最後のはhogeの中身が見えてるオブジェクト(インスタンス)自身が持っているプロパティだけを列挙したいときは、都度hasOwnProperty()で判定すればOK。}」hogeも列挙されるfor-inのループはプロパティを定義した順番で行われる(正確には、プロパティに値を代入した順番)。プロパティの値が定義されていないものは無視される。ちば」hobbyは出てこない疲れたのでこの辺で切り上げ。*1:正確に言うと、式1〜式3のそれぞれが式であればいいので、複数の式をカンマ演算子でつないで一つの式にしているというだけ。式2も同じことができるけど、評価後の値によって分岐するので順番が大事になる。ループ毎に処理したいものは素直に式3に書いたほうがいい。20:21JavaScriptのループ文まとめTweet広告を非表示にするもっと読むコメントを書く2014-03-31JavaScriptの条件演算子(三項演算子)JavaScriptPCの中身を整理したので、お蔵出しシリーズと称して、昔自分のために書いた文章を供養していこうと思います。今回は2008年2月に書いたらしいものに加筆修正しました。条件式が偽の場合に評価する式と書くことができる。?:を条件演算子という。JavaScriptでは唯一、項(被演算子)が三つの演算子なので、三項演算子とも呼ばれる。条件式のカッコ()は可読性のために入れただけで、必須ではない。スペースも必須ではない。それぞれの項はすべて式である全体が一つの式になっている式なので全体をカッコ()でくくってもよいという点に注目。いってもこれは演算子が作る式ならすべてに当てはまるのだけど。:条件式が偽の場合に評価する式とかなんとか、途中で改行してもOK。全体で一つの式になっているので、全体で一つの値を返す。返す値は最後に評価された式の値になる。変数aに(xの値に応じて)bまたはcを代入したい場合、if文を使うとこんな風になる。結果:aにbが代入されると書ける。c」という式の値がaに代入される。最後の書き方は個人的によく使ってる。変数に代入するという目的が目に見えやすい気がするので。if文が増えないからすっきり。こっちはやり過ぎるとたぶんあとで読めない。応用1:入れ子にもできる全体が式なので、入れ子にもできる。d;とか書いてもいい。素直にifかswitchで書いたほうが、条件分岐ってことがわかりやすくていいと思う。人の書いたコードで見つけたときに面食らわない程度におぼえておく。応用2:配列/ハッシュの添え字にもできるくどいようだが式なので、配列やハッシュの添え字にもできる。役に立つのはブックマークレットを作るときくらいかな。JavaScriptはいこんばんは。InDesignで索引項目を追加するときはソートのために読み仮名を入力しなくてはならないのですが、手打ちするのがあまりにもめんどくさいので自動的に取得するスクリプトを作りました。読み仮名の取得にはみんな大好きYahoo!のテキスト解析WebAPIを利用しています。参照形式はデフォルトの「現在のページ」のみ項目のレベルは設定できない(すべてレベル1になる)という仕様になっています。あと、APIのアプリケーションIDは消してありますので、もし使用する場合は自分のアプリケーションID(ランダムな英数字になってます)を取得して、「◆◆◆ココにアプリケーションIDを書く◆◆◆」のところに入れてください(1箇所だけです)。YahooのIDを作れば誰でも取得できます。試してみたいという人にはだいぶ不親切ですがご了承ください><このスクリプトを書くにあたって、2つの記事を大いに参考にさせていただいています。遅れてすいません!■使用前の確認事項なにが起きても泣かないようにデータのバックアップを取りながら使用してください(最重要)。インターネットへアクセスできる環境が必要です。API」を使用しています。サービスが終了した場合、スクリプトも使用できなくなります。選択中の文字列をインターネット経由でYahoo!のサービスへ送信します。機密情報などが漏洩した場合でも責任は持ちません。アクセスログなどを見れば、どんな文字列を送信したか誰でもわかります。記号類は読み仮名から削除されます。■使用中の注意事項APIが期待通りの読み仮名を返してくるとは限らないので、必ず1件ずつ確認しながら登録してください。登録直後は索引項目のページ数が表示されません。索引パネルのメニューから[プレビューを更新]を実行すると直ります。索引登録時、ドキュメントの最初のページ付近にダミーのテキストフレームが作られます。通常は自動的に削除されますが、スクリプトが途中で止まった場合などに残る可能性があります。ひととおり登録したら、フレームが残っていないか確認してください。なにが起きても泣かないようにデータのバックアップを取りながら使用してください(念押し)。Yahoo!のテキスト解析APIを利用して索引の読み仮名入力を自動化します。以下の記事をパク^H^H大いに参考にさせていただいています。alert("索引登録可能なテキストを選択してください。"読みがなの自動取得に失敗しました。alert("登録に失敗しました。\n索引項目または読みがなに使えない文字がないか確認してください。"読みがなを修正してください。キャンセルすると登録を中止します。記号類はfilterで除去。読みがな部分の抽出はテキストそのまま正規表現でぶっこぬき。21:58選択した文字列を索引項目に登録するJavaScript(読み仮名自動入力、CS3〜)Tweet広告を非表示にするもっと読むコメントを書く2013-04-19なんとなく、使っているツール(フリーウェア)を晒してみるWindowsはいこんばんは。4GBパッチというものの存在を知ってちょっと調べていたのですが、その過程でこの記事を見かけまして。個人的使用ツールせっかくなので自分の愛用しているソフトウェアをいくつか晒してみたいと思います。すべてWindows用です。テキストエディタサクラエディタUnicode版メモ書きから置換処理、Grep検索、ちょっとしたスクリプト書きまでこれ一つで済んでしまいます。設定項目が膨大にあるけど、その分かゆいところをゴリゴリカスタマイズできて好きです。デフォルトでも十分使えますけどね。昔は内部がShift-JISだったのですが、いまはUnicode版もあります。ファイルリネームツールお〜瑠璃ね〜むhttp://beefway.sakura.ne.jp/dl-allrename.html仕事しはじめて最初に使ったのがこれで、そのまま使い続けてます。ほかのやつ使ったことないので、どこがいいとかアピール難しい......一通りの機能が揃っていながら、あんまり悩まずに直感的に使える素直さが魅力ですかね。リネーム前のプレビューが見やすいので、致命的なミスも回避できます。開発はちゃんと継続されていて、たまにバージョンアップされてます。CopyExt(拡張コピー)http://www.htosh.com/software/freesoft/copyext.htmlエクスプローラ拡張。特定のフォルダにコピータイムスタンプを比較してコピーまとめて選択して、フィルタを通ったものだけをコピーなどなど、いろんな方法でファイルコピーを行えます。設定をプロファイルで保存しておけば、複雑なコピーも一発で実行できたり。私は、「1つ以上のファイルを選択した状態で、マウス右ボタンを押しながらドラッグ→表示されるコンテキストメニューで[ここに拡張コピー]をクリックすると“backupXX_(元ファイル名)”という名前でそれぞれ複製される」という設定で使っています。XXは連番で、すでに同じ名前のファイルがある場合だけ番号が増えていきます。これでぽいぽいバックアップ取っていけば万が一の時も安心。エクスプローラ拡張なので、ファイルの保存ダイアログ上でも有効。別名保存時に新しい日付のファイル名をつけるのでなく、古いファイルのバックアップを取ってから上書き、という感じで使ってます。ファイルが壊れる恐怖と日々戦うDTPerにとっては強い味方であります。ICEいろんなの使ってきましたが、今はこれを使用中。MacのFinderデフォルトで圧縮されたzipファイルも文字化けせず解凍できます。標準的なアーカイブ形式にはだいたい対応してると思います。圧縮時・解凍時に不要ファイルを任意でフィルタリングできるのが精神衛生上よいです。Thumbs.db爆発しろ。インストール時に謎ツールバーをインストールするかどうか聞かれますので注意。7-zip普段使うことはありませんが、後述する比較ツールWinMergeでアーカイブ比較機能を使うために入れています。Windowsライセンスの関係で仕事用PCには入れてないですが、こちらもMacのデフォルトで圧縮したzipファイルを解凍できます。個人用PCではこちらを主に使っていますね。ランチャーCLaunchパネル型のランチャー。有名どころだと思います。タブ分けできるのである程度整理ができます。登録アイテム数が増えてきてパネル自体が巨大に......デスクトップのダブルクリックで呼び出すようにしているので、普段Adobeのアプリケーションとか使う時はあえて最大化せず、端っこ数ピクセルのスキマを作って(ダブルクリックできるようにして)います。ファイラー(エクスプローラ拡張)QTTabBarWindowsエクスプローラをタブ型にするツール。似たようなのは山ほどありますが、最近は新しいのを開拓してないです。いわゆるタブ型アプリケーションに求める機能はだいたい入っていると思います。動作のカスタマイズも細かくできます。タブの横幅が可変で長いフォルダ名でも省略せず表示してくれること、タブをたくさん開いても多段表示できるので一覧性が損なわれないこと、あたりが個人的に好みですね。データ比較ツールWinMerge定番中の定番。ファイルやフォルダを比較、テキストデータならその場でマージや編集もできます。プラグインを入れればWordやExcel、PDFも比較可能。圧縮ファイルも解凍なしでそのまま中身を比較できます(要7-zipプラグイン)。TortoiseSVNと連携させてリビジョン間の差分確認にも使っています。InDesignのデータは直接比較できないけど、IDML書き出して拡張子をzipに変えたらWinMergeで修正箇所の割り出しができると最近気づきました。ファイルバックアップBunBackup定番。欲しい機能が揃っています。これもカスタマイズ次第でかなり自分好みの設定を作れる。作業データのバックアップ方法は今後変わりそうだけど、ちょっとしたデータのバックアップには使い続けるつもり。SubversionクライアントTortoiseSVN最近使い始めたばかりのニューフェイス。作業データのバージョン管理を画策していまして、絶賛修行中なのです。Windows用のGUIクライアントとしては定番どころか鉄板っぽい。エクスプローラを拡張するのはわかりやすいし便利なんだけど、ちょっと動作が重くなる気がしないでもない......「とーたすえすぶいえぬ」、かるせど覚えた。その他WinCDEmuCD/DVDのイメージファイル(isoとか)を開くと、空いているドライブレターが割り当てられ、通常のCD/DVDドライブと同じ感覚で扱うことができるようになる仮想ドライブツール。ドライブレターに空きがある限りいくつでも開けます。なにも考えずイメージファイルをダブルクリックするだけで使えて、ドライブの解放も同じくダブルクリックでできます。仮想ドライブを右クリックして[取り出し]でもOK。このシンプルさが普段使いに便利。例によって最初に出会ったのがこれだっただけで、他にもたくさんあるはず。M電卓http://www.vector.co.jp/magazine/softnews/080311/n0803113.html電卓です。個人的には起動の速さと邪魔にならない小さいウィンドウが魅力かなあ。高機能らしいんだけど、関数電卓とか使わないし......あと便利なのが16進数での演算。10進数で計算した結果がリアルタイムで16進数表示できたり、その逆もできたり。途中で切り替えもできます。16進数と10進数を混ぜて計算したいとき、たとえば文字コード連番でここから20文字分、とかによく使います。ちなみに単位換算機能もあるのですが、ポイントがアメリカンポイントなので使ってないというオチ付き。pinzhttp://www.vector.co.jp/soft/win95/util/se343088.html任意のウィンドウを最前面固定にしてくれるシンプルなツール。常駐型ですが邪魔にはならないです。タスクバーから固定用アイコンをドラッグ→目的のウィンドウにドロップするだけで使えます。解除も同じく解除用アイコンをドロップだけでOK。テキストエディタなりファイラーなり、それぞれに最前面固定機能は備えていると思いますが、私くらいになるといちいち個別に設定するのも(設定方法を覚えるのも)めんどくさいですからね。思いつくままにいろいろ書いてみました。毎日使うものだけに絞った*1のであんまり数なかったですね。似た機能を持つフリーソフトがたくさんあって選択肢が多いのがWindows界のいいとこなので、「そういう使い方ならこっちのが便利だよ」というのがあったらぜひ教えてくださいー。InDesignはいこんばんは。(spring)に行ってきました。セミナーのレポートとか最近サボり気味なんですが、今回は自分の業務にダイレクトにつながる内容だったので、せっかくだから俺は赤い扉を選感想など書いてみようと思います。他の2セッションについても書こうと思ったのですが力尽きましたごめんなさい......感想なので、内容のまとめではありません。内容については当日のTwitterの様子がまとめられたTogetterがあるのでそちらを。http://togetter.com/li/464817うわっ......私のpost、多すぎ......?(例の顔で第3セッション:多ページ作成でのInDesignテクニックテクニカルドキュメント、いわゆる「トリセツ」を日々制作されている西村さんが、あかねさんを相棒に多ページのドキュメントを大量に処理する場合のテクニックを解説してくれるセッション。立場や仕事量などもろもろ違いますが、私も主な業務は同じくテクニカルドキュメントの制作です。この種の作業の特徴としては、スライドで挙げられていたページ数が多いファイル数も多いレイアウトはシンプルテキストがメインに加え、ほかのページへ誘導する記述が大量にある(X章のXを参照、XXページを参照、など)ページ増減が頻繁にある(途中のページに記述がどっさり追加され、以降の改ページ位置などがすべて変わる)改訂が多く、データが長年引き継がれ続ける改訂サイクルが早い(ことがある)などが挙げられると思います。下版した次の日から改訂作業開始とかざらにあったり。逆に5年も前のデータを掘り起こしたり。最近は時代の流れか紙のトリセツも減りまして、最終的な出力がPDFでWeb掲載だったりすると、数百ページあるのに作業期間は1〜2日とかね。PDFだし、できたらすぐちょうだい」、と、か......考えただけでSAN値*1ががりがり削れていきます。いうのが今回のセッション。ものっすごいボリューム。索引(条件テキスト)まさに普段業務で使っている機能ばかりで嬉しくなってしまいました。Adobeのヘルプではそれぞれ別の箇所に記述されていて、こんなふうに逆引き的に関連付けてまとまってはいないんですよね。機能の存在と概要を知らないと調べようがない。そもそも自動番号が箇条書きってどういうことなの......とかね。セッションでは、取り上げたそれぞれの機能について、何がどう効率化できるのか、どう設定したら使えるのか、使うときの注意点は何か、を丁寧に説明していました。この「注意点」のところが実はセッションの目玉だったんじゃないかと。ものすごく実践的で、「あるある!!」と何度も何度もうなずきながら聞いてたり、もちろん初めて知るものもたくさんあったり。単なる機能紹介や公式のヘルプでは絶対出てこないですよね、箇条書きの自動番号で51番目以降は丸数字が使えないとかw設定方法についても、普段使ってる部分以外はあいまいにしか理解していなかったのできっちり復習できました。索引の参照形式とか、アンカー付きオブジェクトの位置オプションとか。後者はスライドで視覚的にまとめられていてわかりやすかったです。今まで回りくどいやり方をしていなかったか、チェックしてみるいい機会になりました。実を言えば、これらの機能は日々使っているものの、他の環境ではどんなふうに使われているんだろう......といつも思っていたんですよね。よそで制作したデータを見ることが一切ないので。Webで検索してみても、実践的な内容はなかなか出てこないですし。不安を抱いていたのですが、今回ピンポイントでテクニカルドキュメントの例を見ることができ、おおむね方向性は間違っていないとわかって心底ほっとしました。目次などなど、「テキストに適切なスタイルが設定されている」からこそ使えるんですよね。逆にこれらの機能をフルに使いたいなら、それを前提にしたスタイルの設計をする、というのも必要になってくると思います。「見出しだから文字を大きくする段落スタイルを付けよう」ではなくて、「見出しとして使いたい段落だから見出しという段落スタイルを付けて、見た目でも見出しとわかるように文字を大きくしよう」という感じ。データを構造化しておくと、さらに進んだ自動処理(たとえばスクリプトを使うとか)をしやすくなったり、Eなんとか形式にするときにもたぶん比較的スムーズだったりと、メリットは多いと思います。あとひとつ、大事だと思ったのは、最後のまとめにあった「自動だからと安心しないでチェックは必ずしよう」です。各機能の注意点を見返してみるとわかりますが、自動更新されたりされなかったり、テキスト量によってオブジェクトが重なってしまったり、自動挿入されるテキストが手動で修正できてしまったりと、落とし穴も結構あります。相互参照まわりとかちょいちょい怪しいし*3!自分の仕事では、修正作業に時間がかからない分、チェックは念入りに......というつもりでやっています。終了まぎわに西村さんがぽそっと言ってた、「あくまで入力支援ですからね」という言葉を肝に銘じておきたいですね。姐さん、よければ次は条件テキストも教えてください!*1:正気度*2:参照元と参照先を間違えてるところがあって赤面*3:相互参照、便利でかわいいやつだけどダメなところもたくさん知ってます。ブログ内検索で「相互参照」を検索するといろいろ出てきます。ClipがなくなったのでPinboardはじめましたSBMはいこんばんは。前からですが、メインのソーシャルブックマークサービスをPinboardに乗り換えました。はてなのほうは継続利用中です。これだけで完了するような話ですが、せっかくだからいろいろ書いておきます。Clip」がお亡くなりになってしまったので、泣く泣く新しいサービスへ移行しなければならなくなりました。かなしい......どうやらクリップでなじみの面々の多くははてなブックマークに移行したようなのですが......今までのブックマークを移行して長ったらしいコメントが途中でちょん切れるのは絶対に避けたかったため、他のサービスを探すことに。ソーシャルな部分はいまとなってはTwitterで十分なところがあるので、機能面を重視して選びました。具体的に言うとコメント文字数と速度、それからある程度メジャーで今後のサービス継続が期待できるもの。ブックマーク支援ツール(Firefoxアドオンの「Tombloo」を使用)が対応しているかどうかも大事なところです。あ、あと日本語対応か。こんにちはPinboardいろいろ比較した結果、何人かがおすすめしてくれたPinboardに決定。なんとコメント文字数無制限*1なのです。桃源郷はここにあったんやー!他の機能についてはツアーを参照。read」設定ですね。いわゆる「あとで読む」。read」リンクをクリックするまで非公開になるというものです。たしかに、読んでみるまではブクマしたことを知られたくないってのはありますし。通常の非公開設定と分けてあるところが、使うシーンをきっちり考えてるなーって思います。個人的には非公開とかまず使わないんですけど。Pinboardは有料のサービスなのですが、月額とかではなくて1回支払えばOKということでさくっと登録。金額が登録の時期によって(つまりユーザー数が増えて維持費が上がるに従って)だんだん高くなっていくらしくて、それもちょっと面白いと思いました*2。ちなみにLDC時代のブックマークはエクスポートしてPinboardのほうにぶちこんであります。エクスポートしたXMLをPinboard用に変換するのにえらい苦労したのですが、そのときのメモはうっかり意図的に消したので省略。ミスって日付情報がすべて吹っ飛んだため、移行した分のエントリはいつのものかさっぱりわからない状態です。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。