2017年10月22日日曜日

備忘録・ちょっと得した気分になるXORの話

先日、コードテスト試験の練習問題を解いていた時の話。

問題は権利的に書けませんが、その途中で見ていたXORについての得する話がありました。

本題の前に復習。
XOR(排他的論理和)は、真理値表で以下の振る舞いをします。(もっと詳しくはこちら)


入力出力
ABX
000
011
101
110

で本題。
このXOR、何に使われるかというと、ビット誤り検知や暗号に使います。
詳しくはこちらに譲りますが、XORには以下の性質があります。

A ⊕ B ⊕ B = A ... (1)

これがどのように使えるかというと、
「仲間はずれ抽出」に使えます。

例えば、「1, 2, 3, 2, 1」の要素がある時、全ての要素をビット化すると以下になります。


10進法2進法(ビット)
11
210
311
210
11

このビット列を(1)の式に当てはめると、

1⊕ 10 ⊕ 11 ⊕ 10 ⊕ 1 = 11 ... (2)

になります。見ての通り、仲間はずれの3が抽出できました。
ただし、おそらく2つ以上の仲間はずれの抽出はできません。(証明したわけではないです...。)


10進法2進法(ビット)XORの結果
初期値00
111
21011
3110
4100100
51011
6110111
71110
111
21011
3110

というわけで、ちょっと得した気分になれるXORの話でした。



2017年10月9日月曜日

ieLT#8の運営振り返り

 先日、10/7(Sat)に開催されたieLT#8の運営主催をしたので、いろいろ振り返りたいと思います。ちなみにイベントページはこちら

以下、長文。(敬称略)

なぜあきおは開催したのか?


・発端

6月に僕がいんぱるすまえけん
「秋にもLTをやらないか?新入生は春より参加しやすいだろうから。」
と言ったのがきっかけです。その時に「やりたい」という声があったので、行動には移しませんでしたが、構想を練っていました。(ただ考えていなかっただけでは...)

その後、アナグラも同様に賛同してくれたので企画しました。

・開催にあたっての目標

3つあります。春の話を元につくりました。
  1. 春のLT大会よりもB1、B2の学生に参加してもらうこと。
  2. 技術系LTを増やすこと。
  3. 夏休みでやってきたことの発表の場をつくること。
1について、春のLT大会はB1、B2の参加が少なかったらしいから。
2について、過去には3分クッキング等の技術系LTがあったが、今は遊びや勧誘しかない。
3について、夏休みに勉強をするモチベーションとして良いかもということで。
果たして、この目標は達成できたのか...??

準備まとめ

参加募集ページの作成○

  • 開催2か月前にはイベントンにページができていて、何をするのかは書いていました。
    • 実際、見てもらえてたようで1000PVはあった。
    • イベントンのページはタイムテーブルがあったり、参加者への一斉連絡がしやすかったりと、使いやすかったです。
    • 反面、タイムテーブル中にリンクを置けなかったり、参加者への連絡が既読かどうか分からなかったり、若干不便な点がある。
  • 更新は何回も行っていたかと。
    • ただ、開催1週間前に発表者からいろいろ注文があってタイムテーブルやスライド提出先を直した。
  • 次回やるとしたら、またイベントンを使います。無料だし。Doorkeeperは有料だし。ATNDはわかんない。
    • あ、でも参加者への連絡はLINEにすると思う。既読したか分かるので。

教室予約・機材準備○

  • 基本、翁長さん経由で全てokでした。(翁長さんがいなかったらどうなるんだ...)
    • 教室予約は1ヶ月前にしてもらい、配信機材の準備もお願いしてもらった。
  • 今回は翁長さんに配信機材のレクチャーをしてもらった。
    • 前回は翁長さんが当日不在だったらしく、配信が危うかったらしい。
    • 今回も翁長さんが多忙なため不在だったが、配信はなんとかなった。
  • 次回やるとしたら、また翁長さんに頼むことになりそう。
    • 教室予約や配信には先生のアカウントが必要らしい。全て翁長さん頼り。ありがとうございました。
    • ちなみにUSTREAMへの配信は学科システム上で決まっていて、youtubeへの配信は難しいみたい。

