技術的な話題 に関する投稿を表示しています

document.designMode = “On”;

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

わけあってリッチエディタについてちょろっと調べてみたら、なんと簡単にできるじゃないですか。
キーワードは「document.designMode = "On";」

ここで必要なもの

  • Webブラウザ
    最近のブラウザであればだいたい大丈夫です。
    スマホは未確認です。
  • JSをさっくりと読める程度の力
  • HTMLをさっくりと読める程度の力

おおまかな手順

  1. HTMLを書きます

    <html><body>
        <button onclick="editor.execCommand('undo')">元に戻す</button>
        <button onclick="editor.execCommand('bold')">太字</button>
        <button onclick="editor.execCommand('italic')">斜体</button>
        <iframe></iframe>
        <script>
            editor = document.getElementsByTagName("iframe")[0].contentDocument;
            editor.designMode = "On";
        </script>
    </body></html>
  2. Enjoy!

なるほどわからん

  • <html>
    buttonとiframeがあるだけのHTMLを用意します。
    button:ボタンを表示する
    iframe:フレームを用意して、別のページを表示する。

  • <button>
    1. <button onclick="editor.execCommand('XXXXX')">
      onclickは、クリックされた時の処理を書きます

    2. editor.execCommand
      editor変数に対して、execCommandという関数を呼びます。
      execCommandはdesignMode="On"(あとで説明)のドキュメントに対して使用できます。
      これをつかうと様々な"リッチな機能"を使えます。

  • <script>
    1. document.getElementsByTagName
      現在のドキュメント内に該当するタグを検索する。戻り値は配列

    2. document.getElementsByTagName("iframe")[0]
      iframe要素の0番目、ひとつしか無いからそれを持ってくるはず

    3. document.getElementsByTagName("iframe")[0].contentDocument
      iframe要素の0番目の中身のドキュメントを参照する
      iframe内は、別のWebページみたいな扱いなのでそういうことですね。

    4. editor変数にiframe内のドキュメントを投入しておく
      onclickイベントで簡単に書きたいのでこうします。

    5. editor.designMode = "On";
      documentオブジェクトに対して、designModeプロパティを"On"に設定することで、
      リッチなエディタができちゃいます。

限られた空間だけエディタ化したかったので、iframeを使いました。

おわりに

ボタンを増やして、
execCommandを増やして、
CSSとか書くとよいと思います。

参考

Mozilla におけるリッチテキスト編集 | MDN

「submitで複数の関数を動かしたいんですけどどうやるんですか」

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

ぼく「うーん?????」
ぼく「あっ(jQueryのsubmitイベントに複数の処理ぶち込みたいんだろうなあ...って普通に書けばいいいと思います!)」

