2015年1月6日火曜日

【新年から痩せる!】一人暮らしのダイエット戦略

「運動してれば太らない」
「食べなければ太らない」
「信じていれば平均体重」

そう信じていた時期が僕にもありました・・・

しかし現実は無情にも、非常。
年末年始、好きに走ったり食べたり飲んだり寝たりして、まさに動物園のパンダのごとく自堕落な生活を送っていました。

\   \\   \  \\  , ェェェェェェ、\  \\ \
\\   \\   \  \,ィ三三三三三三ヽ.  \\ \
\\\   \\, -‐≦三三三三三三三三三ヽ   \\
  \\\    /   ィエミ ヾ三三三ツ" ̄`ヾ三ヲ\   \\
\  \\\  l     !三リ  ヾ三ヲ'   ヽ、  \  \   \
  \  \ f三ミ        /三三     `ヽ.、 \  \
\  \  ` ヾ三        ヾ三三    ,ィ全、 \ \  \
\\  \  \.゛l    f≧  ノ三三  ./三三、   ヽ. \
  \\  \    、 fn,  ~   /三三".  ,'三三三、.  l  \
\  \\  \  .i≧ュ __,、 /三三"  ,'三三三三、 ノ
  \  \\  \ |三ミ≧≠三"    l三三三三三「\\
   \  \\  `!三三三リー - 、._ !三三三三三   \\
\   \  \\ }三三 \\\  ヾ三三三"≧,   \
  \   \  \.ノ三三リ\  \\\     ヾ三三ミ、
━━━━━━━{三三━━━━━━━━━━ ̄━━
            ̄ ̄
ケ ケ   /\      ー―≠―   ー―≠
┼┼┼ /┌┴┐\      /       /
│└┘  [ 二 ]   ー 、   |       ー― 、
└──   レ`く_   _)  \_    くZ_ノ 
|二二|  /\   |  | |       _|           ||
┼└─┘/__ \ .|  | |         |/⌒ヽ     ||
┴ 7二二 ┌─┐  |     ー十十ヽ /|  _ノ 二   ||
 / / / /  |__|   ヽ_ノ     .|  ノ  |  (_ノヽ /乙  。

結果3kg太りました。

身長188cm、体重85kg. = BMI 24.0
http://bmi.nobody.jp/ を見てみると・・・太り気味に分類される数値だ。
今まで普通のちょっと太り気味だったが、お腹の恥からデブが顔を見せ始めたのでいい加減ちゃんと痩せなきゃと重いこのエントリーを書いている。

前置きはこのくらいにして本筋に入ろう。

なぜ太ったか?

至極明確である。
カロリー貯金の収入が支出を上回り続け、大幅黒字を更新し続けたからだ。
特に酒が問題だろう。

酒のカロリー
そう、たしかに酒のカロリーはたいした事無い。でも酒飲んでるといろいろ食べちゃうのが俺の悪いところ。
ビールは食べて飲むまででセット、そののどごしがおいしいのだから。

でもビールも飲むが走ってもいる。運動はしているんだ、去年も毎月40kmは走っていたと思う。おかげで健康診断はオールAだ。そう、俺は健康な動けるデブなのだ。

どうなりたいのか?

理想はこれだ。


そう、ヒュージャックマンだ。むきむきマッチョの6パックは俺には無理だ。
そこまでする時間もないし、やろうと思うと何かを犠牲にしなければいけないだろう。
なので適度にひきしまってて、カッコいい。

身長が高いと立っているとわからないけど、座るとお腹の肉が目立つんだよ・・・

何をするのか

http://spadeking18.blog.fc2.com/blog-entry-3.html
1月の予定
  1. 基礎代謝をあげるための筋トレ 週3
  2. やっぱ走る 月50km
  3. ログを残す習慣作り BeCalender
  4. 毎日のカロリーを1500以下に 
  5. 飲み会でビールを飲まない 
こんなとこ。次回この5項目について詳細にルール作りする

2015年1月4日日曜日

2014/15年の話



2014年はエンジニアとしてのファーストキャリアが始まった年でした。
インターンとしてはもう2年くらいエンジニアやってますが、会社に所属して大きな歯車の中で下っ端として働くのは始めてです。

そんな2014年を振り返ってみる・・・何を学んで何を残せたのか

振り返り


1月
 一人暮らしを準備する

内定貰って、全然家から通える距離だったけど、親の声とかなによりずっとしたかったのもあり一人暮らしを決心する。
今思えばもうちょい部屋には凝るべきだった、立地の良さは☆5つなんだけどそれ以外はちょっと残念。
あと意識高すぎてテレビとか置いてなくてほんとに仕事場と紙一重だったけど、いざしてみるとテレビ見るようになるし、QOL大事。来年ちょうど良い機会なので引っ越そうと思う。後この頃彼女がいた。

2月
 引っ越し完了

一人暮らしをスタートする。
自炊の写真をSNSにあげ始めた、研究もちょっとしたりして研究と引っ越しの準備でばたばたしていた。
あとは友達のサービスの開発を手伝ったりしてた、チーム開発だったし勉強になる部分も多く、至らない部分も見つかった。ローンチまで行かなかったけど楽しかった。
他にも2本くらいアプリ開発かけもちしていた。
忙しかったけど新生活への期待もあり超楽しかった。
終盤、今の勤務先でさらに週5で働き始めてもっと忙しくなった。
あと彼女と別れた。

3月
 遊ぶ

卒業間近でいろんな人と飲んで遊んで、でも週5で働いていた。
この頃職場でブレストと検証ばっかしていた気がする。フロントの開発だった。
関わっていたアプリのアップデートが終わった。卒業した。

ここまでが学生生活、フロント・アプリ・企画の仕事を中心に手伝ったり実装してた。
js/objc/java/phpをメインで開発してたし勉強していた。チーム開発とかアジャイルとかリーン的な開発も少し実践できたのでよかった。

4月
 入社

社会人になった、いろんな規則とか人に会い始めて大きい会社だな〜と感じる毎日だった。同期はいろんな奴がいて面白いのが比較的多いと思えてよかった。
あとはNASAのハッカソンでボストン大学のチームと一緒にリモートでプロジェクトに参加した。アプリを作ったけど、コードより英語を書いていた。全世界でやっているイベントで、国内で2位になれて超嬉しかった。あと英語は結構楽しかった。
あとはコスプレハッカソンにも出た。猫耳つけてwebアプリ作った、厳しいイベントだった。

5月
 研修

ビジネス研修はまぁまぁ楽しかった。
時間が取り易かったので、ずっと飲んだり食べたりしてた。いろんな人と喋って研修スキップできるよう画策してたけれど全部ダメだった。太り始めた。

6月
 エンジニア研修

つまらなかったので自学習ばっかしてた、してても怒られなかったのでちゃんと勉強した事無かったデザインパターンとか、ネットワークとか体系的に勉強したりアプリのテストを実装したりして楽しかった。
出張に行ったり、社内イベントで使うシステムの実装したりして開発の機会を得ていた。
あとQOL向上のためにHueを買った。これは良い買物だった。

7月
 飽きたけど賞取った

自学習に飽きて、個人でアプリ開発したりいろんな違う会社の人と会うようにしていた。
改めて自分のいる位置と、他の会社に行ってたらどうだったかを考えてた時期だった。
この時は入る会社間違えたな〜とずっと思っていた。
あと雑誌に8Pの記事を書いた。はじめての雑誌への執筆で、緊張したしエゴサーチ毎日して毎日死にたかった。
 NASAのハッカソンで作ったPJが賞を取った。けっこう大きい賞で超テンション上がった、確実にチームに貢献したけど悔しい展も多かった。
海外でプレゼンしているチームメンバーが審査委員のアメリカ人に自分の作ったアプリを見せているのをスカイプで見て超テンション上がった。

8月
 また賞取った、あと配属された

配属先での仕事を聞いて予想外すぎてマジで退職を考えた。インフラとかOpsは苦手だし毎日が嫌だった。
でも会社のイベントで同期とインターンの子と出て超楽しくて、技術賞とアイデア賞も取れてもうちょいがんばろうと思った。

9月
 さらに賞を取った

学生時代から懇意にさせて頂いてる会社のイベントに出て開発してさらに賞をもらえた。
この頃はハッカソンに賞金稼ぎで出てた。iBeaconでプロダクトを作れて超楽しかった。
研修で作ってたシステムがローンチされたり、PHPerとしてもアプリエンジニアとしても充実してた。配属先の仕事だけ超嫌だった。

10月
 気持ちを切り替えた

就活していた時に読んだ抽象化スキルが、生死を分ける時代に書いてあった

これからの時代、僕たちには「やったことのない仕事の職務経験」が求められるようになるでしょう。これは、普通に考えると無理なことのように思われます。

しかし、僕たちが普段の仕事から得ている経験は、全く別の仕事にも再利用できる可能性があるのです。これを実現するために必要となるのは、抽象化のスキルです。

というのを思い出して前向きに仕事を捕らえて貪欲に学ぶようになった。インフラの知識とかネットワークの知識とか勉強するだけじゃなくて、ルールとか仕組みにも興味を持って学ぶようにした。

11月
 実行した

10月に反省した事とか、改善提案とかを必死にしはじめた。
技術検証とか仕事を作る事とか、どんなポジションに将来なってもチームの役に立って確実に貢献できる事とか必死に考えた。残業が増えた。

12月
 仕事が多忙を極めた

11月に仕事を作りすぎてそのつけが回ったのともとから部署的に忙しい時期だったのでほんとに常に仕事が来たし、やりたい仕事が非常にしにくい時期だった。でもチームの人たちとも仲良くなったし、システムも理解して仕事にも慣れてたので辛くはなかった。
朝から夜中も仕事の電話に出てすっかりインフラおじさんだった。


まとめと今年

いろいろ後悔したりしながらも真面目にやっている。
ずっと「将来はCTOになって、ユーザーとチームに愛されるサービスを育てられるエンジニアになりたい」と思ってた。今もそれは変わってない。
今やっている事は全然そこへの近道だとは感じてないし、むしろ遠回りなんじゃないかとも思う。

モダンなサービス開発はインフラのコード化や、コンテナ技術、AWSが流行ってて今のネットワークとかサーバ側は考える必要が無かったりする。

でもどんな会社でもスケールするほど、ここら辺の知識が必要になってくる。フロントと比べてそこまで変化の激しい領域でもないので、今ちゃんと汎用的な知識や仕組みの作り方とかをしっかり学んでおくべきなんじゃないかと思う。
でもずっとやってたアプリとかフロント側のユーザーに近い部分が一番好きなので、そこを主軸にしつつ、外堀としてのインフラや仕組みづくりのスキルを今年は伸ばそうかなぁと思います。

あとはアプリは好きなのでずっとこれからも記事書いたり勉強会で話しながら、いつでもそこ主軸のエンジニアに戻れるよう仕事します。

健康面では毎月40kmは走ろう。1年で500kmを目標にして、去年はなんだかんだ全部で
300kmくらい走れてるっぽいので痩せれるようにしっかりやろう。

2014年10月18日土曜日

【iOS8】【homekit】200人の前でラジオボタンが動くだけのデモしました


大人のHomekit from Ken Haneda

今年もあきたらず、勉強会でお話しさせていただきました。

Homekitに関する情報はまだリソースが少なかったり、プロダクトがそもそもなかったりで少ないのが現状ですが、今回いろいろ調べて実装してみました。

コードに関しては後日個人的にシェアーさせていただきます。

とりあえず一部だけシェアーすると、家管理要のクラスは以下のように書きました。
書いたのがxcode6 Beta 4?くらいのころのなので、まだswiftと仲良く慣れてないコードです。

ご指摘いただけるとありがたいです!!宜しくお願いいたします。



        
import UIKit
import HomeKit

class MyHomeManager: HMHomeManager, HMHomeManagerDelegate{
    var isEnable:Bool = false
    class var sharedInstance : MyHomeManager! {
        struct Static {
            static var onceToken : dispatch_once_t = 0
            static var instance : MyHomeManager? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = MyHomeManager()
        }
        return Static.instance!
    }
    
    override init()
    {
        super.init()
        self.delegate = self
    }
    
    func addPrimaruHome(name:String!)
    {
        SVProgressHUD.show()
        self.addHomeWithName(name,
            completionHandler: { (home:HMHome!,err:NSError!)->Void in
                if((err) != nil)
                {
                    println("Failed to build home \(err)")
                    // is not supported
                    if(err.code == 47)
                    {
                        
                    }
                }else{
                    println("add home")
                }
            }
        )
    }
    
    func destroyAllHome()
    {
        var homes:[HMHome] = self.homes as [HMHome]
        NSLog("delete target home:%d", homes.count)
        for home:HMHome in homes
        {
            self.removeHome(home,
                completionHandler: {(err:NSError!) -> Void in
                    if(err == nil)
                    {
                        println("remove home err")
                    }
            })
        }
    }
    
    // - homekit manager delegate
    func homeManager(manager: HMHomeManager!, didAddHome home: HMHome!)
    {
    }
    
    func homeManager(manager: HMHomeManager!, didRemoveHome home: HMHome!)
    {
    }
    
    // homeeは10件まで
    // アプリケーション内のhomeが装填される
    func homeManagerDidUpdateHomes(manager: HMHomeManager!)
    {
        self.successSetHome()
    }
    
    func homeManagerDidUpdatePrimaryHome(manager: HMHomeManager!)
    {
        self.successSetHome()
    }
    
    func successSetHome()
    {
        if(self.homes.count > 0){
            self.isEnable = true
            NSLog("Set primary home is %@", self.primaryHome.name)
        }
        var notif:NSNotification = NSNotification(name: NOTIF_MYHOME_UPDATE, object: nil)
        NSNotificationCenter.defaultCenter().postNotification(notif)
        SVProgressHUD.dismiss()
    }
}



発表で使ったシンプルなsimulaterは以下で落とせます。
アップルの落とすとこ

本当はライトをチカチカさせたり音楽流したりできれば良かったんですが、シミュレータがシンプルだったのでラジオボタンが動くだけのデモになりました・・・



是非使ってみてください!

2014年8月23日土曜日

【swift】APIを叩く時のやり方をswiftで書き直す Blocks,AFNetworling

API叩く時に今までだとAFnetworking使って、通信用のマネージャクラス書いて、
API用のスタティックメソッド書いてってかんじだった。

これをswiftで書き直すと以下のようになる。
まずは通信管理クラス

import UIKit

class NetworkManager: AFHTTPRequestOperationManager {
    class var sharedInstance : NetworkManager {
    struct Static {
        static var onceToken : dispatch_once_t = 0
        static var instance : NetworkManager? = nil
        }
        dispatch_once(&Static.onceToken) {

            Static.instance = NetworkManager(baseURL: NSURL(string: "http://XXX"))
            Static.instance?.securityPolicy = AFSecurityPolicy.defaultPolicy()
            
        }
        return Static.instance!
    }
}

次にAPI管理クラス
import UIKit

class TASKAPI: NSObject {
    class func testGet(query:NSDictionary!,
               success: ((NSArray!) -> Void)!,
               failure: ((NSError!) -> Void)!)->Void
    {
        var operationCtn:NSInteger = NetworkManager.sharedInstance.operationQueue.operationCount
        if(operationCtn == 0){
        
            NetworkManager.sharedInstance.GET(
                "user/read",
                parameters: query,
                success:
                {(operaton:AFHTTPRequestOperation!, response:AnyObject!)->Void in
//                    var res:NSDictionary = response as NSArray
                    success(response as NSArray)
                },
                failure:
                {(operation:AFHTTPRequestOperation!, err:NSError!)->Void in
                    failure(err)
                }
            )
        }
    }
    
    func get(query:NSDictionary!,
        success: ((NSDictionary!) -> Void)!,
        failure: ((NSError!) -> Void)!)
    {
        
    }
}

さいごに呼び出し

        
TASKAPI.login(NSDictionary(),
       {(res:NSArray!)->Void in
            NSLog("%@", res[0].description)
       },
       {(err:NSError!)->Void in      
       })

こんなかんじで実装してみました。
注意する点・難しかった点としては

  1. API管理クラスの中ではちゃんとclass funcで静的なものにしないと
    なぞのメソッドが呼ばれる
  2. swiftのブロックスの書き方が慣れない・・・
  3. 呼び出しにはわざわざ返り値と引数型なくてもいけそう
以上。


2014年6月8日日曜日

週明けにswiftいじってたわ〜と自慢するための練習コード



リリース直後に出張出てしまいまったく触れていなかった、Swiftというか新しいUIKitにやっと触れました・・・

NDAでなんぞゴタゴタしてますが、現地で聞いて来た方によれば今回はそこらへんはAppleは寛容な様子。私も流行に乗って少しだけコード書いて動かしてみたので、明日自慢できるよう備忘録的にコードを残します・・・

いじってみた感想としては


  1. iOS8に超期待を持てた
  2. swift書きやすい
  3. headerないの気持ち悪い
  4. 書き方に慣れるのはそこまで大変じゃなさそう
  5. xcode6Betaはまだ未知数
  6. APIの仕様変更がけっこうありそうで怖い
  7. タダでさえ長かったメソッド名が超長くなってるnavigationControllerPreferredInterfaceOrientationForPresentationとか
  8. xcode6Betaで補完がきかない(まだ未実装?環境のせい?
  9. Delegateの使い方とかちょっとJava書いてる感じがあった
  10. AlertControllerに期待

こんなとこでしょうか。
まだ未知数な部分が多過ぎだし、プロダクトに落とし込むのは先でしょうが
常にチェックしていきたいですね。

import UIKit

// Delegateの使い方が謎だったけど、後ろにくっつけるだけだ
class ViewController: UIViewController, UIScrollViewDelegate{
                            
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        // ScrollViewを追加してみる
        let sc = UIScrollView();
        sc.frame = self.view.frame;
        sc.backgroundColor = UIColor.redColor();
        sc.delegate = self;
        
        // CGSizeにラベルが!!これは・・・
        sc.contentSize = CGSize(width: 500,height: 500)
        self.view.addSubview(sc);
        
        // ボタンを追加してみる
        let settings = UIButton()
        settings.addTarget(self, action: "touchedSet:", forControlEvents: UIControlEvents.TouchUpInside)
        settings.setTitle("Button", forState: .Normal)
        settings.frame = CGRectMake(0, 0, 150, 50)
        sc.addSubview(settings)
        
        // NSUserDefault
        let def = NSUserDefaults()
        let saveStr = "save Strng"
        def.setObject(saveStr, forKey: "key");
        
        
    }
    
    // ボタンアクション
    func touchedSet(sender : AnyObject)
    {
        /*
        // log出力はいつも通りだからNSLumberJackも大丈夫そうだなぁ
        NSLog("add %d", 10);
        // ViewController追加、コメントssss入力時にも補完が出た!!これxcode5でもあったっけ?
        
        /* コメントアウトの中でコメントアウトが動く
        let vc = UIViewController()
        let nv = UINavigationController(rootViewController: vc);
        */
        // リファレンスを見ていたらnavigationControllerPreferredInterfaceOrientationForPresentationという関数があってswiftこわいってなった
        // ここでtrue でなく YESにしたらエラーでた
        self.navigationController.pushViewController(vc, animated: true);
        // pushのときにちょっとアニメーションが変わってた
        */
        
        // stackoverflowより
        // リダレンスより "UIAlertView is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleAlert instead"
        // iOS8からはAlertControlerというのが出た。
        // http://stackoverflow.com/questions/24022479/how-would-i-create-a-uialertview-in-swift
        //
        // completion block
        // http://stackoverflow.com/questions/24071334/blocks-on-swift-animatewithdurationanimationscompletion
        var alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: {
                println("表示時に呼ばれるBlock")
                return nil;
            }()))
        self.presentViewController(alert, animated: true, completion: {
            NSLog("表示完了時に呼ばれるBlock")
            })
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func scrollViewDidScroll(scrollView: UIScrollView!)
    {
        // scroll領域取得
        NSLog("%f %f", scrollView.contentOffset.x,scrollView.contentOffset.y);
    }
}


