SHOYAN BLOG

I am a pragmatic programmer.

幸せな子育てとエンジニアライフ

この記事は子育てプログラマ・ITエンジニア・Webデザイナー Advent Calendar 2015 7日目の記事です。

我が家は僕と妻、4歳の長男と1歳の長女の4人家族です。
どちらの子もすくすくと育っています。
上の子は幼稚園が楽しいようで毎日元気に登園しており、日に日に成長する我が子の姿を見るのは幸せなことだと感じています。

幸せな子育てとエンジニアライフについて、僕が考えていることをまとめました。

愛情を持って接すればうまくいく

上の子は妻より僕のほうが好きです。
夜寝るときは僕と一緒に寝たがります。
妻がお父さん、お母さん、どっちが好き?ということを時々聞いているらしいのですが、お父さんのほうが好きなようです。
なぜ上の子とよい関係を築くことができたのかを振り返ってみたいと思います。

今ではお父さん子の上の子ですが、最初の1年間は全然懐きませんでした。
母乳だったので基本的には妻でないとだめで、泣いているところをあやしてもまったく歯がたたずといった状態でした。
そういう状態なので、あまり育児も楽しいと感じませんでした。

しかし、オムツを替えたり、散歩に連れていったりといったことをコツコツと続けていると、1歳を過ぎたあたりから段々と懐いてくれるようになりました。
愛情を持って接すればその分は返ってきます。
子供は正直なのです。

よい子育てとは

どういう子育てがいいのでしょうか。
それはよくわかりません。
なぜなら子供によって性格が全然違うからです。
運動が大好きな子やお絵描きが大好きな子など、子供が100人いれば100人の個性があります。
また、親にも個性があります。
その全てによい子育て方法というものがあるのでしょうか。

特別なことをしなくても、子供はみんな大人になります。
なぜなら、自分は特別な教育は受けていません。
それでも、こうやって社会生活を営んで家族を養っていくことができています。

現在は、たくさんの情報に溢れています。
しかし、たくさんの情報は本当に有用なのでしょうか。
50のハウツーを知っていることが幸せに繋がるのでしょうか。
情報が多すぎることで、一体何が本当に大切なことなのか、わからなくなってしまいそうです。

それよりも、一緒に公園で遊んだり、一緒にご飯を食べたり、そういうことでいいんだと思います。

僕の両親は自営業なので決まった休みがありませんでした。
父親はほとんど家にいませんでした。
楽しみは月に何回かいくスーパーの買い物でした。
ただ、それでも幸せでした。
家族揃って食べた晩ご飯もよい思い出です。

そういうことを考えると、一緒に生活を送る何気ない日々が大切なのではないかと思うのです。

エンジニアライフと子育て

エンジニアライフと子育てについて少し触れておきます。
エンジニアは専門職なので、勉強が必要です。
ですので、その勉強時間を確保しないといけません。

僕は、通勤の時間と子供が寝たあとの時間を自分の時間に充てています。
その時間以外は仕事をしているか子供の世話をしている時間となります。

子供がいるからやりたいことができないということはなくて、工夫をすればなんとかなるものです。
自分の時間がたくさんあればいいというものではなく、限りある時間を有効に使うという意識が大事なのではないかと思います。

本の紹介

育児をするにあたって、多くの育児書との出会いがありました。
その中でおすすめの著書を紹介します。

子供の花が育つとき

日本人で初めてシュバイツァー博愛賞を受賞した内藤寿七郎先生の著書です。「育児の神様」と呼ばれていたそうです。
多数の著書がありますが、丁度よいボリュームで最初の1冊に最適です。

子供へのまなざし

子供の花が育つときは3歳までの時期を対象とした著書ですが、子供へのまなざしは思春期の時期までカバーされています。
ボリュームはありますが、大切なことがわかりやすく書いてあります。
育児書のベストセラーです。

まとめ

幸せな子育てとはなんなのでしょうか。
僕は家庭円満で日常生活を送ることだと思います。

「思いやりのある子に育てたい」

親なら誰もが思うことですが、人に対する思いやりは理屈で教えられるものではないと思います。
お父さん、お母さんがお互いをいたわりあい、相手を思いやる気持ちを持つ。
そういう姿をみて思いやり、優しさというものを自然と子供が覚えていくのではないでしょうか。

