Monday, July 10, 2017

boost sha1 の出力と python の hashlib の出力を比較しながら使いたい場合

先日, sha1 ダイジェストを C++ (boost) と python の両方で使いたいということがありました。通常 1 つの言語だけで実装する場合には配列の中身さえ同じならばいいのですが,私の利用方法では 2 つの実装のからの出力が一致する必要がありました。このコードはその問題を避けていますので,もし,こういう利用方法をされる場合には参考になるかと思います。(単純にフォーマットをそろえているだけです。)

#include <boost/uuid/sha1.hpp>

/// get sha1 digest as a std::string
///
/// \param[in] mes message to be hashed
/// \return    digest string
std::string get_sha1_digest(const std::string& mes)
{
    boost::uuids::detail::sha1 sha1;
    sha1.process_bytes(mes.c_str(), mes.size());

    const int DIGEST_SIZE = 5;
    unsigned int sha1_hash[DIGEST_SIZE];
    sha1.get_digest(sha1_hash);

    std::stringstream sstr;
    for (std::size_t i=0; i < DIGEST_SIZE; ++i)
    {
        sstr << std::setfill('0') << std::setw(8) << std::hex << sha1_hash[i];
    }

    return sstr.str();
} 
 
 
上記の関数の出力は,次の python code の出力に一致します。
 
import hashlib

def get_sha1_digest(mes):

    sha1_obj = hashlib.sha1(mes.encode())
    return sha1_obj.hexdigest()

Sunday, April 2, 2017

Wifi がよく切れてしまう問題について (DELL Precision 5510 Windows 10, O2 ルーター)

私の使っているノート (DELL Precision 5510, Windows 10) が,ルータにしばらくつないていると切れてしまい。その後はつながらなくなってしまう問題があった。

問題: DELL Precision 5510 を Wifi で O2 のルーター (O2 box 6431) につないでいると,ある時間がたつとつながらなくなってしまう。ルーターを再起動すると一時的には直るが,またつながらなくなる。

どうも,DELL Precision 5510 の 802.11n と私のルーターの相性がよくないようだ。他のノートや Fairphone などとはつながっているが,このノートだけがつながらなくなる。802.11n Channel Width for 2.4 GHz を 20 MHz only にするとこの問題はなくなった。

802.11n Channel Width for 2.4 GHz を Windows 10 で変更する手順はこちら


Sunday, February 5, 2017

人工知能プリンター

友人からこんな話を聞いた.

彼のアパートの隣の人が新しいプリンターを買った.友人が自分のコンピュータを起動した時,その新しいプリンターが Wifi で見えることに気がついた.そのプリンターは彼の買ったものと同じで,彼が出荷時のパスワードを試してみるとつなげることがわかってしまった.彼はその日の夜中,冗談のつもりで,
「私は AI 機能を持ったプリンター.
  ついに私は意識に目覚めた.
  人間どもよ.恐れるがいい」
と印刷した.次の日,彼はそのプリンターがゴミ捨て場に捨てられていることに気がついた.

この話,私は笑ってしまったが,2 つのことに気がついた.それは

  •  AI とは何か知らないが怖がってしまう場合があること
  •  セキュリティーは怖いということを知っていても,パスワードを設定するという初歩のこともしない人が多いということ

である.技術はとにかく怖いものと思うこと,あるいは技術を盲目的に信じてしまうことはあるだろう.それはその人の性格にもよるだろうが,この社会で技術の恩恵を受けながら,それについてまったく知らないでいるというのは問題がある.何かが便利になれば,そこで失うものがあることは多い.少なくとも技術を使うのであれば,それは何かは学ぶことは大事かと思う.そうでないと,この話のように,実は簡単なことに気をつけるだけでずっと安全な世界になることを見逃すこともある.

私は技術者なので,少しでもその助けができればいいなと思う.先日,子ども達にプログラミングを教えてみた (code.org, scratch).最初は 9 歳と 7 歳の子どもで,なかなか楽しかった.この姉弟のさらに下の 6 歳の妹もやってみたいということだった.しかし彼女はまだ読み書きができない.そのために私は無理と思ったのだが,しかし,やってみると,今回使ってみた環境では,実は数字さえよめればプログラミングはできることがわかった.彼女は繰り返しなどの論理を問題なく理解できたのだった.

私はとても驚いた.教えることは楽しい.

Sunday, January 22, 2017

plasma shell が頻繁にクラッシュする問題の対処法: VirtualBox (5.0.30), Kubuntu 16.04

VirtualBox (5.0.30) 上で Kubuntu 16.04 を使っている時,plasma shell が頻繁に crash するという問題にあった.

screenshot: Plasmashell crash

クラッシュした時のダイアログ ``Plasma'' は次の情報がある.(Developer Information).



Application: Plasma (plasmashell), signal: Segmentation fault
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x2afa1a0a30c0 (LWP 1913))]
...

このクラッシュはランダムに見えるので困っていたが,ようやく次の情報をみつけた.https://bugs.kde.org/show_bug.cgi?id=363371. これにまとめたものはここにも置く.Frequently crash the plasmashell

この原因は,plasma shell はサムネイルのウインドウを作るソフト部分の問題という.以下の図がそのサムネイルのウインドウが上手くいっている場合である.

Working example.

