当ブログは移転しました。

2015年度を振り返って

年末に振り返り記事を書かなかったので,このタイミングで振り返ってみようと思う. 今年度はいろんなことが今までと変わった年だった.

研究がはじまった

これによって時間の使い方が変わった.一番多かったプログラミングの割合が減り,研究関連の割合が増えた.
先行研究を調べ,アイディアを実装し,実験をしてデータを分析する.発表する場合は,書式に則って文章にまとめ,分かりやすいプレゼンをする. この一連の流れをこなすのはとても難しく,今年度の大部分をこれに費やしたと言っても過言ではないと思う. 残念ながら今年は外部に発表するまでに至らなかったので,来年度はそこにこだわっていきたい.

免許を取った

自動車免許(AT)を取得した.学生の間には取れないんじゃないかと焦っていたので,なんとか取れて安心している. おかげで手続き事をするときの身分証明がスムーズになった.せっかくなのでゴールドを目指す.

基本情報技術者試験に合格した

秋の試験で合格した.情報系の学生だったら持ってて損はないと思う. 大学の授業で使ったテキストが非常に役に立った.そのうち応用も取りたい.

作曲をしなくなった

理由はコストが大きすぎるからである.余裕ができたらまたやるかもしれない.
今は新しい趣味を探している.できればPCを使わないものがいいなと思っている.

その他

・アルバイトを減らして週一回にした.
・PCを変えた.
スマホAndroidにした.
・サーバを解約した.

反省点

・拠点が定まっていない
このせいで生産性がすごく低下している.環境による影響が非常に大きいことを学んだ. 自分一人で作業するには自宅で十分だと思っているところが問題で,誰かと議論しないと生まれない発想やチャンスをもっと重要視するべきである.

・アウトプットが少ない
個人でもチームでも形に残る結果が少ないのはよろしくない.これはもしかしたら今までのやり方に問題がある可能性がある. 今までは目標や締め切りを持つことでモチベーションを保っていたが,それがなくても日常的に物事を進める癖をつけたい.

全体を振り返って

今年度は大学生も後半ということで,自分の中でいろいろなことを整理していた.
資格関係は3年のうちにとっておくことにした.専門的な授業が増えて,「職業」がチラチラしてきた.それにつれて,自分がどんな分野が好きなのかが少しずつ見えてきた.

生活については,多少ミニマルな方向に向かっている.なるべくコストがかからないようにして持ち物を減らし,管理コストがかかりそうな情報はクラウドサービスに移した. アルバイトを減らして時間を作った割には,思ったよりも遊ばなかったなという印象.

来年度の抱負

いよいよ大学生最後の年である.
まずは研究力を上げる.どこまで頑張れるかでこの先やっていけるかが決まる.というか頑張らないと卒業できなくなるので,しっかり取り組みたい. 授業が減って拘束される時間が減るので,自己管理が甘くならないように習慣づける. それから,IT分野以外の趣味を見つけたい.自分を人に伝えるときに,ITの話しかできないのはつまらない.今まではそこに音楽があったのだけど,自分の中で音楽は趣味から教養に昇華した. 教養といえば,今一度数学を復習しておこうと思う.なんだかんだいって理系学生なのだ.

もっと書きたいことがあったはずだけど,探り探り考えていたらこんな塩梅になった.まだぼんやりしていることがあるので,追々詰めていこう.

iPhone+SoftbankからAndroid+OCNに変えた

キャリアを変える

大学生である自分にとって,月の出費で一番痛いのがスマホ代である.毎月Softbankに7000円ほど支払っている.
家でもキャンパスでもwifiに繋いでいるためキャリアの回線を使うのは電車の中ぐらいであり,その維持費にしてはちょっと高額だと思う.
というわけで,いわゆるMVNOというやつに乗り換えてみることにした.

友人数人に聞いてみたところ,データ通信量がかさまない場合はOCNモバイルONEの一番安いプランが安定していてよいとのこと.
念のため毎月の通信量を確認してみたら,なんと月に3Gも使ってなかった.ソシャゲとかしないとこんなもんなんだろうか.
いくつかのプランを吟味した結果,やはりOCNモバイルONEに決定.ちょうどGEOで初期費用500円セールがやっていたのでそれを利用して購入した.

f:id:salmon2073:20160326155637j:plain

端末を変える

同時に,スマホ本体も変えることにした.
今まで使っていたiPhone5は大学に入ると同時に買った初めてのスマホで,当時もっとも容量の大きかった64GBモデル.
まだまだ使えると思うけど,simロックがかかってるのでよくあるドコモ回線のMVNOでは使用できないらしい.いい機会なので,Android端末を購入することにした.

