JAMADAM.COM

RSS Subscribe to my RSS feed

Stripe Calendar

Sep, 2010
Aug 1516171819202122232425262728293031 Sep 123456789

Entry: マルチプラットフォームなアプリ一覧

マルチプラットフォームなアプリ一覧

Initial post: 2009.01.14 | Last modified: 2009.08.01

いつでもMacOSとLinuxとWindowsを行き来できるように。

ブラウザ Firefox 定番ブラウザ。下記はおすすめプラグイン。
  • ViewSourceWith(任意のエディタでHTMLソースを表示。マック版は多少工夫しないと使えない。)
  • Firebug(WEB開発の便利ツールがいっぱい)
  • YSlow(WEB開発時のパフォーマンスチェック。その他、スクリプトなどを外部も含めて全て結合表示してくれたりもして超便利。)
  • FoxyProxy(サイト毎にプロキシを設定)
  • Html Validator(HTML文法チェック、実はMac版もあった)
  • Link Evaluator(ページ内の全リンクを検証)
  • Resizeable Textarea(ルーターの設定画面がマックで散々だったので導入)
  • Ubiquity(コマンド。今のところalcコマンド専用と化している)
  • XUL/Migemo(ページ内検索の機能拡張。Migemoは置いといて、正規表現検索は完全に使える)
メーラー Thunderbird 定番メーラー。下記はおすすめプラグイン。
  • Lightning(スケジューラー)
  • Provider for Google Calendar(Lightningをgoogleカレンダーと同期)
  • Google Contacts(アドレス帳をGoogleの連絡先と同期)
テキストエディタ jEdit Mac版は割と軽い。下記はおすすめプラグイン。
  • BufferTabs(バッファーをタブ表示)
  • Editor Scheme(フォントや色を一元管理)
  • FTP(リモートファイルの編集。SFTPにも対応)
  • Highlight(任意のキーワードをハイライト)
  • TextTools(ソートなど)
  • WhiteSpace(インデントの可視化に使える)
Editra 日本語入力に難あり。作者も認識してるけど直せないらしい。
Scintilla Text Editor EUC-JP不可。
Komodo Edit jEdit使うようになってから出番がめっきり減った。
ファイル転送

Filezilla mac版は驚くほど使いづらい。主な用途はファイラであるmuCommanderで事足りるので、Filezillaは今のところ不要。

波形編集 Audacity
オフィススィート OpenOffice 定番。下記はおすすめ機能拡張。 GanttProject 結構あやしい動きをするけどOPENPROJよりずっと使いやすい。今後に期待。
OPENPROJ プロジェクト管理
アーカイバ PeaZip Mac版なかった..どうしよう
ファイラ muCommander
動画エンコード HandBrake
マインドマップ XMind 中国製。結構おいしい操作性。でも、win版はよく落ちる。Mac版はちょっと前まで起動すらしなかったけど、最近のバージョンで改善。将来に期待。
メディアプレーヤー Songbird 最近本格的にiTunesから乗り換えたけど、特に問題ないんじゃないかと思う
Miro 動画専用かな。今のところ満足な出来。
Amarok
DTP Scribus インストールが激しく難しい
GIMP たいていの人はPhotoshopなんて要らないんじゃないかと思う。Perlでマクロも組める。
フォント IPAフォント OOoのPDF出力時にはTTFフォントが必要なようで、日本語用にIPAフォントがおすすめ。
UML Jude/community 国産。MacOSX版もざっと見たところ、普通に動く。

 

Entry: text-overflow:ellipsis

text-overflow:ellipsis

Initial post: 2009.06.21 | Last modified: 2009.06.22

以前にこんなエントリ書いたり、こんなjQueryプラグイン作ったりしたけど、それってCSSだけでできるんじゃん!

http://www5e.biglobe.ne.jp/~access_r/hp/css/css_text_019.html

