2015年1月29日木曜日

docker コマンドを理解する

dockerを学習中です。はじめたばかりなので、なかなか理解し難いです。というわけで自分用の咀嚼メモ。

  • vagrant1.6.5
  • Docker version 1.3.2

コンテナ ID

ユーザー名の@のあとの英数文字を指します。


root@abdd67bc3848

コミット

コンテナからイメージを作成する


docker commit <コンテナ名/ID> <イメージ名>:<タグ名>

-m フラグ :コミットメッセージ
-a フラグ :更新する作者の指定

上記のサンプル


docker commit -m="first commit" -a="Taro test" 48da5f7a56f1 ci:v2

-m="first commit" : コミットメッセージ
-a="Taro" : 作者
48da5f7a56f1 : コンテナID
ci : イメージ名
v2 : タグ名

ビルド


docker build -t イメージ名:タグ名 Dockerfileのあるディレクトリ

上記のサンプル


docker build -t ci:v2 .

ci : イメージ名
v2 : タグ名

コンテナの実行状況


docker ps

-a : 停止中のコンテナを見る

コンテナを一気に削除する


docker rm `docker ps -a -q`

chefの実行までやろうとしましたが、無理だったのでまた次回やります。ただ、dockerでのchef-soloの実装より先に、chef-zeroをやるべきですね。
dockerのipアドレスの仕組みはここを読むとよくわかります。

小さなプロジェクトやテストプロジェクトから徐々に利用していきたいと思います。

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月28日水曜日

swift AppDelegateでUse of undeclared typeエラー

swiftでcore dataを実装しようとしたらUse of undeclared type 'AppDelegate'が発生。
発生したことのないエラーだったので対処方法を記録。

環境

  • Xcode6.1

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate

上記のコードを記載したときに『Use of undeclared type 'AppDelegate'』のエラーが発生しました。原因はAppDelegate.swiftがTarget MembershipのTestに含まれていなかったのが原因です。

なので、解決方法は、

  • AppDelegate.swiftファイルを右クリック
  • Target Membershipの{ProjectName}Testsにチェックを入れる
  • Build

上記の手順でコンパイルが通ると思います。

以上

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

dockerでCI環境を構築する chefdkのinstall

railsアプリCI環境の構築。スマフォアプリのサーバーサイド側のプログラムをCIに適応させます。

構成は

  • jenkins
  • docker
  • chef
  • rails
  • slack
  • bot

です。

やりたいことは
gitでコミットしたソースをjenkinsで取得 → dockerでコンテナを立ち上げ → railsのテストを実行
です。

slackやbotを使った通知は可能なら設定します。まずは、上記が最優先。
では、開始します。

vagrantでdockerを学習

まずはvagrant上で構築。CoreOS使います。


// vagrantのCoreOsを取得
git clone https://github.com/coreos/coreos-vagrant.git
cd coreos-vagrant

vagrantを起動してログインする


// 起動
vagrant up

// ログイン
vagrant ssh

ログインしたらdockerのバージョンを確認する


docker version
Client version: 1.3.2
Client API version: 1.15
Go version (client): go1.3.2
Git commit (client): 50b8feb
OS/Arch (client): linux/amd64
Server version: 1.3.2
Server API version: 1.15
Go version (server): go1.3.2
Git commit (server): 50b8feb

dockerファイルを作成する


vi Dockerfile

FROM centos
MAINTAINER Edy 

ENV CHEFHOME /home/core/chef-repo
ADD chef-repo /home/core/chef-repo

RUN curl -L http://www.opscode.com/chef/install.sh | bash

RUN cd ${CHEFHOME}

# install chef dk
RUN rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.3.6-1.x86_64.rpm

# temporary setting path
RUN export PATH=/opt/chefdk/embedded/bin:$PATH

# knife install
RUN chef gem install knife-solo

内容の詳細は以下に記述

  • ENV:環境変数をセット
  • ADD:コンテナ外のファイルをコンテナ内に配置
  • RUN:ビルドステップ内で実行されるコマンド

dockerをビルド


// -i → コンテナーの標準入力を開く。
// -t → tty(端末デバイス)を確保する。/bin/bashなどでコンテナーを操作する際に指定
docker build -t test .

Dockerコンテナーの起動してchefがinstallされていることを確認


docker run -t -i test /bin/bash

chef -v
Chef Development Kit Version: 0.3.6

knife -v
Chef: 11.18.0

うまくできているのを確認できたので、commitする


docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
af4026699f4f        test:latest         "/bin/bash"         3 minutes ago       Exited (0) 2 minutes ago                       drunk_mcclintock

// コミット
docker commit compassionate_shockley newci

色々と作成した不要なDockerイメージを削除


docker images
// something

// 削除
docker rmi 8efe422e6104

使用中のコンテナは削除できないので、注意してください。
以上
PS : まだdockerに慣れていないので間違えている可能性があるので注意してください。

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月25日日曜日

ゲームビジネスの本質は、常に新しい楽しさを開発し、ひたすら完成度を高めていくこと。『任天堂 “驚き”を生む方程式』感想

井上 理

