キンサクプログラマー

お金儲けと技術のメモ

2万円台のスマホは3世代前のiphoneにも劣るから気をつけろ

最近では格安simを使っている人も増え、キャリアを離れる人も少なくないだろう。
僕はというと、1年前くらにiphone5に別れを告げ、再びandroidに舞い戻った。端末代を含めて月額3000円という、格安運用を実現して満足をしたのもつかの間、予期せぬストレスに悩まされることに。

カックカクやないかーい

僕が購入したのはこちらZenfone laser 2

当時も今もそこそこ評判は良いみたいだが、iphone5という化石モデルあがりの僕ですらカクツキを感じた。3Dのレンダリングをするゲームならまだしも、ニュースあぷりとかですら動きがあやしい。
最新CPUだのクアッドコアだのというキャッチーな謳い文句に乗せられた僕が馬鹿だったようだ。

ベンチマークを見て戦慄

「お前の携帯カックカクじゃね?」
たのでベンチマークを調べることにした。
とりあえずAntutuがメジャーらしいのでこちらで測定。
play.google.com

26462という結果になった。この情報をもとに、自分のスマホの立ち位置を調べたところ驚愕した。
iphone6s 130000
iphone6 80000
iphone5s 60000
iphone5 30000

なんと前使っていたiphone5よりも遅い。買い換えた意味がない・・・

いまの格安スマホは?

言わずもがな1万円台のものは、zenfone laser2なんかよりもっと遅い。
おそらく、そこそこ重いゲームはできないだろう。また、評判の良いzte blade v580とかもベンチマーク的には30000程度と、iphone5並なので、嬉々として買い換えると絶望すること間違いなしだ。

今買うべきスマホは?

3万円を切るようなスマホはどれも同じかと思いきや、良さげなのを見つけた。
中華スマホ Xaomi redmi note3  2万円台前半だがiphone6に近いantutuスコアと(ベンチマークにこだわりすぎか・・)指紋認証が付いている。

中国製だとなにかと爆発したり、データをぶち抜かれたりしそうだが、気にしない人にとってはおすすすめだ。

動的計画法(Dynamic Programing(DP))の話 その1

 動的計画法って難しい。何度読んでもイマイチ身にならない。
なので、ちゃんと理解するために書き残していこうと思う。

動的計画法とは

TopCoderやCodeJamといったアルゴリズムコンテンストによく出るアルゴリズム
愚直に(たとえば全探索)などの方法ではTLE(time limit exceeded)してしまうような問題を、サクッと出すことができる(うまくいけば)。簡単に言うと、漸化式のようなものだと思えば当たらずとも遠からず。

  • メモ化(再起による計算をするが、一度解いた問題はメモしておくことで、高速化する)
  • 分割統治法(小さな問題を徐々に大きくしていく)

の2パターンがあるが、本質的には同じやり方。
メモ化については、再起呼び出しをするためスタックを食いつぶす恐れがあるが、なんというかイメージがしやすい。
分割統治法の方がスタックオーバーの恐れなどはないものの、なんというか理解しにくい。配列のインデックス内で引き算とかするのが個人的には苦手。

ナップサック問題(Knapsack Problem)

ナップサックのスペルがKnapsackということを初めて知った。
現代の子供達はナップサックを使うのかもよくわからないが、このナップサック問題は基本的に以下のような形体をとる。

    • 耐久11kgのナップサックがあります
    • 忍び込んだ部屋にはパソコン、プレイステーション、時計、カメラがあります
    • それぞれ、重さは2kg、10kg、5kg、6kg
    • 一方でお値段は、それぞれ、1万円、10万円、6万円、7万円
    • ナップサックに可能な限り高価になるように詰め込んでください

ちょっと考えてみよう