告知× -> △

  • 告知は学科SlackとTwitterでやってました。
    • しかし、B1もB2も全然見てないです。なぜなら、B1はLINEでやりとりしているから、SlackもTwitterも見ないんだって。(開催前日にB1に聞いた)
    • B2は...。わからない。
  • はれんちにポスターを作ってもらいました。


  • 正直、一番の失敗です。
    • 前回の反省にも書いてあるのに、一番注意しなかったのはダメでした。
    • 言い訳としては、後期始めで教室を回れなかったこと、僕が研究で忙しかったことでしょうか。
  • 次回やるとしたら、それぞれの年次長にお願いして拡散してもらいます。
    • ただし、年次長の力が弱い場合があり、その時は教室周りします。
    • あとは、B1、B2により魅力的な見せ方をすることですかね。(何が魅力的なんだろう...)

変更点

  • 開催前アンケート○
    • ここから閲覧できます。(要・学科アドレス)
    • 「新入生向けLT大会との差別化」
      • 技術的なこと、役に立つことを優先してほしい、と発表者にお願いしました。
    • 「食欲の秋」
      • 懇親会でピザパーティーしました。
    • 「先生の紹介」
      • 新しい先生ということで國田先生をお呼びしました。
    • 全部は実現できなかったけど、秋でやる初めてのイベントなのでいろいろやりました。
    • 次回やるとしたら、アンケートはとりません。直接学年部屋に行って要望を聴きに行きます。
      • なぜなら、実際に話してみないと分からないこともあるから。アンケートを見ても、LT大会に参加しない人の意見がないから。
      • アジャイル曰く、「プロセスやツールよりも個人と対話を」
  • イベントページに発表タイトルと内容を書く○
    • これは個人的によかったと思う。開催中にもその内容をTLに流せたので。
    • 一方、発表者にとっては簡単に内容が変えられないが、その時は事前に話してくれれば変えられる。

開催中について

運営○

  • 今回は運営メンバーが非常に優秀で、何回も助けてもらいました。
    • さん(司会)、いんぱるす(TL担当)、もも(タイムキーパー)、オールバックの人(配信担当)
    • 特に司会には頭があがらない。僕の至らないところを全てフォローしてくれた。
    • 配信担当は開催前日にも関わらず、短いレクチャーで全てこなしてくれた。優秀。しかもB1。
    • ただし、配信担当以外は院生ってことがな...。本当は学部生が欲しかった。
  • 本当にスムーズで時間内に終わった。後日のアンケートでも皆褒めていた。
  • 次回やるとしたら、運営は今回の4人+1人欲しい。
    • 司会、TL担当、タイムキーパー、配信担当、懇親会会計担当(今回は司会がやった)
    • 主催はいろいろ決める必要があるため、基本動いてはいけないと考えたから。

変更点

  • 質問タイムの復活○
    • 前回は質問タイムがなかったけど、今回は復活させた。
    • 理由としては、「せっかくのLTに質問できないのは残念だ」という声が上がったから。ない方がスムーズなんだけどね。しかし、これが醍醐味でもある。
  • 複数台のPCの利用△
    • 前回は1台のPCで発表していたが、今回は複数台にした。
    • 理由としては、スライド資料を集めなくてもよいことが大きい。
      • 集めると、発表者に負担が大きい。直前まで修正できない。
      • 今回は発表までにできていれば良いことにした。
      • 後日、スライドは提出してもらった。
  • いいねボタンについて(未実施)
    • 実ははれんちが作っていた。が、これはまだ実装が不十分かと思い、今回は使わなかった。
    • もし、使われるようになれば、誰のLTが良かったのか数値で分かるようになる。

