100000歳になった

本日2017/07/03をもって、年齢が2進法で6桁に桁上りしました。

class Tommy:
    def __init__(self, age):
        self.age = age


def birth_day_2017():
    tommy = Tommy(0b11111)
    tommy.age += 1
    print(bin(tommy.age))  # 0b100000
    print(tommy.age)       # 32


def main():
    alive = True

    birth_day_2017()

    while alive:
        try:
            move_forward()
        except:
            dont_give_up()


main()

これからも自分なりに人生を楽しんでいきたいと思っています。
よろしくお願いいたします。

『達人に学ぶDB設計 徹底指南書』を読んだ

これから自分の関わる業務がどういうものになるか見通せない状態にあることもあり、特化した技術や流行りを追いかけるよりは、5年10年通用してくれそうな基礎的な技術を学ぼうと思い、データベースの勉強を進めることにしました。

そこで選んだのが、訳書を含めてデータベースについて多くの著書を執筆されているミックさんの本です。

まずは復習がてら『SQL 第2版 ゼロからはじめるデータベース操作』から始めて、『達人に学ぶ SQL徹底指南書』に進みました。そして、この記事で言及する『達人に学ぶ DB設計徹底指南書』を読み終えました。

どれも大変興味深く、理論と実践のバランスの取れた素晴らしい本でしたが、その中でも本書は特に面白かったのでブログ記事にしました。

本書のテーマ

「はじめに」に書かれていますが、リレーショナルデータベースにおける設計を、(1) 正規化やER図を使ったモデル設計である「論理設計」、(2) サーバーやストレージといった物理的なハードウェアレベルの設計である「物理設計」、(3) 特定のデータベース製品に対する設計である「実装設計」の3つに分類した場合、本書は実装設計を除いた、論理設計と物理設計の2つについてカバーしています。

論理設計と物理設計は「あちらを立てればこちらが立たず」のトレードオフの関係にあるため、それぞれについての望ましい設計というものを学んだうえで、そのトレードオフを学ぶのが本書の目的と著者は言っています。トレードオフという言葉は本書の中で頻繁に登場する重要ワードになっています。

章の構成

章ごとの概要をまとめると、第1章はシステムとデータベースについて、第2章は論理設計と物理設計、第3章は正規化、第4章はER図、第5章は論理設計とパフォーマンス、第6章はインデックス・統計情報とパフォーマンス、第7章は論理設計のバッドノウハウ、第8章は論理設計のグレーノウハウ、第9章はSQL木構造を扱う方法が書かれています。

部に分けるならば、1、2章が概要編、3〜5章が論理設計編、6章が物理設計編、7〜9章が応用編といったところでしょうか。

論理設計と物理設計、どちらを優先するか?

本書のテーマである論理設計と物理設計のトレードオフですが、ではどちらを優先すべきかという点において、「おわりに」の中で著者は「特別な事情のない限り、論理設計は物理設計に優先するべき」と述べています。 第5章の中でも、非正規化によりパフォーマンスの向上が見込めるケースはあるものの、クリス・デイトの「非正規化はあくまでも最後の手段である」という言葉を引用し、基本的には整合性を優先するべきだと示しています。
その理由の1つに「パフォーマンスをはじめとする物理層に起因する問題は、いずれハードウェアによる解決が可能になっていくことが予想される」ことを挙げています。論理設計の改修には大きなコストがかかるのに対し、物理設計は物量による対応が可能なのです。

ただし、物理設計について無知であっていいかというとそうではないので、論理設計を優先することでどういう影響があるのか知った上で設計できるようになることが重要だと強調しています。著者があえて「おわりに」の中で結論を述べているのは、物理設計を疎かにして欲しくないという気持ちの表れでしょう。

感想