何も知らない人はまず、「よっしゃ、一番高いもんいれたろ!」ということになるが、
ここて10kg、10万円のプレーステーションをいれてしまうと、その時点でナップサックに追加できるものがなくなってしまうが、これは正解ではない。正解は時計とカメラのペア=13万円だ。軽さ重視で詰め込んでいっても同様の問題にすることは自明だろう。

 そこまで考えた人は多分、「よっしゃ全通り考えたろ!」と思うに違いない。
ここで、全通りの組み合わせを考えた場合、
パソコン        入れる or 入れない
プレイステーション   入れる or 入れない
時計          入れる or 入れない
カメラ         入れる or 入れない
の2*2*2*2の16通となる。

16通り程度であれば余裕だが、盗めるものが10個あるだけで1000通りを越えてしまう。
しかも、アルゴリズムコンテストで出題されるような内容では100個など、全探索では解けない内容になっていることが多い。
それではどうするか・・・

もちろん動的計画法で解くしかない。

基本アイデア

11kgの時の最大価値を調べるというのは、先ほどの例から考えるとちょっと難しそうだが、
1kgの時の最大価値から考えれば簡単だ。

1kgの場合、なんもはいらないので0円
2kgの場合、パソコンがはいった!   1万円
3kgの場合、どちらにしろパソコンだけだ1万円
4kgの場合、あきはあるがパソコンだけか1万円
5kgの場合、お!時計が入る!     6万円
6kgの場合、む。カメラがはいるぞ   7万円
7kgの場合、時計とパソコンもはいるぞ!8万円
8kgの場合、同じ!          8万円
   ・・・・

重さを徐々に増やしていきながら、物を突っこむべきか否かを判断するだけ。

Rubyで書いた
github.com

プリンシプルオブプログラミング 読んだ

プログラミングの原理・原則がババっとかかれた本。
購読しているブロガーの人が書いた本で、非常に分かりやすく面白かった。
ブログはこちら↓
d.hatena.ne.jp

3年以内に身に付けたいとはあるが、「達人プログラマー」のように1年目でも3年目でも10年目でも役に立つ本だと思う。
ただ、上記のブログにも十分な情報が載っているので、購入すべきかという点では悩ましいところだ。

年間600本以上ブラックコーヒーを飲む僕の、ブラック缶コーヒーランキング

f:id:pikurusux:20160318011249j:plain

仕事中は1日平均3本。
年間にして600本以上ブラック缶コーヒーを飲んでいます。
毎日同じものを飲んでいるわけではないので、だいぶ違いや好みがはっきりとしてきました。
なので、ここいらでブラック缶コーヒーをまとめようと思います。

*注意*
超好みが分かれるので、参考程度に聞き流してくれるとありがたいです。

10位 ジョージアヨーロピアン香ブラック

苦味は弱いが、香りが強い。
コーヒー飴っぽい味がするので、受け付けない人も多い気がする。

9位 タリーズ バリスタズブラック

苦味が強く、香りもなかなか強い。
ネットや周りの評価は高いが、ドリップのコーヒーに感じる苦味とはまた別物の
苦味なので個人的には好きじゃない。

8位 ポッカビズタイム 冴えるブラック

ポッカサッポロ ビズタイム 冴えるブラック 400g×24本

ポッカサッポロ ビズタイム 冴えるブラック 400g×24本

苦味、香りは弱い。
よく言えば飲み易いが、悪く言えば味が薄いとも言える。

7位 ダイドーブレンド ブラック

苦味、香りともに普通。
味はドリップのコーヒーに近いが少々うすい気もする。

6位 UCCブラック無糖

苦味は弱く、香りは普通。
癖がなく、のみやすい。まさに、smooth & clear。

5位 スターバックスブラックコーヒー

苦味はそこそこ。味はまろやか。
味自体は好きだが、ネットでべた褒めされるほどではない。
200円で275gは少なすぎる

4位 アサヒワンダ極

苦味、香りは普通。
しっかりとした味で、文句のないブラックコーヒー。

3位 キリンファイア燻製