開催後

不参加勢への対応○

  • Togetterとスライド、動画で対応した。
    • 学科システムは動画を残せるらしく、それを利用した。
    • 結構見てくれているらしく、好評っぽい。

変更点

  • 懇親会○
    • 未成年もいるため、飲み会ではなくピザパーティーにしました。
      • SHIROBAKOの小笠原 綸子曰く、「飲めばいいというものではありません。飲みニケーションが苦手な人もいるのです。」
    • ちょっとグダッて、ピザが足りなかったですが、それは勘弁して。途中で人数が増えて大変だったんや。
      • ちなみに、発表者(院生)は500円、発表者(学部)は無料、それ以外は1000円にしました。
      • 本当は、発表者全員と運営は無料にしようかと思ったんだけど、司会に「それはやりすぎ」と怒られました。
        • 國田先生のカンパがかなり助かりました。
    • 次回やるとしたら、ピザパルコかドミノピザのどちらかやすい方をとります。そして、3人1枚の計算にして頼みます。追加の場合は確実にピザパルコ。あと、会計係がきちんと受付とお金管理をすること。

結果

さて、目標は達成できたでしょうか?
  1. 春のLT大会よりもB1、B2の学生に参加してもらうこと。
  2. 技術系LTを増やすこと。
  3. 夏休みでやってきたことの発表の場をつくること。
2だけは達成できました。他はダメ。
参加者を増やす策を考えないと、今後のLT大会は厳しくなりそうです。
どんな人に参加して欲しいのか、ちゃんとペルソナを考えて魅力的なLT大会にできると良さそうです。


追記(2017/10/13)

感想や意見をアンケートで募りました。
その結果、「楽しかった」「多角的なLTが見れた」という高評価をいただきました。
冬にもLTをやる企画があるそうなので、できれば参加したいですね。

一方、Twitterのタイムラインでは、B1とB2の連絡手段は何が良いのか議論が起こっていました。

  • 「公式なんだからnews-ieを見るだろう」
  • 「後期にもなってSlackを見ていないとかありえない」
  • 「どっちにしろ見ない人は見ない」
  • 「そもそもなんでLINEなのか」
  • ..etc

とはいえ、連絡なんて意外に自分自身も見ていないものです。だから、イベントの連絡や告知なんてこんな感じだろうな、という気がします。(僕も「スライドの提出先はどこですか?」という質問を5回くらい聞きました。イベントンからのメールに書いてあると思うけど...。泣)

というわけで、できる限り、全ての連絡方法で連絡したら良いと思います。
(ちなみに、Slack勉強会は楽しそうですね。やってみたい。)


2017年8月26日土曜日

AnacondaでPython環境をつくった話

Anacondaに手を出した

簡単だと思っていたが、意外なところでつまづいていた。
普通にanacondaを入れるなら、公式からpython3.6同梱版をダウンロードしたら良いと思う。そもそもanacondaってなんだよって人はここを読んで、どうぞ。
なんで3.6かっていうと、python2が2020年で引退しそうだから。
とはいえ、Pythonは21世紀のCOBOLなんで需要はあるだろうけど。

つまづいたって?

使ってるのがmacってこともあってpython2が入っているんですよ。
そこまではいいんだけど、過去の僕がpyenvを入れてpython3を入れているんですよ。これが厄介。
PATHが通ってるから、.zshrcのpyenv=~の記述を消す必要がある。
あと、Python公式からコンポーネントとして入れていると消す必要がある。

/Library/Framework あたりからpythonは消してしまおう。

あと、anacondaはデフォルトで.bash_profileにpathを書き込んでいる。
僕はzshなので、.zshrcに記述をコピーしてあげる。

というわけで

anaconda使っています。
jupyter notebookが便利すぎて笑える。

anaconda入れたけど、何したらいいかわからない人はここをでチュートリアルだ。


