simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

京都旅日記 1日目

今日から京都に来ています。

沖縄から京都まで色々あって疲れた。。。

17:40の便で京都へ

搭乗するまで、暇だったので那覇空港内の店でうどん食べたけど完全にハズレだった。(ネギの味が強すぎてうどんの味がしない)

19:30ぐらいに関西空港到着

f:id:simanman:20150317194110j:plain

初めて来たけどデカイ

関西空港から特急はるかに乗って京都駅へ

21:30京都駅着

京都タワー
f:id:simanman:20150317213632j:plain

飯屋探して京都駅周辺をちょっと歩いてみたけど、駅周辺以外は何もない感じだった。ご飯は結局、駅近くの居酒屋に入って🍺と🍣を食べました。

f:id:simanman:20150317221536j:plain

sushi

23:30ホテル着

無事到着。疲れたー。

おまけ

「ちょっとお金足りないかもなー」と思って、空港に行く前に銀行でお金をおろしたんですけど、沖縄だと[二千円札優先]みたいなボタンがあって、試しに押してみたら全部二千円札出てきました。。。。

f:id:simanman:20150317235620j:plain

いやっまさか全部2千円札で出てくるとはちょっと予想外デース

今年の目標(2015)

去年立てた目標は全く達成できなかったので、今年こそは達成したいと思います。

詰み本の消化

今年はまず「積み本」の消化を目標にしたいかなと思います。自分はその分野にちょっと興味を持つと
すぐ専門書を購入して、積んでしまう癖があるみたいで、今の詰み本の数は軽く数えただけでも30冊は
余裕で超えている気がします。

アルゴリズムの勉強

これは競技プログラミング関係の話なのですが、どうも他の競技プログラミング勢と比べるとアルゴリズムに対する理解力が
まだないのかなと感じているので、その辺りを強化していきたいと思います。

他にもやりたいことはあるのですが、今はこの2つに集中するということで。

今年を振り返って(2014)

今年を振り返ってみようかなと思います。

今年自分はこんな記事を書いていました。


今年の目標(2014) - simanmanのブログ

topcoder Algorithm部門のレート1500以上(未達成)
topcoder Marathon部門のレート2000以上(未達成)
・モバイルアプリを1つ作る(作ってない)
・新しい言語に挑戦(挑戦してない)

何も達成できていないですね。
「じゃあ今年自分は一体何をやっていたんだろう」と思って振り返ってみました。

発表関連

・沖縄Ruby会議
OSS Okinawa2014

ハッカソン関連

・24コンテスト参加
・オレンジソン

競技プログラミング関連

・PlatinumRift優勝

Ruby関係

・RubyKaja2014に選ばれました!(Okinawa.rb代表として)


こうして見ると割りと活動していたのかなと思います。社会人1年目で色々なことがあり、すごく長く感じた1年でした。
来年はどうなるかわかりませんが、実りのある1年にしたいと思います。

Rubyで全ての約数を出すメソッドを作った

「How Many Divisors?」
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_D

AOJの問題を解いてて「約数の配列だして、upper_boundとlower_boundをとれば終わりやな」と思ったのですが、Rubyに今の要素全部無かったので、作りました。

require 'prime'

class Array
  def upper_bound(x)
    bsearch_index { |v| v > x }
  end

  def lower_bound(x)
    bsearch_index { |v| v >= x }
  end
end

class Integer
  def divisor_list
    return [] if self <= 0
    return [1] if self == 1

    prime_division.map.with_index { |(base, k), i|
      s = i.zero? ? 0 : 1
      (s..k).map { |n| base ** n }
    }.inject { |res, e| res + res.flat_map { |t| e.map { |v| t * v } } }.sort
  end
end

a, b, c = gets.split.map(&:to_i)
list = c.divisor_list

x = list.upper_bound(b) || list.size
y = list.lower_bound(a) || list.size

puts x - y

Array#bsearch_index を使うことで簡単に実装出来た。

Rubyの文字列連結の速度比較

Rubyで文字列連結のメソッドの動作速度を比較してみました。

require 'benchmark'

Benchmark.bm do |x|
  NUM = 10000
  word = "Hello"

  x.report(:add) do
    str = ""

    NUM.times { str += word }
  end

  x.report(:concat) do
    str = ""

    NUM.times { str.concat(word) }
  end

  x.report(:shift) do
    str = ""

    NUM.times { str << word }
  end
end
       user     system      total        real
add  0.050000   0.050000   0.100000 (  0.098366)
concat  0.000000   0.000000   0.000000 (  0.001402)
shift  0.000000   0.000000   0.000000 (  0.001213)

結果としては「+=」が飛び抜けて遅かったです。理由としては連結の際に新しい文字列インスタンスを生成しているからだと思われます。「concat」や「<<」は高速に動作しますが、元のオブジェクトを破壊するので注意が必要です。

rubyのDateクラスの謎

Dateクラスは最初から存在しているみたいなのですが、インスタンスメソッドが無いです。

p Date.instance_methods(false).count      #=> 0

require 'date'

p Date.instance_methods(false).count      #=> 68

特に困るわけでは無いですが、すごい気になります。

OSC Okinawa 2014に参加 & LT発表してきました!

今年も沖縄でOSCが開催されたので、1人で行ってきました!

今年は「去年に比べて、発表内容の理解が出来たかな」と思うと同時に「学ぶべきことがまだたくさんある」と感じたカンファレンスでした。

・「業務アプリケーションにおけるこれからのWeb開発」

今年勧告されたhtml5の仕様について色々知ることができました。重要な機能としては「WebSocket」と「SPDY」これらが今後のアプリ開発において重要な機能になるみたいです。

他にもhtml5ではオフラインにおけるアプリ開発をサポートするAPIが出てきており
・Application Cache
・Web Strage
・Indexed Database API
・File API

これらのAPIを駆使することで、オフラインでも動作するWebアプリが作れるとのこと。

html5が騒がれて数年が経ちますが、そろそろ本格的に勉強する時がきたのかなーと個人的に感じたセッションでした。

AWSで行うImmutable Infrastructure

先週のAWS勉強会で聴けなかった発表でした。最新の技術「Docker」に惹かれてホイホイやってきたのですが、とても面白かったです。

Dockerというコンテナ型仮想技術によって「環境を使い捨てる」という新たな概念に驚きました。Dockerでは仮想イメージを差分管理することもできるらしく、どんどんインフラな部分もプログラミング化されてきたなーと思いました。

・Ejectコマンドユーザ会(☝ ՞ਊ ՞)☝ウイーン

展示ブースでは前から気になってきたEjectコマンドユーザ会の展示を見に行きました。

Raspberry PiとCDドライブを駆使した電子工作に正直感動しました。電源のON/OFFをドライブのトレイの(出る/戻る)で実現していたのは、発想力がなんかもうスゴイなと。

ステッカーを頂いたのですが、キャラクターがなんとなくconohaのキャラに似てるなと思いました。(☝ ՞ਊ ՞)☝ウイーン

・LT発表しました!

LTセッションで、参加者を募集していたので、15分ぐらいで発表資料を作って参加してきました。

まだ開発途中のgemですが、よければ遊んでやって下さい

「shiritori」
https://github.com/siman-man/shiritori


最終的に150人近くの参加者がいたらしく、沖縄で開催されるカンファレンスとしてはかなり大規模になったと思います。アンケートに答えるのを忘れて、くじ引きが引けなかったのが心残りです。。。