f:id:salmon2073:20160327133945j:plain  端末はNexus5Xにした.どうせなら最新のOSが使えるものがいいよね.

結論

それでどのくらい安くなったのかというと,
端末代(46500円) / 使用月 + 通信料(1600円)
と計算すると,8カ月目から毎月5000円安くなる計算になる.

微妙な感じもするが端末代は先にまとめて払っているので,来月から引き落とされるのが通信料だけというのは精神的にいい(これ大事). また,乗り換えずに2年使った場合を考えると6万も違うことになるので,端末をもう一台買ってもおつりがくるのである.例えば最近出たiPhone SEがそのくらいの値段だった気がする.

感想

というわけで,キャリアのほうは今のところ順調である.実際に使ってみて,普通に使えるようであれば家族のキャリアも変える予定である.
Androidのほうはまだいろいろ慣れていないところが多い.好みに応じてカスタマイズできるという話を聞いたので,どこまでできるかやってみたい.

最近2年縛りが撤廃されたという話だが,代わりに出されたプランを見てがっかりした人はこの際乗り換えを検討してみてはどうだろう?

Win2Dでお絵かきプログラミング

はじめに

僕は普段、簡単なプログラミングにはProcessingを使っている。
java使えるし、見た目のあるアプリケーションを簡単に開発できるので気に入っている。
ところで、最近WindowsAPIを使って開発したいものがあった。こういうものはVisualStudioを使ってC#で作るのがよい。

さて、WindowsGUI開発にはいくつか種類があって、「フォームアプリケーション」とかWPFとかUWPとかある。
新しいのがUWPで、センサーの値を拾ったりするのが簡単である。見た目の部分はxamlを使って描くらしい。
GUIの部品はある程度用意されており、デザイナーの使い勝手もとてもいい。ただ前述のとおりProcessingが好きな僕は、できればUWPでも簡単に図形を描画したりしたい。

そんな願いを叶えてくれるのが、Microsoftが出している(!)Win2Dというライブラリである。 簡単に説明すると、DirectXのラッパーである。

導入

「ファイル」→「新規作成」→「プロジェクト」から「空のアプリケーション」を選択。

f:id:salmon2073:20160314115327p:plain

新しいプロジェクトが開いたら、「ツール」→「NuGetパッケージマネージャー」→「ソリューションのNuGetパッケージの管理」と進み、 「参照」タブを選択。検索バーにwin2dと入力するといくつか候補が出てくる。 赤いアイコンのやつがうまく動いてくれるので、win10の人は基本的に「Win2D.uwp」を選択してインストール。プロジェクト作成時に(Windows8.1)と表示された人は「Win2D.wiin81」を選択しよう。

f:id:salmon2073:20160314120116p:plain

Win2dの初期設定

公式ドキュメントに使い方が載っている。

Introduction

MainPage.xamlのPageタグの中に以下の文を書き込み、

xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"

Gridタグの中に以下の文を書き込めばよい。

<canvas:CanvasControl Draw="CanvasControl_Draw" ClearColor="White" Loaded="CanvasControl_Loaded"/>

MainPage.xaml.csにセットアップ用のメソッドと描画用のメソッドを実装する。 最低限動くコードは以下の通り。

using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.Canvas.UI.Xaml;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace App2
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void CanvasControl_Loaded(object sender, RoutedEventArgs e) {

        }

        private void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args) {
            CanvasDrawingSession d = args.DrawingSession;
            /*ここに描画命令を書く*/
        }
    }
}

プロセッサアーキテクチャが云々言われたらAnyCPUから他のものに変えよう。 ここまでくるとprocessingとそっくりなので書きやすい。

図形の描画

argsからDrawingSessionを取り出して描画命令を呼び出す。 簡単な命令をいくつか。

using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.Canvas.Text;
using Microsoft.Graphics.Canvas.UI.Xaml;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace App2 {
    public sealed partial class MainPage : Page {
        public MainPage() {
            this.InitializeComponent();
        }

        private void CanvasControl_Loaded(object sender, RoutedEventArgs e) {

        }

        private void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args) {
            CanvasDrawingSession d = args.DrawingSession;
            d.FillRectangle(250, 250, 700, 400, Color.FromArgb(50, 100, 50, 250));
            d.DrawEllipse(450, 450, 200, 200, Color.FromArgb(100, 100, 100, 255));
            d.FillEllipse(750, 450, 200, 200, Color.FromArgb(100, 100, 100, 255));
            CanvasTextFormat f = new CanvasTextFormat();
            f.FontSize = 30;
            d.DrawText("Hello World!", 370, 430, Color.FromArgb(200, 255, 255, 255),f);
        }
    }
}