2017年8月25日金曜日

[自分メモ]Rubyでgnuplotを使う

Rubyでgnuplotする方法


gnuplotはCUIでグラフを表示できる無料のソフト。
ただ、使用する方法がインタプリタで逐一打って行く方法しかしらず、個人的にめんどくさい。
ちょうど、Rubyでツールを作る予定だったので、やってみた。

主にここを参考ですね。

メモー

そもそもrubyが1.9だったので、バージョンをあげました。
brewでrbenvいれて、そこから2.4を入れときました。

sudo gem install gnuplot

rubyはgemがあるので便利ですね。gnuplotがgemにあるのは知らなかったけど。

  Gnuplot.open do |gp|
    Gnuplot::Plot.new(gp) do |plot|
      plot.xlabel "time"
      plot.ylabel "amplitude"
      plot.grid

      plot.data << Gnuplot::DataSet.new(source_spectral[1].map(&:to_f)) do |ds|
        ds.with = "lines"
        ds.linewidth = 1
        ds.linecolor = 3
      end

      plot.data << Gnuplot::DataSet.new(target_spectral[1].map(&:to_f)) do |ds|
        ds.with = "lines"
        ds.linewidth = 1
        ds.linecolor = 1
      end
    end
  end

僕のソースコードってわけじゃないけど。
DataSet.new(何かデータ)って形ですね。
あとは、plot.~のところですか。ここら辺はグラフの設定や書き出し設定がかけるみたいです。
以上。

2017年6月16日金曜日

Java kücheに登壇してきました。

Java kücheに登壇してきました。


6/3(土)に開催されたJava kücheに登壇してきました。
沖縄ベイサイドセンター(サンエーコンベンションシティの隣)の1階のカフェを貸し切りにして、40人くらいの県内エンジニアさんが講演を聞きに来ていました。
僕は去年のenPiTに参加していて、アジャイル開発を経験したということで、その経験を紹介してくださいとの要望で登壇しました。
なお、僕はJava kücheは初参加、初登壇です。終始ビクビクしてました(笑)。

Java kücheとは

Java Kücheのページより
Java Kücheは沖縄における数少ないプログラマコミュニティとして、沖縄でのJavaの普及、 Java技術者の育成、また、Javaに限定しないプログラマのコミュニケーションの場を提供する目的で、 2006年7月21日に設立されました。
ということらしいです。全然Javaの話はしませんでしたが(笑)。

何を話したのか

enPiTではどんなアジャイル開発をしたのか、どう考えてどう判断したのか、終わってからの学びをお話ししました。
講演後に、何人かのエンジニアさんが「興味深い話でした」との感想をいただけたので、言いたいことは伝わったのかなーと思います。
資料はslide shareにあるので載せときます。

もしかしたら、伝わらなかったこと

講演では以下の3つの話をしました。
1. タスクの粒度やバックログの重み見積もりについて、開発速度について
2. 文化の違い、コミュニケーションの方法、ワークフローの違い
3. 個人間でのアジャイル理解、スクラム理解の差

説明の仕方がだいぶ下手な上に、先の資料は当日に作りましたので、伝わらないかもしれないと思って、ここに言いたかったことを書きます。

1について

タスクって細分化するのが難しいです。なぜなら、細分化しすぎると何の作業だかわからないし、大きすぎると具体性を失います。良い方法があればいいのですが...という話です。
僕の結論は、他のメンバーのタスクとロックすることない、依存関係のない細分化がされていれば良い、ということです。この話で重要なのは、チームが能動的に動きたいのに、タスクのせいで動けなくなってしまうことがある、ということです。素早く開発するアジャイルでは損です。
ロックするかしないかはチームによって異なります。なぜなら、毎日顔をあわせるチームならその場でコミュニケーションを取れば、ロックしているタスクの進行状況がわかるからです。逆に、全員リモートのチームはチャットでのコミュニケーションになるので、即レスするというわけにはいかなくなります。つまり、チームによってロックするかどうか変わります。そのため、タスクの最適な粒度はチームによって異なります。そして、その最適かどうかという判断は、タスク間の依存関係の有無で判断します、というお話でした。