text-overflow
テキストがオーバーフロー(領域を超えてしまう事)する際にオーバーフローしたテキストを「...」で省略することが出来ます。

しかも属性名と値などのキーワードも思い描いたまんまじゃん。ただし、省略記号を有効にする指定はtext-overflow: ellipsis;だ。以前にもちゃんとググったつもりだったけど、英語の情報無視してたかなあ。

ただしFirefoxは未対応なので依然としてJavascriptでのハックは必要。また、text-overflowはIEのみの対応のようで、SafariやOperaはそれぞれの拡張属性を併記して対応できる。

a.width-limited {
    display:block;
    overflow: hidden;
    white-space:nowrap;
    -webkit-text-overflow: ellipsis; // Safari
    -o-text-overflow: ellipsis; // Opera
    text-overflow: ellipsis; // IE
}

Entry: ブックマーク

ブックマーク

Initial post: 2009.06.06 | Last modified: 2009.06.06

 

Entry: ブックマーク

Entry: AJAXデータの取得先URLをどう管理するかという話

AJAXデータの取得先URLをどう管理するかという話

Initial post: 2009.06.01 | Last modified: 2009.06.01

AJAX満載のサイトでアンカーに紐づいたAJAXデータの取得先URLをどう管理するかという話。with jQuery1.3.2。

HTML

<a href="./path/to/parmalink.html">通常リンク</a>
<a href="./path/to/snippet.html" class="widget-opener">動的コンテンツ</a>

Javascript

$('a.widget-opener').live('click', function () {
    $.get($(this).attr('href'), function(html){
        //appendなりprependなり
    });
    
    return false;
});

上記の場合、javascriptオフの人が「動的コンテンツ」を叩くとHTMLスニペットやjsonテキストが画面いっぱいに広がるページに遷移してしまったりする。 また、検索クローラーはリンク先のページを収集してしまうかもしれない。

かといって、href="#"とでもして、すべてのアンカーにidをふって、script内でURLを関連づけていくのも煩雑だ。

HTML

<a id='id1' href="#" class="widget-opener">記事1</a>
<a id='id2' href="#" class="widget-opener">記事2</a>
<a id='id3' href="#" class="widget-opener">記事3</a>

Javascript

url.id1 = './path/to/snippet1.html';
url.id2 = './path/to/snippet2.html';
url.id3 = './path/to/snippet3.html';

そこで、アンカータグのonclickとjQueryの$.data()メソッドでAJAX URLをインラインで管理するようにしてみた。 $.data()はDOM要素に紐づいたデータを管理することが目的という、本件におあつらえ向きなメソッド。

HTML

<a href="#" class="widget-opener" onclick="$.data(this, 'ajaxURL', './ajax1.html')">記事1</a>
<a href="#" class="widget-opener" onclick="$.data(this, 'ajaxURL', './ajax3.html')">記事2</a>
<a href="#" class="widget-opener" onclick="$.data(this, 'ajaxURL', './ajax3.html')">記事3</a>

Javascript

$('a.widget-opener').live('click', function () {
    $.get($.data(this, 'ajaxURL'), function(html){
        //appendなりprependなり
    });
    
    return false;
});

onclickとliveでバインドしたイベントとの実行順が気になったけど、意図した順番に実行されている。ここで念のためonmousedownとかに逃げてしまうと、 今度は.trigger()が使えなくなってしまうのでonclickしかない。実行順が覆るケースがあるようなら、click.not_inlineというようにnamespacedイベントを利用して onclickイベントとの実行順を制御することもできる。

また、パーマリンクが存在するアンカーであれば、当然hrefにそれをかける。

<a href='./parmalink1.html' class="widget-opener" onclick="$.data(this, 'ajaxURL', './ajax1.html')">記事</a>

こうすることで、新規タブでリンクを開く可能性に配慮した仕組みも実現できる。実際、このブログの「最近の記事」のボタンは左クリックで新規ウィジェットを起動するけど、コンテキストメニューから新規タブでパーマリンクを開くこともできる。そして、この2つのURLをひとつのアンカータグ内で管理している。