本来、子育ては楽しいものです。
子供はどんどん成長していきます。
そして、同時に親も成長をしていきます。
こんな素晴らしい体験ができることを、楽しまずにやらないわけにはいきません。

冒頭でも申し上げた通り、本記事は子育てプログラマ・ITエンジニア・Webデザイナー Advent Calendar 2015 の記事ですので、次回へのバトンを渡したいと思います。
次回は、12/8(火) foostanさんです。

最後に子育てプログラマ・ITエンジニア・Webデザイナー Advent Calendar 2015を企画してくださった、jnchitoさん、楽しい企画をありがとうございました。

30歳から始める数学

math-image

この記事はMath Advent Calendar 2015 2日目の記事です。
前回の記事は515hikaruさんのMath Advent Calendar 2015 一日目 - 515 ひかるのブログ 日常編です。

とあることから、30歳にして数学を学び始めました。いまは毎日楽しく数学の書籍を読んだり方程式を解いたりしています。
本記事では、僕と同じようにもう一度数学を学びたいなと思っている人向けに、数学の魅力を再発見する方法を紹介します。

30歳にして数学を学び始めたきっかけ

きっかけはプログラマのための数学勉強会です。
とあるご縁でこの勉強会で発表することになり、そこから数学を学び直しました。

内容については、以下の記事を参照ください。

この数学勉強会で数学を勉強することになったのですが、様々な書籍を読んでいくうちに、「なんだ数学って面白いじゃないか!」と感じるようになりました。
いまとなっては、趣味で数学を学んでいます。

数学をやり直してよかったこと

アルゴリズムに強くなる

数学を理解するには論理的な思考が必要です。
なぜかというと、数学は1つ1つの単純な定理を積み重ねて段々と複雑な定理を作っていくからです。

これって、アルゴリズムと似ていると思いませんか。
アルゴリズムも1つ1つは単純です。
単純なアルゴリズムが積み重なって複雑なアルゴリズムを形成していきます。

考え方が同じということは、数学に強くなるということはアルゴリズムに強くなるということでもあるのです。

数学を違う観点でみることができた

学生の頃は、問題を公式に当てはめて解を出すということをひたすらやっていました。
数学がおもしろくないと思っている人はこの観点で数学を捉えているのではないかと思います。
しかし、公式を当てはめて解を出すというのは数学の一部分です。

解を出すより重要な点は、「数学の理論を使うことである問題を解決することができる」という点だと思います。
このような観点で数学を捉えると見え方が違ってきます。

自分としては方程式を解くことより、方程式を自在に作れるようになりたいと思っています。

どういうふうにやり直したのか

図書館で数学に関する書籍を借りたり、書籍を買って学びました。
書籍は通勤の時間に読んでいます。

読んだ書籍のうち、個人的に面白いと感じた書籍を紹介したいと思います。

おすすめの書籍

はじめまして!数学

はじめの1冊は何がよいかと聞かれたらまずはこの1冊をおすすめします。
廃盤となっていましたが、リメイク版がでたようです。
数や素数、無限の概念から始まり、ベクトル、分数の話しがイラストつきで解説されています。
語り口がわかりやすく、数学の知識がなくてもスラスラと読めてしまいます。
また、挿絵がいい味を出しています。
この書籍を読めばきっと数学がおもしろいと思うはずです。

数学入門

こちらもおすすめの1冊。数学書の大ベストセラーです。
はじめまして!数学より内容は難しめなので2冊目におすすめします。
数学の歴史的な話し、分離量と連続量、代数、図形、複素数について解説されています。

これだけはおさえたい-文系プログラマーの数学知識-基礎の基礎-

プログラマーの数学入門用におすすめの1冊。
コンピュータサイエンスの基礎的な話しや、数学がプログラミングでどのように使われているかが丁寧に説明されています。
この書籍を読めば代数学や微積分がどのようなところでプログラミングに利用されているかがわかることでしょう。

いかにして問題をとくか 実践活用編

