時間がないことを言い訳にしないために続けていること-改良

以前にこんな記事を投稿しました。

jesus9387.hatenablog.com

これについてもう少し考えていろいろ変えてみました。

まず最初に

まず、自分の今やりたいこと、達成したいことについてあげてみたいと思います。

  • 公開したいサービスがあり、その開発
  • ドウェインジョンソンみたいな体になるための筋トレ
  • 仕事
  • プライベートの時間にどこかに出かけたりしたい
  • ビジネス書を読んで自分の人生に役立てたい
  • 技術ブログを書く

どれも外せない今やりたいことです。

なので全てを達成するための時間をなんとか確保してひとつひとつを効率的に最小の時間で最大の成果を出したいと考えています。 なのでどうすればいいかを常に考えています

そこで自分で考えてやってみた結果よかったものだけを共有したいと思います。

迷うことは疲れに繋がり効率が悪くなる

最初に紹介した記事にも書いたように、人間は迷うことで疲れるようです。 ジョブズや、ザッカーバーグが毎日同じ服をきているのもこの考えを実行しているのだと思います。

そこで自分は今日やるべきことを最初に決めてしまってあとは淡々とこなすようします。 行きの電車の中、もしくは会社についたらまずやることはタスクの整理です。

自分はTrelloにまとめています。

写真は家での作業のものです。 業務のは仕事の内容がかかれていまので載せれません。 f:id:jesus9387:20171201224804p:plain

Trelloはタスクが整理しやすくとてもいいツールですが、詳細な説明がトップ画面に表示されないし、カードを動かすのが面倒だったりなどのデメリットもあります。

なので現在は「esa.io」を試験的に導入しています。

esa.io

デザインがよくでRedmineより使ってて気持ちがいいです。

また、優先度の高いものを上から順にツールに並べていくことがかなり重要だと考えています。

エディタや、IDEはショートカットを覚える

自分は業務ではAndroidアプリ開発がメインなので「Android Studio」をよく使います。 また、個人開発では「Xcode」「Atom」がメインでよく使います。

このエディタや、IDEには必ず「Vimキーバインド」に設定しています。

github.com

github.com

atom.io

理由はだいたいのIDEやエディタにはVimプラグインがあり、すべてのツールで同じキーバインドが使えるからです。

こんなこというとVimが好きな人からすると怒られそうですが、Vimにはこだわりはほとんどありません。 でもVimのショートカットはすばらしく慣れるとかなり高速でコードを書くことができます。 矢印キーを連打する必要はありません。

ですので何かしらのショートカットを覚えて慣れておくとかなり効率的にコードがかけると思います。 自分も以前はJetbrain社のIDEのショートカットを完璧に使いこなしている方もみましたし、全てのエディタでEmacsプラグインで書いていたり、何でもかんでもVimで無理やり編集している方などみたことがあります。

これは人それぞれ好きなものを一つ選んでおくことをオススメします。

隙間時間にいつもなにかしらできるようにしておく

電車の中や休み時間、トイレの中など細切れの時間は生活している中でたくさんあります。 なので自分はその時間を無駄にしないためにKindleを常に持ち歩いたり、スマホで情報収集したりするようにしています。

今の時代だいたいのことはスマホでできますし、常に持ち歩いているでしょう。 ですのでで隙間時間でスマホでいろんなことをしています。

また、電車の中で座れたときや、急にコードを書きたくなったりしたときのためにノートパソコンも常に持ち歩いています。

(ひらぴーほしい)

しっかり寝る

睡眠不足になると集中力が続かなくなり作業の効率が悪くなるのでしっかり長めに寝ることにしています。 健康のためにしっかり寝ましょう!!

しっかり休む

一週間のうちでコードを書かない日が1日はあった方がいいと思います。 ですので自分は全く書かない日を作る、もしくは土日にもコード書きたくなったら平日で業務後にPCを開かない日も作っています。

その方が絶対的にいいものが作れる気がします。健康第一です。

PCを開かない日は筋トレをしたり、出かけたりしています。

最後に