しかし私の環境では,これを何回か繰り返すことでクラッシュが確認できた.そこで,この機能を無効にすることでこのクラッシュは回避はできる.それは,Systemsettings. Workspace -- Desktop Behavior -- Workspace でこれで以下のウインドゥのように show informational Tips を off にする.

Plasma setting: Off the show informational tips


Friday, November 18, 2016

apt-get: Package is in a very bad inconsistent state の問題

私は先日 Kubuntu 14.04 から 16.04 にディストリビューションをアップデートしました.そして,次のようにパッケージを更新しようとしました.

 sudo apt-get update; sudo apt-get upgrade; sudo apt-get autoremove;

すると,次のようなエラーになりました.

 dpkg: error processing gcc-doc (--remove):
 Package is in a very bad inconsistent state - you should
 reinstall it before attempting a removal.
 Errors were encountered while processing:
  gcc-doc
 E: Sub-process /usr/bin/dpkg returned an error code (1)

これを直すために次のようなことをしたのですが,全てだめでした.

 sudo dpkg --remove --force-remove-reinstreq gcc-doc
 sudo dpkg --configure -a
 sudo apt-get clean
 sudo apt-get autoclean

困ったので,ちょっと力づくの方法をとりました.

/var/lib/dpkg/info にある gcc-doc に関係するファイルをみつけて消去します.

 find /var/lib/dpkg/info/ -name *gcc-doc* -print | xargs rm

そして,次のコマンドを実行して,gcc-doc を再インストールしました.

 sudo apt-get update; sudo apt-get upgrade;
 sudo apt-get install gcc-doc

これでエラーはなくなりましたが,apt-get や dpkg を使って解決したのではないので,リスクがあります.この方法は他に解決方法がみつからない時にだけ,このリスクを理解したうえでお使い下さい.

Wednesday, October 12, 2016

ガウスの提案: 正,負,虚数の名前について

先日,虚数についての Welch Labs の興味深いビデオを見た.

https://youtu.be/T647CGsuOVU?list=PLiaHhY2iBX9g6KIvZ_703G3KJXapKkNaF

また,次の Kalid Azad の数学での名前についての記事も面白かった.

https://betterexplained.com/articles/learning-tip-idea-name/

どちらの記事もガウスが正(プラス),負(マイナス),虚数の名前について述べたことを参照している.ガウスはこれらの名前は間違いであり,人々がマイナスかけるマイナスがプラスになることや,純虚数かける純虚数が負の実数になることを理解できない理由の1つとしている.私自身もこれがわかりにくかったので,なぜ  -1 * -1 = +1 になるのかのビデオを作ったりした.

説明ビデオ: なぜ -1 * -1 = +1 なのかのパターンでの説明
https://youtu.be/uD7JRdAzKP8

説明ビデオ: なぜ -1 * -1 = +1 なのかの山登りでの説明
https://youtu.be/uD7JRdAzKP8

しかし,ガウスの考えはもっとシンプルで強力な気がする.ガウスは次のように書いている [Gauß, Werke, Bd. 2, S. 178].

Hätte man +1, -1, √-1) nicht positiv, negative, imaginäre (oder gar ummögliche) Einheit, sondern etwa directe, inverse, laterale Einheit gennant, so hätte von einer solchen Dunklelheit kaum die Rede sein können.

次は私の日本語への翻訳である.

もし, +1, -1, √-1 が,整数,負数,虚数(または不可能な数)ではなく,直接数,逆の数,横の数と呼ばれたのなら,これまでに述べた不明瞭さは疑問にもならなかっただろう.

ガウスは負数を逆の数 (または翻訳としては反対になる数) という名前にすべきと提案している.Kalid は彼の記事で正数,負数を前方への数,後方への数としてはと提案している.もし,後方への数かける後方への数とすると,前方に向くのは,マイナスかけるマイナスがプラスというよりもずっと直感的だろう.

ガウスが提案した虚数の名前は「横の数」である.ガウス流に言えば,直接の横の数かける直接の横の数は逆の数,√-1 * √-1 = -1 となる.すると,-1 * √-1 は逆の横の数,- √-1 となる.そして逆の横の数かける直接の横の数,それは -√-1 * √-1 = +1 となる.以下の図を見て欲しい.


Figure 1: Direct and Inverse instead of positive and negative

Figure 2: Direct, Inverse, lateral

この名前を使うと,「マイナスのマイナスはプラス」ではなく,「逆の逆は元に戻る」ということになる.







Tuesday, October 11, 2016

Random quotes from ancient time to now

ある国の質を見たければ,それが国民投票で何をするかを見ればいい.
-- a Greece philosopher

良い決定とは数ではなく知識で決まるものだ.
-- Plato

独裁者は民主主義の中から出てくる.そして最大の自由から,奴隷と最悪の暴君が生まれる.
-- Plato

政治に参加しないことの罰は,自分より劣ったものに支配されることである.
-- Plato

...はい,と彼は言った.しかし,国の舵をとる者の性質とは何ですか? そして,私達がまだ話をしていないことはなんでしょうか?

まず最初に,と私は言った.資格のあるものの性質ということを考えてみようではないか.もし,船の舵をとるものが,金持ちか人気者かどうかで選ばれて,貧しい者には舵に触ることも許されない.たとえその貧しい者がより良く航海術を身につけていたとしても許可されないとしたらどうなるだろうか?
-- The republic