G.ポリアの著書が有名かと思いますが、こちらは現代版 いかにして問題をとくかです。
全体的に平易な文章で記述してあり、専門用語や数学の知識がなくても読めるようになっています。
まずこちらを読んでからG. ポリアのほうにとりかかると、より理解がしやすいのではないかと思います。

数学ガール

たくさんのシリーズが出版されている数学の人気書籍です。
物語形式になっており、そちらの話しもおもしろいです。
また、物語形式だと頭にスッと内容が入ってくるのでよいですね。
物語を楽しみながら数学の勉強もできるというお得な著書です。

まとめ

数学を学び直すことで、様々な関心することに出会えました。また、先人への畏敬の念を抱かずにはおれません。
というのも、現代数学の基礎は紀元前〜19世紀にかけて発見されているのです!改めて数学とは面白い学問だなと感じています。
これからも楽しみながら数学を学んでいきたいと思います。

本記事が数学の魅力を再発見していただくきっかけになれば幸いです。

冒頭でも申し上げた通り、本記事はMath Advent Calendar 2015の記事ですので、次回へのバトンを渡したいと思います。
次回は、12/3(水) PAIOTU_NO_OWARIさんによる選択公理⇔整列定理の証明のお話しです。

最後にMath Advent Calendar 2015を企画してくださった、515hikaruさん、楽しい企画をありがとうございました。

プログラマのための数学勉強会@福岡#2に登壇してきました

2015年11月6日(金)にプログラマのための数学勉強会@福岡#2が開催されました。

前回に続き、今回も発表をさせていただきました。

今回は「コンピュータと数学」というタイトルで、コンピュータでデータがどのように扱われているかや、コンピュータで行われる演算についてお話させていただきました。

他の登壇者のかたのスライド

他の登壇者のかたのスライドを紹介します。

###「無限と計算可能性と対角線論法」
@nakalyさんはコンピュータの停止性問題と対角線論法についてお話をされていました。

「Shinyで中心極限定理」

Tomokazu Fujino(@nonki1974)さんは、R言語とフレームワークのShinyを使って行う統計のお話をされていました。
大学の先生をされているので、発表がとてもお上手でした。
fukuoka.Rを主催されているとのことです。
発表のスライドは公開されていないようでした。

「オイラーの等式」

@ringojuringoさんは、「オイラーの等式」の証明についてお話されていました。
テイラー展開を使って証明ができるとのことでした。
発表のスライドは公開されていないようでした。

Twitterのまとめ

プログラマのための数学勉強会@福岡#2まとめ

おわりに

主催者の@tkengo氏は急用のため、残念ながら今回は欠席でしたが、今回も面白い内容だったなと思います。

場所を提供いただいた、LINE Fukuokaさん、登壇者、参加者のみなさん、ありがとうございました!

Rails4でlibディレクトリをautoloadするときのルール

Rails4でlibディレクトリに作ったライブラリを読み込むときはautoloadを利用すると便利です。
autoloadを利用するにはファイル名とクラス名がautoloadのルールに則っている必要があります。

autoload のパスを設定する

まず config/application.rb に autoload 用の設定を行います。

config/application.rb