最近やったゲームは3DSのルイージマンション2。あまりの素晴らしい出来栄えに、インターフェース、チュートリアル、そしてなにがこのゲームの面白さを引き出しているのかを研究しました。

山ほど娯楽のある現代社会。その中で、ゲームにのみ焦点をあてて企業を運営していく。ウルトラCの難易度です。そんな任天堂について知りたい。そんな理由でこの本を購入しました。

天才経営者岩田聡

  • 成功は、結果のために正しいと思うことをしたのでなく、正しいと思うことをしたら結果がついてきた
  • ゲーム作りとは、操作と遊びの構造を一体化させながら、何かのテーマ、コンセプトを貫いて延々と試行錯誤を繰り返すということ。膨大な可能性を追求して、極めるように収束させていく。
  • クリエイターはリスクを背負って経験しないと育たない。
  • 岩田聡の説明は、ロジカルに整理して語るのがうまい。物腰や口調は穏やかで、必ず相手の話を聞いてから、自分の意見を話す。

天才宮本茂

  • 人生を通して遊びや楽しみを追求し、いつも日常生活のどこかでヒントやアイディアの種を探しては、ゲームに反映している。凡人との違いは、遊びや楽しいことへの、飽くなき探究心と鋭い感覚である。
  • なにげないコミュニケーションを遊びに変えたのが「どうぶつの森」。メールを楽しそうに打つ子どもや女子学生からヒントを得た
  • 健康を記録するWiiフィット。腰痛に悩まされて水泳を初めて「健康になるのは面白い」「毎日体重を測るのは面白い」からヒントを得た
  • 肩越しの視線の効果。ゲームをやらない人の操作を何も言わず後ろから見つめ、改善点を次々と浮き彫りにする。
  • 「普通の人」がわからないのは自分が間違っているからだと修正を繰り返す。生活の中に新しい遊びや楽しみを見出し、見つけた遊びの種を、万人に理解してもらうために、愚直に遊びを磨きこむ。
  • 一つのテーマについてしつこく考え続けることが大切。考え続けていることの蓄積の量が、ヒットを生んでいる部分がある。試作を重ね、時に捨て、また重ねる。結果として、質の高いソフトを送り続ける。

鬼才横井軍平

  • テレビゲームにはアイディア不足の逃げ道があった。それがCPU競争であり、色競争。そうなると、ゲームを作る会社でなく、画面作り、CG作りが得意なところがのぼってくる

任天堂らしさ

  • 事業領域を「娯楽」にとどめ、組織も極力コンパクトに。一番強みを発揮できる部分に絞るべき。上手に捨てられるから、少ない人数でも大きなところと戦える。コア以外の部分はよその力を借りる。
  • 娯楽はよそと同じが一番ダメ
  • ゲームビジネスの本質は、常に新しい楽しさを開発し、ひたすら完成度を高めていくこと

感想とまとめ

ものづくりに関わる人は絶対に読んだほうが良い本です。特に、ソフト系のビジネスに関わっている人は、何度も読んだほうが良いです。
愚直に面白いものを追求し、質を高めていく。私もエンジニアとしてこの姿勢を大事にし、世界中の多くの人に役に立ち、そしてユーザーを笑顔にできるソフトを生涯作り続けていきたいと改めて思いました。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月23日金曜日

3Dプリンティングは、経済をさらに根本的に革新する。 - 書評 - 『2040年の新世界: 3Dプリンタの衝撃』

  • 公開日:2015年01月23日
  • 最終更新日:2015年08月01日

はじめに


数ある未来の技術の中でも、特に期待が高い技術の一つが3Dプリンターです。ロボット事業や宇宙事業もワクワクしますが、3Dプリンタによって世界がどう変わっていくかは、興味がつきないところです。

本書では、現在の3Dプリンタをとりまく状況と、予想される未来が記述されています。
未来がどうなるかは誰にもわかりませんが、世界はより素晴らしい方向に向かっていると個人的に思います。

これからのビジネス


  • 大量生産や職人による生産の制約から、これまで利益を上げるのは無理があったり不可能だった製品やサービスにチャンスがある。 言い換えれば、規模の経済に頼らずに利益を上げられるようなビジネスモデルに、チャンスが潜んでいる
  • 将来の3Dプリンティングは、経済をさらに根本的に革新する

経済


  • 世界は経験経済に向かっている

食のデジタルフードプリンティング


  • 3Dフードプリンタはデジタル時代の理想的な食品テクノロジーになる。例えば糖尿病の人が血糖値のデータをアップロードできれば、ソフトウェアが次の食事のバランスを計算し、キッチンの3Dフードプリンタにレシピを送ることが可能になる
  • 3Dフードプリンタは、人の食事のとり方や健康管理の仕方を変えるだろう

3Dプリンターの課題


  • 消費者の安全に対するリスクがある。現在、人が購入する物は、企業努力と法規によって守られているが、3Dプリンタは違う。責任の所在はどうするのか
  • 3Dプリントされたレプリカに対し、著作権問題が生じる可能性が高い
  • 特許は開発の妨げになる。ジェームズ・ワットは蒸気機関の重要な要素の特許をとったが、特許が有効だった二十年間は何の進展もなかった。特許の期限が切れると、蒸気機関は目覚ましい進歩を遂げ、産業革命が起きた。
  • 生産ツールを広く使えるようにすることのデメリットは、経済のメルトダウンである。偽造の横行は利益を蝕む。現実的でバランスのとれた法的な枠組みが必要となる。