銀の弾丸などない」という言葉があるように、「これを選んでおけば何も考えなくていい」といった簡単で最善な解決策がない場面がソフトウェア開発においてはほとんどで、常に難しい選択の連続です。本書はデータベースの世界においてどういった選択をすればいいかという指標を示してくれます。リレーショナルデータベースに関わる開発者 (そうでない人なんてほとんどいない?) なら読んでおいて損のない1冊だと思います。

ちなみに出版社の紹介文として「『達人に学ぶ SQL徹底指南書』の続編」と書いてありますが、『達人に学ぶ SQL徹底指南書』を読んでいなければ理解できないような箇所は少ないですし、内容的に得るものがより多いうえ、理解もしやすいため、こちらの方を優先して読んだほうが有益なのではないかと僕は感じました。

達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書

一流エンジニアなんて目指さなくていいのかも

こんな記事を読んだ。

林修「仕事をするのに好きかどうかは関係ない、重要なのは勝てる土俵なのかどうか」

この記事の中で林さんは「一流しか存在価値がない」と思っていると語っている。もちろん、これは林さんの信条であって、皆に強制しているわけではないという前提なのだけど、一流なんて目指さなくていいんじゃないかと最近思うようになった。

クラスで1番だった人とインターネット

ずっと思ってきたことなのだけど、インターネットというものが生まれたせいで、「クラスで1番」だった人が輝けない世界になったような気がする。せいぜい40人程度の集団では輝けていた人が、インターネットでは一気に70億人の世界に晒されるわけで。

特にソフトウェア開発の世界では、GitHubやらQiitaやらで、承認される人とされない人にはスター数やいいね数などで数値として違いが大きく可視化されてしまう。そして、インターネットを見ていると、仕事をバリバリこなしつつ、サイドプロジェクトを何個も持っていて、アウトプット量が半端ないといったようなスーパーエンジニアばかりが目についてしまう。

こうなると「クラスで1番」だった人は自信を失ってしまう。「結局自分なんて井の中の蛙」なんだなと。

これはインターネットに限った話じゃなくて、NHKのスーパープレゼンでスプツニ子!さんが、MITに入る学生はそれぞれの高校では1番だったのに、天才達に囲まれて自信を失ってしまうことも多いということを話していた。

しかし、そもそも考えてみれば「クラスで1番」っていうだけで誇っていい話だし、40人いれば他の39人は1番じゃないわけだ。その人達には存在価値はないのか、というとそんなことは全くない。むしろ他の39人がいることで世の中は成り立っている。

ソフトウェア開発で一発逆転を目指した

僕の場合、中学では学力でいい位置にいたものの、高校を中退してしまい大学進学を経験していないので、潜在的な学力での自分の位置づけが分かっていない。大学を受験していたとしたらどこまでいけたかなんかを考えることも時々ある。位置づけが分かっていない分、どこまでやれるかの限界を試してみたいというような気持ちがあった。

そんなものだから人生一発逆転してやる、というような気持ちで今まで技術の勉強を頑張っていたところがあった。そして、ソフトウェア開発の世界は努力して技術を磨けば逆転が可能だと思わせてくれた。

そうやって頑張っていたものの、仕事では思った内容の業務をやらせてもらえず、「毎日の8時間が勿体無い」と思いながら、焦る気持ちがどんどん積もっていった。映画やドラマ、アニメ、本を楽しむ時間も削って勉強にあてようとした。僕は年齢が30を超えていて、キャリアを考えるとゆっくりはしていられない。そんな焦りが積もった結果、ついには心が折れてしまった。

結局こうやって自分を追い込むことで、自分を不幸にしてしまっていたと気づいた。

もちろん強靭なメンタルと熱意と才能がある人は一流になることができるのだろうし、それを目指すべきなんだろう。

だけど僕は自分が思っているより脆い人間なんだと今更ながら気づいた。

これから

これからは技術は業務をこなせる範囲で程々に頑張りつつ、趣味のサイクリングやギターをもっと楽しんでいきたいと思っている。