2014年4月14日月曜日

がいじんとNASAとぼく【International Space Apps Challenge 2014】

International Space Apps Challenge 2014でボストンのチームとアプリを作って来た。

タイトル通りだ、私は英語が苦手な方でプログラミングの腕前も「すごく器用にコピペができる」程度のものだが去年に引き続き参加させてもらった。

今回はボストンにいるエンジニアや科学者のマジな方々と、一緒にNASAの提供するAPI・データを使ってアプリケーションを作った。

社会に出て研修で毎日心を鍛えられているんだと自分を納得させながら、
身になっているんだかよくわからない毎日を過ごしている中、とても刺激的で
勉強になった2日間が過ごせた。



作ったもの

今回はNASAの提供する降水量データをリアルタイムに取得して、
地滑りの起きそうな箇所を予測しマッピング、近隣場所にいるユーザーに
警告通知を飛ばすiOSアプリとwebアプリを実装した。

Japan team 3人と、ボストンの3人のチームで2日間・・・

なんとか動く物を提出できた。

最初は様々な不安もあったけどなんとかなってよかったよ!!

不安だった事

英語だ。私はそんなに得意じゃない、仕組みはわかってるし
並び替えるだけで話せる系のは大丈夫なんだが口語というか
座学のみの知識のせいで表現がうまくできない!!