まとめ


規模の経済に頼らずに利益を上げられるようなビジネスモデルというのは、ソーシャルゲームも同じです。良くも悪くも、世の中はより多様で複雑な世界になっていくのは間違いないと思います。オープンソース、オープンデータ、オープンハードウェアと我々の前にはあらゆる物が無償で提供されるようになっています。あとは使う人の力量次第ということになります。

また、3Dプリントで可能となる新たなデザインを生み出す発想力も課題となりそうです。まだまだ未知の部分が多い技術ですが、確実に世の中は変わっていくでしょう。楽しみです。

他の読書に関する記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

スマホアプリ開発のための復習 Observerパターン by swift

Observerパターンとは?

状態の変化を観察することを目的としたパターンです。

ここ数年、色々なandroidとiphoneの開発(ネイティブアプリ)を手がけましたが、スマホアプリ開発でもっとも利用頻度の高いデザインパターンがObserverパターンだと思います。 webアプリの時はabstract factoryやTemplate Methodをよく利用していましたが、スマホアプリだとObserver, Stateあたりも負けじとよく利用します。

そんなわけで、まずはswiftでObserverパターンの学習です。

環境

  • Xcode6.1

Observerパターンのサンプル


class StepCounter {
    
    var totalSteps: Int = 0
    
    var inputValue: Int = 0 {
        
        willSet {
            totalSteps = totalSteps + newValue
        } didSet {
            // 合計が150を超えたら前回の入力値に戻して、入力値も0に戻す
            if (totalSteps > 150) {
                totalSteps = oldValue
                inputValue = 0
            }
            //println(oldValue)
            //println("didSet")
            //totalSteps = oldValue
        }
    }
}

let stepCounter = StepCounter()

stepCounter.inputValue = 100
stepCounter.totalSteps // 100

stepCounter.inputValue = 40
stepCounter.totalSteps // 140
stepCounter.inputValue // 40

stepCounter.inputValue = 20
// 150を超えたので、前回の40に戻る
stepCounter.totalSteps // 40
// 入力値が0に戻っている
stepCounter.inputValue // 0

ポイントは以下

  • willSetのあとにdidSetが呼び出される
  • willSetはデフォルトでnewValue, didSetはデフォルトでoldValueという変数が利用できる
  • プロパティ(この例ならinputValue)には、willSetからはアクセスできない

実際にはmodelで使うケースが多くなりそうです。今後、積極的に使っていこうと思います。実際に利用した時、また詳しく記述します。

以上

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月22日木曜日

swift DebugとReleaseでAPIのURLを分ける

ビルドをするときに、DebugとReleaseでAPIのURLを分けるやり方のメモ

環境

  • Xcode6.1

定数クラスを作成

定数クラスConstを作成します。APIのURLやSNSのURLなどの、環境ごとの振り分けを記述します。


class Const {
    
    /* API URLs */
    #if DEBUG
    let URL_API = "http://debug.hoge.com/api"
    #else
    let URL_API = "http://production.hoge.com/api"
    #endif
    
}

Swift Compiler - Custom Flagsの設定

BuildSettingsパネルのSwift CompilerのOther Swift FlagsのDebugに-D DEBUGを設定します。

上記の定数を呼び出すコードを記載します。


println(Const().URL_API)

ビルドしてアプリを立ち上げて、debug consoleを確認します。


http://debug.hoge.com/api

#if DEBUG内の定数が呼ばれていますね。続けてReleaseの値を出すため、Debugに-D RELEASEを設定します。

ビルドしてアプリを立ち上げて、debug consoleを確認します。


        http://production.hoge.com/api

うまくいきましたね。

APIのURL切り替えはアプリ作成時にはよく使う手法だと思います。swiftでのネットワーク接続はAlamofireを利用すると便利です。ご利用するかたは、こちらの記事を参考ください。

以上。

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

swift SwiftyJSONではまった件

swiftでjsonを扱うときは、SwiftyJSONというライブラリを利用するのが一般的です。
ところがこのライブラリでどはまりしました。というわけでメモ

環境

  • Xcode Version 6.1 (6A1052d)

SwiftyJSONを取得

CocoaPodsでswiftが利用できるのはCocoaPods 0.36からです。私の環境ではまだ0.35なのでgit submoduleで取得します。


// プロジェクトフォルダへ移動
cd /Users/{username}/Documents/swiftworkspace/{projectFolder}

// サブモジュールとして取得する
git submodule add https://github.com/SwiftyJSON/SwiftyJSON.git

// SwiftyJSONディレクトリを開く
// SwiftyJSON.xcodeprojをproject treeに移動させる
// ビルド
// Target DependenciesでswiftyJSONを選択


以上で準備完了です。画像を以下に貼り付けておきます。