今年の1文字は「緩」と決めている。緩やかな上昇はしつつも、無理はしない。自分をいじめず、周りの人と笑って楽しめる、そんな1年にしたいと思っている。

2016年振り返り

このブログを読んでくださっている皆さん、今年もお疲れ様でした。皆さんにとってどんな年だったでしょうか。

参加しているCOUNTDOWN JAPAN 16/17の会場から今年を振り返ってみようと思います。何気にiOSアプリからブログ書くのは初めてだったり。

技術面の振り返り

技術的には個人的に3つほどやってました。振り返ってみると、どれも中途半端に終わり、迷走感があります。

Python

仕事で触れたことをきっかけにCheckiOの問題を解いたり、Flask、Djangoチュートリアルをやってみたりしました。

Kotlin

バージョン1.0が出たことをきっかけに公式チュートリアルをやったり、Android本をやったりしてみました。

iOS / Swift

アプリを作り上げることを目的に、Stanfordの講義なんかを見つつメインにやっていたものの、色々あって途中で断念しました。

その他振り返り

技術以外だとどんなことをやってたか振り返ってみます。

数学

プログラマーとして社会人になったけど高校数学を1から独学しているという、かなり久々に書いた記事が、ブログを書き始めて以来初めてバズりました。機械学習なんかで必要になることもあり、数学ブームと、学習し直したい人の需要の高まりを感じました。

進捗的には1年をかけて数I+Aの範囲を終えることができました

ロードバイク

ロードバイクを購入しました。これが一番大きな変化かも。ただ、あんまり乗れてないので2017年はもっと乗っていきたいです。他県への泊まり込みでの遠出なんかもしてみたいところです。

ギター

去年から継続してゆるくやってます。これももっと上手くなって他の人と合わせたりとかしてみたいです。

まとめ

振り返ってみると、何かこれといって成し遂げたものはないですが、それなりに楽しく過ごせたので、まあいいかなと思ってます。

来年も何か大きな目標をドンと立てるというよりは、数学やらギターやら技術やらを毎日地道にコツコツやってスキル向上していけたらと思っています。
働きながら何かを身につけようとすれば、時間が足りないぶん、やはり小さく積み重ねていくしかないと思っています。

ではでは皆さんよいお年を!

海外のテクノロジー・開発系の情報収集のために自分が行っている方法

テクノロジー・開発系の分野に携わっていると、日々の情報収集は欠かせません。国内の情報だけでも十分ではありますが、海外の情報に触れることも大切だと思います。

海外の情報であっても、ニュース系の記事は大抵すぐに翻訳されますが、コラムやエッセイなどは数ヶ月遅れでやっと翻訳されて、日本で話題になるのは結構あとだったりすることも多いです。

日々最新の情報を収集するため、僕が行っている方法を紹介したいと思います。僕の興味のあるiOS開発やSwiftでの例もとりながら紹介していきたいと思います。

Twitter

まずは基本のTwitter。興味のない記事が並びまくるメディア系のアカウントではなく、個人のアカウントを中心にフォローしています。日本人に多い、1日にツイートが途切れなく続くような人は少ないため、フォローを増やしてもそんなにノイズが無いのでいい感じです。

フォローしているTwitterアカウントの例です:

ユーザー名 名前 説明
@SwiftLang Swift Language AppleのSwift公式アカウント
@clattner_llvm Chris Lattner Swift、LLVMの作者
@modocache Brian Gesiak Swift、LLVMのコミッターで、Quickテストフレームワークの作者
@NatashaTheRobot NatashaTheRobot This Week in Swiftというニュースレターの作者

reddit

次に、日本では海外の2chと紹介されることが多いredditです。

2chredditで対応させると、板→subreddit、スレッド→post、レス→commentとなります。カテゴリーごとに区切られたsubredditの中で、誰かがpostを作成し、その中でcommentにより議論するという流れです。self postという、リンクを伴わずpost作成者の質問などに対して議論する場合もありますが、基本は記事へのリンクを貼って、それに対してみんなで議論するというのが主流です。