チャットベースで仕様の確定やタスクの割り振り、
最終的にTestFlightで配信したので、その使う方を伝えるなど

今回はコードより英語書いてた。

貴重な経験ができた・・・

実装

サーバ側はPHPでスクレイピング、jsで地図の描写や諸々を書いた。
DBは使わずNASAの提供しているデータをいい感じにしてAPI化した。

さらにここで作ったwebアプリを埋め込んだiOSアプリを作り、
remote Notificationを実装した。

ここまでサーバの容易含め1日仕事・・・

反省点が多い。とくに開発とマインドのところ

反省点


  • remote Notification のミス
  • 仕様の理解の齟齬
  • 英語

でも出てよかった


まず去年と比べて自分のレベルが上がった事を明確に認識できた。
英語・開発・仕事の進め方、実際の現場に必要ないろいろなスキルが必要な
ハッカソン、今回は企画から開発まで。

発表はできなかったけど、むこうでがんばってくれて賞も取れた!!




2014年4月9日水曜日

iOS - 勉強会を始めました

研修真っ盛りでお辞儀の角度を気にしながら生きているエンジニアの私です。

「かいしゃ」に入りまして、まだマインドの所を鍛えていただいているばかりでエンジニアリングはまったくできていおらず、放課後エンジニアとして終業後にカフェでたらたらコード書いて死んだように寝る毎日を繰り返しています。

