放送大学と調べ物と私

pyspa Advent Calendar 2018 9日目を担当する池です。放送大学の選科履修生、科目履修生で2015年から学生になってもうすぐ4年経ちます。

なぜ「放送大学と調べ物と私」を書こうと思ったのか

2015年の上期から放送大学を活用しており、4期通ってみて知見が溜まってきたので知見を公開しようと思ったから。
小難しい話は後半に書いており、前半はCons/Pros(メリット/デメリット)を書いてる。

放送大学のPros/Cons(メリット/デメリット)

体感したPros/Consをざっと洗い出してみた。

Pros・メリット

- 基礎教養を体系だって、比較的安価に学ぶことができる
- 放送大学附属図書館のデータベースが利用可能になる
- 身分は学生。学生証、ac.jpメアドが貰える
- 各種学割が受けられる
- 学習センターが使える

Cons・デメリット

- 多少なりとも金銭的なコストはかかる
- 単位取ろうと思ったら、当然時間使う(そりゃそうだ)
- オンラインのみでは完結しない
- 例えば、単位認定取得試験は、実施日程・会場が決まっており、試験を受けに行く必要がある

放送大学とは

放送大学とはなんであるか?誰が設置したのか。どうしても気になってしまうので調べた。

放送大学は、放送大学学園法に基づき設置された学校法人放送大学学園が運営する大学。*1
設置の趣旨としては、大学教育を広く国民にもたらすために設置された。

国立大学なのかな?と当初私も思ったわけだが、放送大学学園法の第三条で定義されている通り私立大学。*2*3*4

教養学部と大学院が設置されており、学位としては、学士(教養)、修士(学術)、博士(学術)が授与される。

以降は、教養学部生に関して。

教養学部生の区分としては、全科履修生、選科履修生、科目履修生、集中科目履修生がある。*5

全科履修生は、卒業を目指す学生であり、最大10年在籍可能です。卒業には4年以上各コースに在籍し、124単位の取得が必要になる。
選科履修生は、一年在籍可能な学生です。科目は自由に選択できる。
科目履修生は、半年在籍可能な学生です。科目は自由に選択できる。
集中科目履修生は、夏季に集中し3ヶ月司書教諭資格取得・看護師資格取得に資する科目を履修する学生を対象にしている。

放送大学と私

放送大学生になった背景と今

いまから5年ほど前に、前々職の社員総会があり、その帰りがけに先輩3人とランチを食べに行った。

その三人は1、2歳差と、年代もほとんど一緒で、更に出身大学・学部が一緒なので、大学の話になった。
その際に、偶然にも2名が放送大学修士課程に在籍しているというので、放送大学の話題になった。

どうやら、話を聞いていると、好きな講座だけ取ることができ知的好奇心は満たされるし、ソフトウェアの学割が効くという話だったと記憶している。

そのころ大学・大学院の教育を受けたいと思っていた私は、産業技術大学院や東工大の社会人が多そうな専門性が高いコース調べていた。
放送大学は、当時テレビ放送とインターネット配信、一部面接事業での講義を受けられた。

幅広い教養を学ぶにはうってつけだと考え、まずは半年間在籍できる科目履修生として履修を開始した。
科目履修生として4上下期(2年)なり、その後は、一年間在籍できる選科履修生として履修を続けている。

履修してきた/している授業

履修してる授業は、多岐にわたる。

履修した講義を列挙すると、下記。

- 身近な統計(’18)
- エネルギーと社会(’15)
- 情報ネットワーク(’18)
- データベース(’17)
- コンピュータの動作と管理(’17)
- 情報のセキュリティと倫理(’14)
- 入門線型代数(’14)
- 初歩からの数学(’12)
- 情報学へのとびら(’16)
- 感性工学入門(’16)
- Javaプログラミングの基礎(’16)
- Webのしくみと応用(’15)
- データ構造とプログラミング(’13)
- 自然言語処理(’15)

