2015年3月17日火曜日

Django と AngularJS を一緒に使う際に Django 側で {{ }} が展開されるのを防ぐ


このエントリーをはてなブックマークに追加
Django も AngularJS もテンプレート中の {{ }} を変数・関数用のトークンとして利用するため、AngularJS の方で処理したい {{ }} は Django の方で解釈されるのを防ぐ必要があります。

AngularJS で処理したいタグの周りを verbatim ~ endverbatim タグで囲むことで Django が {{ }} を処理するのを防ぎます。

<body ng-app="TestApp">
<div ng-controller="TestController as tc">
    {% verbatim %}
    <p>{{ tc.message }}</p>
    {% endverbatim %}
</div>

2015年3月15日日曜日

Polymer : core-dropdown-menu のスタイルを設定する


このエントリーをはてなブックマークに追加
core-dropdown-menu の中で使う core-dropdown は paper-dialog と同じく overlay の一種なので
paper-dialog (paper-action-dialog)のスタイルを設定する」同様にカスタムエレメント内でスタイルを設定するには工夫が必要でした。

普通に <polymer-element> 内の <style> で /deep/ を使ってスタイルを定義しても上手く行きません。

とりあえずメモのみ。

JavaScript : input でカンマ区切りの数値配列入力をチェックする


このエントリーをはてなブックマークに追加
pattern に "先頭 + 空白 + 数字 + 空白" というパターンと、"(カンマ + 空白 + 数字 + 空白)×N" というパターンを設定します。

※ 最後に , があるとエラーになります( "10, 20, 30" は OK、"10, 20, 30, " は NG)

<input is="core-input" id="input_records" required type="text" min="1"
    pattern="/^[\s]*[0-9]+[\s]*(,[\s]*[0-9]+[\s]*)*$/">

JavaScript : input type=date の初期値の設定(Polymer の Data Binding を使用)


このエントリーをはてなブックマークに追加
  • タグの中で属性 value に代入する場合、"YYYY-MM-DD" 形式(ISO準拠)の文字列である必要がある。
  • JavaScript のコード内で代入する場合は、valueAsDate = date型オブジェクト という形式が使える。

HTML部分(date に Data Binding)
<input type="date" required id="input_date" name="date" value="{{ date }}">

