ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2017年10月30日月曜日

micro:bit でシューティングゲーム

micro:bit を購入。
micro:bitはプログラミング可能な小さなコンピューターで、学習や教育が楽しく簡単に出来るようにデザインされています。http://microbit.org/ja/
ものは、こんなもの。
micro:bit 本体
開発はWebアプリで。
https://makecode.microbit.org/
micro:bit IDE
ブロックを組み合わせて、簡単プログラミング!
といっても、小学3,4年生には変数が難しいみたい。

小学生に興味を持ってもらうために書いた、簡単なシューティングは以下。

ここ↓にある「microbit-shootingGameEasy.hex」を、micro:bitにインストールすれば動くよ。
https://github.com/goaoyagi/microbit/tree/master/bin

JavaScriptのコードは以下。
https://github.com/goaoyagi/microbit/blob/master/src/shootingGameEasy.js

お試しあれ~(音も出るけど、音出すにはケーブルが必要)

日本ではここ↓で買える。
https://www.switch-science.com/catalog/3380/

2014年6月23日月曜日

tasklist Windowsの実行中のタスク(プロセス)一覧(リモート可)

タスクマネージャが起動できない場合や、リモートで実行中のタスク(プロセス)を知りたい場合に、使えるコマンドが、tasklist。

リモートで取得するときは、こんな感じ。

tasklist /s [コンピュータ名] /u [ユーザ名]\[ドメイン名] /p [パスワード]

詳しくは、以下。

2014年6月3日火曜日

msinfo32 Windowsのシステム情報を取得(リモート可)

トラブル発生時とかに、呼び出されているdllの情報とかが知りたいなんてことがある。
そんな時、便利なのが、msinfo32。



リモートで他の端末の情報も見れる。



2014年4月16日水曜日

JavaのOSSのライブラリ 使えそうなものをピックアップ

JavaのOSSのライブラリは、たくさんあるけど、一覧化されてるものがなく、概要もわからないので、一覧化してみた。


No.ライブラリ名概要
1Apache Commons Compress圧縮を容易にするライブラリ
2Apache Commons BeanUtilsBean の取り扱いを簡単にするライブラリ
3Apache Commons CollectionsCollection関係を拡張するライブラリ
4Apache Commons DigesterXMLからJavaの簡易なバインディングツール
5Apache Commons FileUploadファイルアップロードを簡単にするライブラリ
6Apache Commons IO入出力まわりを簡単にするライブラリ
7Apache Commons Lang文字列系処理を拡張するライブラリ
8Apache Commons Configuration定義ファイルへのアクセスを簡単にするライブラリ
9Apache Commons CSVCSVの書き込み・読み込みを容易にするライブラリ
10Apache Commons EmailJavaMailより簡単にメール作成できるライブラリ
11Apache Commons Math計算系ユーティリティ(難しい計算があれば)
12Apache Commons Loggingロギングインタフェース用ライブラリ
13SLF4Jロギングインタフェース用ライブラリ(Logbackと共に使ってみたいライブラリ)
14Log4jロギング実装ライブラリ
15Logbackロギング実装ライブラリ(SLF4Jと共に使ってみたいライブラリ)
16FreeMarkerテンプレートエンジン(CSVとかも簡単に作れる。ただ、少し処理が遅い。)
17Google GuavaApache Commonsにありそうなものをまとめたライブラリ(使ったことはないが、StreamのCloseなど、かなり簡潔に書けるので、衝撃的だった)
18Joda-Time日付系ユーティリティ(日付関連のJava標準ライブラリの強化はJava8で行われたので、7までは入れておくとよい)
19fastutilCollection関係の操作を高速化するライブラリ(Listに対して、何度もループする場合などに用いるとよい)

2013年10月28日月曜日

jQueryで要素の置換 select要素(セレクトボックス)←→textタイプのinput要素(テキストボックス)

jQueryで要素の置換は、replaceAllやreplaceWithを使う。

replaceWithを使う例として、div要素の置換は、よく見かけるけど、select要素の置換はあまり見かけなかったので、メモっとく。


「radioタイプのinput要素(ラジオボタン)を変更した場合に、他のselect要素を選択できなくさせたい」って時に、disabledにするとグレーアウトされて、見た目の変更ができなくて困った。

で考えたのが、readonlyで行こうと。(submitされるけどね)
readonlyなら、フォントの色の変更とかができて自由だし。

でも、select要素には、readonlyがない。