単位は落としたのもあるが、大部分は取れている。

目的別には、

  • 京大黒橋教授が自然言語処理の講義を開講しており、当時NLPに今日持っていたので
  • 以前ゲーム開発で必要になった教養として、線形数学や数学
  • プログラマーで、CSの講義を受けてない負い目あるので、基礎として。ただ、流石に現職のプログラマーなので、たいていは授業みてなく、教科書を読んでおけば単位取得試験受けるだけで単位は取れた

特に良かった授業

黒橋講師(京大教授・放送大学講師)の自然言語処理(’15)は、NLPに興味持っていたタイミングで受講したが大変よかった。
教科書の質も高く。大満足。*6

また、黒須講師(放送大学名誉教授)の感性工学入門(’16)もまた大変よい講義だった。
黒須講師と外部の方々との対談は聞く価値があり、そして、感性に関してフォーラムで他学生と議論を行うのは大変ためになった。
(オンラインのフォーラムではなく、直接対面でゼミ形式で論じることができればよりよいのだが、放送大学の特性上難しいだろう...今後に期待)

コスト面

放送授業は2単位11000円のコストが掛かるわけだけど、費用対効果高い。

今後の課題

一番の敵は、仕事などを優先して、学習時間を確保できていないこと。あとは、仕事優先して、単位取得試験を受けに行けていない場合。これは課題である。

継続の意思

今後も継続して放送大学の学生を続けていくか?
現在のところは、お金が尽きたり、放送大学の制度が変わらない限り、放送大学の学生を続けていく考え。

調べ物と私

人生様々なことを調べる機会はある。時事や企業、人物などなど。

新聞のデータベースがほしいと思うこともあるし、論文をちょっとみてみたいと思うこともある。
古事記などの古典を全文検索したい場合だってある。

本買うまでではないが、書籍をちょっと見たい場合だってある。

放送大学と調べ物

さて、放送大学を活用した調べ物。
実際の図書館も千葉の本部にはあるが、オンラインで使える放送大学図書館がある。

このオンラインの図書館をデータベースとして使うと、結構調べ物ができたりする。

放送大学図書館

オンラインで使える放送大学図書館。
調べ物をするには、まさにうってつけ。ビバ学生。

この記事を書いている現在は以下のサービスが利用可能。*7

  • 放送大学ディスカバリーサービス(EBSCO社が提供する統合データベース)
  • 放送大学電子資料タイトル検索(放送大学で見られる電子ジャーナル・電子ブックを検索)
  • ScienceDirect(エルゼビアサイエンス社が提供する電子ジャーナル・電子ブック)
  • SpringerLink(シュプリンガーグループが提供する電子ジャーナル・電子ブック)
  • Cambridge Journals Online(ケンブリッジ大学出版局が提供する電子ジャーナル)
  • IEEEIEEE Computer Societyが発行する電子ジャーナル)
  • JSTOR(JSTORが提供する電子ジャーナル)
  • IOP (英国物理学会が提供する電子ジャーナル)
  • NII-REO(NII 電子ジャーナルリポジトリ)
  • 1999年以前のSpringer電子ジャーナルアーカイブ (NII-REO)
  • 1999年以前のSpringer Lecture notes in computer science (NII-REO)
  • 1996年から2003年までOxford University Pressの電子ジャーナルの一部タイトル(NII-REO)
  • CiNii Articles(国立情報学研究所(NII)が提供する国内の学術雑誌論文記事検索・全文提供サービス)
  • Maruzen eBook Library(丸善㈱が提供する日本で出版された学術電子ブック・電子ジャーナル)
  • EBSCO eBOOKs(NetLibrary)(EBSCO社が提供する電子ブック)
  • JapanKnowledge(約30種類の辞書・辞典を集積したデータベース)
  • 聞蔵IIビジュアル(朝日新聞記事データベース)
  • 日本古典文学大系本文データベース(国文学研究資料館
  • OPAC放送大学附属図書館蔵書検索)(※外部リンクから電子ブック等全文を読む場合はこちらから)