参考:http://api.jquery.com/submit/
要約:$("~~").submit( // ここに関数オブジェクトぶち込む // )

関数オブジェクト is 何:関数オブジェクトは関数オブジェクトや
参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope
要約:"function A(){}" もしくは "var A = function(){};" などとしたときの "A" の中身がソレ。
つーかfunction構文とかFunctionのインスタンスつくったときに生成できる。
(以下のサンプル見たほうが早いし用語とか解釈に若干不安が...)

まとめるとこんなかんじ

// ex.1
$("#form").submit(function(){
  // 処理A //
  // 処理B //
});
// ex.2
function AAA() {
  // 処理A //
}
function BBB() {
  // 処理B //
}

$("#form").submit(function(){
  AAA();
  BBB();
});
// ex.3
// 複数バインドしたときには、実行順序は多分バインドした順。A->B
$("#form").submit(function(){
  // 処理A //
});
$("#form").submit(function(){
  // 処理B //
});

おしまい

シェイクシェイクブギーナムーナサーワギーwwww

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

トップページに[Shake]ボタンを設置しました。

ごみオブジェクトを今の向きへ加速するやつです。

疲れた時にでも押してリフレッシュしましょう。

シェイクかどうか微妙ですが、いい命名が思いつかなかったのでいったんシェイクです。

今後もあれこれ機能増やして行きたいですね。

ピタゴラスイッチみたいのつくってみたいなーと思いつつ
スマホ対応もしたいなーと思いつつ
ぜんぜん手つかずですがそのうち実装します。

Windows7でTypeScript0.9のVSプラグインがインストールできなかった

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

【前提】
・Windows7 Professional x64 (サービスパックなし)
・VisualStudio 2012 Professional

【問題となったもの】
・TypeScript 0.9.1.1
http://www.microsoft.com/en-us/download/details.aspx?id=34790

System Requirementsを読むと、win7とvs2012組み合わせでもいけそうなことが書いてある。
が、なぜかインストール出来ない。

ググってみると、WebEssentialを入れろとか、ログを見せてあー再起動ねとか、
あれこれあったような気がしますがどれもダメ。

【解決】
ダメ元でWindowsUpdateして、SP1を入れたところ、インストールできた。

System Requirementsに書いておいてくれ頼む...

jQuery.ajaxとかjQuery.getとかでjsを取得したときに実行される

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

A. 公式ドキュメント読め
http://api.jquery.com/jQuery.ajax/

いちおう、めっちゃ要約を。


dataTypeを指定しないとMIMEにもとづいて勝手に解釈するでw
scriptが指定されたときは、取得した内容を実行して、その内容をコールバックに渡してやりま


うーん、時間のあるときに実装もみてみるかーーー

あと、deffered、jqXHRオブジェクトとかいまいちちゃんと分かってないので、そのうちちゃんとやりたいですね。

PHPの文字列結合がどうのこうの

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

どーもこんにちは。
PHPの文字列結合の話がちょっとでて、ほんとにそんなに時間差でるのかな?ということで簡単なテストコードをかきました。

string_concat.php
(DoSになりかねないのでほどほどでオナシャス...)

あれ・・・?
シングルクオート+ピリオドと、ダブルクオートの中に変数書くのと速度変わらなくね...??
それどころか後者の方が若干早いような気も....?????

.=じゃなくて、毎回代入だと、ダブルクオートの中の方が圧倒的に早いじゃないの....
うーーーーん????

最近?でもなさそうですけど、どこかのバージョンでなにか変わったんですかね。
詳しい方だれかおしえていただきたいです・・・

某社を退職していました

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

(7月中旬くらいに退職してました。)
夏休みインターンからそのままアルバイトとして、11ヶ月ほどお世話になっていました。

アプリの検証作業を行ったり
Ruby on Railsでほげほげしたり
CentOSセットアップしたり
Gitlab立てたり
データセンターへ行ってサーバーの片付けをお手伝いしたり
Ruby on Railsでほげほげしたり
といったことをしていました。
他にもPythonやC#をちょこっと、Flashもすこしやりました。
いづれにしても、やったことのないことばかり、しらないことばかりで、とてもおもしろかったです。
そこに居るだけでも勉強になることが多かったと思います。

Ruby on Railsばかりでしたが、そこから学んだことはあまりアウトプットできていないですね。
Rails要素はありませんが、RubyはARCやちょっとしたスクリプトなどで使っています。
Rails要素もこれからやっていけるとよいですね。

心残りといえば、最後に関わったモノがどうなるのか、というところです。
同じくアルバイトの方に半ば押し付けるような形になってしまい、申し訳ないと思います。
勝手な事をいっていることは承知の上ですが、試みは面白いのでぜひとも形にしていただきたいと思います。

ということで、関わったみなさま、ありがとうございました。


さて、次のお仕事は決まっています。
都心部にある某社に内定を頂いているので、そこでお世話になります。
よろしくお願いします。

大学での卒研・論文が疎かにならない程度にがんばります。
なお卒研の方では、Webセキュリティについてほげほげしています。
完成度はまだまだですが、がんばって上げていきます。


(追)
お引越しを考えているので、仕事場所からあまり遠くなく、良さそうな場所あったら教えて下さい。

Inspector拡張の話、MFUのコンフィグの

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

参照: http://sourceforge.jp/projects/mmd-for-unity/scm/svn/commits/149
※r149が最新のコミットでもリリースされたものでもないので間違いないようおねがいします。

 InspectorBase.cs で [CustomEditor(typeof(Object))] を引っ掛けて、PMDInspector/VMDInspector に振り分けています。もし、他のスクリプトなどでも [CustomEditor(typeof(Object))] を使っている場合は、どちらかが動かなくなってしまうので、動かさなくてもいいほうをコメントアウトするとよさそうです。
 そのために、InspectorBase.cs の先頭あたりの#defineの1行をコメントアウトするだけで、InspectorBase.cs全体を無効化することができます。

 PMDInspectorでは、PMDLoaderWindow相当の機能を提供しています。EditorGUILayoutを使ってGUIを組んで、PMDLoaderScriptに投げているだけですけれども。

 VMDInspectorも大体同様で、VMDLoaderWindow相当の機能を。こちらもEditorGUILayout使ってGUIを組み上げ、MMDLoaderScriptに投げています。


 ここまででInspectorの話はおわりまして、追加してみたMMD.Configの話を。

 作った経緯としては、何度もインポート作業をするような場合、設定が毎回リセットされててつらぽよーとかなりそうなので作りました。ほんとうは、Inspectorを使うか使わないか、の設定を載せたかったのですが、そんな高等なことはできなさそうだったので無しです...

 中身は、ScriptableObjectを継承したConfigクラスを中心に、あとは保存したいフィールドを用意しているだけです。なので、あとで設定が増えた、項目が変わった、といったことが起きても対応しやすい、と、思います。

 Inspectorで表示したり共通設定を用意したりと、のために ConfigBase というクラスを用意しており、これを継承することで折りたたみがついているGUIを形成できます。やっていることは簡単なので、継承しなくてもいいと思いますが...(決してラムダ式を使ってみたかっただけ...ではないですよ、決して。ええ、戻り値をboolにしても行けますけど、まあ、はい。)

 で、Configクラスのメンバで、このConfigBaseを継承したクラスを放り込むことで、保存、読み込み、Inspector表示、ができるわけです。

 どこかで使うときは、Config.LoadAndCreate() で、得られます。

// Sample: PMDLoaderWindow
20 public PMDLoaderWindow()
21 {
22     // デフォルトコンフィグ
23     var config = MMD.Config.LoadAndCreate();
24     shader_type = config.pmd_config.shader_type;
25     rigidFlag = config.pmd_config.rigidFlag;
26     use_mecanim = config.pmd_config.use_mecanim;
27     use_ik = config.pmd_config.use_ik;
28 }

 保存は意図的に行わなくても、多分大丈夫です。多分。
 Config.csと同じフォルダにConfig.assetとしてバイナリが保存されます。
 Config.csファイルが他にもあると、そっちに保存されてしまう可能性があります。という部分だけ注意をしていただければ....(直したい

 あとは....r149で追加したものはすべてMMD名前空間に放り込みました、というぐらいですか。
 思えば、MMD.Editors とかの名前空間の方がよかったかも..?

 他は...とくにないですかね。
 追加したInspector周りにバグがあるっぽいので、上の件と合わせて検証して直します。

Inspector拡張の

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

先日書いた https://gomiba.co.in/blog/?p=94 この記事の続報。

以前質問した場所は流れてしまったっぽいので、そのまま削除しました。
で、同じような質問をFacebookの「Unityユーザ助け合い所」の方で質問しなおしました。
すると、いまEditor拡張がアツく最近Unityの中の人になった @kyusyukeigo さんがサンプルコードつきの回答を出してくれました。

 

"UnityEngine.ObjectのCustomEditorを作成する"
http://anchan828.hatenablog.jp/entry/2013/06/24/024425

 

ありがとうございます!

やはり以前の記事にも書いたように、[CutomEditor(typeof(Object))] をもつたった1つのクラスを作ってそこから振り分けていますね。じゃあ、まあ、いいか。あとはなんか設定項目みたいのでON/Offできるとよさそうですよね。

というわけで、MFUのInspectorでどうこうするのやっていきます。
なお手元はすでにこの状態な模様:うん、おっけーだろ on Twitpic

enabled=false なスクリプトに対して SendMessage

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

1. 適当なオブジェクトについてるスクリプトをInspectorから無効化します。

2. スクリプト内の Start() とかその他のメソッドが走らないことを確認します。

3. 無効化したスクリプトに向けてSendMessageします

4. SendMessageで指定したメソッドが走ります

5. 楽しい!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

MMD for UnityのIKスクリプトのパフォーマンス計測もどきをしてたらめっちゃアラート出てきました。
ルートオブジェクトについたMMDEngineからSendMessageしてCCDIKSolver.Solveを呼び出していまるので上記に該当してたわけですね。

無効化したスクリプトに対しても何事もなくSendMessageを呼べてしまうの、んっ!? となったけどいいんでしょうかね

ともかく、髪IKがどうこうみたいな問題もありますので、一旦これでコミットしま(す|した)
(CCDIKSolver.Solveの先頭に if(!this.enabled) return; が増えただけですが)


追記

3.5のときはこの問題(?)はなかったような気がしますけど、多分気のせいですね。
その内確認するかもですが、別にやったからといって、うぅん・・・


1 2 3 4 5 6 7 8 9 10 11 12 13