2016年9月27日火曜日

無題

村上龍著「希望の国のエクソダス」を読んだ。
思ったよりシリアスで読み応えのある小説。
金融危機に関する描写が少し重いかもしれないけど、
日本社会に対する批判は鋭いし、
とりあえずの処方箋も提示している。
要再読。

時給千円のデータ入力のバイトでさえ、
書類選考で落ちるんだから、笑えるなあ。
6週間ぐらいで計50件近く応募したんだけど、ダメだった。
バイトや派遣の仕事を探すより、何か他のことをやれ、ということか。

2016年9月22日木曜日

簡易条文ビューア - 挫折

不具合満載で機能不足だけど、ここで打ち切り。
久しぶりにJavaScriptいじろうとしたらさっぱり忘れてて、
ググッて見つけたコードをコピペしてたら疲れた、もうやめた。



概要:ローカルでWEBブラウザを使って税法の条文を閲覧・編集するためのツール

環境:
Ubuntu
Chromeブラウザ(バージョン51.0 (64-bit))

---必要なファイル---
bootstrap-3.3.7-dist (http://getbootstrap.com/)
jquery-1.11.3 (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js)
encoding.js (http://polygon-planet-log.blogspot.jp/2012/04/javascript.html)
消費税法のHTMLファイル(今日現在)
(http://law.e-gov.go.jp/htmldata/S63/S63HO108.html)


準備:

1.bootstrapをダウンロードし、解凍してできたフォルダの中(作業ディレクトリ)へ移動

2.jquery.min.jpをjsフォルダ内にコピー

3.encoding.jsをjsフォルダ内にコピー

4.消費税法のHTMLファイル(消費税法.html)を作業ディレクトリに置く

4.viewer.html(下記参照)を作業ディレクトリに置く


使い方:

1.viewer.htmlをブラウザで開く

2.画面右手の操作パネル内の「ファイルを選択」ボタンをクリックし、消費税法.htmlを読み込む

3.条文が表示されるので、編集

文字列を選択してから、
太字:Ctrl+B
下線:Ctrl+U
斜体:Ctrl+I
コピー:Ctrl+C
貼り付け:Ctrl+V
操作パネル内のマーカーボタンでハイライト

5.操作パネル内の保存ボタンで、編集済みのテキストを保存、のはずなんだどけ、
機能せず。ファイルサイズ(614KB)のせい?憲法(58KB)なら動いた。


viewer.html -------------------------------------------------------------

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>簡易条文ビューワ</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/encoding.js"></script>
<style>
.container{
position: fixed;
z-index: 9999;
opacity: 0.8;
}

.row{
    margin-top:10px;
    margin-left:-30px;
    padding: 0 10px;
}

.clickable{
    cursor: pointer;
}

.panel-heading span {
margin-top: -20px;
font-size: 15px;
}
</style>
<script>
$(document).on('click', '.panel-heading span.clickable', function(e){
var $this = $(this);
if(!$this.hasClass('panel-collapsed')) {
$this.parents('.panel').find('.panel-body').slideUp();
$this.addClass('panel-collapsed');
$this.find('i').removeClass('glyphicon-chevron-up').addClass('glyphicon-chevron-down');
} else {
$this.parents('.panel').find('.panel-body').slideDown();
$this.removeClass('panel-collapsed');
$this.find('i').removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-up');
}
})

function gettext( maintxt ){
var myRe = /(<b>第.*条<\/b>)\s*(<a name="\d*">)(<\/a>)/g ;
var menu = "";

maintxt = maintxt.replace( /<html>[\s|\S]*<body>/ , "" ) ;
maintxt = maintxt.replace( /<\/body>[\s|\S]*<\/html>/ , "" ) ;

while ((myArray = myRe.exec( maintxt )) !== null) {
myArray[2] = myArray[2].replace( /name="/, 'href="#');
menu = menu + myArray[2]+ myArray[1] + myArray[3] + "<br />";
}

document.querySelector("#menu").innerHTML = menu;
document.querySelector("#maintxt").innerHTML = maintxt;
}

window.onload = function(){
document.querySelector("#afile").addEventListener(
'change', afile_changeHandler);

document.querySelector("#markercolor").addEventListener(
'change', markercolor_changeHandler);

document.querySelector("#fontsize").addEventListener(
'change', fontsize_changeHandler);
}

var fontsize = 14;
function fontsize_changeHandler(evt){
fontsize = document.querySelector("#fontsize").value;
$("#maintxt").attr("style", "font-size: " + fontsize + "px;");
};

var markercolor = "#FFFF00";
function markercolor_changeHandler(evt){
markercolor = document.querySelector("#markercolor").value;
};

function afile_changeHandler(evt){
var file = evt.target.files[0];
var reader = new FileReader();

reader.onload = function (e) {
var array = new Uint8Array(e.target.result);
switch (Encoding.detect(array)) {
case 'UTF16':
array = new Uint16Array(e.target.result);
break;
case 'UTF32':
array = new Uint32Array(e.target.result);
break;
}
var unicodeArray = Encoding.convert(array, 'UNICODE');
var text = Encoding.codeToString(unicodeArray);
gettext(text);
}
reader.readAsArrayBuffer(file);
}

jQuery(function($) {
    $("#marker").click( function(evt) {
var selObj = window.getSelection();
if (selObj == '') {return false;}
var range = selObj.getRangeAt(0);
var span = document.createElement("span");
span.style.backgroundColor = markercolor;
range.surroundContents(span);
    });
});

jQuery(function($) {
    $("#savetext").click( function() {
if (typeof Blob == "undefined") {
alert('このブラウザには対応していません');
}

var newtext = document.querySelector("#maintxt").innerHTML;
if ( newtext == "" ) return;
newtext = "<html><body>" + newtext + "</body></html>";
var blob = new Blob([ newtext ], { "type" : "application/x-mssavetext" });

window.URL = window.URL || window.webkitURL;
$("#savetext").attr("href", window.URL.createObjectURL(blob));
$("#savetext").attr("download", "sample.html");
jQuery("#savetext").trigger("click");
    });
});
</script>
</head>
<body>
<table width="100%"><tr><td width="50%">
<!-- left panel --------------------------------------------------------->
<div class="container">
<div class="row">
<div class="col-md-3">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">目次</h3>
<span class="pull-right clickable"><i class="glyphicon glyphicon-chevron-up"></i></span>
</div>
<div class="panel-body">
<div id="menu"></div>
</div>
</div>
</div>
</div>
</div>
<!------------------------------------------------------------>
</td><td width="50%" style="float:right;">
<!-- right panel --------------------------------------------------------->
<div class="container">
<div class="row">
<div class="col-md-3">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">操作パネル</h3>
<span class="pull-right clickable"><i class="glyphicon glyphicon-chevron-up"></i></span>
</div>
<div class="panel-body">
<input id="afile" type="file" name="selectfile" accept="text/html" /><br />
<a id="savetext" target="_blank"><input type="button" value="保存" /></a><br /><br />
フォントサイズ<input id="fontsize" type="range" min="10" max="18" step="1" /><br />
<input type="button" value="マーカー色" id="marker" />:<input type="color" id="markercolor" list="markerlist" value="#FFFF00" />
<datalist id="markerlist">
<option value="#FF0000"></option>
<option value="#00FF00"></option>
<option value="#0000FF"></option>
</datalist>
<br /><br />
</div>
</div>
</div>
</div>
</div>
<!------------------------------------------------------------>
</td></tr></table>
<!-- main text --------------------------------------------------------->
<div id="maintxt" contentEditable="true" style="font-size: 14px;"></div>
<!----------------------------------------------------------->
</body>
</html>

2016年9月20日火曜日

法律とIT その2

法情報学や法令工学といった言葉があるらしい。
これについてググってて見つけた、面白くて刺激的なページ:

「法律とプログラミング」 白田秀彰

「立法爆発と法律のオープン化」 榎並利博

要約すると、、、
法令とプログラミング言語には親和性がありそう。
エキスパートシステムを構築したり、XMLなどで構造化したりすれば、
難解な条文も理解しやすくなるんじゃね?
というより、そもそも元となる条文の言葉が曖昧だったりするんだから、
立法にオープンコーディングの手法を応用しよう!
そして、人にも機械にも優しい整合性のある法律体系を作っちゃおう!

一部の官僚が作った法令をコンピュータで分かりやすくする(努力をする)のではなく、
コンピュータを使って分かりやすい法令を作ろう、という逆転の発想。
特に税法は、みんなに関わってくるんだから、誰にでも理解できるものでないとね。
このアイデア、ぜひ検討して欲しいけど、政府はなかなか動かないだろうなあ、、、。
すぐには現状は変わりそうにない。
とりあえずは、法令工学か。

法令工学の2大潮流のうち、
エキスパートシステム構築系の例が、「論理憲法」で、
法令構造化系の例が、「Japanese Law + XML」ということかな。

前者に関して次の論文が参考になりそうだけど難しい:

「法令工学: 安心な社会システム設計のための方法論」 島津明

とりあえず、簡易条文ビューアのコードを書き始めた。

2016年9月19日月曜日

法律とIT

本試験後、問題を見なおしたり、学校の解答解説を聴いたりしなかったけど、
講義中に先生が言うには、法人税法と消費税法の計算問題にミスがあったらしい。
事前に問題を複数の人間でチェックする仕組みがないのかな。
税理士試験って結構、適当だな。
そう思ったら一気にモチベーションが下がって、答練の出来も悪かった。
体調は今ひとつだし、あいかわらず仕事は見つからないし、
PHP上級の勉強も進まないし。

涼しい日が多くなったのが唯一の救い。

冲方丁著「天地明察」、読んだ。
読んだら止まらなくなって、翻訳の仕事が遅れた。
仕事の量が少なかったから、なんとかなったけど。

以前、Windows上で動く条文調理師というソフトを少し使ってみたら
なかなか良かった。それで、おいらも似たものを作ってみたいと
思ってたんだけど、簡易版ならHTML5とJavaScriptで出来るかな?
そもそも、財務諸表のXBRLのように、法律条文用XMLもあるのかな?
ってググったら、面白そうなサイトを見つけた。

「論理憲法」 http://bitlaw-jp.github.io/logicon-system/index.html

「日本国憲法をコンピュータで処理できるプログラムに書き換えることで、
ユーザーからの質問に対して憲法に忠実な回答を返すことを目的としたシステムです。」

でも、Prologが分からない、、、。

「Japanese Law + XML」 http://law.2nx.info/

六法のXMLデータをダウンロードできるんだけど、スキーマは?
税法にも使えるかな?

2016年9月10日土曜日

PHPの試験

昨日、PHP5技術者認定初級試験を受けた。
少し緊張したけど、92点で合格。
そのあと早速、上級用の教材を買いに行った。
定期券の使える範囲で3軒のブックオフをまわり、
「プログラミングPHP 第3版」を2,760円で入手。
ラッキーだったけど、疲れた。
「初めてのPHP5」は図書館にあったんだけど、これはないから。
問題集(黒本)は見当たらなかったから、新品を購入。

今日から上級試験の勉強。10月中に片付けたい。

クジラ飛行机著「いまどきのアルゴリズムを使いこなす」
という本を本屋で見かけた。面白そうだから、いつか読んでみたい。

2016年9月6日火曜日

本試験から4週間

今年の税理士試験から4週間くらいたった。

これまで派遣の仕事8件、アルバイト11件に応募。
返答待ちの5件を除く14件は、書類選考で落ちた。
2ヶ月で50件が目標!、、、って、まずいよなあ。

法人税法、消費税法の勉強をゆっくり再開。
休みボケの頭のリハビリをしないと。

ハーマン・デイリー著「定常経済は可能だ!」を読んだ。
岩波ブックレットで60ページくらいの冊子だけど、
定常経済の概要は把握できる。
おいらの問題意識と重なるのになぜ、
いままでこの言葉を知らなかったんだろう?
何度も読み返す必要あり。

2016年9月4日日曜日

人工知能?

西垣通 著「ビッグデータと人工知能」を読み返してるところ。
参考までにアマゾンのレビュー12件にざっと目を通したけど、
うまく要約してる2件以外は、ちょっとずれてる気がした。

生物(例えば人間)にとっての情報と機械にとってのそれとは
原理的に異なる。機械がどんなに複雑・精巧に作られていても、
プログラムがどんなに大規模でも、道具にすぎない。
実際、PGやSEでシンギュラリティを本気で信じてる人、いないんじゃないかな。

お話としては、井上夢人著「パワー・オフ」がよく出来てる。
99年の小説だから古いけど、プログラムコンバータを遺伝アルゴリズム
で進化させている最中にウィルスが混入、人工生命が誕生して
ネット上に増殖、人間とのコンタクトを試みる。

西垣さんの本に戻ると、
シンギュラリティの議論を理解するには、西欧の文化的背景を知るべき。
人工知能はありえない。AIではなく、IAとして利用すべき。
文系・理系の枠を超えた教育の重要性。
その通りだと思う。
ただ、技術の発展が私達の生活を豊かにする、という前提が引っかかる。
例えば、ビッグデータを活用することで、個人消費を掘り起こして
経済を活性化したり、災害に備えたり、という話。
センサーを至るところに設置しネットワークで結び、
機械学習によって莫大な量のデータを処理する、っていうけど、
それによって得られる便益は、コストを上回るのかな?
コストというのは、地下資源の減少と廃棄物の増加、
戦争(効率的な大量虐殺)への転用のリスク、
発展途上国で悲惨な条件のもとで働く人たちの労力。

これまでの技術の進歩は生産・消費のサイクルを加速し、
経済成長を促してきたけど、これからはもう無理じゃね?
資源と市場が無限にあるならそれでもいいけど、
地球はひとつしかないんだし。

新たに生産するよりも小さなコストで、今あるものを
再利用する技術や仕組みを開発するほうが大切な気がする。

2016年9月1日木曜日

無題

本試験後、仕事がまだ見つからないので、PHPの復習の傍ら、本を読んでる。


池澤夏樹の小説「氷山の南」を読んだ、面白かった。
氷山曳航計画を担う船に乗り込んだ、18歳の主人公がその航海を通じて成長してゆく物語。
様々な視点からの文明批評が盛り込まれているけど、メインテーマは、科学技術VS自然。

高坂勝 著「ダウンシフターズ」、良かった。
経済成長神話に基づく「生産ー消費」サイクルから降りて、のんびり楽しく生きようよ、
というメッセージ。
今の社会っておかしいよね、って考えて実践する人が増えているようで、元気が出た。
ゆるい半農半Xという生き方に憧れるおいらにはとても参考になる。

久松達央 著「キレイゴトぬきの農業論」。
農業に対する既成概念を捨てて、自分で農を捉え直そう、という著者の姿勢には共感を覚える。
ただ、アマゾンのレビューにあるように、それなりのコミュニケーション能力がないと、
真似するのは無理。

西垣通 著「ビッグデータと人工知能」
最近騒がれている、人工知能とシンギュラリティに対する批判。
生きるという衝動によって意味世界を創り記号で表現する生物と、衝動を持たず、
人間から与えられたタスクを遂行するだけの機械。
両者にとっての記号は全く異なるものなにに、コンピューターが人間を超える知能を
持つようになる、というのはありえない、という話。そのとおりだと思う。