希望・要望

もっともっと使えるジャーナルやデータベース、サービスが増えるといいなぁ。
例えば、下記が読める・連携されると嬉しい。

放送大学学長。お願いします。

まとめ

書きなぐって、整理されてなく申し訳ないけど、最後に伝えたいことを。

- 放送大学いいよ
- 放送大学めっちゃいいよ
- 放送大学おすすめだよ

PySpaアドベントカレンダー

さて、明日はのアドベントカレンダーは頭脳明晰で生物として死んでもbotとして生きながらえると思われるしうまちです。

pyspa Advent Calendar 2018 - Adventar

*1:e-Gov法令検索e-Gov法令検索

*2:https://www.ouj.ac.jp/hp/toiawase/other/02.html

*3:第二章 放送大学学園 (目的) 第三条 放送大学学園は、大学を設置し、当該大学において、放送による授業を行うとともに、全国各地の学習者の身近な場所において面接による授業等を行うことを目的とする学校法人(私立学校法(昭和二十四年法律第二百七十号)第三条に規定する学校法人をいう。)とする。

*4:設立当初は国立大学の扱いでした。現在は法改正を経て私立大学となっています。

*5:学生の種類 | 放送大学 - テレビ・ラジオで学ぶ通信制大学

*6:放送大学 自然言語処理('15) - rokujyouhitoma's blog

*7:放送大学附属図書館

ゲーム関連の蔵書洗い出し。

持ち腐れするぐらいなら、欲してる人へ。

f:id:rokujyouhitoma:20180916193707j:plain

一覧

macでdotnet/coreの環境構築、Nugetの導入、自作ライブラリを組み込む

MacC#である。dotnet/coreをMacで実行するとは、つまりそういうことだ。

近年のMicrosoftは大好きだ。

概要

環境

dotnet/coreの環境構築

  • dot net SDK 2.1.301

インストーラーに従いインストール。

$ curl -O https://download.microsoft.com/download/D/0/4/D04C5489-278D-4C11-9BD3-6128472A7626/dotnet-sdk-2.1.301-osx-gs-x64.pkg
$ open dotnet-sdk-2.1.301-osx-gs-x64.pkg

dotnetコマンドを実行し、バージョンの確認。

$ dotnet --version
2.1.301
$ dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET Core information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.
$ dotnet help

.NET Core へようこそ!
---------------------
.NET Core についての詳細情報: https://aka.ms/dotnet-docs
'dotnet --help' を使用して利用可能なコマンドを確認するか、次にアクセスしてください: https://aka.ms/dotnet-cli-docs

テレメトリ
---------
.NET Core ツールは、エクスペリエンスの向上に役立つ利用状況データを収集します。データは匿名で、コマンドライン引数が含まれません。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、お好きなシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定します。

.NET Core CLI ツールのテレメトリに関する詳細情報をお読みください: https://aka.ms/dotnet-cli-telemetry

ASP.NET Core
------------
ASP.NET Core HTTPS 開発証明書が正常にインストールされました。
証明書を信頼する (Windows および macOS のみ) には、まず 'dotnet tool install dotnet-dev-certs -g --version 2.1.0-preview1-final' を実行して dev-certs ツールをインストールし、次に 'dotnet-dev-certs https --trust' を実行します。
HTTPS を構成する方法の詳細については、https://go.microsoft.com/fwlink/?linkid=848054 をご覧ください。
.NET コマンド ライン ツール (2.1.301)
使用法: dotnet [runtime-options] [path-to-application]
使用法: dotnet [sdk-options] [command] [arguments] [command-options]

path-to-application:
  実行するアプリケーション .dll ファイルへのパス。

SDK コマンド:
  new              .NET プロジェクトを初期化します。
  restore          .NET プロジェクトに指定されている依存関係を復元します。
  run              .NET プロジェクトをコンパイルして、直ちに実行します。
  build            .NET プロジェクトを構築します。
  publish          展開用の .NET プロジェクトを発行します (ランタイムを含む)。
  test             プロジェクトに指定されているテスト ランナーを使用して、単体テストを実行します。
  pack             NuGet パッケージを作成します。
  migrate          project.json ベースのプロジェクトを msbuild ベースのプロジェクトに移行します。
  clean            ビルド出力を消去します。
  sln              ソリューション (SLN) ファイルを変更します。
  add              参照をプロジェクトに追加します。
  remove           参照をプロジェクトから削除します。
  list             プロジェクトの参照またはインストール済みツールを一覧表示します。
  nuget            追加の NuGet コマンドを提供します。
  msbuild          Microsoft Build Engine (MSBuild) を実行します。
  vstest           Microsoft Test Execution Command Line Tool を実行します。
  store            指定されたアセンブリを実行時ストアに格納します。
  tool             .NET のエクスペリエンスを向上するツールをインストールするか、使用します。
  build-server     ビルドによって開始されたサーバーとやり取りします。
  help             ヘルプを表示します。

共通のオプション:
  -v|--verbosity        コマンドの詳細レベルを設定します。使用可能な値: q[uiet]、m[inimal]、n[ormal]、d[etailed]、diag[nostic]。
  -h|--help             ヘルプを表示します。

コマンドに関する詳細情報については、'dotnet COMMAND --help' を実行します。

sdk-options:
  --version        使用中の .NET Core SDK バージョンを表示します。
  --info           .NET Core 情報を表示します。
  --list-sdks      インストール済み SDK を表示します。
  --list-runtimes  インストール済みランタイムを表示します。
  -d|--diagnostics 診断出力を有効にします。

runtime-options:
  --additionalprobingpath <path>    調査ポリシーと調査対象アセンブリを含むパス。
  --fx-version <version>            アプリケーションを実行するために使用するインストール済み Shared Framework のバージョン。
  --roll-forward-on-no-candidate-fx 候補がない Shared Framework に対するロールフォワードが有効です。
  --additional-deps <path>          追加の deps.json ファイルへのパス。

Additional tools ('dotnet [tool-name] --help' for more information):
  dev-certs      Create and manage development certificates.
  ef             Entity Framework Core command-line tools.
  sql-cache      SQL Server cache command-line tools.
  user-secrets   Manage development user secrets.
  watch          Start a file watcher that runs a command when files change.

dotnet/coreを実行

.NET and C# - Get started in 10 minutes を試し、dotnet/coreを実行。

  • dotnetコマンドでアプリケーションを作成
  • 作成されたテンプレートの確認
  • 実行

コンソールアプリケーションの作成

$ dotnet new console -o App
準備しています...
テンプレート "Console Application" が正常に作成されました。

作成後のアクションを処理しています...
'dotnet restore' を App/App.csproj で実行しています...
  /path/to/App/App.csproj のパッケージを復元しています...
  Microsoft.NETCore.DotNetAppHost 2.1.0 をインストールしています。
  Microsoft.NETCore.DotNetHostResolver 2.1.0 をインストールしています。
  Microsoft.NETCore.DotNetHostPolicy 2.1.0 をインストールしています。
  Microsoft.NETCore.Targets 2.1.0 をインストールしています。
  Microsoft.NETCore.App 2.1.0 をインストールしています。
  MSBuild ファイル /path/to/App/obj/App.csproj.nuget.g.props を生成しています。
  MSBuild ファイル /path/to/App/obj/App.csproj.nuget.g.targets を生成しています。
  /path/to/App/App.csproj の復元が 5.97 sec で完了しました。

正常に復元されました。
作成されたテンプレートの確認
$ cd App/
$ ls
App.csproj	Program.cs	obj
App.csprojの中身を確認
$ cat App.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

</Project>
Program.csの中身を確認
$ cat Program.cs 
using System;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
実行
$ dotnet run
Hello World!

Nugetの導入、自作ライブラリを作成

macOS での .NET Core の概要 | Microsoft Docs をなぞり、Nugetを組み込む。
Nugetはパッケージマネージャ。

dotnet new sln

$ dotnet new sln
テンプレート "Solution File" が正常に作成されました。
$ ls
App		dotnetcore.sln

dotnet new classlib -o library

$ dotnet new classlib -o library
テンプレート "Class library" が正常に作成されました。

作成後のアクションを処理しています...
'dotnet restore' を library/library.csproj で実行しています...
 /path/to/library/library.csproj のパッケージを復元しています...
  MSBuild ファイル /path/to/library/obj/library.csproj.nuget.g.props を生成しています。
  MSBuild ファイル /path/to/library/obj/library.csproj.nuget.g.targets を生成しています。
  /path/to/library/library.csproj の復元が 275.86 ms で完了しました。

正常に復元されました。
$ dotnet sln add library/library.csproj
プロジェクト `library/library.csproj` をソリューションに追加しました。

Newtonsoft.Jsonをインストール

$ dotnet add library package Newtonsoft.Json
  Writing /var/folders/jn/zrzfgbbd07s_ph4wgm70dsx40000gn/T/tmpPbxSjT.tmp
info : パッケージ 'Newtonsoft.Json' の PackageReference をプロジェクト '/path/to/library/library.csproj' に追加しています。
log  : /path/to/library/library.csproj のパッケージを復元しています...
info :   GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json 175 ミリ秒
info : パッケージ 'Newtonsoft.Json' は、プロジェクト '/path/to/library/library.csproj' のすべての指定されたフレームワークとの互換性があります。
info : ファイル '/path/to/library/library.csproj' に追加されたパッケージ 'Newtonsoft.Json' バージョン '11.0.2' の PackageReference
$ dotnet restore
  /path/to/library/library.csproj のパッケージを復元しています...
  /path/to/library/library.csproj の復元が 231.68 ms で完了しました。
$ dotnet build
.NET Core 向け Microsoft (R) Build Engine バージョン 15.7.179.6572
Copyright (C) Microsoft Corporation.All rights reserved.

  /path/to/library/library.csproj の復元が 57.28 ms で完了しました。
  library -> /path/to/library/bin/Debug/netstandard2.0/library.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:04.29

作成したlibraryを使う

macOS での .NET Core の概要 | Microsoft Docs をなぞり、作成したLibrary.Thingを使い、実行する。

ソリューションを追加

$ dotnet sln add app/app.csproj
プロジェクト `app/app.csproj` をソリューションに追加しました。

ライブラリの依存関係を追加

$ dotnet add app/app.csproj reference library/library.csproj
参照 `..\library\library.csproj` がプロジェクトに追加されました。

実装。libraryを実際に使うコードに変更

Library.Thingを実際に使う。

$ git diff
diff --git a/path/to/App/Program.cs b/path/to/App/Program.cs
index 227ce6d..ae778b9 100644
--- a/path/to/App/Program.cs
+++ b/path/to/App/Program.cs
@@ -1,4 +1,6 @@
using System;
+using static System.Console;
+using Library;
 
 namespace App
 {
@@ -7,6 +9,7 @@ namespace App
         static void Main(string[] args)
         {
             Console.WriteLine("Hello World!");
+            WriteLine($"The answer is {new Thing().Get(19, 23)}");
         }
     }
 }