バックログの重み見積もりもタスクと同様に難しい問題です。開発経験が浅いとどうしても正確に重みを見積もることができません。だから、実際の重みと異なることが多いです。そのせいで、その後のベロシティ計算に影響が出ることもしばしばあります。つまり、うまく見積もれないので、次回のスプリントでどれだけの容量をこなせるのか計算できず、開発スピードが微妙に上がらない、という問題です。
僕の結論は、最初は見積もりを失敗するためのもので、後で振り返ってみるのが良い、ということです。おとなしく見積もって開発経験を積めば見積もれる、という話です。要は慣れ。どうしても判断に迷ったら、今のスキルセットと比較してどうか、という判断ができるかと思います。例えば、調査を要するのならば5とか。皆目見当もつかない実装なら8以上、という具合です。

開発速度については、余談でした。今思うと、いらなかった。

2について

社会人でIT触ってれば当たり前の話ですね。人によって学んでいることが違いますから。あと、当たり前になっている用語を新人に伝えられるか考えてみると、チームが円滑に進む気がします。

3について


アジャイルに対する理解って個人で違います。当たり前ですよね。でも、チーム間ではその理解を共有していないと開発に影響がでてきたりします。
例えば、デイリースクラムやらない問題です。僕たちは昼休み中、slackに「今日やったこと・これからやること・今困っていること」を書きます。これを何らかの理由でやらない人がいます。後で聞いてみると、寝てた・何も進捗がないからやらなかった、という理由らしいですが、そういうときにこそやって欲しいのです。なぜなら、リスクを小さいうちに潰しておくことがデイリースクラムの目的だから。
僕の結論では、どれだけアジャイルの目的を理解しているのか、チーム間でたまに共有してみることをオススメします。みんな人間なので、たまに忘れます(笑)。だから、思い出しみる作業をするのです。

おわりに

という感じでしょうか。文章化したら伝わるかも、と思って書いてます。
今後もコミュニティ活動にコミットできればなと考えています。
できれば、僕は人と話してエネルギーを得る人ではないので(逆に放出してしまって元気がなくなるタイプ)、懇親会でビール飲むよりも、その後に映画とか見ながらご飯を食べたい。

2017年6月13日火曜日

Vimはじめました。


vimを初めて見ました。

MacVimを導入します。CLIからも使えるようにします。
インストール手順とか、参考になればどうぞ。どちらかというと寄り道多めです。
あと、環境はMac OS X Elcapitanです。

なんで今更?

きっかけは、達人プログラマーです。
Tips22に次のことが書いてあります。
一つのエディタを熟知すること
複数のエディタを使うよりも一つを熟知したほうが恩恵がでかいです。
以後、小鳥のさえずりのようにキーボードをカタカタします。

インストールする前に、やり方を探してみた。

先人が一応やっているのですが、ちょっと古いので更新してみます。

(ちなみに、lua版というのがあるらしいです。luaはneocompleteを使うために必要らしい。macvimはlua付きかどうかはわからない。要調査。)

インストールすっぞ。

MacVimを落とす。dmgファイルがあるはず。

ちなみにVimにはいろいろ種類がある。MacVimはgithubで管理されているので、READMEを読めば大抵は完結する。

dmgを展開するとアプリが入っている。
入れたら気づくけど、GUIアプリケーションだ。僕はCLIでも使いたい。

githubのFAQにはmvimというCLIが/Applications/MacVim.app/Contents/bin/mvimにあるらしい。

というわけで、bashrcかzshrcに以下を書き込む。