他にも疲れを取るために工夫していることもいくつかありますが、書ききれないのでここまでにしておきます。

誰かの参考になればいいな〜

筋肉.swiftに参加してきました!!

参加してきました!

https://kinniku-swift.connpass.com/event/69438/

kinniku-swift.connpass.com

f:id:jesus9387:20171201000818j:plain:w300:h600

勉強会公式アプリがある

この勉強会には公式のアプリケーションが開発されています。

筋肉.swift

筋肉.swift

  • Kei Fujikawa
  • Social Networking
  • Free

この取り組みは「iosdc」などのでかいイベント以外なかなかないのですごいなーって思いました。

お手伝い

今回は受付のお手伝いをさせていただきました。

f:id:jesus9387:20171201000252j:plain:w300:h600

このイベントではプロテインが配られます。

f:id:jesus9387:20171201000948j:plain:w300:h600

ですが、受付をしているのでプロテインで乾杯ができないので先にプロテインをいただき飲みながら受付をしていましたwww (電動シェイカーでプロテインを飲んでいた人が自分です。)

食事

食事の「筋肉食堂」のケータリングでした。

f:id:jesus9387:20171201000348j:plain:w300:h600

自分は初めてたべたけど美味しかったな〜、今度いってみよう。

ちゃんとSwiftも勉強できた!

Swiftの知識の共有や、個人開発についてのコツなどの共有などもありました。

個人的にすごく勉強になったのはこちら

speakerdeck.com

自分も個人開発を絶賛行なっておりますが、個人開発をしている人はみんな「ない」ものがすごく多いです。 その中でどれだけ大きな結果を出せるのかということ常にいろいろ考えていたところなのですごく勉強になりました。

自分も上記に似たような記事を書いたのでよければどうぞ

jesus9387.hatenablog.com

プロテイン飲みすぎて次の日お腹くだした

これは内緒です。 マイプロテインのいろんな味のプロテイン飲めたのでよかったwww 次買うならストロベリーかな〜

第2回もぜひ開催してほしいです!!!

それまでにもっとでかくなっておこう。

f:id:jesus9387:20171201001137j:plain:w500:h400

プロを目指す人のためのRuby入門- 前半

以前に下記の記事に書いた通り写経を進めています jesus9387.hatenablog.com

5章まで解説を読むのと、写経が済んだので一旦ここで記事にしておきます。

自分の技術レベル

自分はAndroidエンジニアで、 プログラミングを初めてから今までほとんどJavaを使って日々業務を行なっています。 個人の趣味で、Swiftや、React、それこそRubyを触っていますが、やはり一番知識があるのはJavaだと思います。

本書では「JavaだとこうだけどRubyならこうかける」みたいな比較があり、個人的にかなり読みやすいです。

今転職を考えていて、Rubyを使いたいと思っている方ならまさしく「買い」な本です。 これを一通りやった後に「Railsチュートリアル」やってもよさそう。

ここまで読んでの感想

ここまで読んでの感想を書いていきたいと思います

「この書き方は混乱を招くのでやめておいた方がいいです。」などのやらない方がいいことも同時に教えてくれる

「この書き方は一般的には使わない」などの一般的ではない書き方ははっきり教えてくれるところが他の技術書にはないのでそこはすごくありがたいなと思いました。

Javaエンジニア、もしくは他言語のエンジニアからRubyに入門すると「なにが正解の書き方なのか」という観点が理解できません。 これをコードレビューとかで学んでいくことですが、Rubyを初めて入門するときにこれがあるとかなりありがたいとおもいます。

Javaと比較しながら教えてくれる

これは上にも「自分の技術レベル」のとこで買いたことと同じですが、かなりありがたかったです。

本書を読みながら個人的に書いたメモ

自分の書いたメモもここの残しておきます。 (誤字脱字がないか確認するときに読み返しながら復習するためです。)

変なことや、Rubyを学んでみての感想のところどころに書いていますのでよろしければどうぞ

例題の問題を写経したソースコードは下記におきました

github.com

メモ

ifの条件について

