soy-curd's blog

へぼプログラマーです [https://twitter.com/soycurd1]

トヨタ生産方式読んだ

トヨタ生産方式読んだ。サブタイトルに『脱規模の経営をめざして』と書いてあるが、読了後に脱規模なんて単語本文にあったか?という気分になった。目次にもその文言がなく、謎。

内容は二つで、『ジャスト・イン・タイム』と『自働化』が生産の肝であるだという話だった。ジャスト・イン・タイムのほうは、「大量生産だと工程毎に無駄(在庫)が出る」-> 「無駄がでないように必要な分だけ必要なタイミングで作る」ということで、それを実現する方法がカンバン。カンバンを使うと、後工程は前工程に必要な部品を必要な時に要求し、それをもらうことができる。 アジャイルサムライで言うと、WIP(仕掛中のタスク)は4つまでで、イテレーションのない開発をカンバン方式として紹介しているが、これは結局、タスクをどこかで溜めてしまうと、後回しになったり、結局リリースされなかったりすることを防ぐためなのだろう。そこが在庫とのアナロジーになっている。

自働化については「ポカヨケ」とかの仕組みと一緒に説明されていて、機械・ライン・チームは、故障すると自動で止まる。変な部品を後工程に流したりして、後で人手で直す、みたいなことを防ぐためだ。そのために、そもそも人が、ミスをしないように機械やラインを設計したりもする。これについてはCIの考え方が対応する気がする。タスクを回していくなかで、常に高品質でバグのないプロダクトを保つため、こまめにテストし、デプロイする。

本を読んで、脱規模という単語自体は見当たらないが、そのような考え自体はいたるところで示唆される。大量生産できない市場環境の中で、いかに無駄を省いて(真の)生産性を上げるかについて繰り返し語られるからだ。微視的な効率が、巨視的なレベルでの効率を築いていくことに対する、こだわりが伝わってくる。

GitHubのエクステンションサービスでZenHubというものがあって、これがあるとGitHubのissueをカンバンっぽくすることができたり、バーンダウンチャートを見れたりする。これを見るだけでアジャイルしてる感があるので満足度があるのだけれど、何も考えずこれだけ使ってもただ雰囲気だけアジャイルっぽいことをしてるだけなのでたぶん意味がなかった。ただ、今回トヨタ生産方式を読んで思想的なものを学ぶことができたので、今後はよりアジャイルっぽい状態でアジャイルできると思う。

トヨタ生産方式――脱規模の経営をめざして

トヨタ生産方式――脱規模の経営をめざして

Ubuntu16.04でgolangのechoを使う

まとめ

Ubuntu16.04 LTSはデフォルトでインストールされるgolangのバージョンが1.6のため、最新のechoを実行することができないので、golangのバージョンを上げる必要がある。

事象

echoがgolang1.7から入ったcontextパッケージに依存しているため、インストールに失敗する。

対処

# apt-getのリポジトリ更新
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go # -> 1.8が入る
go get -u github.com/labstack/echo

以上です。

Ubuntu16.04でgolangの開発環境Goglandのインストール

インストーラーの入手

https://www.jetbrains.com/go/download/#section=linux

JetBrainsのサイトからGoglandをダウンロードします。2017年6月時点では、EAP 9, 171.4694.35が入手できました。

インストー

tarで固められたファイルが手に入るので、解凍してください。Ubuntu16.04の場合、ダブルクリックでArchive Managerが起動しますので、Extractを実行して解凍してください。

その後、terminalを立ち上げ、解凍したディレクトリに入ってから、gogland.shを実行します。

cd {YourLikeDir}/cd Gogland-171.4694.35/bin/
./gogland.sh

その後、GUIの画面が立ち上がります。今回は初めてのインストールでしたので、Do not import settingsを選択しました。

f:id:soy-curd:20170610205622p:plain

これでインストールは完了です。

golangの設定

golangをインストールしていない場合は、まずそこから始めましょう。

sudo apt-get install golang

# bashにgopathの設定
mkdir ~/{YourLikeDir}/go
echo "export GOPATH=$HOME/Project/go" >> ~/.bashrc
echo "export PATH=$GOPATH/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

これで設定は完了です。

Goglandを使ってみる

File > New > Projectから、新規プロジェクトを作成します。 その後、Projectファイルを右クリックして、New > GoFileでgolangのソースファイルを作成します。

f:id:soy-curd:20170610213320p:plain

そして、Configure GOPATHから、GoglandにもGOPATHの設定を行います。

次に、Run > Edit configuretionsから、実行環境の設定を行います。 左上の+を押し、Go Applicationを選択してください。その後、Fileに先ほど作ったファイルを設定します。

f:id:soy-curd:20170610213045p:plain

あとは、Runを押して下のコンソールに実行結果が表示されたらOKです。

みんなのGo言語[現場で使える実践テクニック]

みんなのGo言語[現場で使える実践テクニック]

0からwindows10にPython3.6環境を構築する方法(2017/6版)

mac OSXやlinuxにはデフォルトでPythonがインストールされていますが、windowsにはインストールされていません。 今回はPythonを初めて使うwindowsユーザーがお試しですぐ触れるよう、 windowsで0からPython3.6の環境を構築する方法をまとめてみました。

環境

1. Anacondaのインストー

いきなり、判断が難しいところなのですが、windows 10ではAnacondaを用いてPythonをインストールするのが 最も手軽だという結論に至りました。

Anacondaは数値解析や科学計算のライブラリを含んだ形で配布されているPython環境なのですが、 非常に手軽にPythonを実行することができます。(環境変数の設定さえ必要ありません)

また、windowsにおいてハマるポイントとして、C言語のライブラリを含んだパッケージの導入があるかと思われます。 numpy、matplotlibなどを特にハマらずにインストールするためには、Anacondaの導入が手っ取り早いです。 (Django等を使ってwebサーバを建てたい、という方には関係ないですが)

https://www.continuum.io/downloads

リンク先にPython3.6のインストーラーがありますので、そこからダウンロードしてください。 f:id:soy-curd:20170603230920p:plain

ダウンロードが終わったら、インストーラーを実行してください。 何個か選択肢がありますが、 特にこだわりがなければ、すべてNextを押せば問題ありません。

f:id:soy-curd:20170603231146p:plain

2. Pythonの実行

Anacondaのインストールに成功したら、すぐにPythonを使うことができます。 おそらくスタートメニューには、以下のようなものがインストールされているはずです。

f:id:soy-curd:20170603231855p:plain

この中からAnaconda Promptを選んで、起動してください。

すると、以下のようにプロンプトが立ち上がるはずです。

f:id:soy-curd:20170603232350p:plain

あとはプロンプト内でpythonと入力してください。Pythonが立ち上がります。

それでは、試しになにか実行してみましょう。

f:id:soy-curd:20170604000230p:plain

Pythonが無事に動いたことが確認できました。

3. ライブラリを利用する

今回はAnacondaを利用してPythonをインストールしたので、そのままの状態で、すでにたくさんのライブラリを使うことができます。

どのようなライブラリがインストールされているかは、pip freezeというコマンドで確認することができます。

試しにこの中に入っているmatplotlibという作図ライブラリを使用してみましょう。

まずは先ほどと同じように、pythonを起動してください。 そして、

import matplotlib.pyplot as plt
import random
xs = range(100)
ys = [random.randint(0, x) for x in xs]
plt.plot(xs, ys)
plt.show()

のように、実行してみてください。すると、

f:id:soy-curd:20170603234058p:plain

上記のような画像が表示されたかと思います。このように、Pythonを使うことでグラフの描画も簡単に行うことができます。

4. おわりに

以上、windowsで0からPythonの環境を構築する方法を示しました。 このように、Pythonは非常に簡単に始めることができますので、 windowsユーザーの方も、ぜひ一度最近はやりのPythonを触ってみてください。

みんなのPython 第4版

みんなのPython 第4版

実践力を身につける Pythonの教科書

実践力を身につける Pythonの教科書

next.jsとnuxt.jsとAngular Universalを触ってみた

server side rendering(ssr)を試したかったので、ssrを比較的簡易に実行できると思われるUniversal Javascriptに対応しているライブラリを簡単に比較してみた。

実行環境

  • MacBook Air (13-inch, Mid 2012)
  • node v7.9.0
  • Typescript 2.2.0

next.js

React用のUniversal Javascriptライブラリ。ここでは、https://github.com/zeit/next.js/tree/master/examples/hello-world を試す。

git clone https://github.com/zeit/next.js.git 
cd next.js/examples/hello-world/ 
npm install
./node_modules/next/dist/bin/next build
./node_modules/next/dist/bin/next start

ファイル

index.js

import Link from 'next/link'
export default () => (
  <div>Hello World. <Link href='/about'><a>About</a></Link></div>
)

about.js

export default () => (
  <div>About us</div>
)

転送量

251KB

f:id:soy-curd:20170422155454p:plain

nuxt.js

Vue用のUniversal Javascriptライブラリ。ここでは、 https://github.com/nuxt/nuxt.js/tree/master/examples/hello-world を試す。

git clone https://github.com/nuxt/nuxt.js 
cd nuxt.js/examples/hello-world 
npm install 
node_modules/nuxt/bin/nuxt build 
node_modules/nuxt/bin/nuxt start

ファイル

index.vue

<template>
  <div>
    <h1>Welcome!</h1>
    <nuxt-link to="/about">About page</nuxt-link>
  </div>
</template>

about.vue

<template>
  <div>
    <p>Hi from {{ name }}</p>
    <nuxt-link to="/">Home page</nuxt-link>
  </div>
</template>

<script>
export default {
  asyncData ({ req }) {
    return {
      name: req ? 'server' : 'client'
    }
  }
}
</script>

転送量

56.1KB

f:id:soy-curd:20170422155605p:plain

Angular Universal

Angular用のUniversal Javascriptライブラリ。まだ公式にangular-cliとAngular Universalが対応していないようなので、ここでは、 universal-cliを用いてサンプルアプリを作成する。

npm install -g universal-cli rxjs
ung new angular-universal 
cd angular-universal
ung build --prod
ung serve --prod

ファイル

(ungコマンドによる自動生成ファイル。下記以外も多数生成される)

app.component.html

<h1>
  {{title}}
</h1>

app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app works!';
}