Polymer 初期化部分。date を ISO 準拠文字列にしておくパターン。
Polymer({
    date: new Date().toISOString().substr(0, 10),
    ...
    

Polymer 初期化部分。valueAsDate を使うパターン。
Polymer({
    date: new Date(),
    ready: function() {
        this.$.input_date.valueAsDate = this.date;
    }

『ニコニコ哲学』 感想とレビュー


このエントリーをはてなブックマークに追加


ニコニコ哲学-川上量生の胸のうち を読み終わりました。

ニコニコの在り方や、オープンな市場の問題、採用について、など、様々な内容について語られており、どれも面白かったです。インタビュー形式で読みやすく、短めなのもよいです。

以下、特に興味を引いた考えの一部。



IT業界も成熟して、うまいことやるのは難しくなった。そうなると、むしろ誰もやらない大変なことにビジネスチャンスがある可能性が高くなった。徒労に終わらないような大変なことを探す。これが、たぶんIT業界の次のステージの課題。

オープンになりクリエイターが増えるほど、人気がでるもの、売れるものの多様性は減る。みんな等しく成功のチャンスもクリエイターとしての価値も減る。

コンテンツ市場が成熟すると、コンテンツの中身よりもブランドが評価される。

才能=希少性。能力のレベルが高くても、競争相手がたくさんいる業界で認められるのは大変で、1位と2位の差は小さくなる。希少性の高さと能力の高さは違う。

一人ひとりが「お山の大将」になれる世界の方が幸せ。それを許さず「全国的に見ればお前はこの程度」と突き付けるのがインターネット。お山(小さいコミュニティ)をどう作るかが次のネットのテーマ。

「これに賭ける」という思いで思考を停止するのは間違い。必要なのは勇気ではなく計算。

通年採用ではスキルのない人は就職できない。将来のポテンシャルなんて考慮されない。新卒採用で「強者」側の高学歴組の中で、通年採用でも「強者」でいられる人はほんの僅かであり、新卒採用の「弱者」も通年採用になればどうなるということはない。

オタクは「敵に回すとおそろしいが、見方にすると頼りない」

「夢」とは長い間満たされない欲求のこと。持っているから偉いということはない。

オタクの特徴は自分が正しいと思っていること。コミュニケーション能力が低くて、社会では居場所がないから、自分で自分を褒めるしか無い。

個性は非論理的な部分にしか残らない。論理を突き詰めていくと同じ帰結に達する。

2015年3月14日土曜日

Polymer : core-ajax post 用テンプレート(+ Django)


このエントリーをはてなブックマークに追加
POST のパラメータの上手い渡し方がよくわからないので、しばらくはこれでいこうというメモ。

template 部分(入力部分とかは適当に。core-ajax は実際は djang-ajax を使う。)
 
<paper-input-decorator label="" error="入力必須" isInvalid="{{!$.input_name.validity.valid}}">
    <input is="core-input" id="input_name" required type="text" value="{{ name }}">
</paper-input-decorator>
<paper-button on-click="{{ post_data }}"></paper-button>
<core-ajax
    id="post"
    url="/someurl"
    method="post"
    handleAs="json"
    on-core-response="{{ response }}"
    on-core-error="{{ error }}">
</core-ajax>

script 部分
post_data: function() {
    if(!this.$.input_name.validity.valid){
        alert("名前を入力してください");
    } else {
        var data = {
            'name': this.name,
        };
        this.$.post.body = "data=" + JSON.stringify(data);
        this.$.post.go();
    }
},
response: function (event, response) {
    
},
error: function(event, response) {
    
}

受け取り側(Python Django)
class ActivityInfoListApi(View):
    def post(self, request, *args, **kwargs):
        data = request.POST.get("data", None)
        if data is None or len(data) == 0:
            return HttpResponseBadRequest()
        obj = json.loads(data)
        try:
            name = obj["name"]
            # 型チェック
            if (not isinstance(name, str) and not isinstance(name, unicode)):
                return HttpResponseBadRequest()
            # 受け取った値で何か処理…
            return HttpResponse("json形式文字列…")
        except KeyError:
            logging.error("Missing Parameter")
            return HttpResponseBadRequest()

2015年3月12日木曜日

Polymer : paper-dialog 関係のメモ


このエントリーをはてなブックマークに追加
よく使いそうな設定のメモです。

Polymer : paper-dialog (paper-action-dialog)のスタイルを設定する
  • ダイアログ外をクリックされても閉じないようにする
    • autoCloseDisabled="true" にする
  • ボタンを押しても閉じないようにする
    • closeSelector を設定する。affirmative を押しても閉じないようにする場合は closeSelector="[dismissive]"

2015年3月11日水曜日

Polymer : paper-dialog (paper-action-dialog)のスタイルを設定する


このエントリーをはてなブックマークに追加
paper-dialog 公式ドキュメント に従って /deep/ を使っても width や height が上手く設定できずに悩んでいたのですが、原因は以下のサイトの内容でした。

参考:Issue with upgrade to Polymer 0.5.1 and styling paper-dialog

ルート以外の要素で paper-dialog を使う場合、一工夫いるようです。

原因の要約

  • paper-dialog (paper-action-dialog など含む)がデフォルトで layered プロパティが true に設定されている
    • ダイアログを常に画面前面に表示するため
  • layered が true の要素は、 core-overlay-layer というグローバルな要素に親が変更される
    • Developer Console を開いて Element のタブを開くとそのことがわかります
  • paper-dialog を使用している要素のスコープから外れてしまうので、そこで定義した css の style が適用されない

対策


リンク先では以下の3通りが紹介されています。 ひとまず、汎用的に思える core-style を使うことにしました。
  • layered を false にする
  • core-style を使う
  • paper-dialog を継承したカスタムエレメントを作成する


サンプル

<link rel="import" href="/bower_components/polymer/polymer.html">
<link rel="import" href="/bower_components/paper-button/paper-button.html">
<link rel="import" href="/bower_components/paper-dialog/paper-action-dialog.html">
<link rel="import" href="/bower_components/core-style/core-style.html">

<core-style id="my-dialog-style">
    html /deep/ {
    width: 16px;
    height: 16px;
    }
    html /deep/ paper-action-dialog::shadow #scroller {
        width: 360px;
        height: 360px;
    }
</core-style>
<core-style ref="my-dialog-style"></core-style>
<polymer-element name="my-paper-action-dialog" attributes="toggle">
        <template>
        <style>
            :host {
                position: absolute;
                width: 100%;
                height: 100%;
            }
        </style>

        <paper-action-dialog id="dialog">
            <div>
                ...
            </div>
            <paper-button dismissive>CANCEL</paper-button>
            <paper-button affirmative>OK</paper-button>
        </paper-action-dialog>
    </template>

    <script>
        Polymer({
            toggle: function () {
                this.$.dialog.toggle();
            }
        });
    </script>
</polymer-element>

2015年3月5日木曜日

Chart.js : Radar チャートのフォントサイズ変更


このエントリーをはてなブックマークに追加
Radar の外枠に表示されているラベルのフォントサイズや色の設定は defaults.global のオプションではなく defaults.Radar のオプションでした。

Chart.defaults.Radar.pointLabelFontSize = 16; // 少し大きく(デフォルトは 10)
Chart.defaults.Radar.pointLabelFontColor = 0x00FFFFFF; // 赤

Char.js | Documentation - Radar Chart

2015年3月1日日曜日

Django + Polymer : Ajax 時の CRFS 対策 (403 エラーへの対応)


このエントリーをはてなブックマークに追加
ここ に書いたように url に View を登録するときに csrf_exempt を使うことで CSRF 対策を切って 403 エラーを回避していましたが、Polymer 使用時には Django-enabled Polymer core-ajax variant を使うことで簡単に対応できる事がわかりました。
  1. リンク先の django-ajax を django-ajax.html という名前で保存する
  2. Polymer 内で core-ajax を使っていた部分を django-ajax に置き換える
    1. インポートを忘れずに
  3. {% csrf_token %} を html に含めてレンダリングする
django-ajax は core-ajax を継承していて、ajax 時のヘッダに csrf トークンを追加してくれる、という寸法のようです。

先人の知恵というのはありがたいものですね。リンク先に感謝です。

2015年2月27日金曜日

『Nexus Player』 レビュー


このエントリーをはてなブックマークに追加
購入しました。

Chromecast はすぐに使わなくなってしまったのであまり期待せずに買ったのですが、動きが軽快で使いやすく、想像以上に良いです。長続きするかもしれません。


セットアップ


HDMI ケーブルが別売りだったことに買ってから気が付きました。これから買う方はお気をつけ下さい。

電源ケーブルと HDMI ケーブルを繋いで、リモコンに電池を入れて起動したら、後は画面にそって進むのみ。メールアドレスやパスワードの入力はリモコンで。ネットワーク接続とログインが多少面倒なのは、一回限りの作業なので仕方ないのですかね。この辺りがもっと楽になると、がくっと購入障壁が低くなると思うのですが。


アプリ


はじめから入っている YoutubeHuluGoogle Music 以外に、TEDBloomberg を Play ストアからインストールしました。TED にランダム再生があるのが良いです。英語の勉強に使えそうな気がします。

後は nasne に対応したアプリと、ニコ動がくれば完璧ですが、これでも十分なので、気長に待つことにします。

ゲームパッドに対応したアプリもいくつかあるようなので、販売が始まったら購入して何かプレイしてみたいですね。せっかくキャンペーンで 2000円手に入れたので。ゲームもこれで十分ということになるのか、それともやっぱり家庭用ゲーム機にはまだ代えられないな、となるのか、試してみたいと思います。



音声検索


リモコンについているマイクボタンを押すとできるので、使ってみました。
「スティーブ・ジョブズ」と言ってみたところ「ティーブ ジョブズ」と認識されたりもしましたが、何度か繰り返すとちゃんと「steave jobs」と認識されて Youtube の動画などがリストアップされました。

ちなみに設定で言語を英語に変えると「にんてんどう」という喋った時の認識が「任天堂」から「Nintendo」に変わりました。英語で検索したいときにはこの方が便利そうです。



ゲームパッドの発売が楽しみです。

2015年2月振り返り


このエントリーをはてなブックマークに追加
2月が終わり、1年の 1/6 が終了です。今月は、ここ数ヶ月低調だった技術系(プログラミング系)にそれなりに時間をかけられたことが収穫でした。

反面、1月の反省を生かせず、相変わらず英語がリーディング・リスニングに偏っているのが問題の気がしています。というよりも、ライティング・スピーキングの能力を向上させたいと自分は本当に思っているのか、何のために向上させたいと思っているのかが曖昧な点が、良くないなと感じました。全体の目標を見直しながらその辺りをもっと考えてみたいと思います。


読書

ちょっと少なめですが、『エッセンシャル思考』がとても良かったこと、読み始めた『Animal Farm』が面白そうなことで、満足度は高いです。


英語

今月も edX に相当時間を使いました。"The Science of Happiness" と "Introduction to Nutrition" が受講終了、"Probability" について4週分。"Body Matters" という運動生理学(?)系の話が始まったのでそれを聴き始め。"Introduction to Nutrition" の最終課題のライティングと、何回かの日本語記事の英訳の練習を行いましたが、相変わらずリスニングとリーティングが多めです。


運動

1月よりはましで、ジャグリングは結構やってました。主に5ボールカスケードをひたすらやるだけですが。仕事が忙しくなると、早く帰れたときでも眠くて集中して筋トレできないのを何とかしたいところではあるのですが…いっそ諦めて、筋トレは週末にみっちりやる、という方向も良いのかもしれません。


プログラミング

Python での Google App Engine と、そこでのフロントエンドのフレームワークとして Polymer をそこそこ時間をかけて触っていました。なかなか面白いですし、Web アプリを作る技術は学びたいと思っていたので良い感じです。3月には何かとりあえずのものを形にしたいです。


娯楽作品

強いて言えば、小説(Look Who's BackAnimal Farm)を読んでいたくらいで、ゲームは新しいものに手を出していません。それでリフレッシュはできていますし、ここを無理に頑張る必要はないと思っているので問題視はしていません。




3月の目標

完全に『エッセンシャル思考』の影響を受けていますが、同時にいろいろなものを手を出そうとし過ぎていて、薄っぺらくなってしまっているのでは、と感じたので週末に年間目標の修正と、それを分割しての四半期単位の目標を建てようと思います。

2015年2月25日水曜日

『エッセンシャル思考』 感想とレビュー


このエントリーをはてなブックマークに追加


最近自分の周りで話題になっていた『エッセンシャル思考 最少の時間で成果を最大にする』という本を読みました。納得できる指針、わかりやすい具体例、明確なアドバイスと三拍子揃っており、かつ訳書にありがちな不自然な文体もなかったので、とても良い本だったと思います。いろいろな事に中途半端に手を出しがちな自分にとって、目標・行動の見直しのきっかけと指針になりました。

内容の紹介と、後で読み直す際の参考を兼ねて Part 毎に、簡単に内容をまとめます。


Part 1. エッセンシャル思考とは


原著は『Essentialism: The Disciplined Pursuit of Less』というタイトルで「Essentialism」は「本質主義」(Wikipedia)と訳されますが、ここでは、"自分の本質とはなにか、自分が大事にしているものは何かを見定めて、やる事とやらない事を自分の意志で取捨選択していく思考"のようにまとめられるのではないかと思います。重要なのは自分の意志で選ぶこと、また、取るだけでなく捨てる事も必要になることです。

「やらなくては」という思い込みを捨て、「どれも大事」という幻想を捨て、「全部できる」という自惚れを捨てることで、初めて重要なことに集中できるようになる、と説いています。
「教えてください、あなたは何をするのですが/その激しくかけがえのない一度きりの人生で」 メアリー・オリバー


Part 2. 見極める技術


当然取捨選択を行うにあたっては何を選ぶか、どのように選ぶのかが問題となります。Part 2. では以下の5つの章で、正しい選択を見極めるためのコツと条件を挙げています。
  • 孤独:どんなに忙しくとも、考えるための時間と環境を確保する
  • 洞察:情報の量や声の大きな意見に惑わされず、大局を見る
  • 遊び:創造性と探究心を忘れずに、何が楽しかったか、楽しいかに意識を向ける
  • 睡眠:洞察力、発想力を発揮し効率よく成果を挙げるためによく眠る
  • 選抜:明確で正しく、厳しい基準を採用し、悪くない、程度の選択肢は全て却下する


Part 3. 捨てる技術


Part 3. では捨てる技術として、本当に重要なものを選ぶために、不要な物事を「捨てる」技術を紹介しています。Part 2 の「見極める」技術と近いものがありますが、より具体的な方法論となっています。
  • 目標:「かなり明確」では不十分、魅力的でかつ測定可能な「完全に明確」なものにする
  • 拒否:断り方を覚えて勇気を持って上手に断る
  • キャンセル:「授かり効果」(自分の持ち物を高く評価する心理バイアス)を回避するため、途中まで進めていたプロジェクトや既に持っているものに対して判断を下す場合は「まだ持っていないとしたらどれくらいのコストをかけて手に入れようとするか」を考える
  • 編集:削除、凝縮、修正を日々繰り返し、自分の生き方から不要なものや余分なものを削って本質を維持する
  • 線引:譲れないラインを引き、自分の領域を確保する、また、他人の領域に手を出さない


Part 4. 仕組み化


Part 4 では Part 2, 3 で解説した考え方や方針を維持するための心構えを説きつつ、エッセンシャル思考のメリットについてまとめています。
  • バッファ:最悪の事態を想定して準備と計画を徹底的に行う
  • 削減:成果を産まない努力をやめ、目指すことを明確にしてそのボトルネックを取り除く
  • 前進:日々の進歩を大切にし、地味に着実に勝ち続ける
  • 習慣:重要なことをやることが普通の状態、となるよう、ひとつずつ良い習慣を身につける
  • 集中:過去や未来にとらわれず、今重要なことにひとつずつ集中する
  • 未来:エッセンシャル思考を体に染み込ませることは後悔なく生きることに繋がる
最終章「エッセンシャル思考のリーダーシップ」でチームとしてのエッセンシャル思考について触れていますが、ここでは割愛します。



2015年の目標を立ててから約 2ヶ月が経過し、調度良い見直しの時期なので、この本を参考にしつつもっと絞った目標に修正して、より実りのある1年を過ごせればと思います。

2015年2月20日金曜日

Django : Ajax POST 時に 403 エラー出る場合の対処法


このエントリーをはてなブックマークに追加
幾つか解決策はあるようですが、ひとまず url 登録時に csrf_exempt をつけています。
おそらくセキュリティ的にあまりよくなさそうなので Cross Site Request Forgery protection 辺りを参照していずれきちんと理解したいと思います。。。

from django.views.decorators.csrf import csrf_exempt
....
url(r'^category$', csrf_exempt(MyViewClass.as_view())),

2015年2月19日木曜日

Google App Engine : ndb のデータを JSON 化する + json.dumps を date 対応させる


このエントリーをはてなブックマークに追加
MyModel.query().fetch() などで ndb.Model を取得した後、ndb.Model の to_dict() 関数を使用して json 化します。

to_dict() には key が含まれないので、key が必要な場合には明示的に追加します。


fetched_list = MyModel.query().fetch()
json_without_keyid = json.dumps([c.to_dict() for c in fetched_list ])
json_with_keyid = json.dumps([dict(c.to_dict(), **dict(id=c.key.id())) for c in fetched_list ])


追記

数字や文字列のみの場合上記のコードで問題なかったのですが、
DateProperty を使用していた Model は

File "C:\Python27\lib\json\encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.date(2015, 2, 20) is not JSON serializable

というエラーで json 化に失敗してしまいました。
そこで、以下のように、date オブジェクトの場合の処理を追加した JSONEncoder を作成し、対応を加えました。datetime の場合なども同じような方法で対応できるはずです。


from datetime import date

class JSONDateEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, date):
            return obj.isoformat()
        return json.JSONEncoder.default(self, obj)


fetched_list = MyModel.query().fetch()
json_without_keyid = json.dumps([c.to_dict() for c in fetched_list ], cls=JSONDateEncoder)
json_with_keyid = json.dumps([dict(c.to_dict(), **dict(id=c.key.id())) for c in fetched_list ], cls=JSONDateEncoder)


参考:AppEngine Making ndb models json serializableHow to overcome “datetime.datetime not JSON serializable” in python?

2015年2月7日土曜日

2015年1月振り返り


このエントリーをはてなブックマークに追加
もう2月も一週間終わっていますが、2015年の目標 と照らし合わせながら1月を振り返って反省しておきたいと思います。


読書


読んだ本のリストは以下のとおり。
後述しますが、1月は edX に時間を注ぎ込んだこともあり、読書量は少なめでした。
また、2015年の目標では「自分で買うことでちゃんと読むというモチベーションにしよう」と書いていましたが、むしろ返却期限がある借りた本の方が読む気が起こるという結果に。

1月は、技術系に関して読書量も、手を動かした量も少なかったので、2月は手を動かすような本を読みたいところです。


英語


edX の講義の聴講に相当な時間を使いました。"The Science of Happines" が 7週間分、"Introduction to Nutrition" を 4週間分ほど。そのおかげでリーディングとリスニングに関してはかなり行えた反面、もう一方の目標に掲げていたライティングに関しては完全にお留守に。。。
(しかし心理学とか栄養学とかは真面目に勉強するととても面白そうですね。)

一応、2月から edX で English Grammer and Essay Writing というコースが始まったのでそれも受講はしているのですが、ライティングに関してはもう少し何か検討したいと思います。


運動


微妙。。。ジャグリングも筋トレも目標の7割くらいといった感じです。


プログラミング


TypeScript、AngularJS などを少し勉強した、程度。


娯楽作品


ゲームはハコボーイ!Shovel Knight をプレイしましたが、両方とも面白かったです。やはり2Dアクションゲームは良いな。。。特にハコボーイは傑作。

アニメは、2月に入った時点では「アイドルマスターシンデレラガールズ」、「アルドノアゼロ」、「四月は君の嘘」、「幸腹グラフィティ」、「デュラララ」を視聴継続。「艦これ」は、3話まで見て、3話の内容自体もさることながら、3話までみても世界観や戦う理由みたいな舞台背景が全く理解できなかったので切りました。



新年最初の1ヶ月だというのに、全体的に駄目な感じが否めない。。。
今月は有給消化でそこそこ平日も休むので、挽回したいところです(特に運動と技術系)。

2015年1月2日金曜日

『一九八四年』 感想とレビュー


このエントリーをはてなブックマークに追加


新年一冊目は『一九八四年』を読みました。

以前、原著である 1984 を読もうとして 5% くらいで挫折してしまったことがあるのですが、今回読んだ訳書(新訳版)はとても読みやすかったです。そして、その内容は想像していたよりもずっと面白く、不朽の名作と呼ばれるのも納得の作品でした。

絶対的な支配力を誇る「党」に反する思考を持った主人公の物語として、娯楽小説として惹き込まれながら、その中で語られる支配を恒久化させるための社会構造に対する洞察、思考を抑制するために言語を削ぎ落とすという政策の説得力など、著者の凄まじい知性を感じました。自分はその内容の半分も理解できていないのでしょうが、それでも、この本に書かれた考え方に触れることはとても刺激的でした。

2015年が始まってまだ2日目ですが、この年読んだ小説の中で最高の作品になるかもしれない、と思うほどです。それだけの評価を持っていた作品なので当然なのかもしれませんが、それほど衝撃的で充実した読書体験となりました。



少し昔の作品で、これほど面白かった本は『春にして君を離れ』以来です。こちらの作品は人間に対する洞察が非常に優れていると思います。

Windows で Re:VIEW 環境を構築する


このエントリーをはてなブックマークに追加
Windows PC 上に、独自の記法に従ったテキストから html、epub、pdf などを作成できる Re:VIEW(GitHub へのリンク) というドキュメント制作環境を構築した際のメモです。


Cygwin と VirtualBox のどちらを使うべきか


Re:VIEW は Mac、Linux をメインターゲットに制作されているので、Windows での環境構築には Cygwin を使うか、VirtualBox 上で Linux 系の OS を動かすかが必要になります。

私は最初は Cygwin を使ってみましたが、pdf への変換を行う環境を整えるところで挫折してしまいました。html や epub を作るところまでは比較的簡単にできたので、そこまででよければ Cygwin で問題ないかとは思いますが、pdf まで作成できる環境を簡単に手に入れられる VirtualBox の方をおすすめします。なのでここでは VirtualBox を使う方法のみ記載します。


VirtualBox + Re:VIEW 環境の構築

  1. ここから VirtualBox X.X.X for Windows をダウンロードしてインストールします。拡張子を関連付けします。
  2. ここで公開されている Re:VIEW のイメージをダウンロードします。
  3. ダウンロードした .ova イメージをダブルクリックするとインポートされます。
  4. インポート後、起動しようとするとエラーで起動できませんでした。私の環境(Windows 8.1 64bit、SSD)では「設定」を以下のように変更したところ起動できるようになりました。
    • 「ネットワーク」でアダプター1の設定をブリッジアダプターに変更する
    • 「ストレージ」の SATA コントローラ -> review-disk1.vmdk で SSD をチェックする
    • 「システム」のプロセッサータブで PAE/NX を有効化をチェックする

イメージ起動から Re:VIEW の実行まで

  1. ユーザ名とパスワードに review と入れてログインします。
  2. Windows の共有ディレクトリ(エクスプローラの左側の「ネットワーク」以下)に REVIEW というフォルダが見えるので、ここにコンパイルするためのファイルを置きます。このフォルダが、イメージ上では work ディレクトリに相当します。
  3. VirtualBox の方で work ディレクトリに移動し、review-pdfmaker sample.yml のように実行したいコマンドを実行します。成功すると pdf が作成されます。
その他、環境のアップデート方法などは、イメージのプロンプトで help コマンドを実行すると確認する事ができます。



これで pdf が作成できるようになりました。
技術的な文章を書くための第0歩 ~読者に伝わる書き方~技術的な文章を書くための1歩、2歩、3歩などを参考に、内輪向きにでも何か書けたらと思います。

2015年1月1日木曜日

『Xerox Xerox Xerox Xerox』 感想とレビュー


このエントリーをはてなブックマークに追加
ビル・ゲイツが賞賛し、ここで無料で公開されている、『Business Adventures』の Xerox の章を読んでみました。

以下、内容の簡単なまとめと感想です。


Xerox がコピー機の開発に挑戦し、財政難・技術的課題に苦しみながらも最終的には製品開発に成功して市場を席巻するまでと、その後大企業として行った企業活動などについて、40ページ程でまとめられています。

面白かったのは、著作権侵害の急増、マスターデータから必要に応じて必要なページのみを印刷する図書館が生まれるのではという考え、出版業界における全員が読者であるとともに著者になれる時代の到来への恐怖、などといった、現代のインターネットや電子本などにそのまま当てはめられるような話題があったところです。当時の Xerox のコピー機のインパクトの大きさを示しているような気がしますね。

ちなみに、著作権侵害については、多くのコピー機メーカーが、今まで認められていた手書きによるコピーの発展形にすぎないという立場をとっていたのに対し、Xerox は無断コピーは禁止するべきという立場を取っていたそうです。Xerox が、出版や教育関係の企業を買収していたことも無関係ではないと思いますが、そもそもそういう企業を買収していて、コピー機が売れれば良い、という思想に囚われていないということが他の企業と異なる点なのかもしれません。

また、Xerox が、急激な発展を遂げた後、利益の多くの教育や慈善活動に寄付していた、という点も興味深いです。国連の報道活動への出資には多くの反対意見(アメリカでは国連に対して不信感を持っている方々もおり、ある企業が反対活動を扇動していました)が、結局は正しい判断だった、と振り返られています。

最後に、その辺りについての当事者のコメントを一部引用。
The corporation cannot refuse to take a stand on public issues of major concern.
 (...) world coöperation is our business, because without it there might be no world and there fore no business.
You can’t just be bland, or you throw away your influence. But you can’t take a stand on every major issue, either. 


可能性を信じ苦境に耐えて成功した一方で、成功の要因については偶然が大きい(セレニウムの使用がキーとなったが、セレニウムが良いとわかったのは実験的な成果で理論的な背景があるわけではない)、という、成功のための必要条件(十分条件ではない)と成功後の理想的な姿勢を示した一章なのでないかと思います。

無料なので、興味があれば読んでみるとよいでしょう。

2015年の目標


このエントリーをはてなブックマークに追加
あけましておめでとうございます。

昨日、去年を振り返って軽く絶望したので、今年は同じ過ちを犯さぬよう頑張りたい、という思いを込めて目標を並べ立てて公開しておくことにました。一ヶ月ごとに、達成度と反省の記事を書こうかなと思います。


読書

  • プログラミング・コンピュータ系:1冊以上/月、15冊以上/年
  • その他読み物:1冊以上/月、15冊以上/年
  • 小説:1.5冊以上/月、20冊以上/年
  • (洋書:8冊以上/年)
※ 洋書を読んだ場合、他の項目と重複している場合は両方カウントします。

去年はプログラミング・コンピュータ系の読書量がかなり少なかったので、意識的に手を出していきたいところです。そういう系の本は会社でも借りられますが、お金でモチベーションを買うという意味でも、自費でいろいろ買おうと思います。

小説も、去年は読むときは読む、読まない時は読まないと波が激しかったので、コンスタントに月1冊くらいは読んで頭をリフレッシュさせたいですね。


英語

  • 英検1級2次試験の設問等を題材にライティング: 2回/月
  • 気になった日本語の記事・本の一節の英訳:1回/週
  • NHKラジオ 実践ビジネス英語:15分×3 / 週を 1年継続
  • umano:20分 × 3 / 週を 1年継続
  • (洋書:8冊以上/年)
大学卒業後、洋書を読んだり英語でニュースを聞いたりはするものの「ある程度のレベルに達しているのでそんなに不便はない」という感覚から英語を勉強するという意識は持っていませんでした。
今年は、仕事で使うことの多いライティングとリスニングを意識的に鍛錬して、レベルアップしたいと思います。


運動

  • 筋トレ:3回 / 週
  • ジャグリング:30分 × 3 / 週
結果としての目標は、秋頃の健康診断で引っかからない、体重 + 3kg で体脂肪率を維持、といったところです。ランニングも目標に入れておこうかと思いましたが、寒いのも寒いのも苦手で続かないことが目に見えているので止めておきました。これならやれる、という2つだけを入れて、これらをしっかり続けたいと思います。


プログラミング

  • 新言語・環境を1つ以上覚えて何かを作成する
  • Android で新規アプリを2つ以上作る
  • Web系で何か2つ以上作る
「何かを作る」系の目標は、達成できるかどうかが、ネタが思いつくかつかないかに依存するので扱いが難しいと思うのですが、かといって「ネタがないから何も作らない」では技術面のスキルも鈍ってしまうのでそうも言っていられません(去年はずっとそんな感じでした…)。普段使っているアプリ・サービスの劣化コピーでも良いので、手を動す年にしたいと思います。

ネタ候補メモ

言語・環境:Go, Dart, Polymer、TypeScript、Google App Engine、Amazon Web Service、Docker
アプリ:ニュースリーダー、後で読む、TODOリスト、英作文練習、タイマー・ストップウォッチ、小遣い帳


娯楽作品

  • 漫画:5冊/月、80冊/年
  • ゲーム:6本/年
  • アニメ:6作品/年
  • ガジェット系アイテムの購入:5つ/年
  • (小説:1.5冊以上/月、20冊以上/年)
定期的に新しいものに触れて頭をリフレッシュする、食わず嫌いをしない、とりあえず試してみる精神を持つ、という意味で娯楽系にも最低ラインの目標を引いてみました。

ただし、ゲーム・アニメに関しては、これは合わない、と思ったらその時点で放り出し、放り出したものもカウントに含める、というゆるい縛りにしておこうと思います。


その他

  • 電子本を書いてみる(公開はしない)
  • 生活必需品以外の出費について記録をつけ、年末に振り替えれるようにする
  • Unity でミニゲームを作る:どこかの月に集中して4本/月を一回くらい
  • イラスト(概念図を補足できる程度)の練習
  • GIMP, Blender の基本的な使い方の習得
この辺りは優先度低めで、あまり定まった目標でもないのですが、他の目標に取り掛かる気がしない、という時のために書いておきます。



仕事が始まったら「何を考えていたんだ」となりそうですが、一方で、今手がけている仕事の内容や、今後のこと、年齢などを冷静に考えると、これくらいやっておかないと立場が危ういだろう、という思いもあります。

現実(仕事)に合わせて目標を変えるのではなく、目標を達成するために目の前の仕事を調整する方向で進めたいですね。頑張るぞー。