茶漬けの技術メモ

Golang, Rubyで趣味開発します。テックニュース書いたり。ガジェット触ったり。

Ruby の each_with_object と inject について

each_with_object とは

each_with_object を使用すると、配列やハッシュの要素を使って、
新たに配列やハッシュを作成したりする際に、簡潔に書くことができます。
簡単な例を以下に示します

array = [[:hoge, 1], [:fuga, 2], [:piyo, 3]]

array.each_with_object({}) do | (key, value), hash |
  hash[key] = value
end
# => {:hoge=>1, :fuga=>2, :piyo=>3}
続きを読む

12月に読んだ本まとめ

ども、お茶漬けです。

2017年に入り1週間が経とうとしています。

9日まで冬休みの僕も、そろそろこのダラダラ生活から抜け出さないとなと思っており。まずは、先月読んだ本を振り返ってみようかなと思います。


なぜ、あなたの仕事は終わらないのか 中島聡

マイクロソフトエンジニアの中島聡さんが、自身の経験談を交えながら、実際に本人が取り組んでいる時間術、その名もロケットスタート時間術について書かれてあります。

・どんなに頑張って100%のものを作っても、振り返ると90%,80%のものに見える
・全ての仕事は必ずやり直しになる
・やりたいことをやるためには、やりたくないことを速攻で終わらせるしかない
・考えてから手を動かすではなく、手を動かしながら考える
・仕事において重要なのは、楽しいかどうかその一点

以上のような考え方の元、中島さんはロケットスタート時間術で仕事に向き合うことを進めています。

ロケットスタート時間術とは

ロケットスタート時間術とは、ズバリ2割の時間で仕事の8割を終わらせることです。

まず、納期内に仕事を終わらせるためには、余裕を持って取り組むことが必要です。なぜなら、初期の段階で立てた予定通りにことが進むなんてことはまずない。必ず、予期せぬトラブルは起こるものだからです。
そのために、最初に2割の時間で、何が何でも仕事の8割を終わらせ、余裕を持ちます。そして、残りの8割の時間で、2割を終わらせ、さらにブラッシュアップしていきます。
しかし、

ロケットスタート時間術の本質は余裕を持つことであり、高速で次々と仕事を終わらせることではない

と中島さんは仰っています。
伝えたいことは、仕事を終わらせることではなく、人生を楽しむこと。なのです。

なぜ、あなたの仕事は終わらないのか スピードは最強の武器である

なぜ、あなたの仕事は終わらないのか スピードは最強の武器である

続きを読む

Swiftのエラー処理

Swiftのエラー処理の書き方について調べたので、まとめておこうと思います。


エラーを定義

Errorプロトコルを継承した列挙型でエラーを定義します。
Errorプロトコルの中身は空になっています。

enum myError: Error{
    case stringError
    case unexpectedError
}
続きを読む

Swiftでdefer文を使う

Swift2.0から追加されたdefer文。スコープを抜ける際に処理をするものですが、Swift3.0で試してみました。

func myFunc(){
    defer {
        print("defer")
    }
    print("hoge")
}
myFunc()


実行結果は以下のようになります。

hoge
defer



関数以外のスコープで使ってみる
func myFunc2(){
    for i in 0..<3 {
        defer {
            print("defer \(i)")
        }
        print("fuga \(i)")
    }
}
myFunc2()


実行結果

fuga 0
defer 0
fuga 1
defer 1
fuga 2
defer 2



defer文を複数書いてみる
func myFunc3(){
    defer {
        print("hogera")
    }
    defer {
        print("piyo")
    }
    defer {
        print("fuga")
    }
    print("hoge")
}
myFunc3()


実行結果

hoge
fuga
piyo
hogera


使い所

自分の場合は、Swift Perfect のサンプルを触っている時にdefer文を目にしたのですが、そこでは、DBに接続し目的の処理を行った後、defer文内にDBとの接続を切る処理を書く。というように使われていました。
他にも、guard文での必要条件にあっていない場合にdefer文の処理を実行させる。といったような使い方ができるのではないでしょうか。

Swiftで正規表現を使って文字列の操作を行う

Swiftで正規表現を使いたかったんだけど、調べて行くうちに、Swiftで正規表現ってなかなか面等らしく、どーしようかなと思っていると。
とても便利なStringExtensionを書いている方がいらっしゃたので、使わせていただきました。

Swift 3.0での基本的な正規表現を行うextension - Qiita

続きを読む

【2016年】 個人的おすすめアニメランキング!TOP10!!

ども!お茶漬けです!!

今年も残すところあと3日!!

ということで2016年のアニメを振り返ってみました。あんまり数が多くなってもあれなので、個人的に本当に面白かった10作品をランキング形式で紹介していきます!

年末年始に見てみてはいかがでしょうか?

それではどうぞ!!


10位 甲鉄城のカバネリ

f:id:biwako_no_otyazuke:20161228181223p:plain

世界中に産業革命の波が押し寄せ、近世から近代に移り変わろうとした頃、突如として不死の怪物が現れた。鋼鉄の皮膜で覆われた心臓を撃ち抜かれない限り滅びず、それに噛まれた者も一度死んだ後に蘇り人を襲うという。後にカバネと呼ばれる事になるそれらは爆発的に増殖し、全世界を覆い尽くしていった。

4月から全12話で放送された春のノイタミナ枠。
江戸後期~明治初期の日本を舞台にした、日本版ゾンビアニメ。

ストーリーは好き嫌いが分かれそうではあるが、「死んでも生きろ」のキャッチコピーからも伝わるように、キャラクターそれぞれが自分の過去と向き合いながら絶望しながらも、それでも生きようとする、熱量の高いアニメ。

OPをegoistが歌っているあたりもgood

続きを読む

【Xcode】 UIButton に下線を引くには

よくアプリなどで、「パスワードをお忘れの方はこちら」みたいに下線が引かれていると思いますが、あれをXcode で実現する方法を紹介します。

UIButton を選択状態で、ユーティリティエリアからTitle をPlain からAttributed に変更します。

f:id:biwako_no_otyazuke:20161227121654p:plain

続きを読む

warning: result of call to '~~~' is unused が出た時の対処法

Swift3.0では返り値のある関数を使った時に、その返り値を使用しなかった場合に警告が出るようです。

func addOne(num: Int) -> Int{
    return num + 1
}

addOne(num: 2)  // warning: result of call to 'addOne' is unused


対策としては

続きを読む

Swift error: argument labels '(_:)' do not match any available overloads が出た時の対処法

error: argument labels '(_:)' do not match any available overloads が出た時に少し迷ったので、その対処法を書いておきます。

struct Cube {
    var area: Int
    
    init(height: Int ) {
        area = height * height
    }
    
    init(half height: Int){
        area = height * height / 2
    }
}

let cube = Cube(10)  // Argument labels '(_:)' do not match any available overloads
続きを読む