実行

$ dotnet run -p app/app.csproj
Hello World!
The answer is 42

まとめ

RestrictedPython。

RedashやPloneで使われているRestrictedPython。使う機会あったのでまとめる。

とりわけ、自前RestrictionTransformerクラスによるpolicyの設定方法は情報がネット上に皆無だったので、残しておけれればと思う次第。

...諸兄姉においては、RestrictedPythonさらにはexec、evalを使わざるおえない局面が来ないことを祈る(セキュリティ観点で)

環境

RestrictedPython

概要

Pythonソースコード文字列の実行時評価(e.g. exec、eval)する際に、評価するコードに制約(e.g. for statementの禁止)をかけるためのライブラリ。

CPython 2.7、3.4、3.5、3.6がサポートされている。PyPyをはじめとしたCPython以外のPython処理系は、サポート外。*1

注意点・観点

第一に、exec、evalは使うのは避けるのがよい。

理由としては、安全性・セキュリティの観点から、そもそもexec、evalは使うのは避けるるべきである。

避ける方法としては、VMを実装するのが一つ。
それ以外にも、ast.literal_eval使う方法や、別プロセスやコンテナの中など、限定された環境で評価を行うのがよい。

もし、言語ランタイムがサンボドックス実行の手段を提供してくれているのであれば、検討すること。

