Goを始めました

最近の新言語ラッシュの中でもイケてそうなのはGoかなとか思って始めて見た。

Goの特徴

箇条書きにしてみる

  • コンパイルと動作が早い(らしい)
  • 初期化時に型推論があるけど、基本、型は厳密
  • クラスない
  • structとポインタ使ってひとまとまりのデータを扱うことはできる
  • ポインタあるけどポインタ演算はない
  • ゴルーチンでびっくりするほど簡単に関数の並列実行ができる

チュートリアル「Tour of Go」

Tour of Goっていうチュートリアルがあって、これをやれば基本的なことはすべてわかる。
ただし、すげー長い

チュートリアルやってみて

書きやすくなったCって印象を受けた。
実際僕が今まで触ったことある言語の中では圧倒的にCが近い。

ポインタ書いたことない人は結局ポインタで躓くんじゃないかと予想。
後は普段Javaの人はクラスない、当然継承もない、インターフェイスがあるにはあるけどimplementsを宣言しなくていいとか色々やりずらそう(?)

自分の回答はgithub置いといた
https://github.com/syguer/tour-of-go.git ググればもっといい答えが出てくると思われる

とりあえずwebアプリ作るとこまではやってみようと思う

基礎からわかる Go言語

基礎からわかる Go言語

Go言語プログラミング入門on Google App Engine

Go言語プログラミング入門on Google App Engine

RubyでTrelloのアクセストークンを取得する方法

TrelloのAPI使ってなんかやろうと思ったんだけど、アクセストークンを取得する方法についての日本語情報が見当たらなかったので紹介する

Trelloについて

今更説明するまでもないが、Trelloはカンバン的な形式でタスクを管理したりできるサービス
簡単に使えるので仕事でも使ってるし個人でも結構使ってる

https://trello.com/

アクセストークンを取得する

Trelloも最近のサービスの例に漏れずOAuthでトークンを取得してAPIを使うのでアクセストークンを取得する  

コードはこんな感じ

consumerKeyとconsumerSecretはTrelloにログインして下記URLにアクセスすると表示される

https://trello.com/1/appKey/generate

Twitterのアクセストークン取得に関する情報を見るとOAuth::Consumer#newの第三引数にはsiteしか指定してないけど、trelloの場合はこんな感じで指定しないとダメらしい(OAuthプロバイダの仕様の差(?)

ともあれこれを実行するとURLがでてくるのでそれにアクセスすると、承認画面に飛ぶ

f:id:syguer:20140724233708p:plain

承認するとpinが発行されるので、これをコンソールに戻って入力

f:id:syguer:20140724234019p:plain

pinを入力するとアクセストークンを出力される

$ ruby get_access_token.rb
"https://trello.com/1/OAuthAuthorizeToken?oauth_token=1781bb9f93231cb0068c678**********"
Input your pin code => "ここにPINを入力"
token =>  2d9cea749bbca58a45a4496e4a6007b311dc1306ba893a5854ef3e*********
secret => ba0ac713434433f02fda35**********

これを使えばTrelloのAPIを使える。APIの使い方はまた次のエントリで

Rubyのsortでハマった

某プログラミング問題サイトで回答のコード書いてたのだが、配列のソートを含むコードの挙動がどう考えてもおかしい感じになって軽くハマったのでメモ

例えば下記の例

["34","10","101"].sort

これは当然["10","34","101"]になるだろうと思いきや、

irb(main):001:0> ["34","10","101"].sort
=> ["10", "101", "34"]

こうなりますと。
分かる人には当たり前なんだろうけど、文字列だとこうなってしまうんですね…

正しくやるにはsortにブロック渡すか、数字に変換してからsortするとか

#sortにブロック渡す場合
["34","10","101"].sort {|a,b| a.to_i <=> b.to_i}
 #=> ["10", "34", "101"]

#数字に変換する場合
array = ["34","10","101"]
array.map! {|m| m.to_i}
array.sort 
# => [34, 10, 101]