Rubyではfalseもしくはnilのときに偽を返す

これによってnilチェックはしなくてもよくなる

unlessについて

偽のときにかくやつ(これはJavaや、Swiftにはない構文なのでパッとわからないの注意)

status = 'error'

if status != 'ok'
  #エラー処理
end

上記の処理をRubyでは下記のように書ける

status = 'error'

unless status == `ok`
  # エラー処理
end

ただし、if文のelsifのような構文はないので注意

三項演算子

n = 11

n > 10 ? '10より大きい' : '10以下'

スッキリかけることはできるが、複雑な条件式だったら 逆に読みづらくなるので注意が必要

デフォルト値付き引数

def greeting(country = 'japan')
  if country == 'japan'
    'こんにちわ'
  else
    'hello'
  end
end

greeting # => こんにちわ
greeting('us') # => hello

これもRuby特有かな? これも初めての構文で便利だな〜と思う

?で終わるメソッド

Rubyでは?や!で終わるメソッドがいくつか用意されている これがつくメソッドは全て真偽値を返すメソッド

# 空かどうか返すメソッド

.empty? # => true
'abc'.empty? # => false

他にもinclude?nil?などいろいろ

?で終わるメソッドは自分で作成することも可能で 真偽値を返すメソッドであれば?を最後につけたメソッドを作成してもよいと思われる

!で終わるメソッド

!は「使用するには注意が必要」という意味

# 文字列を大文字にするメソッド
upcase # => 大文字にした新しい文字列を返す
upcase! # => 与えられた文字列を大文字に変換する

例

a = 'Ruby'

a.upcase # => RUBY
a # => Ruby

a.upcase! # => RUBY
a # => RUBY

このようなメソッドを「破壊的メソッド」と呼ばれる

その他基礎知識

  • ガーベジコレクション(GC)がある言語
  • エイリアスメソッド

    • まったく同じ処理をするメソッドに複数の名前がついているメソッドのこと(例:lengthsize)
  • requireloadrequire_relativeについて

    • require:現在実行しているファイルからの相対パスもしくは、絶対パスで指定する
    • loadrequireは1回しかライブラリを読み込まないが、loadを使いと毎回無条件にファイルを読み込むことができるようになる
    • require_relative:自分のファイルが存在するファイルが起点になる

テストしてみる

Fizz Buzzのサンプルソールを使ってテストを実行する

def fizz_buzz(n)
    if n % 15 == 0
        'Fizz Buzz'
    elsif n % 3 == 0
        'Fizz'
    elsif n % 5 == 0
        'Buzz'
    else
        n.to_s
    end

end

require 'minitest/autorun'

class FizzBuzzTest < Minitest::Test
    def test_fizz_buzz
        assert_equal '1', fizz_buzz(1)
        assert_equal '2', fizz_buzz(2)
        assert_equal 'Fizz', fizz_buzz(3)
        assert_equal '4', fizz_buzz(4)
        assert_equal 'Buzz', fizz_buzz(5)
        assert_equal 'Fizz', fizz_buzz(6)
        assert_equal 'Fizz Buzz', fizz_buzz(15)
    end
end

テストの種類は下記になる

assert_equal b,a # => aとbが等しかったらパスする

assert a # => aが真であればパスする

refuse a # => aが偽であればパスする

Rubyでの配列

  • 型の違う要素を混在させることが可能
a = [1, "test1", 2, "test3", 3]
  • 存在しない要素を指定したときにエラーではなくnilが返る
a = ["test1","test2","test3"]

a[100] #=> nil
  • 元の大きさよりも大きい添え字を指定すると間はnilで埋められる
a = [1, 2]

a[4] = 50

a #=> [1, 2, nil, 50]
  • << を使うと配列の最後に要素を追加することができる
a = [1, 2, 3]

a << 90

a #=> [1, 2, 3, 90]

ブロック

Rubyではfor文はかかない(まじか、、、すごい) Rubyでは配列に対して繰り返しを命令する

numberArray = [1, 2, 3, 4, 5]
sum = 0

numberArray.each do |n|
  sum += n