キリン ファイア 燻製珈琲 ブラック ボトル缶コーヒー 400g×24本

キリン ファイア 燻製珈琲 ブラック ボトル缶コーヒー 400g×24本

苦味は弱いが、燻製の香りが強い。
ドリップのコーヒーとはちょっと違う匂いなので、合わない人もいるかもしれませんが、
個人的には好きな匂いです。

2位 プレミアムボスブラック

苦味は弱く、香り自体は普通。
ただ、味が濃い印象でとても飲み易い。

1位 キリン スーパーファイア スピードブレイクブラック

キリン スーパーファイア スピードブレイク ブラック 缶コーヒー 165g×30本

キリン スーパーファイア スピードブレイク ブラック 缶コーヒー 165g×30本

苦味、香りともに強い。
カカオの香りがする異色のブラックコーヒー。
普通のブラックコーヒーを求めている人には反対されそうだが、カカオとコーヒーが絶妙にマッチしていてうまい。

最後に

大道も良いですが、たまには異色系のブラックコーヒーを飲んでみるのも良いです。
いつも同じものを飲んでいる方は是非おためしあれ。

僕はもっとIDEを使うべきだと思うよ

こんな記事を見かけたので、ソフトウェアエンジニアとして自分の意見を書きたいと思います。
pineplanter.moo.jp

記事に対する感想

IDEを使うとプログラミングを覚えない について

言い過ぎ感は否めないですが、見出しの文については大方同意見です。
僕がプログラミングを習った際にもeclipsevisual studioを使っていましたが、
リンクとか依存関係とかそういった部分がわからなくなった気がします。
IDEが勝手にやってくれてた部分がごっそり抜け落ちた感じ)
ただ、この記事の著者が言うように、IDEをつかっていたからオブジェクト指向がみにつかない。
テキストエディタで書くとオブジェクト指向が身につく。なんてことはない気がします。

くそ重い について

これはPCにもよると思いますが、確かにIDEの方が重いです。
機能が多いのであたりまえだとは思いますが、開発ツールにとって動作速度は重要なポイントなので、
重くて使いたくないってのは至極まっとうな意見だと思います。

僕の開発環境

仕事で使う言語はC、主に使っているエディタはemacsです。
そこそこカスタマイズされていて、宣言・定義のジャンプや補完機能もしてくれます。
コードを書くのも読むのもスムーズに行えるので、エディタとしての満足度はかなり高いです。

それでもIDEを使うべきだと思う理由

人のコードを読んで、自分のコード書いて実行! ってだけならこれだけでも良いかもしれません。
ですが、仕事でプログラムを書く場合は品質に重点を置かなければなりません。
そういった、品質向上のための機能が充実したのがIDEなんじゃないかなぁと思います。

IDEでできること(Visual Studio2015を例に)

https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Visual_Studio_2012_logo_and_wordmark.svg/2000px-Visual_Studio_2012_logo_and_wordmark.svg.png

昨今のIDEは開発者の意図を汲んだ便利機能が充実しています。

デバッグ

当たり前ですが、ブレークやトレースポイントの指定、ステップ実行で1行ずつ実行したりできます。

テスト

単体テストも可能です。カバレッジなんかも計測してくれます。

パフォーマンス測定

ターゲット環境での実行速度、使用メモリ容量を測定できます。

コード分析

静的解析でコードの怪しい記述を発見したり、依存関係を可視化したりできます。

これらの機能を適切に使うことができれば、エディタだけで開発しているよりも品質を大幅に向上することができるはずです。

予想される反論

エディタでコード書いてデバッガはGDB、テストはCppTest、分析はDoxygenとか使えばエディタだって同じことできるじゃん!

っていう人
➡️1つで全部できた方がよくない?

いやいや!vimemacsを拡張すれば同じことができるよ!っていう人

➡️なるほど、でも、もうそれはエディタじゃなくてIDEなんじゃないですかね。