2chと大きく異なる点は、commentがツリー型となっている点と、それぞれのpostやcommentに対してupvote (👍)、downvote (👎) が出来る点です。これにより多くの人の支持を集めたpostやcommentが上位に来るような仕組みになっています。誹謗中傷や的外れなcommentは勝手に沈んでいきます。

興味のあるsubredditを登録してチェックしていくのですが、僕なりのredditの歩き方としては以下のような感じです:

  • 賑わっている、または重要なsubredditは、毎日同じ時間に、上部のtopタブを押し、links fromを24 hoursにしてチェック。これでその1日に話題になったpostをチェックすることができる。
  • 毎日きっかり同じ時間に見れるとは限らないので、24時間から外れて話題になったpostの漏れを逃さないため、hotタブを押し、"1 day"をキーワードにブラウザで検索、引っかかったpostをチェックする。
  • 賑わっていない、またはそこまで重要でないsubredditは https://www. reddit. com/r/[subreddit名]/top/?sort=top&t=week*1をブックマークに追加して毎週チェック。それらのブックマークをまとめたフォルダを作って、一気に全部開けるようにしておくと良い。
  • Reddit Enhancement Suiteという拡張機能を入れて使いやすく見た目や機能をカスタマイズ。

登録しているsubredditの例です:

subreddit 説明
/r/programming プログラミング全般
/r/iOSProgramming iOSプログラミング
/r/swift Swift

Hacker News

次はHacker Newsです。ポール・グレアムY Combinatorによって運営されている、テクノロジー特化のredditみたいなところです。redditジョーク受けがいいですが、こちらはもうちょっと真面目なコメントが上位に来やすいという印象があります。

Hacker Newsはそのままでは素っ気がなく、記事の数も多く使いづらいので、僕はhnrssという、条件でフィルターしてRSSとして垂れ流してくれるサービスを経由して購読しています。具体的にはhttp://hnrss.org/newest?points=200というフィードで、200ポイント以上のポストだけ流れてくるようにしています。

あとはHacker NewsにもHacker News Enhancement Suiteという拡張機能redditと同じようにあるので、これも入れています。redditと違いコメントの折りたたみなどが素のサイトでは出来ないため、redditのものより重宝しています。

メールマガジン

メールマガジンもいくつか購読しています。Podcastと同じく、近年見直されている昔からあるツールではないでしょうか。

毎週決まった曜日に、その週のニュースをまとめてキャッチアップできるので、役に立っています。また、複数購読しておくと、重要な記事が何回も目に触れるという利点があります。

購読しているメールマガジンの例です:

まとめ

ここまで僕なりの海外の情報収集について紹介しました。

1次ソースを直接見るのではなく、コミュニティによってキュレートされた情報を収集している形になります。これでも十分だと思いますが、自分の専門分野については1次ソースに当たったほうがいいかと思われます。

皆さんもこういう情報収集しているよーというのがあったら是非ブコメなどで教えてください。

*1:スパム対策のためか、はてなブログredditドメインを含むURLを貼れないためこういう書き方になっています。実際に入力する際はスペースを省いて下さい。

高校数学独学の途中経過ー数学I+Aを終えて

タイトルの通り、『プログラマーとして社会人になったけど高校数学を1から独学している』という記事で紹介した長岡の教科書の数学I+Aを終えることが出来ました。

Studyplusのログによると、今年の1/4に手をつけ始めて、途中2月半ばから1.5ヶ月ほど休みを入れたものの、そこからはコツコツと継続して、10/2にようやく終えることができました。休みの期間を省くと約7.5ヶ月かかったことになります。標準的な高校生が1年をかけてこの範囲を学習することを考えると、それなりにいいペースなのではないかと思います。ただ、問題集などは全くやっていないので、問題を解いた量なんかは比べ物にはならないですが。