たとえば、言語ランタイムが提供するサンドボックスで知っている限りだと、Javaアプレット時代のサンドボックスや、PyPyが実験的に実装したサンドボックス*2

インストール

pip install RestrictedPython

今回は、4.0βで試した。

pip install RestrictedPython==4.0b4

from RestrictedPython import compile_restricted

source_code = """                                                               
def add(x):                                                                     
  return x + 1                                                                  
"""

context = {}
try:
    byte_code = compile_restricted(source_code, '<inline>', 'exec')
    exec(byte_code, None, context)
except SyntaxError as e:
    raise e
assert 2 == context['add'](1)

制約をかける

文・式の制約を加えたい。
RestrictedPythonではPolicyという概念があり、事前定義された組み込み関数が3つ(safe_builtins、limited_builtins、utility_builtins)を使うことで制約をかけられる。

safe_builtinsを使う

execの第二引数のdictで__buildins__にsafe_builtinsを設定する。

from RestrictedPython import compile_restricted
from RestrictedPython import safe_builtins

source_code = """                                                               
def add(x):                                                                     
  return x + 1                                                                  
"""

context = {}
try:
    byte_code = compile_restricted(source_code, '<inline>', 'exec')
    exec(byte_code, {'__builtins__': safe_builtins}, context)
except SyntaxError as e:
    raise e
