読者です 読者をやめる 読者になる 読者になる

Sierraでruby-buildで1.8.7をビルドする

今更ながらrbenv使ってRuby-1.8.7をインストールすべく、 ruby-buildで1.8.7をインストールしようとしたところ、 次のようなエラーが出ました。

ERROR: This package must be compiled with GCC, but ruby-build couldn't
find a suitable `gcc` executable on your system. Please install GCC
and try again.

DETAILS: Apple no longer includes the official GCC compiler with Xcode
as of version 4.2. Instead, the `gcc` executable is a symlink to
`llvm-gcc`, a modified version of GCC which outputs LLVM bytecode.

For most programs the `llvm-gcc` compiler works fine. However,
versions of Ruby older than 1.9.3-p125 are incompatible with
`llvm-gcc`. To build older versions of Ruby you must have the official
GCC compiler installed on your system.

TO FIX THE PROBLEM: Install Homebrew's apple-gcc42 package with this
command: brew tap homebrew/dupes ; brew install apple-gcc42

You will need to install the official GCC compiler to build older
versions of Ruby even if you have installed Apple's Command Line Tools
for Xcode package. The Command Line Tools for Xcode package only
includes `llvm-gcc`.

BUILD FAILED (OS X 10.12.4 using ruby-build 20170405-2-g3b15693)

素直にbrewapple-gcc42を入れようとして、brew install apple-gcc42したところ、 今度は次のようなエラーになりました。

% brew install apple-gcc42
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (caskroom/cask).
No changes to formulae.

apple-gcc42: This formula either does not compile or function as expected on macOS
versions newer than Mavericks due to an upstream incompatibility.
Error: An unsatisfied requirement failed this build.

むーん、なんでこんな状態になっているんだろうと思いつつ、 Xcodegccで1.8.7-p374をコンパイルしてみたところ、 warningはたくさん出るものの、コンパイルできてしまいました。 なので、ruby-buildを改良してSierraだったらXcodegccを使って コンパイルするようにしたパッチが以下です。