実行するとこんな感じ

f:id:salmon2073:20160314134044p:plain

そういえば、ウィンドウの縦横情報を取得する方法が分からなくて困った。こんな感じに取得できる。

var width = sender.Size.Width;
var hight = sender.Size.Height;

アニメーションをつくる

Introductionのコードは静止したスケッチを描くようなので、アニメーションをしようと思ったらcanvasを以下のように書き換える。

<canvas:CanvasAnimatedControl x:Name="canvas" Draw="canvas_DrawAnimated" ClearColor="White"  CreateResources="canvas_CreateResources"/>

コードのほうも少し変える。

using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.Canvas.UI;
using Microsoft.Graphics.Canvas.UI.Xaml;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace App3 {
    public sealed partial class MainPage : Page {
        public MainPage() {
            this.InitializeComponent();
        }

        private void canvas_Loaded(object sender, RoutedEventArgs e) {

        }

        private void canvas_CreateResources(CanvasAnimatedControl sender, CanvasCreateResourcesEventArgs args) {

        }

        private void canvas_DrawAnimated(ICanvasAnimatedControl sender, CanvasAnimatedDrawEventArgs args) {
            CanvasDrawingSession d = args.DrawingSession;
        }
    }
}

おわりに

意外と日本語の情報が少なかった。 本来はもっといろんなCG処理を描けるものらしいので、気が向いたらやってみる。

気が付いたらクラウド依存になっていた

研究室で新しくPCを貸出してもらえることになった.ハイエンドなスペックではないけど,まあまあ使える. 自分のPCは外部ディスプレイへの出力端子がmicroHDMIというやつしかないので,コンバータをかませる必要がある.これがなかなか貧弱なやつで,発表会の時にスライドをめくった瞬間に切断されてしまったこともあるくらいだ. その点こっちはVGAがついている.安心と信頼のVGA.でもなぜかHDMIはついていない.

さて,PCを2台持つにあたって問題となるのがファイルの管理だ.USBでいちいち転送するのは面倒なので,自動で同期してくれるソフトがほしい. windowsに標準でインストールされていてofficeとの互換性がよいOneDriveと,共同作業でも使えて容量の大きいGoogleDriveで迷った結果,GoogleDriveに決定. もともとGoogleDriveはゼミでもよく使用しているので個人的に信用できる.というわけでHDDのドキュメントやソースコードたちをごっそり移行した. 今まで,クラウドサービスに接続できないときに困るんじゃないかという理由であまり使ってなかったんだけど,どうやらローカルにもファイルが保存されるのでオフラインでも使用できるようだ. そのおかげでVisualStudioから直接プロジェクトを読みに行ったりできて,普段のファイル操作となんら変わりなく使えてる.今時の技術はすごいもんだ.

最近,身の回りのデータをどんどんクラウドサービスに移している.画像は容量無制限のGooglePhotosに投げるようにした.こっちも「写真」フォルダとして自動で同期されるため,いつの間にかスマホとPCで画像のやりとりをシームレスに行える環境になっていた.メモはevernoteで書いている.こうなると,まだクラウドに移行していないのは音楽ぐらいな気がする. 管理コストもないし,しばらくこのまま依存してみる.

Windows10でdockerやろうとしてハマった

ローカルでの開発にdocker使ってみようと思ってハマったのでメモ.

Windowsでdockerを直接使うことはできないので,dockerが動いている仮想環境にアクセスして間接的に操作することになる.

dockerが入った仮想マシンを用意してくれるboot2dockerというものを見つけたのでインストールしてみたが,これは既に非推奨らしくdocker-machineを使えとのこと.

というわけでdocker-machineをインストール chocolateyなら簡単である

choco install docker-machine

以下のコマンドで仮想環境はが作れるはず

docker-machine create -d virtualbox dev

さてマシンを作るぞー とコマンドを打つとなにやらエラーが

Error creating machine: exit status 1

このままでは何が悪いのか分からないので、とりあえずググってみたところ、デバッグ用のオプションがあるらしい

そして見つけたエラーがこれ

error: Failed to create the host-only adapter

ネットワークがなんか悪いのかなーと思ってしばらくvbox弄ってみたりバージョンを落としたりしたけど変わらず…

しょうがないのでまたググってみるとこの記事にたどり着いた

d.hatena.ne.jp

Windows10が悪いんか… 解決法はあるようなので、その通りにexeファイルをダウンロード、起動したままさっきのコマンドを打ったら見事にエラーは消え去った