end

sum #=> 15
  • もしnが不要な場合は省略可能

  • do ~ end{}に置き換えることが可能

numberArray = [1, 2, 3, 4, 5]
sum = 0

numberArray.each { |n|
  sum += n
}

sum #=> 15

ここの使い分けは一般的に下記のようにするらしい

1. 改行含む長いブロックの場合は`do ~ end`でかく
2. 一行で書くような短い処理の場合は`{}`でかく

map/collect

ブロックの戻り値の配列の新しい要素になる場合はmapを使う (Javaではhashmapを連想してしまうが、Rubyでは違うらしい)

numberArray = [1, 2, 3]

new_numberArray = []

numberArray.each{ |n| new_numberArray << n * 10}

new_numberArray #=> [10, 20, 30]

上記のようなコードはmapを使うとよりスッキリかけるようになる

numberArray = [1, 2, 3]

new_numberArray = numberArray.each{|n| n * 10}

=> 他にも便利なメソッドがいろいろ用意されているのでその都度読むことにする(Rubyってすげーな) もうJavaやりたくねーー

2つの配列を連結する

Rubyでは二つの配列を連結するときはconcatもしくは+を使用する

この二つの違いは破壊的かどうかということ

a = [1, 4]
b = [2, 3]

a.concat(b)

a #=> [1, 4, 2, 4] 元の変数を変更する破壊的メソッド

c = [1, 4]
d = [2, 3]

c + d #=> [1, 4, 2, 3]

c #=> [1, 4]
d #=> [2, 3]

基本的にconcatはバグを生みやすいので使わない方がいいとのこと

ハッシュ

Javaでいうhashmapのこと

country = {'japan' => 'yen', 'us' => 'doller'}
country['japan'] #=> 'yen'
  • すでにキーが存在している場合は上書きされる
  • 存在しないキーを指定するとnilが返る

ハッシュを使った繰り返し

ブロックが2つになることに注意 ブロックを一つにするとキーと値が配列になるので注意

countries = {'japan' => 'yen', 'us' => 'doller', 'india' => 'rupee'}

countries.each do |key, n|
  puts "#{key} : #{n}"
end

# => japan : yen
# => us : doller
# => india : rupee

シンボル

使い所:名前を識別できるようにしたが、必ずしも文字列である必要がないときに場合

  • ハッシュのキーはシンボルを使った方がいい
countries = {:japan => 'yen', :us => 'doller', :india => 'rupee'}

countries[:japan] # => yen
  • ハッシュのキーにシンボルと文字列を混在させることはできるが、無用な混乱を招くので統一したほうがいい

「プロを目指すためのRuby入門」を1章から進めています

Kindle版を購入し、1章から進めています。

なぜ買ったか。

自分はRubyを仕事で使ったことないですが、いくつかサンプルアプリケーションを作成したことがあります

例えば下記のようなものです。

  • Cookpadでレシピを検索して返すLinebot

github.com

  • 1日のコミット回数をTwitterに投稿するアプリケーション github.com

これからRubyの仕事に就くことは今は考えていませんが、 自分の将来のキャリアパスを考えたときに一度は深めに触っておいた方がいいだろうと思い 今回の購入に至りました。

また、自分はAndroidエンジニアで基本的にフロントエンドの開発が主な業務ですが、サーバーチームとうまく連携して業務を進めていく上でサーバーサイドの知識もあったほうが、スムーズに仕事が進むのではないかとも考えています。

これから写経を進めていきます!!!

今日(2017/11/25)は連休3日目です。 連休1日目と2日目は十分遊び尽くしたので3日目と4日目はしっかりプログラムを書いていこうかなと思います。 随時このブログで書評を書いていきますのでよければ読者登録お願いいたします。

リハビリmemoのブログがすごく勉強になった話

Twitterでたまたま記事を見つけ拝見したところ、筋肉についてかなり勉強になるトピックがたくさんかかれていたので今回は個人的なメモとして残しておきます。

詳しくは下記のブログをご覧ください。このブログの運営者さんに感謝申し上げたいと思います