転送量

215KB (jsはgzip済)

f:id:soy-curd:20170423011622p:plain

印象

nuxt.jsのファイルサイズの小ささが素晴らしい(ただし、謎に読み込んでいるindex付きのbundleが何をしているか不明なので後で調べたい)。いずれのライブラリも、ssrを意識しなくても普通にレンダリングまで可能なのが凄い。例えばnuxt.jsはexpressに依存しているけれど、hello worldのみだと一行もサーバサイド専用のコードが存在しない。(nuxt-linkというvue-routerに類似したタグが使われているが、これでサーバ側でのルーティングとクライアント側でのルーティングを一元管理しているようだ)。

時間があったらredux or vuex周りとの連携も試したい。

ubuntu16.04(xenial)にelixirをインストール

公式ドキュメントを参照すれば良い。 http://elixir-lang.org/install.html

Erlang & Elixirをインストール

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install esl-erlang
sudo apt-get install elixir

hello world

iex
>> IO.puts("hello world")

hello worldできた。

Typescriptでサーバサイドとフロントをどっちも書いてる時にいらいらする点

今、サーバ→node & Typescript, フロント→Angular & Typescriptみたいな構成でコードを書いているのだけれど、 Typescriptのコンパイル結果をサーバ側をES6, フロントをES5で吐かせているせいでその差でいらつくことが多い。 主にfind。 サーバ側ではhoge.find(y => y.id === 1)みたいなかんじで一意な値を取ってきてるのだけれど、findはES5では使えないので、hoge.map(y => y.id).indexOf(1)みたいにしてインデックス取るか、hoge.filter(y => y.id === 1)[0]みたいに書いている。インデックスアクセス歯がゆい。値がほしいだけなのにその過程で-1とか配列長さチェックとかするのも辛い。幸せをください。 (多段コンパイルでTypescript → Babelが正解なのか...?)