m2

文字列をアニメーションしたときにフォントカラーでちらつき具合が異なるかも

iPod みたいに曲のタイトルがスクロールして止まるようなコードを書いたんですが、チラつきが気になって調査したところ、どうもフォントカラーで違いがあるようなのでテストページを書いてみました。

http://miya2000.jottit.com/jsmarquee

  • 「ちらつく」と言ってるのは一瞬文字が消える感じです。
  • 「ちらつく」「ちらつかない」は Opera で確認したものです。
  • ie8 だとグレー以外はタイマーのたびにちらつきますね。
  • ウチのビデオカードの問題かもしれないです。「全部チラつく」とか「全くチラつかない」ということがあれば教えて欲しいです。
  • あとコードが悪いとかも。

Eclipse 3.6 + Ant + S2JDBC-Gen 文字化け、コンソール停止

タイトルはこちらのパクリ。

タイトルに書いた問題は以下の公式ドキュメントに書いてあります。

Eclipse3.5上のAntにはエンコーディングの問題があり、日本語を正しく処理できません(実行するAntタスクが日本語をログ出力していると、コンソールに何も出力されません)。 Open External などのEcipseプラグインs2jdbc-gen-build.xmlコマンドプロンプトで開き、 コマンドプロンプトからAntを実行してください。

Open Externalの更新サイトは、http://update2.pragmatic.kr/ です。 プラグインのインストール画面では、「Group items by category」のチェックボックスを外してください。

Windows上でEclipse3.5を利用する場合 - Seasar2 - S2JDBC-Gen - セットアップ

Open External ってもう無いみたいですね。それになんか負けてる感じです。

これに対して一応の解決策が提示されてます。

id:newta
どうしてもeclipseから使いたくて、設定をこねくり回して
[Run Configurations]の[JRE]タブの[Run in the same JRE as the workspace]にすると
エンコードをMS932にしてもコンソールにちゃんと出力されました!

でも、dbフォルダの出力先がeclipseの作業フォルダの方になっちゃうんですよね。
WindowsのEclipse3.5のAntの問題

んーまだ完全に解決とはいってなさそう。

で、最初のリンクに書いてあるように、eclipse のコンソールへの出力を UTF-8 にすれば全部解決するっぽいです。

そこでソースを読みつつデバッガで止めたりしてたんですが、何のことはない、公式ドキュメントに書いてありました。

jvmArg

このタスクの大部分の処理は別VMで行われます。VMに引数を渡す場合は要素を使用します。 これはAntのJavaタスクで使用できると同じです。
ネストした要素として指定されるパラメータ - Seasar2 - S2JDBC-Gen - Gen-Ddl

というわけで Ant の Encoding を UTF-8 にして、こんな感じに jvmarg 要素を追加すると文字化けが解消されました。

<dump-data
  classpathdir="${classpathdir}"
  rootpackagename="${rootpackagename}"
  applyenvtoversion="${applyenvtoversion}"
  entitypackagename="${entitypackagename}"
  env="${env}"
  jdbcmanagername="${jdbcmanagername}"
  classpathref="classpath"
>
  <jvmarg value="-Dfile.encoding=UTF-8"/>
</dump-data>

このままだとコマンドプロンプトから実行したときに文字化けするので、eclipse から実行したときだけ utf-8 になるように jvmarg の値を ant プロパティに外出しして condition タスクで分岐します。

<condition property="vmarg.encoding" value="-Dfile.encoding=UTF-8" else="">
  <or>
    <!-- This property is set by eclipse3.6 as Global property. -->
    <isset property="eclipse.pdebuild.home"/>
    <!-- for eclipse3.5. Please set Global property. [Window]->[Preferences]->[Ant]->[Runtime]->[Properties]->[Global properties] -->
    <isset property="fromeclipse"/>
  </or>
</condition>

(eclipse3.5 の場合は fromeclipse というグローバルプロパティを追加して分岐するようにしています。)

あとは jvmarg の値をプロパティに書き換えればOK。

  <jvmarg value="${vmarg.encoding}"/>

これで無事コンソールに日本語が表示され、コマンドラインからはデフォルトの文字コードになります。

ant のグローバルプロパティについて