www.rehabilimemo.com

筋肉発達のメカニズム

  • 筋肉は分解量と合成量が釣り合った状態が今の筋肉の量
  • 筋トレ後48時間は筋肉の合成がよく働くのでこの間にたくさんのタンパク質を摂取する必要がある

筋トレ効果を最大にするタンパク質の摂取量

  • 一回のタンパク質の摂取量は年齢や体重、トレーニング強度によって変わるがベストな摂取量が存在している
筋トレに励む20代の体重70kgの男性を例にとると、通常の1食分のタンパク質摂取量は17〜20g程度で良いですが、ジムで全身性のレジスタンストレーニングを行った24時間〜48時間後までは1食分のタンパク質摂取量を通常の+10gである30g以上を摂取したほうが良いということになります。

筋トレ効果を最大にするタンパク質タイミング

  • 筋トレ前より筋トレ後の方が吸収がよくなるので飲むなら筋トレ後
  • トレーニング後から一時間以内がタンパク質摂取のゴールデンタイム
  • タンパク質は三時間毎の摂取がベスト
  • 3食きっちりプロテインを摂取することが大事

筋トレ効果を最大にする就寝前プロテイン

  • 就寝前には一般的な摂取量より多めにタンパク質を摂取することが大事
2008年から始まった就寝前のタンパク質摂取の研究により、高用量のタンパク質を摂取することによって、就寝時でも筋タンパク質の合成作用を刺激できることがわかりました。そしてトレーニングとともに就寝前のタンパク質摂取を長期に継続することで筋肉を効率的に増加させることが明らかになっているのです

就寝前にタンパク質を摂取する場合トレーニングは夕方行うと効果的

「夕方にトレーニングを行い、その後の夕食、就寝前、翌日の朝食、昼食に適切なタンパク質の摂取量を摂取することがトレーニング効果を最大化させる」

筋トレ効果を最大にする運動強度

  • トレーニング効果を最大にするのは「総負荷量(運動強度✖️運動回数)」
  • 初心者は低強度✖️低回数からはじめて徐々に運動回数を増やして総負荷をアップすること

最後に

他にもいろいろ勉強になることがいろいろ書かれていました。 筋トレをしている方なら必読だと思います。

www.rehabilimemo.com

React+babel+webpackで動かすまでのチュートリアル

React+webpack+babelを使ったチュートリアルを書いていきます。 Reactだけでサクッと「Hello world」を出して試したい方は 下記の公式サイトを参考にするとすぐに実装できます。

https://reactjs.org/docs/hello-world.html

準備

npmコマンドが使えるように開発環境を準備してください。

その作業用ディレクトリを作成して移動する。

mkdir hellowold
cd hellowold

必要なファイルのセットアップ

  • プロジェクトの作成
npm init -y
mkdir src dist
  • babelのインストール
npm i -D babel-core babel-loader babel-preset-es2015 babel-preset-react
  • babel設定ファイルの作成

.babelrc

{
    "presets": [
        "es2015", "react"
    ]
}
  • webpackのインストール
npm i -D webpack
  • webpack.config.jsとdevelopment.jsに準備

webpack.config.js

require('babel-core/register');
module.exports = require('./development');

development.js

import path from 'path'

const src  = path.resolve(__dirname, 'src')
const dist = path.resolve(__dirname, 'dist')

export default {
  entry: src + '/index.jsx',

  output: {
    path: dist,
    filename: 'bundle.js'
  },

  module: {
    loaders: [
      {
        test: /\.jsx$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      }
    ]
  },

  resolve: {
    extensions: ['.js', '.jsx']
  },
  plugins: [
  ]
}
  • Reactパッケージのインストール
npm i -S react react-dom
  • 最初に呼ばれるindex.jsの作成

src/index.jsx

import React from 'react';
import {render} from 'react-dom';

class App extends React.Component {
  render () {
    return <p> Hello React!</p>;
  }
}

render(<App/>, document.getElementById('app'));
  • 実行してエラーがないか確認
./node_modules/.bin/webpack