Alamofireで取得したjsonを取得するサンプルコード(間違い)


        import UIKit
        import Alamofire
        import SwiftyJson

        Alamofire.request(.GET, "http://test.com/api/v1/math", parameters: ["offset": 0, "limit": 1, "student_id": 1])
            .responseJSON { (request, response, data, error) in
                if (response?.statusCode == 200) {
                    println("success")
                    let json = JSON(data!)
                    println(json)
                } else {
                    // error
                    println(error)
                }
        }

上記のコードを書くとコンパイルは通ります。しかし、シュミレーターを起動すると、swiftyjson linker command failedエラーで動かなくなります。
正しい実装は以下の通り。

Alamofireで取得したjsonを取得するサンプルコード(正しい)


        import UIKit
        import Alamofire
        import SwiftyJson

        Alamofire.request(.GET, "http://test.com/api/v1/math", parameters: ["offset": 0, "limit": 1, "student_id": 1])
            .responseJSON { (request, response, data, error) in
                if (response?.statusCode == 200) {
                    println("success")
                    let json = SwiftyJSON.JSON(data!)
                    println(json)
                } else {
                    // error
                    println(error)
                }
        }

JSONをSwiftyJSON.JSONに変更するときちんと動作します。
これだけのことなのに、すごくはまってしまいました。

以上

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月17日土曜日

日本国民が暇に過ごせば過ごすほど、することがなければないほど、ソーシャルゲームの売上はあがる。『あなたはなぜパズドラにハマったのか? ソーシャルゲームの作り手が明かす舞台裏』感想

鈴屋二代目

ソーシャルゲームの仕組みが理解できる本です。もし読者がWEBアプリなどの開発業務に関わっているならば、より楽しく読めるでしょう。

ソーシャルゲームは世の中でなにかと叩かれていますが、高度な知識、技術、人材、クリエイティビティが要求される仕事です。 この世界で長く活躍できる人材は、どの世界でも活躍できる人材になれます。それくらい、色々な要素が高レベルで要求されます。
逆にいうと、サラリーマン的な考えの人にはまったく向かない仕事です。安定はしてないし、仕事はハードだし、日々学習が必要です。給料がいいからとかいう理由では一年と続かないでしょう。

ソーシャルゲームの仕組み

  • お金を使ってくれる人が存在するのは、たくさんの無課金ユーザーがいるから
  • 世代毎の売上が一番多いのは一般的に30代。課金者一人当たりの高いのは、40代

開発側の視点

  • 運営側は、遊んでいると思われる人達の生活サイクルを想像して彼らの一日の隙間時間を想定し、ゲーム内イベントの難易度やゴールを設定する
  • 男性と女性では売れるアバターアイテムの傾向は異なる。男性は、鎧、天使の羽根などの非現実的なファンタジー系、女性は派手なドレス、つけまつげなどのリアルな世界で自分が着にくいゴージャス系である
  • 日本国民が暇に過ごせば過ごすほど、することがなければないほど、ソーシャルゲームの売上はあがる。例えば、ゴールデンウィーク、お盆休み、正月休み

作り方

  • 収集要素は売上に繋がるので外せない
  • ゲーム要素はちょこっと遊べる程度には入れる必要がある
  • 課金ポイントは、ゲームの中でユーザーが何に一所懸命になっているかを探すことで見つかる
  • 重要なのは三点。隙間時間に利用できる。育成や収集要素がある。ソーシャル性がある

リリース後

  • ソーシャルゲームは、ゲームが世に出た瞬間がゴングがなった時
  • ほったらかしでは成功しない。PDCAで手を加え続けていく
  • 売ったら終わりのビジネスとは異なり、どう育てていくかが重要
  • PDCAを回すには、何の指標をあげるかを事前に決めておかないとプランの成功を判断できないので、決めておく必要がある

成功理由

ソーシャルゲームはマーケティング要素をエンターテイメントに適用したもので、システムとして完成されている。
これまではクリエイターが直感的に作っていた楽しさをシステム化し、数値したことが成功要因。要は技術の塊である。

感想とまとめ

高度にシステム化した隙間産業。というのが僕のソーシャルゲームの印象です。
僕はソーシャルゲームはやりませんが、否定派でなく肯定派です。なぜなら、ソーシャルゲームの運営や作成の中で生まれた高度な技術やマーケティング技術は他の業界でも有効活用されているからです。みなさんが毎日の生活の中で利用している便利なシステムの中にも、ソーシャルゲームから生まれた技術は使われています。

イノベーションは色々な試行錯誤から誕生します。きっとソーシャルゲーム世代の子供たちが大人になったとき、新しいゲームのジャンルが生まれているでしょう。そして、新しい技術や価値観を携えて、業界も世界も発展していくのだと思います。

読書メモ : 読書日 : 2015/1/17 6/100冊目

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

人生、失敗する人は「同じ給料なら働かないほうが得だ」と考える。『微差力』感想

斉藤一人

日本一の納税額で有名な斎藤一人氏の本です。斎藤一人氏の本は初めて購入しました。

微差

この世は全て微差が大差。儲かる仕事はうんと大変で、儲からない仕事はたいへんじゃないというのは嘘。儲からない仕事も大変。
微差で大差になる。だから微差にこだわったほうが良い。

成功の秘訣

自分がいる業界、職場でも、一番の人がやっていることを、じいーっと見て、いいことをマネをする。