「eclipse3.5 の場合は fromeclipse というグローバルプロパティを追加して分岐するようにしています。」をみて「アレ?」と思われたかもしれません。追加なんてしなくても「eclipse.running」がすでにあるじゃないか、と。

プロパティ名の左に表示されているアイコンに注目してください。このアイコンが eclipse のアイコンになっているものは Ant を [Run in the same JRE as the workspace] で動かしたときにしか有効にならないようです。

今回はデフォルトでもある「Separate JRE」で動かすことが前提なので、「eclipse.running」は使えないことになります。

ここで Ant の Global properties の設定に「Contributor」というカラムがあったことに気付いた方は鋭いです。この Global properties は eclipse plugin から追加できます。それも Java コードは不要で、plugin.xml だけで済みます。

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
  <extension point="org.eclipse.ant.core.antProperties">
    <antProperty name="fromeclipse" value="true" eclipseRuntime="false" />
  </extension>
</plugin>

Ant Properties - Help - Eclipse SDK

簡単ですね。

WheelTapper

http://miya2000.jottit.com/tapper

元ネタは id:brazil さんの keyTapper

下にホイールする時に同時にマウスを下に動かしてホイールすると、ホイールした間隔でスクロールし続けます。「ホイール→マウス下移動→ホイール」な感じです。
マウスを横に動かすと止まります。

今作ってる User JavaScript に取り込むつもりなので、良かったらコメント欄や @miya2000 までご意見ください。横 5px の閾値が妥当かどうかとか、縦方向には遊びが無いので敏感すぎるとか。
あと、そんなの既にあるよーとかあったら教えてほしいです。

find fixed

position: fixed はおもいにゃー。

(function(){
 var ns = document.getElementsByTagName('*');
 var count = 0;
 for (var i = 0, len = ns.length; i < len; i++) {
   var n = ns[i];
   var s = document.defaultView.getComputedStyle(n,'');
   if (s.position == 'fixed') {
     n.style.outline = 'blue solid 1px';
     count++;
   }
 }
 alert('fixed count:' + count);
})()

data スキームで localStorage できるのか試してみた。

コードはこんな感じ。

javascript:(function(){
    var ifr = document.createElement('iframe');
    ifr.src = 'data:text/html;charset=utf-8,%3Chtml%3E%0D%0A%3Cbody%3E%0D%0A%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0D%0Awindow.addEventListener(%22message%22%2C%20receiveMessage%2C%20false)%3B%0D%0Afunction%20receiveMessage(e)%20%7B%0D%0A%20%20%20%20alert(localStorage%5B%22aaa%22%5D)%3B%0D%0A%20%20%20%20localStorage%5B%22aaa%22%5D%20%3D%20e.data%3B%0D%0A%20%20%20%20alert(localStorage%5B%22aaa%22%5D)%3B%0D%0A%7D%0D%0A%3C%2Fscript%3E%0D%0A%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A';
    document.body.appendChild(ifr);
    ifr.addEventListener('load', function() {
        alert('post');
        ifr.contentWindow.postMessage('aaaaaaaaaa', '*');
    }, false);
})()

「data:text/html〜」中の HTML 部分は以下のようになっています。

<html>
<body>
<script type="text/javascript">
window.addEventListener("message", receiveMessage, false);
function receiveMessage(e) {
    alert(localStorage["aaa"]);
    localStorage["aaa"] = e.data;
    alert(localStorage["aaa"]);
}
</script>
</body>

http://gist.github.com/419354

<結果>

Opera10.5 Chrome5.0.375.55 Firefox3.6.3
保存はできるが別の iframe から読み出せない
すみません、保存できました。Firefox と同じ挙動です。
「Uncaught Error: SECURITY_ERR: DOM Exception 18」 使える。ただし data スキーム全体で1ドメインのような挙動

<参考>

MozBoxSizing style property | webkitBoxSizing style property

vender prefix の付いた CSS プロパティを JavaScript から設定する方法をど忘れしてたのでメモ。

Specifies or retrieves how the width and the height of the element are calculated. It affects the height and width properties.
In Internet Explorer and Opera, use the boxSizing property instead.

MozBoxSizing style property | webkitBoxSizing style property JavaScript

webkit の場合は先頭の「w」の大文字小文字は区別しない。