#Vim
export PATH="/Applications/MacVim.app/Contents/bin:$PATH"
#Alias
alias gvim='/Applications/MacVim.app/Contents/MacOS/Vim -g'
alias vim='mvim -v'

というわけで、vimで呼び出せるようになりました。めざせvimmer!!
Vimmerになるために覚えるコマンド集

2017年3月16日木曜日

【自分用メモ】英語勉強に使えそうなサービス

きっかけ

情報系のことをやっていれば、必然的に英語が必要になってきます。なぜなら、
  • プログラミング言語が英語。リファレンスも英語。Q&Aも英語。
  • 論文が英語。国際学会に出ると英語を喋ることに。
  • 留学生がいる。英語を話さないと。相手も英語が話せない場合も。
  • 5年後くらいには英語が社内公用語のIT系の会社がたくさん出そう。TOEICを採用試験に課す会社もある。
  • 日本語以外のサービスを作る。
などなど...。
というわけで、英語を勉強したくなるわけです。
でも、お金をかけたくない。しかも、面白い(モチベーション維持できる)ものがいい。
というわけで、今まで使ってきたサービスをレビューと共にまとめときます。(僕がTOEICを受けるのでTOEIC関連多めです。)

webサービス

  • Vocabulary.com
    • 無料。
    • 英単語を英語の意味で覚えられるwebサービスです。
    • 英単語リストも作ることができ、その問題も自動で作ってくれます。
    • また、他人の英単語リストも自分のリストにできるので、友達同士で共有したり、競い合ったりできます。
    • 難点は、全部英語。
  • FreeRice.com
    • 無料。
    • Vocabulary.comと同じで、英単語を英語の意味で覚えられるwebサービスです。
    • 最も特徴的なのは、正答した回数に応じて世界の難民に、会社がお米を提供すること。勉強しつつ、社会貢献もできます。
    • 提供したお米の数で、友達と競い合えば良いかと思います。
    • 難点は、全部英語。あと、問題が優しすぎたり、英語学習?と思わせる内容だということ。(もともと、英語圏の小学生向けコンテンツのため)
  • Test Your Vocabulary
    • 無料。
    • 英単語をどれだけ知っているか、語彙力を測るwebサービスです。
    • 語彙力が数字になって出るので面白い。ちなみに必要な語彙力の目安は、TOIEC600点(=英検2級)で4000〜5000単語らしいです。
  • 英語レベル診断テスト | アルク
    • 無料。
    • TOEICのミニ模試が受けられるwebサービスです。
    • 自分の大体のTOEICレベルがわかります。良い。