そんな折、同期からiPhoneアプリ作りたいと言われたので勉強会始めました。

[ ios - fighter ] はじめました


新卒エセ社会人がweb企業で個人でiPhoneアプリ作る理由って、
なにかなーと考えたとき私なりに思うのが以下3つ。

  1. プロダクトオーナシップの獲得
    実際に現場は配属になったときに個人で作っているプロダクトがあると、企画・開発・マネジメント・オーナーの全部を担うので、いろいろ成長できる。いろいろね
  2. 課題発見力の向上
    今の自分の生活の中にある課題とかをアプリで解決する経験とかしておくと課題発見力の向上が期待できる。
  3. マーケットの理解
    iOSアプリは市場が一つしか無い。
    分散していないのでやりやすい面白い

私個人としてもアプリを作りたいので、いいモチベーションエンジンに
なってるれるなぁというのと、アイデアの客観評価のために意見も欲しいし
そこで交流の場になればと・・・
職種関係なく一緒に何か作るために毎週夜の時間を共にするとか素敵やん!!

なのでゴールとしては

3ヶ月で一本リリース


用件としては

  • OSSを使う
  • APIを使う
  • ログを取る
  • ユーザーファースト
  • 面白いセカンド
  • 稼げるサード
というかんじで面白い物をさーっと作れれば!!


以下参考図書(アフィなのでこっから買ってください)

ShareThis