恩賞ももらわないではたらく癖をつける。そうすると力がつく。人生、失敗する人は「同じ給料なら働かないほうが得だ」と考える

微差の追求

微差を追求して、微差を突き詰めていくと、いろんな考え方が見えてくる。

上手く行っている会社は、常に細かい努力、微差を追求している。

感想とまとめ

全体的に、「神は細部に宿る」ってことが書かれていますね。その通りだと思います。

読書メモ : 読書日 : 2015/1/17 5/100冊目

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月16日金曜日

swift TIPS

一回一回検索して調査するのが面倒なので、よく利用する処理のメモ

環境

  • Xcode6.1

UINavigationControllerに設定したUIViewControllerの操作

1.ナビゲーションバーを非表示


        self.navigationController!.setNavigationBarHidden(true, animated: false)

2.背景色の設定


        self.view.backgroundColor = UIColor.blackColor()

ボタンを画像にする


        // カスタム
        var button = UIButton.buttonWithType(.Custom) as UIButton
        button.frame = CGRectMake(20, 250, self.view.bounds.width - 40, 150);
        button.enabled = true
        // 画像の指定
        button.setImage(UIImage(named: "test"), forState: .Normal)
        // actionの指定
        button.addTarget(self, action: "test", forControlEvents: UIControlEvents.TouchUpInside)

以上。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

swift swiftからobjective-cのコードを呼び出す

swiftからobjective-cを呼び出す必要があったので、やり方をメモ

環境

  • Xcode6.1

まずはobjective-cのコードを用意します。以下が手順。

  • New FileでObjective-cファイルを選択して作成する
  • {@tagetname}-Bridging-Header.hと{@tagetname}Tests-Bridging-Header.hの二種類のファイルも自動作成するよう選択する
  • Build Settings Swift CompilerのObjective-c Bridge Headerに上記のファイルが設定されていることを確認する

以下、サンプルです。

hファイル


#import 

#ifndef Test_ObjectiveCManager_h
#define Test_ObjectiveCManager_h

#endif

@interface ObjectiveCManager : NSObject

/**
 Returns a string.
 */
- (NSString *)ObjectiveCManagerString;

@end

mファイル


#import "ObjectiveCManager.h"

#import <Foundation/Foundation.h>

@implementation ObjectiveCManager

- (NSString *)ObjectiveCManagerString {
    return @"hello objective-c";
}

@end

{@tagetname}-Bridging-Header.hファイルと{@tagetname}Tests-Bridging-Header.hファイル。両ファイルに記述しないとビルドが通らないことに注意


#import "QRBarcodeManager.h"

上記のビルドが上手くできれば、swift側でクラスを呼び出してあげればOK。swift側にimportは不要です。


        var objcObj = ObjectiveCManager()
        var msg = objcObj.ObjectiveCManagerString();
        
        println(msg)

以上。便利ですね。でもちょっと気持ち悪いw

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

男の度量は屈辱の量で決まる。味わった屈辱が多いほど度量は大きくなる。『アリババの経営哲学』感想

張燕

ここ数年で最高のビジネス書です。いや、ビジネス書を超えています。哲学書です。

amazon、facebookを超える時価総額を叩きだしたアリババ。私はECサイトは基本amazonのみで、アリババを利用したことがないのですが、ジャック・マーの凄さは色々と耳にしていたので、本を見つけ、即購入しました。
この本には、心に沁みる言葉が沢山あります。ジャック・マーは、京セラの稲盛氏やソフトバンクの孫氏にも匹敵する人間力の高さを持っているのだと感動しました。
孫さんがジャック・マーの目を見て、即投資した理由も納得です。

男の度量

男の度量は屈辱の量で決まる。味わった屈辱が多いほど度量は大きくなるものだ。苦境は問題でない。重要なのは未来を見据え、プラス思考で自分を成長させることだ。

信念を疑うな。自分を疑え。

自分を疑うが、信念は疑わない。なぜなら、時に信念と自分は一致しないからだ。信念を成し遂げるためのやり方が正しいのか、戦略は間違っていないのかと、常に自分を疑い、自分を問いただしている。

成功とは

成功とはどれだけやったかでなく、何をやったかである。こつこつ努力しても、結局は平凡に終わるだけ。
成功者には2つの資質が備わっている。ひとつは、大胆で執着心が強いこと、もうひとつは市場に対し鋭敏な嗅覚をもっていること。

成功の定義は分からないが、何が敗北かは知っている。それは、諦めること。

何かをするのに、失敗か成功かは、飛び込んで試してみなければ分からない。だめだったら方向を変えればいい。

成功への道は、何よりも目標に集中することが求められる。一つのことに打ち込まなければ何も成し遂げることはできない。

理想を持った時に、一番大切なことは自分に約束をすることだ。かならずやり遂げてみせると自分に約束するのだ。

成功の「成」とは、自らを完成させること。成功の「功」とは世間に対し、功徳を積むこと。人は自らを完成させ、人を助けて初めて「成功した」と感じることができる。

人生で経験すべきこと

たくましさとは、苦難や無念、悔しさを経験して、はじめて分かる。
職責とは、他の人より勤勉に働き、努力し、理想を持つこと。