1
2
#to auto load lib/directory
config.autoload_paths += %W(#{config.root}/lib)

これで、lib ディレクトリ以下のファイルが、以降に説明するディレクトリ・ファイル構成と命名の規約に従うと、自動的に読み込まれるようになります。

lib ディレクトリ以下のファイル

ファイル名は小文字、単語の区切りは _ (アンダースコア)にする。
クラス名はアンダースコアの区切りでキャメルケースにする。

以下はファイル名とクラス名の例です。

lib/hoge_fuga.rb

1
2
class HogeFuga
end

lib/hoge ディレクトリにファイルを置くこともできます。

lib/hoge/fuga.rb

1
2
3
4
5
6
7
8
9
module Hoge
  class Fuga
  end
end

# 以下の様にも書けます。

class Hoge::Fuga
end

以下の様な書き方もできます。

lib/hoge_moge/fuga.rb

1
2
3
4
5
6
7
8
9
module HogeMoge
  class Fuga
  end
end

# もしくは

class HogeMoge::Fuga
end

超高速grep「The Silver Searcher(ag)」からhighwayに乗り換えた

プログラマーにとって,grepコマンドはなくてはならない存在です。
基本的かつ古典的なユーティリティであるgrepですが,使いにくい面もあります。

2013年のはじめころから,grepに取って代わるコマンドとして「The Silver Searcher」(以下「ag」)が注目されはじめました。
そして最近、highwayというagライクで高速なgrepツールがリリースされました。

The Silver Searcher(ag)とは?

highwayの紹介の前にagとagが開発された背景について説明したいと思います。

プログラムを書いていると,ソースコード全域にわたって文字列を検索したい,ということはよくあります。
そのようなときにgrepコマンドが活躍するわけですが,ソースコードのディレクトリには検索したくないファイルが往々としてあるわけです。

たとえばバージョン管理システムが使っている「.git」ディレクトリは,検索対象に含めたくありません。
これをgrepで実現しようとすると,オプションやパイプを組み合わせて,少々面倒なワンライナーを書く必要があります。

こういった問題を解決するため,ackというプログラムが作られました。
ackは以下のような特徴を持つ,開発者向けの賢いgrepツールです。

  • デフォルトでディレクトリツリーを再帰検索
  • .gitなどを暗黙的に除外
  • 検索するファイルタイプをオプションで指定可能(–perl,など)
  • 拡張子だけでなく,shebangを見てファイルタイプを判別可能
  • 検索結果をファイル単位でわかりやすくまとめて表示

ackはgrepと比べて使い勝手がよいのですが,Perlで実装されていることもあり,動作速度に難があります。
その動作速度の問題を改善するためにagが開発されました。

agは開発者が「A code searching tool similar to ack, with a focus on speed.」と紹介しているとおり,「高速なack」を目指して開発されたプログラムです。
「ackに比べて3から5倍高速」を謳っており,そして実際非常に高速です。

The Silver Searcher(ag)の問題点

紹介した通り、使い勝手がよく、性能もよいagなのですが、以下の問題点があります。

  • EUC-JPやShift_JISなどの日本語に使われるマルチバイト文字列が検索できない
  • 検索結果の出力順が検索する度に異なる

全てのコードがUTF-8であれば問題ありませんが、日本語圏で使われるファイルでは、なかなかそうもいきません。
検索結果の出力順が検索する度に異なるのも少し使いにくいと感じます。

その点、highwayはEUC-JPやShift_JISをサポートしており、検索結果の表示順の問題もありません。

highwayのメリット

agの問題点であげた点をhighwayはクリアしています。
また、速度もagよりも高速です。

ベンチマークについては以下の記事をご覧ください。
http://tkengo.github.io/blog/2015/10/19/release-highway/

highwayのインストール

For OS X

homebrewでインストールできます。

1
2
$ brew tap tkengo/highway
$ brew install highway

For Fedora Core

1
2
3
4
5
6
7
8
$ sudo vi /etc/yum.repos.d/highway.repo
[repos.highway]
name=highway
baseurl=http://tkengo.github.io/highway/fedora
enabled=0
gpgcheck=0

$ sudo yum install highway --enablerepo="repos.highway"

使い方

1
2
3
4
5
6
7
8
# カレントディレクトリをhogeをいう文字列で再帰的に検索
$ hw hoge

# public_html以下のディレクトリからhogeという文字列を検索し、マッチした行から10行目までを表示
$ hw -A 10 hoge public_html

# オプションは以下のコマンドで参照できます
$ hw -h

unite.vimと連携する

unite.vimのgrepにhighwayを使うようにします。

1
2
3
4
5
6
7
8
9
" grep検索
nnoremap <silent> ,g  :<C-u>Unite grep:. -buffer-name=search-buffer<CR>

" unite grepにhw(highway)を使う
if executable('hw')
  let g:unite_source_grep_command = 'hw'
  let g:unite_source_grep_default_opts = '--no-group --no-color'
  let g:unite_source_grep_recursive_opt = ''
endif

おわりに

grepツールは完全にhighwayに乗り換えましたが、速度面、機能面に関しては問題ありません。
まだgrepで頑張っている人はもちろん,agをすでに使っている人であっても,highwayの利用を検討する価値は充分にあると思います。