webpack-dev-serverをインストール

webpack-dev-serverをインストールすることで自動コンパイル、自動リロード画面リロードができるようになるのでいれておきましょう。

npm i -D webpack-dev-server html-webpack-plugin
  • development.jsを変数

//この行を追加とかかれているものを追記する

import path from 'path'
import HtmlWebpackPlugin from 'html-webpack-plugin'//この行を追加
const src  = path.resolve(__dirname, 'src')
const dist = path.resolve(__dirname, 'dist')

export default {
  entry: src + '/index.jsx',

  output: {
    path: dist,
    filename: 'bundle.js'
  },

  module: {
    loaders: [
      {
        test: /\.jsx$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      }
    ]
  },

  resolve: {
    extensions: ['.js', '.jsx']
  },
  plugins: [
          //この行を追加
    new HtmlWebpackPlugin({
      template: src + '/index.html',
      filename: 'index.html'
    })
  ]
}

  • index.htmlを作成

Reactで画面を表示するhtmlファイルを作成する

src/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>React Test</title>
  </head>
  <body>
    <div id="app" />
  </body>
</html>
  • webpack-dev-serverを起動する
./node_modules/.bin/webpack-dev-server
$ ./node_modules/.bin/webpack-dev-server 

Project is running at http://localhost:8080/
webpack output is served from /
Hash: 7e62cd70065fafed6306
Version: webpack 3.8.1
Time: 1099ms
  • 起動する

ブラウザでhttp://localhost:8080/にアクセスすると下記の画面が表示されます。

f:id:jesus9387:20171116153027p:plain

便利にするために

実行するたびに./node_modules/.bin/webpack-dev-serverとうつのはめんどくさいのでpackage.jsonを編集しておきましょう

package.json

"scripts": {
  "start": "webpack-dev-server"
}

するとnpm startで起動できるようになります。

よければ

ツイッターのフォローお願いします

twitter.com

寝ても寝ても疲れがとれない人のための スッキリした朝に変わる睡眠の本-書評

一冊読み終わったので書評として残しておきます

この本を読んだ理由

昔から自分は偏頭痛持ちでその原因が睡眠にも関係があるのではないかと思ったのと 一回の睡眠で最大限の休息を取るノウハウ的なものを習得したくてこの本を読み始めました。

疲れやすくなった原因は体力の衰え

年をとると「疲れやすくなった」と感じる方は多いのですが、これは加齢による体力の低下に加え、疲労回復物質FRの反応性が低くなっていくことも原因の1つです

正直自分はまだこれは感じていません。 (筋トレをしているからなのでは!??)

ですがだんだん衰えていくようです。

寝始めの3時間が大事

寝始めの3時間が重要なのであり、「午後10時~午前2時」という時間帯は関係ないのです。

10時から2時は「お肌のゴールデンタイム」のようなことが言われていますが、これはあまり関係ないと書かれていました。

寝始めの3時間で大量の回復や、成長因子のようなものがよく分泌されるようです。

音で起きることは人間にとってかなりのストレス

実は音で起きることはかなりストレスがかかるようです。

ですのでベストな起き方は[光で起きること]らしいです。

カーテンを少し開けておくことです。すると、朝になったらだんだんカーテンの隙間から光が入ってくるので、自然な目覚めが期待できます。

最近自分はこれを実践しています。 家の電気を消したらカーテンを開けて寝ています。

すると朝になるといい感じに光が入り目覚めがよくなっていることを実感しています。

また、

「朝起きたら、たっぷり光を浴びる」  これを続けることでスッキリ気持ちよく起きられるだけでなく、夜の快眠も手にいれることができるのです。

だそうです。

理由とかはこの本に書かれていますのでよければこちらからどうぞ

https://www.amazon.co.jp/gp/product/4569835880/ref=as_li_tl?ie=UTF8&tag=jesus01-22&camp=247&creative=1211&linkCode=as2&creativeASIN=4569835880&linkId=a96d48b31602587810c4c9c27b3eda3d

よろしければ

Twitterのフォローよろしくお願いします。

twitter.com