目標について

目標は人生の指針になる。初めに高い目標を立て、全力でそれを成し遂げたとき、最終的に目標に届かなかったとしても、得たものは、目先しか見ていなかった人間より多い。

情熱について

情熱は常に夢を伴う。情熱は貴重な資質であり、この資質のある人間は何をやっても優れた成果を残す。

人生について

人生はあなたが何を勉強したかでない。また、何を手に入れたかでもない。何を経験したかが重要。

感想とまとめ

絶対に読むべき本です。自分が何をやりたいのが、どこに進んでいるのか迷った時、僕は再びこの本を開くでしょう。
素晴らしいよ。ジャック・マー!

読書メモ : 読書日 : 2015/1/16 4/100冊目

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月15日木曜日

swift コードでUITabBarController

コードでUITabBarControllerを実装する方法のメモ

環境

  • Xcode6.1

objective-cと基本的なやり方は変わりません。tabごとのviewを作成して、UITabBarControllerを継承したTabBarControllerに設定するだけです。


class MainTabBarController: UITabBarController {
    
    var homeViewController: HomeViewController!
    var infoViewController: InfoViewController!
    var itemViewController: ItemViewController!
    var otherViewController: OtherViewController!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        homeViewController = HomeViewController()
        infoViewController = InfoViewController()
        magazineViewController = MagazineViewController()
        otherViewController = OtherViewController()
        
        //表示するtabItemを指定
        homeViewController.tabBarItem = UITabBarItem(tabBarSystemItem: UITabBarSystemItem.Featured, tag: 1)
        infoViewController.tabBarItem = UITabBarItem(tabBarSystemItem: UITabBarSystemItem.Bookmarks, tag: 2)
        magazineViewController.tabBarItem = UITabBarItem(tabBarSystemItem: UITabBarSystemItem.Bookmarks, tag: 3)
        otherViewController.tabBarItem = UITabBarItem(tabBarSystemItem: UITabBarSystemItem.Featured, tag: 4)
        
        // タブで表示するViewControllerを配列に格納します。
        let myTabs = NSArray(objects: homeViewController!, infoViewController!, magazineViewController!, otherViewController!)
        
        // 配列をTabにセットします。
        self.setViewControllers(myTabs, animated: false)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}


以上。つーか、objective-Cと同じですね。

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

swift 画面遷移でWHOSE VIEW IS NOT IN THE WINDOW HIERARCHY!発生

swiftで画面遷移を実装したら発生しました。

環境

  • Xcode6.1

原因は、viewDidLoad()関数内でpresentViewController()関数を呼び出して画面遷移を実装したためです。
画面遷移の処理をviewDidLoad()関数でなく、viewDidAppear()関数内で呼び出すようにしたらうまくいきました。
以下にサンプルを記載します。


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.configureUI()
        // ここで呼び出すとWHOSE VIEW IS NOT IN THE WINDOW HIERARCHY!が発生する
        //self.mvHomeView()
    }
    
    override func viewDidAppear(animated: Bool) {
        self.mvHomeView()
    }

    // Home画面に遷移
    func mvHomeView() {
        println("go HomeView")
        let homeViewController: UIViewController =  HomeViewController()
        self.presentViewController(homeViewController, animated: true, completion: nil)
    }

以上。つーか、objective-Cと同じですね。

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月12日月曜日

2015年はデザインを勉強する

今年身につけようと考えている技術のひとつにデザインがあります。

理由は色々あるのですが、あまりに技術に特化した学習ばかりしていて、感性が鈍ってきているなと最近感じているからです。

そんなわけでまずはイラストを書いていきながら、画力等を磨いていきたいと思います。
最終的には美術館などの芸術を感覚的だけでなく、理論的にも理解できるようになりたいです。(実は僕は美術館好きです。)

*今の画力の記録。


ワンピースのサンジとるろうに剣心の剣心です。
我ながらひどい。小学生並みかな。絵なんて普段描いてないので下手で当たり前なんですけど、ひどいですね。
そのうち写楽とかダ・ヴィンチとかラファエロに手を出せるようになりたいです。今は夢のまた夢ですが。。。
あとは年内中にLineのスタンプをリリースしたいです。

ps. エンジニアやめようとか考えているわけじゃないですよw
今年は、swiftやデータ分析をガンガンやってきます。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月11日日曜日

SwiftでAsset Catalog

Asset Catalog は、画像リソースの管理に利用します。
Asset Catalog を使うことで、画像を一元管理出来るようになり、画像ファイルの追加・削除・修正を行ってもプロジェクトファイル(.pbxproj)は変更されないためバージョン管理が楽になります。

環境

  • Xcode Version 6.1 (6A1052d)

Asset Catalog は swift でも利用可能です。以下、手順です。

  1. xcodeでプロジェクトを立ち上げる。
  2. images.xcassetsをクリック。
  3. 右クリックで「New Image Set」を選択。
  4. 1x, 2x, 3xの位置に、対象の画像をマウスでドラッグして配置する。
  5. ビルドを実施する。
  6. 画像名.imagesフォルダの下にContents.jsonが存在していれば成功。