勉強法

長岡の教科書を教材にするにあたって僕が取った勉強法を書いていきます。

勉強のスタイルとしては、解説のあとの問とセクションごとの演習だけ解いていく形で進め、センター試験対策である章末問題は飛ばしました。また、間違えた問題を繰り返し解くといったこともしませんでした。
あくまで必要になった時に引っ張れるような知識として蓄えることが目的で、受験数学の問題解決能力をつけたいのではないからという理由です。問題解決はプログラミングの世界でやっていこうという方針です。数学が得意な知人の方に、受験数学と大学からの数学は別物であると教えていただいたこともあります。
そのため、『プログラマーとして社会人になったけど高校数学を1から独学している』を書いた時点では目標としていた数検の受験も止めることにしました。さくっと高校教科書を終わらせて、その先の大学数学に進もうという考えです。

早速役に立っている

高校数学を勉強していて早速嬉しいことがありました。
ソフトウェアの世界では枯れた技術であるデータベースの勉強をしようと、『達人に学ぶ SQL徹底指南書』を読み進めているのですが、そこに数学Iで学習した集合や、数学Aで学習した順列と組合せが出てきたのです。『1-2 自己結合の使い方』という章で、自己結合の背後には「順列」、「組合せ」、「集合」が隠れているというところです。
もし数学I+Aを勉強していなければ、これらのキーワードに首をひねっていたところでしょうが、勉強していたお陰ですっと頭に入ってきました。著者は、この本をただのSQLレシピ本として読むのではなく、集合指向的考えでSQLに臨むことができるようになって欲しいといったことを書かれていますが、集合とはなんたるかが分かっている分、そういった考えが出来やすくなっていました。
高校数学がプログラミングに効果を発揮した一例です。

数学の旅は続くよ、どこまでも

次は数学II+Bとなります。

これまでは中学数学のそのまま延長といった感じでしたが、これからは複素数微分積分、ベクトルといった、特に独学で学ぶにはなかなか手強そうな単元に入ってきます。
しかし、プログラミングで手強い問題を解決する快感を覚えてしまったからか、こういったキーワードを目次で見るだけでワクワクしてしまいます。数学が楽しくてしょうがないのです。

果てしなく続く数学の旅、新たな世界へ運んでくれると信じて、これからも続けていこうと思います。

【音声DVD-ROM付】長岡の教科書 数学I+A 全解説

【音声DVD-ROM付】長岡の教科書 数学I+A 全解説

【音声DVD-ROM付】長岡の教科書 数学II+B 全解説

【音声DVD-ROM付】長岡の教科書 数学II+B 全解説

【プレゼントあり】Rocksmithというゲームでギターを楽しく始めよう!

昨年の7月から、止めたり再開したりしながら地道にエレキギターを練習しているのですが、その中で僕が遊んでいる『Rocksmith』という素晴らしいゲームについて紹介したいと思います。

記事の最後にゲームのプレゼントも用意しているので、ギターに興味のある方は最後までお読みいただければ幸いです。

Rocksmithとは

Rocksmithとは簡単に説明すると、本物のエレキギターを専用ケーブルでゲーム機に繋いで、Dance Dance Revolutionのように、流れてくる譜面に合わせてギターを弾いて遊ぶゲームです。売り文句は"the fastest way to learn to play guitar."。いちプレイヤーとして、誇大広告ではないと自信を持って言えます。
Rocksmith 2014という無印Rocksmithの続編が現在の最新版で、対応プラットフォームはWindows/Mac/PS3/PS4/Xbox 360/Xbox Oneです。

Rocksmith界のアイドルAudreyのプレイ動画

Dance Dance Revolutionを知らない方などはイメージが湧かないでしょうから、動画を見ていただきたいと思います。当時10歳の女の子AudreyがRocksmithでメタルの難曲を弾いている様子です。