スマホアプリ

  • Poadcast & Radio & RSS Addict
    • 無料。
    • 様々なネットラジオが聴けるアプリです。
    • 話題な英語ラジオを取ってくることができるし、ニュースを解説を通じて聞くことができます。
    • 難点は、ほぼ英語。
    • ダウンロードはしましたが、1、2回で終わってしまった...。
  • 厳選したTOEIC TEST重要単語
    • 無料。
    • TOEICの単語を勉強できるアプリです。
    • 単語カードを解いていく形式です。
    • 難点は、古臭いこと。動きももっさり気味。
    • ダウンロードして、1、2分して消してしまった...。
  • TOEIC単語をゲームで学ぶ 英語無双
    • 無料。アプリ内課金あり。
    • TOEICの英単語を勉強しながら迫り来る敵を倒していくアプリです。
    • 英単語勉強 + Cookie clicker です。
    • 難点は、ほぼゲームなところ。ゲームが面白いので単語勉強にならない。
    • ダウンロードして2時間遊んで、勉強にならないことに気づき、消しました。
  • 英単語学習 えいぽんたん!
    • 無料。アプリ内課金あり。
    • 英語勉強をしながら、かわいいキャラクターを成長させていくアプリです。
    • 英単語勉強 + 育成ゲー。
    • 難点は、英語無双と同じく、ほぼゲームなところ。こっちは好きな人はやり続けそう。
    • ダウンロードして、30分くらいで消しました。僕は育成ゲーが好きじゃないかも。
  • 英単語アプリ mikan
    • 無料。アプリ内課金あり。
    • 英単語を段階ごとに勉強するアプリです。僕のイチオシ。
    • 1ランク100単語なのでサクサク次のランクに進めます。
    • ランクを上げるにもテストがあります。テストで合格しなきゃ次に進めません。
    • 単語帳が事前に作られているので、楽。
    • 運営が定期的にテストを作って、参加者を競わせています。僕はあまりやりませんが。
    • 高校生なら大会があるらしいです。優勝するとお金がもらえるらしい。
    • Pro版は月額1000円とちょっとお高い。グラフや色々な機能が追加されます。しかし、課金しなくても十分な機能があります。
    • 難点は、友達と競う機能がまだない。今後に期待です。
  • zuknow 友達とクイズで競える学習アプリ
    • 無料。アプリ内課金あり。
    • 英単語を友達と競いながら覚えられるアプリです。
    • 英単語を覚えるフェーズと、テストするフェーズがあります。
    • 最大の機能は、友達と煽り会える競い合えること。モチベーションが維持しやすいです。
    • オススメしたいところですが、サービス終了したみたいです。残念。
  • Duolingo
    • 無料。たぶんアプリ内課金あり。
    • 英語を総合的に覚えるアプリです。
    • ディクテーションもあるので、かなり覚えられると思います。
    • 難点は、文字を書くのが面倒くさいこと。たぶん、アプリ自体がスマホ向けではなく、タブレット向けなのかと思います。スマホだと入力がしづらい。

結局使っているサービス

mikanだけ。poadcastはごく稀につかうかも。

2017年3月13日月曜日

初めて確定申告をしてつまずいた話

初めて確定申告をしました。

というのも、TAのバイトで源泉徴収されていたからです。2,500円くらい。確定申告すると、払いすぎた税金が戻るらしいです。

2,500円かよ、それくらいでやるなよ。

そういう意見もあると思います。しかし、学生(ぼく)にとっては1週間分の給料です。なけなしのお金です。欲しいじゃないですか。あと、確定申告したことないので、社会に出る前に練習しておこう、ということでもあります。

どうやら期限があるらしい。

確定申告は期限があります。今年2017年は、3月15日(水)までのようです。(確定申告の時期、2017年はいつからいつまで?)

どうやらネットからできるらしい。

確定申告はネットからできるみたいです。e-taxというらしい。今回はe-taxでつまづいたことをメインに記事を書きます。

第1の壁:マイナンバーカード

マイナンバーカードか住基ネットカードが必要らしい。僕はマイナンバー持ってますので楽々スルー。

第2の壁:ICカードリーダー

マイナンバーカードのICチップを読み取らせないと申告できないです。接触型ICカードリーダーを2000円くらいでコジマで買いました。接触型で注意ですが、奥まで入ってないとエラーになりますので、物理層は確認しておいてください。僕はハマりました。

第3の壁:e-taxのソフト一式

ソフトがネットから落とせます。先駆者様がいらして、ここここを参考にしました。ちなみに、僕はmac book airで、Safari10.*です。ダウングレードはしなくていいみたい。

第4の壁:煩わしいシステム

いや、たぶん紙に書くよりは楽だと思います。思いますが、なんか古い感じのサイトですよね。途中セーブもできるけど、かなりアレなつくりです。お金がないんですかね?お金を扱っているのに...。

感想

ネットからできるのは良いですね。紙に書きたくないです。あと、紙面よりe-taxの方が還付が早いみたいです。処理が楽なのでしょう。ただ、サイトの作りをもうちょっとどうにかして欲しいです。あと、対応するブラウザがSafariのみって酷くないですか?ChromeとかFirefoxにも対応して欲しい。


2017年1月13日金曜日