せっかくですので、UIViewControllerの背景にAsset Catalogの画像を利用してみましょう。


    override func viewDidLoad() {
        super.viewDidLoad()
        setBackGroundImage()
        self.configureView()
    }

    // 背景を設定する
    func setBackGroundImage() {
        
        let myImage = UIImage(named: "splash")
        var myImageView = UIImageView()
        myImageView.image = myImage
        myImageView.frame = CGRectMake(0, 0, myImage!.size.width, myImage!.size.height)
        self.view.addSubview(myImageView)
        
    }

上記の処理を記載してビルドすると、画像が背景に設定されます。 UIImageから画像サイズを取得するのに、Forced Unwrappingを利用しているのがポイントですね。あとはobjective-cの時と変化ありません。

以上

参照

山情報&登山SNSアプリ「マウンテンチャンネル」を公開しました。

マウンテンチャンネル公式サイト

Android app on Google Play

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月7日水曜日

英語より先に歌舞伎を学べ!。『ビジネスマンへの歌舞伎案内』感想

成毛 眞

タイトルに釣られて購入。あとは最近歌舞伎に興味があって、行ってみたいと思っていたタイミングもあり、購入しました。

歌舞伎は確実にビジネスに効く。成毛氏は断言する。
すぐには効かないが、あとからじわじわ効いてくる。ビジネスマンにとっての基礎体力づくりのようなものであるとまで言うから驚きである。

教養としての歌舞伎

歌舞伎の魅力の一つは、変わらないことにある。30歳で見ても、60歳で見ても同じ。自分の成長を感じることができる。また、40代、50代でも教養として役に立つ。

ブランドとしての歌舞伎

歌舞伎からはブランドというものの本質を学べる。つまり「変わらないこと」という本質である。
変化は重要だが、何を変えて何を変えないかという部分が肝なのである。

感想とまとめ

歌舞伎を学ぶというより、歌舞伎の楽しみ方を記述した本です。歌舞伎に興味がない人は読むのがつらいと思います。
僕は興味津々だったので、面白かったです。今年こそは銀座に足を運ぼうとおもいます。

読書メモ : 読書日 : 2015/1/6 3/100冊目

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月4日日曜日

論理は人間の敵。AB型は起業に向いてない。 - 書評 - 『ニコニコ哲学 川上量生の胸のうち』

  • 公開日:2015年01月04日
  • 最終更新日:2015年08月01日

KADOKAWAとDOWANGOの代表取締役川上量生氏のcakes(ケークス)でのインタビューをまとめた本。予想以上に面白く読めました。

プラットフォーム自身がコンテンツをつくるべき


理由はコンテンツビジネスをしていないプラットフォームは、とにかくコンテンツの値段を下げようとするから。
最後は、値下げ競争で地獄になってしまう。任天堂のように、プラットフォームとコンテンツを両方つくったほうが良い。

クリエイターが増えれば増えるほど、作品の多様性は失われていく。


オープンなマーケットでみんながコンテンツをつくれるようになればなるほど、コンテンツの実質的な多様性は減る。 解が多いということは、ある解に向かって自動的に収束していくということだ。なので、クリエイティブが今以上に豊かになるなんてことは幻想である。

オープンなマーケットほど勝つのが難しい


数がいっぱいいたら、価値が下がるのは当たり前。

個人的にすごく腑に落ちました。勝ち残るには、みんながやりたがらない面倒くさいことや、マネが難しいニッチなことをやるべきだと思いました

コンテンツにはメディアが必要で、その後コンテンツはブランド化する。


結局、コンテンツはどこに紐付いて市場ができるかというと、メディアである。そして、コンテツが成熟していくと、コンテンツではなくブランドが評価されるようになる。典型例はゲームで「任天堂」「ドラゴンクエスト」などとついているかが、売れ行きを左右する。

会社でも同じですね。鈴木さんだから信用できるとか、佐藤さんだと不安だとか、人のブランド価値によって、与えられる仕事が変化する。こうなると逆転は難しい。差は拡大する一方になる。

新しいことを成功させるには


なんでもやらされて、なんでもやらないといけない環境で、人間ははじめて自分の頭で考えだす。
ベンチャーの黎明期にはすごい人がたくさん誕生しても、会社が大きくなると誕生しないことにもつながっている。
なまじ知っているよりも知らないほうが良い。素人の感覚はすごく重要。

起業について


起業のコストが安くなったは嘘。会社をはじめても最初の条件は同じではない。
誰でも起業しやすくなったということは、それだけ競争も激しいということ。
勝つために必要なのは勇気じゃなくて計算。理詰めで先を見てリスクに対処してくのが正しいやり方。

血液型について


AB型は起業に向いてない。
O型がやれ!

まとめ


最後のほうのインタビューは結構グダグダで、あまり面白くありませんでした。
でも、全体でみると、とっても面白い本だったと思います。
KADOKAWAとDOWANGOがこれからどうなっていくのか注視していきたいと思わせてくれる内容でした。

他の読書に関する記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年1月1日木曜日

server spec2 で LDAPのテスト

今更LDAPとかないわー。とは思ったんですが、せっかく構築したのでserver specでテストも書きました。今後も使いまわせそうな箇所をメモ