どうでしょう。楽しそうじゃありませんか。

力量に合ったプレイができる

「楽しそうではあるけど、いきなりこんなの弾けねーよ」と思った方もいるでしょうが、心配はありません。易しいものから難しいものまで、様々な難易度の曲が揃っていますし、プレイヤーの力量に合わせて譜面に並ぶ音符の量を減らすことで難易度を調整してくれる機能があるので、自分の好きな曲を易しいバージョンで弾くといったことが可能なのです。

弾ける曲については、Wikipediaにリストがありますので、自分の好みのアーティストの曲がないか探してみてください。

ラインナップとしては、メジャーどころでいうとNirvanaFoo FightersGreen DayMuseなどの曲があります。邦楽もほんの少しだけ存在し、B'zや9mm Parabellum Bulletなどの曲があります。『キル・ビル』で使われた布袋寅泰の『BATTLE WITHOUT HONOR OR HUMANITY』なんかもあったりしますね。

ゲーム本体についてくる楽曲は少なめなので、1曲大体¥360でDLCを買っていくことになります。高いと思うかもしれませんが、ゲーセンで音ゲーを遊ぼうとすると100円硬貨がどんどん吸い込まれてしまうことを考えると安いのではないかと思います。 あとは無印Rocksmithの曲をインポートするには無印Rocksmithに加え、インポート用の¥1,200のDLCを買わなかればなりません。これはちょっと高いかなと思いました。

また、法的にはグレー(というかブラック?)なので小声で話しますが、Windows/MacについてはCDLC (Custom DLC)という形で、ユーザーが作成した譜面で演奏することも可能です。CDLCを使えばラインナップは無限に広がります。

2016/10/04に大規模無料アップデート実施

このRocksmithですが、現地時間2016/10/04に、Rocksmith 2014 Edition Remasteredとして大規模なアップデートが行われます。それも無料です。難易度調整の細かな設定や、統計機能、曲の検索の改善などが行われます。
あこぎな課金ゲーが増える中、これだけの大規模アップデートを無料で行ってくれるとは素晴らしいと思います。

Rocksmith 2014を1名の方にプレゼントします!

お待たせしました。では、プレゼントのコーナーです。

大規模アップデートを記念して、布教活動としてRocksmith 2014を1名の方にプレゼントします。

The Humble Storeというサイトを利用し、Steamキーのギフトという形で送らせていただきます。

応募方法

それでは応募方法です。

応募期間

2016/10/04(火) 21:45〜2016/10/09(日) 23:59まで とさせていただきます。

注意

ゲーム単体では専用ケーブルであるリアルトーンケーブルが付いてこないため、ゲームをプレイしたい場合、 エレキギターとケーブルはご自身で用意していただく必要があります 。ご了承ください。

と、ここまで書いて調べてみたら、リアルトーンケーブルが国内では在庫切れで買いづらい状況になっているようですね…。無印Rocksmithのケーブル同梱版を中古で買うのが安上がりなようです。ケーブル自体はWindows/Mac/PS3/PS4/Xbox 360/Xbox One版全て同じものですのでどのプラットフォームに同梱されているものでも構いません。

また、Steamキーを利用する関係で、 対応プラットフォームはWindows/Mac となります。ゲームのページでシステム要件などをよく確認してご応募下さい。

応募方法

プレゼントをご希望の方は、この記事を読んでプレゼントに応募した旨と、ご自身のメールアドレスを記入して、下記の私のTwitterアカウント宛にダイレクトメッセージを送信してください。
https://twitter.com/tommy6073

複数の方の応募があった場合、抽選にて当選者の方を決めます。抽選結果はダイレクトメッセージにてお知らせいたします。

では、奮ってご応募下さい!

最後に

この記事をきっかけにRocksmith (ロック鍛冶屋) が1人でも増えることを祈ります。

ギター楽しいですよ🎸