まあ、HTML内に書くのには$.data()はちょっとだけ汚らしいというのは認める。

Entry: ブックマーク

ブックマーク

Initial post: 2009.05.22 | Last modified: 2009.05.22

TwitterでニュースFeedをフォローし出してからおもしろ記事がありすぎて全然追えない。

Entry: PHP勉強会に行ってきた

PHP勉強会に行ってきた

Initial post: 2009.04.19 | Last modified: 2009.04.20

土曜日にPHP勉強会に行ってきた。

勉強会系は初参加。ああ、こんな面白い世界もあるのかというカルチャーショックを受けました。仕事と無関係に、寝ても覚めても開発してそうな人たちがそこにいました。

もくもくと開発をして最後に成果発表会。プレゼンとか大の苦手なのでちょっと緊張しましたが、みなさん暖かく見守ってくれた。

今回は、tailコマンドでログを監視しながら開発する際に、PHPの構造体を表組で出力するライブラリを作りました。別のデバッグ出力用ライブラリで生成されたHTMLスニペットをw3mに丸投げすることで簡単に表組っぽいテキストを生成するという手抜きアイディアで好評いただきました。

まだ未完成ですが、完成したらOpenPearにアップしたいと思います。

Entry: ブックマーク

ブックマーク

Initial post: 2009.04.11 | Last modified: 2009.04.11

Entry: Photoshopでsocket通信

Photoshopでsocket通信

Initial post: 2009.04.04 | Last modified: 2009.04.04

Adobe ExtendScriptでsocket通信にトライ。結構苦労してサーバーから日本語を含むJSONデータを正常に取得することができた。

国内の解説サイトでsocket通信に言及しているのは2件。うち一件はメールの送信について解説していて、もう一件は日本語サイトの取得に失敗したとのことで、他には見つからない。

成功するポイントは、openメソッドの第二引数は必ずbinaryにすることです。UTF8などを指定すると長いコンテンツが途中で切れてしまう。どうやらマルチバイトのデータサイズをreadメソッドがきちんと処理してくれてないことが原因。また、openメソッドをテキストモードにすると改行コードも変更されてしまってとても混乱。

それから、エンティティボディの処理はきちんとチャンクサイズに基づいて行うこと。マルチバイトのあるなしに関わらず、ある程度以上のサイズを一気にreadまたはreadlnしようとすると途切れる。なので、サンプルスクリプトやAdobeのドキュメントに書いてあるread(999999)みたいなのは実用的には全く使えない。

結局、マルチバイトのエンコードもchunkedなコンテンツのデコードも全て自前の処理になるので、普通に面倒だけど寧ろそれが普通か。なんか以前にもPerlで同じコードを書いた気がする。

Entry: フォーム周りもajaxにした

フォーム周りもajaxにした

Initial post: 2009.03.29 | Last modified: 2009.03.29

フォーム周りもajaxにした。フォーム送信するまでFCKeditorがテキストエリアを更新してくれないので自前で送信できないのかと思ったら、UpdateLinkedFieldっていうメソッドがちゃんと用意されていた。

<form onsubmit='return widget_submit_func1(this)' action='./a.cgi'>
    <textarea id='INSTANCE_ID'></textarea>
</form>

function widget_submit_func1(target) {
    
    FCKeditorAPI.GetInstance('INSTANCE_ID').UpdateLinkedField();
    
    var f = $(target);
    
    $.ajax({
        url: f.attr('action'),
        type: 'POST',
        data: f.serialize(),
        dataType: 'html',
        success: function(data, textStatus) {
            
            f.parents('.widget').addWidget(data, {method: 'insertBefore'});
        }
    });
    
    return false;
}

他にもGetHTMLメソッドとかいろいろあって何でもできる。ちゃんとドキュメント読まんといかんです。