assert 2 == context['add'](1)
safe_builtinsで制約がかけられているimport文を呼び出す

さて、safe_builtinsでは、import文が禁止されている。
試してみよう。

from RestrictedPython import compile_restricted
from RestrictedPython import safe_builtins

source_code = "import this"

context = {}
try:
    byte_code = compile_restricted(source_code, '<inline>', 'exec')
    exec(byte_code, {'__builtins__': safe_builtins}, context)
except SyntaxError as e:
    raise e

上記を実行した際はImportErrorが排出される。

ImportError: __import__ not found
本題。Policyに自前のRestrictingNodeTransformerを指定し制約をかける

RestrictedPythonの提供するcompile関数群(compile_restricted、compile_restricted_exec、compile_restricted_eval、compile_restricted_single)は、policyにRestrictingNodeTransformerを指定できる。

RestrictedPythonはRestrectedPytohnが提供している。親クラスは、標準モジュールastが提供するast.NodeTransformer。このクラスを継承して、自前のクラスを作ることによって制約をかけることができる。

例えば、import文を自前のOwnRestrictingNodeTransformerクラスで禁止したい場合は下記。

from RestrictedPython import compile_restricted
from RestrictedPython import RestrictingNodeTransformer

class OwnRestrictingNodeTransformer(RestrictingNodeTransformer):
    def visit_Import(self, node):
        self.error(node, 'Import statements are not allowed.')
    visit_ImportFrom = visit_Import

source_code = "import this"