ちなみに数字に変換する場合は結果がIntegerの配列になる。
文字列の配列であることに意味があるならブロックで渡すべきかも。

なんにせよこんなことにハマるなんて残念すぎた…

Rubyで簡単にAPIサーバーを作れるGrapeを使ってみた

やろうやろうと思ってやっていなかったのでやってみた。

Grapeについて

GrapeRubyREST APIサーバー書くときに使えるGem。
そのままRackでも動かせるし、SinatraとかRailsにマウントもできる。

使い方

Railsで使うときの使い方を紹介します。
環境は、

まずは普通にrailsアプリを作る

rails new hoge -d mysql

Gemfileに書いて

gem 'grape'

インストール

bundle install

事前にモデルを作っておく

rails g model huga value:string

APIを作る

ディレクトリはこんな感じで作るらしい

mkdir -p app/api/huga
vim app/api/huga/api.rb

実装はこんな感じ

module Hugas
  class API < Grape::API
    format :json

    resource :hugas do
      get '/' do
        Huga.all
      end

      params do
        requires :value, type: String
      end
      post '/' do
        Huga.create({
          value: params[:value]
        })
      end
    end
  end
end

リソースのブロックの中にget,post…とかって書いていく。
paramsを書いとくとバリデートとかもできる。

設定周り

  • ルーティング
    config/route.rbに以下のように追記
mount Hugas::API => '/'
  • パスを通す
    config/application.rbに追記
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
  • migrate(モデル作ったらすぐやっておいても可)
rake db:create && rake db:migrate

実行してみる

rails s

トップページはいつものRails画面のはずなので、「http://localhost:3000/hugas」にアクセスして空のJSONが返ってきてれば多分うまくいっている。

f:id:syguer:20140708235725p:plain

Chromepostmanとか使ってデータを登録してみる。

f:id:syguer:20140709000115p:plain

うまくいってるっぽい

f:id:syguer:20140709000135p:plain

他にも認証周りとかいろいろできるらしいので、もっと普通に使ってみたいところ。
ただ、そんなに規模が大きくないならSinatraで書くのと大差ない気もした

おまけ

ついでに前から触りたかったAngularJSを使ってAPIにアクセスするアプリを作ってみた。
といってもpublicの下にゴリゴリ書いてアクセスするだけだけれどもw
お題は異動になった同僚の送別会で渡す物を決めるために、候補の中からどれがいいか投票するアプリってやつ。

f:id:syguer:20140709000823p:plain

ソースはgithubにあります。
https://github.com/syguer/voter

そもそも設計がおかしいのを除いても多分色々イケてないのでプルリクお待ちしてます!

MacBookの矢印キーを無効にした

背景

去年の10月頃に実は自分はブラインドタッチ(今はタッチタイピングって言葉のほうが主流?)ができていないことに気づき、以来こそこそと練習していた。
今はほぼできているんだけども、矢印キーを使う癖が抜けずに右手が正しい位置より一個右に行ってしまうのが直らない。
これを矯正するために矢印キーを無効にしようと思い立った。

KeyRemap4MacBook

調べてみたらこのツールがでてきた。

https://pqrs.org/macosx/keyremap4macbook/index.html.ja

dmgが落ちて来るので流れのままにインストールする。

厳密にはキーを無効にするのではなくて、キーをFnキーにするというのを選択した。

f:id:syguer:20140707111121p:plain

効果

自分がどういうときに矢印キーを使っているのかがよくわかったのと、矢印キーがないと指の移動が大幅に減ることが実感できた。

はじめはシェルのコマンド履歴が使えなくて「うっ...」となったけど、そこはキーバインドを新しく覚えた。

↑ Ctrl-p (prev) → Ctrl-f (forward) ← Ctrl-b (back) ↓ Ctrl-n (next)

変えて知ったけど、このキーバインドって極めて一般的で、他でも普通に使えるっていうね。
いいことを知った