ということで、select要素をtextタイプのinput要素(テキストボックス)に置換して、readonlyにすることで、落ち着いた。


jQueryならシンプルで簡単にできると思ったら、functionの実行時に、DOM操作が即時反映されないことが仇になり、結構苦戦。

素のJavaScriptでやってしまったら負けだと思って、追求したら、なんとかできた。

<!doctype html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Example</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript">
    var example = {
        /**
         * idをキーにtextタイプのinput要素に置換したselect要素を保持する連想配列.
         */
        clonedSelects: {}
        ,
        /**
         * select要素をtextタイプのinput要素に置換する.
         * @param id select要素のid
         * @param value 固定のvalueを指定する(未指定の場合、現在選択中のvalueが設定される)
         */
        replaceToText:
            function (id, value) {
                // id内の.(ドット)はエスケープ
                var elem = $('#' + id.replace(/\./g, '\\.'));
                // select要素でない場合、処理終了
                if (elem[0].nodeName != 'SELECT') {
                    return;
                }
                
                example.clonedSelects[id] = elem.clone(true);
                
                // 固定のvalueを設定
                if (typeof value !== 'undefined') elem.val(value);
                
                // select要素のvalue値をhiddenで持つ
                var elemHidden = $('<input type="hidden"/>');
                // replaceWithを行うまではidが重複するため、別のidにする
                elemHidden.attr('id', id + 'Hidden');
                elemHidden.attr('name', elem.attr('name'));
                elemHidden.val(elem.val());
                elem.after(elemHidden);
                
                // select要素をtextタイプのinput要素に置換
                elem.replaceWith(function (elem, id) {
                    var elemText = $('<input type="text"/>').attr({readonly: 'readonly', tabindex: '-1'});
                    elemText.val(elem.children(':selected').text());
                    elemText.attr('style', elem.attr('style'));
                    
                    // textタイプのinput要素にするため、id,nameを変更
                    elemText.attr('id', id + 'Text');
                    elemText.attr('name', elem.attr('name') + 'Text');
                    return elemText;
                }(elem, id));
                
                // replaceWithを行った後、select要素のidをhiddenへ設定
                elemHidden.attr('id', id);
            }
        ,
        /**
         * textタイプのinput要素をselect要素に戻す.
         * "戻す"と記載しているのは、select要素を保持しているのが前提のため。
         * @param id 戻すselect要素のid
         * @param value 固定のvalueを指定する(未指定の場合、現在選択中のvalueが設定される)
         */
        replaceToSelect:
            function (id, value) {
                // select要素を保持する連想配列に存在しない場合、処理終了
                if (typeof example.clonedSelects[id] === 'undefined') {
                    return;
                }
                
                // id内の.(ドット)はエスケープ
                var elemHidden = $('#' + id.replace(/\./g, '\\.'));
                // replaceWithを行うとidが重複するため、事前に別のidにする
                elemHidden.attr('id', id + 'Hidden');
                
                // 固定のvalueを設定
                if (typeof value !== 'undefined') elemHidden.val(value);
                
                // id内の.(ドット)はエスケープ
                var elem = $('#' + id.replace(/\./g, '\\.') + 'Text');
                elem.replaceWith(function (id, value) {
                    var elemSelect = example.clonedSelects[id];
                    
                    // select要素に戻すため、idも戻す
                    elemSelect.attr('id', id);
                    
                    elemSelect.val(value);
                    
                    return elemSelect;
                }(id, elemHidden.val()));
                
                // select要素に戻したため、保持していたselect要素を削除
                delete example.clonedSelects[id];
                
                // select要素に戻すため、hiddenを削除
                elemHidden.remove();
            }
    }
    </script>
</head>
<body>

<input type="radio" name="radioexample" onclick="example.replaceToSelect('example');" checked="checked" />select要素へ置換
<input type="radio" name="radioexample" onclick="example.replaceToText('example')" />textタイプのinput要素へ置換

<br />

<select id="example" name="example">
    <option>サンプル1</option>
    <option>サンプル2</option>
    <option>サンプル3</option>
</select>

</body>
</html>

(注)select要素の置換なので、textタイプのinput要素を初期表示としたい場合、onloadでtextタイプのinput要素とすること。

(注)id内のドットのエスケープは、Strutsなどを使用していない限り、なくてもOK。


JavaScriptライブラリを比較するときに、役に立った本。
jQuery、Prototype、Dojo、YUI、script.aculo.usを比較してる。
今は、jQuery優勢かな。