try:
    byte_code = compile_restricted(
        source=source_code,
        filename='<inline>',
        mode='exec',
        policy=OwnRestrictingNodeTransformer)
    exec(byte_code)
except SyntaxError as e:
    raise e

実行すると下記となる。

SyntaxError: ('Line 1: Import statements are not allowed.',)

この要領で文、式の制約をかければいい。むろん特定のモジュールがインポートされた場合に対してだってなんだってやりたい放題。Pythonのビルドインライブラリast様様。

私感

astモジュール駆使して、制約かけるのはgoodではあるが...やはりそもそも論として、RestrictedPythonさらにはexec、evalを使わざるおえない局面が来ないことを祈る(セキュリティ観点で)

それるが、RestrictedPythonは、Zope Foundationが提供している。個人的な推測だが、Ploneで使う前提で作られ、ライブラリとして切り出されたと思われる。

Pythonを使ってるとZopeは避けられない。

*1:ソースコードぱっと見た限りはPyPyのサポートを頑張っている痕跡はある

*2:PyPy’s sandboxing features — PyPy documentation。現状使える状態なのかは不明。

macのセットアップ

連れ添った先代mac book airが不慮の事故で、使用不可となったので、新たなmac book airをセットアップ。

mac book air

- macOS Sierra 10.12.4
- MacBook Air (13-inch, Early 2015)
- 1.6 GHz Intel Core i5
- 8 GB 1600 MHz DDR3

インストールしたソフトウェア

