2018年10月14日日曜日

JavaScriptで10進数と16進数を変換する方法

JavaScriptで10進数と16進数を変換する方法を紹介します。

まず、16進数を、10進数に変換する方法です。
以下のサンプルコードでは、16進数の"DB"や"0A"を、10進数に変換しています。
    var a = parseInt("DB", 16);
    var b = parseInt("0A", 16);

次に、10進数の数値を16進数の文字列に変換します。
以下のサンプルコードでは、intの変数aを、16進数の文字列に変換しています。
    var c = a.toString(16);

結果、変数cには、16進数の文字列が格納されます。

JavaScriptでExcelファイルを読み込む方法

JavaScriptでエクセルファイルを処理して、分析したい場合があります。その方法を紹介します。

エクセルを処理するライブラリは色々と公開されていますが、以下のサイトで公開されている xlsx.full.min.js を使うことにします。
https://github.com/SheetJS/js-xlsx

以下がサンプルコードです。

// エクセルファイルを処理する関数。inputタグでファイルを受け取り、jQueryのイベントeとして受け取る想定。
function parseExcel(e) {
    var files = e.target.files;
    var file = files[0];
    var reader = new FileReader();
    reader.onload = function (e) {
        var data = e.target.result;
        var wb;
        var arr = fixdata(data);
        wb = X.read(btoa(arr), {
            type: 'base64',
            cellDates: true,
        });
        var output = to_json(wb); // 変数outputにJSON形式のデータが格納される。

        // ここから、JSON形式になったエクセルのデータを処理可能
    };
    reader.readAsArrayBuffer(file);
}

function fixdata(data) {
    var o = "",
        l = 0,
        w = 10240;
    for (; l < data.byteLength / w; ++l) {
 o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
    }
    o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
    return o;
}

function to_json(workbook) {
    var result = {};
    workbook.SheetNames.forEach(function (sheetName) {
        var roa = X.utils.sheet_to_json(
            workbook.Sheets[sheetName],
            {
                raw: true,
            });
        if (roa.length > 0) {
            result[sheetName] = roa;
        }
    });
    return result;
}
fixdataとto_jsonは、おまじないだと思ってもよいでしょう。

正常に処理できれば、変数outputに、JSON形式に変換されたエクセルデータが格納されます。

一度、console.logなどで変換されたデータを出力してみれば、どのような形でデータにアクセスすればよいかが、わかるでしょう。

これで、JavaScriptの豊富なプレゼンテーションライブラリを使い、エクセルデータを可視化することができます!

2018年10月2日火曜日

pukiwikiで、添付できるファイルのサイズを増やす方法

pukiwiki 1.5.1です。

pukiwikiは、デフォルトで、添付できるファイルの最大サイズは2MBです。いまどき2MBなんて、簡単に超えてしまいます。添付できるファイルの最大サイズを増やすためには、phpとpukiwikiの両方の設定変更が必要です。以下、Linuxにpukiwikiをインストールしたという前提で、添付できるサイズを100MBにする方法を説明します。

phpの設定