【TAネタ】parseDoubleメソッドにはthrowが1つしかないのに、APIには2つあるのはなんで?

きっかけ

プログラミングが得意ではなかった1年生が4年後にTAをやるなんて思いもしなかった...(遠い目)

僕はTAでレポートの仮採点をしています。その時の質問をネタにしました。

parseDoubleメソッドにはthrowが1つしかないのに、APIには2つあるのはなんで?

JavaにはparseDoubleというメソッドがあります。このメソッドは、変換可能であればString型の文字列をDobule型の数値に変換することができます。

さて、APIを見てみるとこんなことが書いてあります。





Throws:
NullPointerException - if the string is null
NumberFormatException - if the string does not contain a parsable double.

どこが問題かと言うと、parseDoubleは最初に、

public static double parseDouble(String s)
                          throws NumberFormatException

と書いているのです。


NumberFormatExceptionはthrowで明示されているのに、NullPointerExceptionはどこでthrowされているのでしょう?

これを調べるにはJDKの実装を見てみるのが早いと思いました。
openJDKのDoubleを読んでみると、537行目にparseDoubleがあります。

public static double parseDouble(String s) throws NumberFormatException { 
 return FloatingDecimal.parseDouble(s);
}

どうやらFloatingDecimalに処理を投げているようです。
FloatingDecimalを読んでみると、109行目にparseDoubleがあります。

public static double parseDouble(String s) throws NumberFormatException {
 return readJavaFormatString(s).doubleValue();
}

どうやらreadJavaFormatStringに処理をなげ(ry
同じクラスの中にあるようです。1830行目にありました。

static ASCIIToBinaryConverter readJavaFormatString( String in ) throws NumberFormatException {
 boolean isNegative = false;
 boolean signSeen = false;
 int decExp;
 char c;
parseNumber: 
 try{ 
  in = in.trim(); // don't fool around with white space.
                   // throws NullPointerException if null 
  int len = in.length();
  if ( len == 0 ) {
   throw new NumberFormatException("empty String");
 }

ここで注目なのはin = in.trim()です。コメントにthrows NullPointerException if nullとあります。inはString型のフィールドです。どうやらinがnullの時、trimをするとNullPointerExceptionが投げられるようです。どういう仕組みでしょうか?(まあ、ここで調査を打ち切ってもいいのですが、納得するまで続けます。)

trimはStringクラスにあります。2867行目にあります。

public String trim() { 
 int len = value.length;

valueはchar型の配列です。lengthは長さを返します。
もし、value = nullの時、value.lengthはNullPointerExceptionを投げます。
Javaでは配列が「null」か「長さ0」かで意味が異なります。(引用: nullか長さ0の配列か)
長さ0ならNullPointerExceptionは投げないはずです。

結論

parseDoubleの内部でString型のフィールドに対してlengthを取っているため、その時に
NullPointerExceptionをthrowする。そのため、throwが2つあります、というわけでした。

2017年1月12日木曜日

texstudioの設定が変更されていた件

きっかけ

ちょっと前にMacをEl Capitanにアプデしました。
あんまりTeXも使う機会はなかったのですが、修論も近いので久しぶりに動かしてみることになりました。

ところが、動かない!

なんで??
そういえば何か重大な変更があったような...というのを思い出した次第です。

なんで動かないの?

僕は普段、TeXstudioを利用しています。優れものです。
ところが、コンパイルを押すとcommond not foundが返ってくるのです。
TeXstudioの環境設定を見ると、/usr/local/texbin/の中のコマンドを指しているようです。

ところが、El CapitanからRootlessのため、/Library/以下にtexコマンドが移ったようです。(引用: TeX界の El Capitan 迎撃戦記)

というわけで

簡単です。/Library/以下からtexコマンドを見つければ良い。
僕の場合、/Library/TeX/Distributions/Programs/texbin/にありました。
設定を書き換えて、終了です。
おつかれさまでした。