- Chrome
- Google IME
- Slack(from App store
- XCode(from App store)
- Python 3.6.5
- g01.10.12(from go1.10.2.darwin-amd64.pkg )
- Steam

設定

ダッシュボードの不要ショートカットを全削除

IME

標準のIMEはoff。

キーボード/ショートカット

control + ↑↓←→はすべて外す。emacsとバッティングするため。

ssh key

ssh-keygenしなおした。

ターミナル

Proが好き。ちょっとフォントサイズ大きくして保存。

brew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

OpenSSL

brew install openssl

Python3

curl -O https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
tar zxf Python-3.6.5.tgz 
cd Python-3.6.5
vi Modules/Setup

Modules/Setup修正前

#SSL=/usr/local/ssl
#_ssl _ssl.c \
#        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#        -L$(SSL)/lib -lssl -lcrypto

Modules/Setup修正後

SSL=/usr/local/Cellar/openssl/1.0.2o_1
_ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto

./configure & make & make install

./configure --prefix=/path/to/bin/Python-3.6.5 --with-ssl
make
make install

venv & virtualenvwrapperの設定

デフォルトPython3系にしてしまう。

/path/to/bin/Python-3.6.5/bin/python3 -mvenv ~/.virtualenv/python3.6.5
source ~/.virtualenv/python3.6.5/bin/activate

.bash_profile

export WORKON_HOME=~/.virtualenv
export VENV=python3.6.5
source $WORKON_HOME/$VENV/bin/activate
source $WORKON_HOME/$VENV/bin/virtualenvwrapper.sh

GNU Emacs

emacsはひとまず、ビルドインので我慢できる...と思ってバージョン確認したらemacs22.11.1...流石に24以降使いたいから、インストール。

手抜きしてbrewで入れる。

brew install emacs --with-cocoa

.bash_profile以下を追加

export PATH=$PATH:/usr/local/Cellar/emacs/25.3/bin/
alias  emacs='emacs -nw'

その他

- ただの個人的な習慣だが、~/wok/以下に原則置く(例えばPythonは~/work/bin/Python3.6.5)。一部.dotfiesは~/以下はやむを得ない
- 話それるが、連れ添った携帯も移行しないとならない局面に

直近読んだ技術書籍

更新が滞っていたので一括で。

エキスパートPythonプログラミング改訂2版

改訂2版が出版されたので、読了。
Python3の時代になったんんだなぁ。と思う次第。
C/C++による拡張や、散らばって述べられる処理系の話は興味あるだけに楽しかった。

仕事ではじめる機械学習

基礎教養として読了。

みんなのGo言語【現場で使える実践テクニック】

Goになれるために読了。
ツール、文化を学んだ点が大きい。

プログラミング言語Go

Goの公式こなしたあとに読了。きっちりまとまっている良著。
言語の文法、基本的なライブラリを学ぶって意味だとこの書籍一冊で良さそう。

プロフェッショナルSSL/TLS

特に公開鍵ピンニングを学ぶ必要があったので、その周辺に絞って、部分的に読了。

ユビキタス時代の著作権管理技術―DRMとコンテンツ流通

DRM、コンテンツの秘匿、管理技術を学ぶ必要があったので、読了。
2006年出版と若干古い書籍では有るが、大系だって学べる良著。

画像電子学会が電子透かし関連の書籍を出版していることを知る。

ビットコインはどのようにして動いているのか?

基礎教養を得る意味で読了。

暗号技術のすべて

暗号技術に関する書籍でよいとの評判を聞
き、基礎教養を得る意味で読了。

プログラミングMICROSOFT ASP.NET MVC

dot net/dot net coreを触る機会があったので、技術習得のために。
msdn最強なのは否めない。

プログラミング MICROSOFT ASP.NET4

同上。

Learning NGUI for Unity

UnityのNGUIを学ぶ必要あったので、キャッチアップ目的で。流し読み。
なかなかNGUIに特化した情報リソースないので助かる。

NGUI for Unity

同上。

改訂3版 パーフェクトC#

C#を大系だって書籍使って学びたかったので、読了。

Learn Pixi.js

Pixi.jsチュートリアルこなし終わったので、購入した。
実際にはPixi.jsLearning Pixi を元に加筆、修正して出版されているので、
Learning Pixi以上に得れたものがあったかといえば、微妙。

Game Programming Patterns ソフトウェア開発の問題解決メニュー

かなりおすすめ。ゲームプログラミングでよく使わせるパターンがきれいにまとめられている。
実際にgameのメインループや、コマンドパターン、VM実装はかなり楽しかった。

一覧

エキスパートPythonプログラミング改訂2版

エキスパートPythonプログラミング改訂2版

仕事ではじめる機械学習

仕事ではじめる機械学習

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プロフェッショナルSSL/TLS

プロフェッショナルSSL/TLS

ユビキタス時代の著作権管理技術―DRMとコンテンツ流通

ユビキタス時代の著作権管理技術―DRMとコンテンツ流通

暗号技術のすべて

暗号技術のすべて

プログラミングMICROSOFT ASP.NET MVC (Microsoft Press)

プログラミングMICROSOFT ASP.NET MVC (Microsoft Press)

プログラミング MICROSOFT ASP.NET4 (Microsoft Press)

プログラミング MICROSOFT ASP.NET4 (Microsoft Press)

Learning NGUI for Unity

Learning NGUI for Unity

NGUI for Unity

NGUI for Unity

改訂3版 パーフェクトC# (PERFECT SERIES 1)

改訂3版 パーフェクトC# (PERFECT SERIES 1)

Learn Pixi.js

Learn Pixi.js

Game Programming Patterns ソフトウェア開発の問題解決メニュー (impress top gear)

Game Programming Patterns ソフトウェア開発の問題解決メニュー (impress top gear)

所感

時間経った後に一括でまとめるのは、だめだ。だめな理由は、

  1. 一冊一冊に対する書評や、行ったことのまとめの質が極めて低下
  2. そもそも何冊も抜け漏れがある
  3. 以上の結果から、行動履歴残すために記事化しているという目的を持っているのだけど、満たせてない。これは書評とは言えない。

よって、

  1. 小分け、一冊一冊に注力し記事にまとめる

例えば、下記ぐらいの密度でかければ満足。
e.g. http://rokujyouhitoma.hatenablog.com/entry/20120512/1336824901