--- a/bin/ruby-build
+++ b/bin/ruby-build
@@ -761,6 +761,12 @@ require_java7() {
 require_gcc() {
   local gcc="$(locate_gcc || true)"

+  local osx_version="$(osx_version)"
+  if [ $osx_version = "1012" ]; then
+    return 0
+  fi
+
+
   if [ -z "$gcc" ]; then
     { echo
       colorize 1 "ERROR"

この状態にして、opensslとreadlineとtkのオプションを渡してインストールします。 brewであらかじめopensslとreadlineを入れておいて、

% CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=`brew --prefix openssl`" RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl`" rbenv install 1.8.7-p374

ふう。なんとかインストールできました。

Downloading ruby-1.8.7-p374.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p374.tar.bz2
Installing ruby-1.8.7-p374...

WARNING: ruby-1.8.7-p374 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.

ruby-build: use readline from homebrew
Installed ruby-1.8.7-p374 to /Users/fujioka/.rbenv/versions/1.8.7-p374

Downloading rubygems-1.6.2.tgz...
-> https://dqw8nmjcqpjn7.cloudfront.net/cb5261818b931b5ea2cb54bc1d583c47823543fcf9682f0d6298849091c1cea7
Installing rubygems-1.6.2...
Installed rubygems-1.6.2 to /Users/fujioka/.rbenv/versions/1.8.7-p374

さくらのVPSの標準OSのubuntuにはファイアウォール設定が入っている

久しぶりにさくらのVPSを使うことになり、ubuntu 16.04を入れて、 apache2を入れてみたところ、ブラウザからアクセスできない。 これは変だと思って、次の手順で探ってみた。

  • apache2のログを見てみたところ、アクセスログはない。
  • tcpdump port 80で見たところ、パケットは到達している。

はて?何かデフォルトが変わったか。 ここまででネットワークかファイアウォールがあやしいと思った。 カスタムインストールを使ってubuntu16.04をインストールしてみたところ、 普通にアクセスできる。あれれれ? ここまでで、OSをなんとかすればつながるということがわかった。 というわけで元の標準OSのubuntu16.04を入れ直し、 iptables -Lを見たところ、ガッツリ入っている。これか。。。。

root@web3:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
f2b-sshd   tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain f2b-sshd (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

なんでインストール直後なのにこんなに入っているの? と思い、ufwかと思ったら、ufwのChainではなかった。 次にiptables-persistentかと思ったら、インストールされていない。

grep -r iptables /etc | grep -v fail2ban

を実行してみたところ、

root@web3:~# grep -r iptables /etc | grep -v fail2ban
/etc/default/ufw:# only enable if using iptables backend
/etc/network/if-pre-up.d/iptables:iptables-restore < /etc/iptables/iptables.rules
/etc/init/ufw.conf:# The Uncomplicated Firewall is a front-end for iptables, to make managing a

むむむ。なんだこのif-pre-up.dの設定は。

dpkg -S /etc/network/if-pre-up.d/iptables

を実行しても、パッケージにないとおっしゃる。これはどこから湧いてきたのか。 さくらVPSのイメージで勝手にやっているのか??? /etc/iptables/iptables.rulesの中身は次のようになっていた。

root@web3:~# cat /etc/iptables/iptables.rules
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

とりあえず、改造しないとやっていけないので、設定を変更する。 せっかくなので削除せずに使うことにする。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

この次の行に追加する。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

これでapache2へのアクセスができるようになる。

sh /etc/network/if-pre-up.d/iptables

こちらのコマンドで再読込。 iptables -L で見てみると、

root@web3:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:https
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

となっていて、httpとhttpsが追加されていました。 これで良い方法なのかどうかはわかっていないのですが、とりあえずできました。

ポテンシャルがあるかどうかを判断する必要なんてないんじゃないか?

定期的に読んでいるブログに面白いことが書いてありました。

blog.tinect.jp

年末の12月、Windowsタブレットアプリを外注しました。 弊社、ソフトウェアの製作を外注したのははじめてです。 もちろんクラウドワークスを使いました。 そこで数名が手を上げてきたのですが、卒業間際の大学生がいて、 Unityで提案してきて、なかなか感心したのでこちらの学生に頼みました。

他の方と違ってgithubも普通に使うし、sqlite3を使うという条件も グダグダ言わなかったし、slackでの会話も問題なかったので気に入ったためです。 コミュニケーションのとり方をこちらに全部合わせてもらえるのは助かります。

卒論が重なっていて、こちらの準備不足もあって、 1月に完成予定が2月上旬になってしまったのですが、予定が延びたのはお互い様でしたし、 それ以外は全然問題もおきませんでした。 この学生さんにはトータル35万円の開発費を支払いました。 卒業前のアルバイトとしてはなかなか良いものではないでしょうかね。 彼はもうすでにUnityでゲームを作れるレベルでしたので、どこでもやっていけるでしょう。 とても感心しました。

さて、ポテンシャル採用から実績採用へというブログのタイトルです。 実は学生というのは遊びきる学生もいますが、そうじゃない学生もいます。 学生時代とは、なんらかの実績を積んでおくというのが 無限にできる期間でもあります。このような学生と出会えて、 ますますデキる人とデキない人の差が広がってきているんだなと痛感しました。 私も出来る人であり続けるように努力しないとと思った次第です。

先日、小学校卒業間際の息子に「パパ~、僕、パパみたいにプログラム作れるようになるかな〜?」 と聞かれたので、「ならないと思うよ。」とバッサリ返してしまいました。 「だって、お前、もう中学生だろ。作れる人はすでにもう作っているよ。」 プログラムを作れる人はそんな質問しないですね。 作りたい人はすでに本読んだりネット見たりして作り始めています。 その後、息子がiPhoneアプリの作り方の本が欲しいようだったので 買い与えたところ、ちょっとずつ作ってみているようです。

やさしくはじめるiPhoneアプリ作りの教科書 【Swift 3&Xcode 8.2対応】 (教科書シリーズ)

やさしくはじめるiPhoneアプリ作りの教科書 【Swift 3&Xcode 8.2対応】 (教科書シリーズ)

私に「お前はプログラムを作れるようにはならないよ。」と言われたのが大分ショックだったようで、 少しづつ目標に近づく努力をはじめたようです。 最初に「変数というのは何か?」みたいな質問が出てきて、おお!っと思いました。 何も動かずに、プログラムを将来作れるようになれるかと悩むより100倍増しです。

いつかなれると思っているだけの人は永遠になれない。 すでに目標に向かって動き始めている人しか望みを掴めないと思った次第でした。

さて、表題にもどってみると、技術職において、こいつは伸びそうだとか判断する必要なんて まったくなくて、会社が個人を教育してくれる時代なんてとっくに終わりました。 新卒も中途と同様に、何をしてきたかを見れば判断できます。 そういう意味で、ますます技術職の格差も広がってきているんだなと思いました。

イタリア旅行10日目

この日はもう帰国です。

ローマからは電車で空港まで移動します。チケットの買い方とかなかなか緊張したけど、 無事空港までつけました。全部ビジネスクラスなので、ラウンジが使えます。 とりあえず、食う。

f:id:xibbar:20161231081219j:plain

ルフトハンザもビジネスクラスなのでメシが出ます。しかし、短距離路線のビジネスクラスはマジでしょぼい。

f:id:xibbar:20161231153558j:plain

ローマからミュンヘンの便の中で日本時間の年越しを迎えました。その瞬間の記念撮影。

f:id:xibbar:20161231160000j:plain

ミュンヘンからはANA便です。やっぱりANAビジネスクラスは最高です。 メシもいいし。蕎麦がちょっとだけあったのが 年越しそばを食べていない私には嬉しかったなぁ。

f:id:xibbar:20161231225436j:plain f:id:xibbar:20161231230422j:plain

ってことで、だいぶ疲れましたが、イタリア旅行楽しかったです。

子どもが大きくなって時間に余裕ができたら夫婦で行きたいものです。

ちなみに、このあと羽田空港から小松行きに乗り換えて、 家内の実家に帰省するというまだ旅は終わらないみたいなことをしていました。

夜中に目が覚めて、朝の3時にクリーニングとか行ってましたよ。

イタリア旅行9日目

前日にピクルスを買いました。でかい瓶に入っていて、 割れるか心配でしたが、思い切って買ってしまいました。

f:id:xibbar:20161230063416j:plain

朝食はこんな感じ。無理してモッツァレラチーズを大盛りにしてます。

f:id:xibbar:20161230064619j:plain

この日はバチカンです。博物館の方から入りました。こういうときはツアーって便利ですよね。 普通に並んでいる人はものすごく並ぶようです。

f:id:xibbar:20161230080603j:plain f:id:xibbar:20161230085154j:plain f:id:xibbar:20161230090844j:plain f:id:xibbar:20161230091636j:plain f:id:xibbar:20161230092804j:plain f:id:xibbar:20161230101203j:plain f:id:xibbar:20161230102304j:plain f:id:xibbar:20161230103400j:plain f:id:xibbar:20161230104657j:plain

さて、混ざっていたツアーはこれで終了です。飛行機付きのツアーのみなさんは 午後の便で日本に帰ります。我々はもう1日だけホテルに滞在があります。 なので、午後からはローマ発祥の地である フォロロマーナの丘を散歩しました。

f:id:xibbar:20161230134435j:plain f:id:xibbar:20161230135759j:plain f:id:xibbar:20161230142226j:plain f:id:xibbar:20161230144033j:plain

コロッセオのとなりなので、また来てみました。

f:id:xibbar:20161230151535j:plain

町中が遺跡だらけで、もうよくわかんないくらいあります。

f:id:xibbar:20161230153844j:plain

晩御飯はホテル近くのレストランで、パスタとワインにしました。

f:id:xibbar:20161230182938j:plain

イタリア旅行8日目

この日は一日自由行動の日なので、私は別にオーダーしたツアーに参加して ポンペイに行きます。ポンペイってのは火山に埋もれて一瞬にしてなくなってしまった 古代の町です。ポンペイは来てみたかった。

バスにひたすら乗ってナポリを通り過ぎると かつて噴火したベスビオ火山が見えます。 f:id:xibbar:20161229105100j:plain

ポンペイについてから見たベスビオ火山がこんな感じ。

f:id:xibbar:20161229112259j:plain

いろんなものが古代のまま閉じ込められていて、 とても状態がいい。でも、雨ざらしなのが気になります。 世界遺産が雨ざらしってどうなの?ってイタリアに来て ずっと思っていましたが、キリがないぐらい 世界遺産だらけなのでちょっとぐらい放置なんでしょう。

f:id:xibbar:20161229114536j:plain f:id:xibbar:20161229114712j:plain f:id:xibbar:20161229114854j:plain f:id:xibbar:20161229115115j:plain f:id:xibbar:20161229115752j:plain f:id:xibbar:20161229120317j:plain f:id:xibbar:20161229121017j:plain f:id:xibbar:20161229121617j:plain f:id:xibbar:20161229123217j:plain f:id:xibbar:20161229123240j:plain f:id:xibbar:20161229123616j:plain

最後は一瞬だけナポリによりました。 だけど、こんなのナポリに来たとは言い難い。 またナポリには来てみたいですね。

f:id:xibbar:20161229161517j:plain

イタリア旅行7日目

この日はローマに移動します。フィレンツェから意外と4時間かかります。 バスで移動中に、昼食はアグリツーリズモというらしく素朴な農家風レストランでした。 私は農家の出身なので、何もありがたくなかった。w

f:id:xibbar:20161228120152j:plain

昼食後もひたすらバスで移動し、最初にコロッセオに行きました。

f:id:xibbar:20161228144710j:plain f:id:xibbar:20161228151051j:plain f:id:xibbar:20161228151238j:plain

次はトレビの泉です。

f:id:xibbar:20161228161609j:plain

スペイン広場。有名らしいけど、ローマの休日見てないもんね。 そのうち見ないと。

f:id:xibbar:20161228164747j:plain

バルサミコ酢が最高です。

f:id:xibbar:20161228194122j:plain

ホテルはバチカンのすぐそばでした。いいところ。

f:id:xibbar:20161228203800j:plain

それで、相変わらず夜にスーパーマーケットに行って、物色してきました。 これはやめられない。どこに行ってもやってます。

f:id:xibbar:20161228215004j:plain