/etc/phpディレクトリ以下に、post_max_sizeというパラメータや、upload_max_filesizeというパラメータが書かれているphp.iniファイルがいくつかあります。以下、grepコマンドで、ファイルを検索してみます。
$ grep -R post_max  /etc/php/7.0/*
/etc/php/7.0/apache2/php.ini:post_max_size = 100M
/etc/php/7.0/cli/php.ini:post_max_size = 100M
/etc/php/7.0/fpm/php.ini:post_max_size = 100M
$ grep -R max_filesize  /etc/php/7.0/*
/etc/php/7.0/apache2/php.ini:upload_max_filesize = 100M
/etc/php/7.0/cli/php.ini:upload_max_filesize = 100M
/etc/php/7.0/fpm/php.ini:upload_max_filesize = 100M
上記のように、全て 100M という値に設定しましょう。

pukiwikiの設定

pukiwikiの設定は、plugin/attach.inc.phpで行います。 以下のように、upload_max_filesizeパラメータと、PLUGIN_ATTACH_MAX_FILESIZEパラメータを、100MBに設定しましょう。
ini_set('upload_max_filesize', '100M');

// Max file size for upload on script of PukiWikiX_FILESIZE
define('PLUGIN_ATTACH_MAX_FILESIZE', (1024 * 1024 * 1024)); // default: 100MB

これで、100MBのファイルを添付できるようになりました。もちろん200MBでも300MBでも大丈夫だと思います。そこはお好きなように設定してください。

2018年10月1日月曜日

Pythonで、.pycファイルや__pycache__ディレクトリを作らないようにする方法

Pythonはデフォルトで、クラスファイルをコンパイルした .pyc ファイルを作ります。Python 3系だと、__pycache__ディレクトリを自動的に作成して、その下に .pyc ファイルを作ります。

一度 .pyc ファイルを作っておけば、次回から、スクリプトの実行が少し速くなります。

ただし、スクリプトをこまめに変更する場合は、結局毎回コンパイルするので、あまり .pyc ファイルを保存しておく意味がありません。また、ディレクトリに勝手にファイルやディレクトリを作られると、ちょっとうざいです。git statusとかすると、untrackedなファイルとして表示されたりしますし。gitignoreしておけばいいのかもしれませんが、、、

ともかく、勝手にファイルやディレクトリを作ってほしくない場合は、環境変数に以下を追加しましょう。
export PYTHONDONTWRITEBYTECODE=1
これで、.pycファイルが作られなくなります。

bashを使っている場合は、.bashrcファイルの最後のあたりに、上記の設定を追加しておきましょう。これで、ログインしなおせばOKです。byobuとかscreenを使ってる場合は、一度terminateして、もう一度byobuscreenを実行しましょう。


2018年9月30日日曜日

Pythonで最大値や最小値を求める方法

Pythonで最大値や最小値を求める方法を説明します。

Pythonにはmaxminという関数がデフォルトで用意されており、これらの関数を使うことで、最大値や最小値を求めることができます。

以下がサンプルコードです。

print(max(1, 5))
print(max(10, 5, -3))

print(min(1, 5))
print(min(10, 5, -3))
これを実行すると、以下のようになります。
$ python hoge.py
5
10
1
-3
最大値や最小値が求められていることがわかります。

ちなみに、以下のように、配列を渡すこともできます。
print(max([1, 3, 5, 2]))

上記のコードを実行すると、5が出力されます。

Pythonで時間を測る方法

Pythonで時間を測る方法を紹介します。

ある処理にかかる時間を計測するための簡単な方法は、timeモジュールを使う方法です。以下がサンプルコードです。

import time

start = time.time() # 開始時刻

# 何かしらの処理
#  :
#  :

elapsedTime = time.time() - start
print("経過時間 " + str(elapsedTime) + " 秒")

これで、「何かしらの処理」にかかった時間を、単位=秒で計測できます。

上記のコードは、Python 3.5で動作を確認しています。

2018年9月22日土曜日

Windws 10で、マウスホイールの方向を逆にする方法

Windws 10で、マウスホイールの方向を逆にする方法を紹介します。

最近はスマホの操作になれたこともあって、マウスホイールを上に回したら、下にスクロールしてくれないと気持ち悪いです。でも、ふつうにUSBマウスをパソコンにつなぐと、上に回したら上スクロールします。というわけで、逆にする方法を紹介します。
  • ウィンドウズボタン+Xを押して、デバイスマネージャを選択
  • マウスのプロパティを選択
  • 詳細タブを選択
  • プロパティとしてハードウェアIDを選択
  • ハードウェアIDを確認(VID_XXX&PID_XXXXという値)
  • ウィンドウズボタン+Xを押して、ファイル名を指定して実行を選択
  • regedit と入力し、レジストリエディターを起動。
  • HKEY_LOCAL_MACHINE → SYSTEM → CurrentControlSet → Enum → HID → 確認したハードウェアIDのフォルダ、の順でフォルダを開いていく。
  • さらに、謎の数字が羅列してあるフォルダの下にあるDevice Parametersをクリック
  • 右側に表示されるパラメータのFlipFlopWheelを右クリックして、修正を選択
  • 値のデータ1にして、OKをクリック
  • レジストリエディターを閉じる
  • USBマウスを抜いて、挿す。これでホイールの方向が逆になっているはず!

ちなみに、マウスのハードウェアIDは、USBポートごとに異なります。つまり、別の場所にマウスを挿すなら、別途、設定が必要です。

また、ウィンドウズアップデートすると、この設定がリセットされる場合もあります。
その場合も再設定が必要です。←これが、非常にめんどう。。。

JavaScriptで10進数と16進数を変換する方法

JavaScriptで10進数と16進数を変換する方法を紹介します。 まず、16進数を、10進数に変換する方法です。 以下のサンプルコードでは、16進数の"DB"や"0A"を、10進数に変換しています。 var a = pa...