環境

  • ruby 2.1.5
  • serverspec 2.7.1
 

    require 'spec_helper'

    // デーモン
    describe service('slapd') do
      it { should be_enabled }
      it { should be_running }
    end

    // port番号
    describe port(389) do
      it { should be_listening }
    end

    // directory
    describe file('/var/lib/ldap') do
      it { should be_directory }
      it { should be_owned_by 'ldap' }
      it { should be_grouped_into 'ldap' }
    end

    // postfix連携
    describe file('/etc/openldap/schema/postfix.schema') do
      it { should be_file }
    end

    // ログ設定ファイル
    describe file('/etc/rsyslog.d/ldap.conf') do
      it { should contain 'local4' }
    end

    // ログローテーション設定ファイル
    describe file('/etc/logrotate.d/syslog') do
      it { should contain 'ldap' }
    end


    

以上

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

重要なことだけに注力する - 書評 - 『エッセンシャル思考 最少の時間で成果を最大にする』

  • 公開日:2015年01月01日
  • 最終更新日:2015年07月31日

2015年の1冊目に読んだ本です。いきなり大当たりでした。
僕が2014年に心がけて取り組んできたことに間違いはなかった。そう再確認できた本でもあります。

エッセンシャル思考とは


重要なことだけに注力する考え方。

エッセンシャル思考の重要な考え方


  • もしたったひとつしかできないとしたら、自分は今、何をやるのか。
  • 何かを選ぶことは、何かを捨てること。
  • 最終的にどこにたどりつきたいのかを明確にする。
  • 大きな進歩を望むなら、日々何度も繰り返す小さな行動にこそ着目すべき。小さな改善を地道に繰り返すことが、大きな変化につながる。

エッセンシャル思考の実例


  • ビル・ゲイツは年に2回ほど、仕事を離れて「考える週」を作っていた。
  • 遊びは無駄でない。人間の様々な面に良い影響を及ぼすことがわかっている。
  • 睡眠が重要と認識され始めている。たっぷり眠れば生産性があがり、創造性がアップする。

身に付けるべき習慣


エッセンシャル思考でも重要なのは習慣になります。身に付けるべき習慣は以下の通り。

  • いっぺんにやろうとせず、小さな成功を積み重ねる。本当に大切なところを着実に積み上げる。
  • 大きな進歩を望むなら、日々何度も繰り返す小さな行動にこそ着目すべき。小さな改善を地道に繰り返すことが、大きな変化につながる。
  • 寝る前や朝起きた時に何を考えるかということも習慣化する。
  • 重要なことをやりとげるために日頃から正しい習慣を取り入れる。そうすれば、偉大な結果は自然とついてくる。
  • 本質的な目標に向かう行動を習慣づけてしまう。

その他の重要な考え方


  • 今何が重要かを考える。
  • 本質的な目標のためによけいなものを削ぎ落とす生き方を心がける。より少なく、しかしより良く。

まとめ


エッセンシャルを日本語に訳すと、「本質的な」「絶対必要な」となります。
何が大事で何が重要でないと判断できる人は、一定数存在すると思います。
しかし、物事に優先順位をつけ、さらに重要なことだけに注力できる人はほとんどいないと思います。それだけ今の世の中は動きが激しいし、情報が飛び交っています。不惑は頑固とされ、知らぬことは情弱と蔑まれます。

しかし、成果を残したいなら、自分のやることに集中しないといけません。残念ながら、人は万能ではありません。
エッセンシャル思考を身につけて、自分のすべきことに注力すれば、きっと満足のいく人生が送れるのではないでしょうか。

他の読書に関する記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年の挨拶 今年の目標

あけましておめでとうございます。
いつもブログを読んでいただき、ありがとうございます。
2015年もダメ男のブログを引き続きよろしくおねがいします。

さて、さっそくですが、今年の目標をご紹介します。

2015年目標

  • ブログの更新数を去年より増やします。2014は110だったので、120以上を目標にします。
  • 本を100冊以上読破します。毎年だいたい50 - 60冊くらいなので、今年は意識して数を増やします。
  • サービスを育てる技術(グロースハック、マーケティング、分析、統計)を実践と学習で身につけます。
  • 経営に踏み込んだ学習を本格的に開始します。今年は簿記の学習(2級まで)をします。
  • 与えられる側にいるだけでなく、与える側になります。イベントを開催します。プログラミングの学習イベントの開催を考えています。

2015年目標について

いつもはかなり抽象的な目標を立てているのですが、今年は具体的にしました。
ちょっと頑張れば手に届く内容です。んー、去年一年でだいぶ自分を理解し、成長できたから目標を立てやすかったです。

2015年の過ごし方

去年は色々と慌ただしい年だったのですが、今年は腰を落ち着けて、大人の生活をしていきたいと思います。
そして、自分を成長させながらも、周囲の人達(世の中)に恩返しをしていける年にしたいです。

それではみなさん、今年もよろしくお願いします。

ps : そろそろ結婚もしたいなあ…


山情報&登山SNSアプリ「マウンテンチャンネル」を公開しました。

マウンテンチャンネル公式サイト

Android app on Google Play

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...