Ubuntu 20.04 で bundle install でハマったのでメモ

$ bundle install
...
Fetching mysql2 0.5.3
Installing mysql2 0.5.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

...
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' succeeds before
bundling.

In Gemfile:
mysql2

ググっていろいろやりましたが、
結局こちらのインストールで解消しました。
$ sudo apt install libmysqlclient-dev

Ubuntu 20.04 LTS に rbenv をインストールした

結論から言うと、公式サイトの通りでOKでした。

# install lib
$ sudo apt-get install -y git curl libssl-dev libreadline-dev zlib1g-dev

# install rbenv
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ cd ~/.rbenv && src/configure && make -C src
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ ~/.rbenv/bin/rbenv init
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# restart terminal

# install "rbenv install"
$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

# check
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

Eclipse本体のバージョンアップ方法

以前の記事で簡単なものは対応できますが、
プラグイン等が多いと対応が難しいので書き直し。
Eclipse本体のアップデート 3.6→3.7へ(4.3までのリンクを追記)

まず、事前にまるっとバックアップを取ってください。

基本的なやり方は、上げたいバージョンを追加
Install/Update – Available Software
4.4.x releases http://download.eclipse.org/eclipse/updates/4.4

で、4.3(kepler)から4.4(luna)にあげることを例にとると、
http://xxx/xxx/xxx/kaplerを
http://xxx/xxx/xxx/lunaに変えたものを追加
http://xxx/xxx/xxx/4.3を
http://xxx/xxx/xxx/4.4に変えたものを追加
アップデート完了まで、今までのものを削除とOFFにしないことが重要

で、アップデートをかけると、たいていはうまくいく。

[Knockout] Knockout.js ではまったりするパターン

続々更新予定

  • バインドしてるboolean変数を括弧なしで判定しちゃう
    ⇒括弧なしだとfunctionが返ってくるので、if(hasCome) なんてしてると爆死
     正解は if (hasCome())
  • クリックバインドに処理したい内容をそのまま書いちゃう
    ⇒funtion(){} でくくってあげないと、表示時にいきなり実行されて爆死

[Java] こんなコードは嫌だ

常に更新予定

糞コード関連

  • 同じ処理を複数の箇所に書く
  • 継承の概念がなく、同じ処理が複数のクラスに存在する。
  • 参照渡しでデータを詰めてるUtilクラスのvoidメソッド
  • 無駄にpublic
  • データが定義ファイルに外だしされているのに、コメントが具体的になってる
  • 特例の処理なのにコメント一つない

ソース管理関連

  • 使わなくなった処理がコメントアウトされてる⇒削除しなさい
  • 処理変更の時に異なる名称でファイルを作り直して、元のファイルは消さない。

[Java]String のindexOfとcontainsの速度比較

str.indexOf(“target”) > -1
str.contains(“target”)
上記のどちらが速いかという話。

答え:containsは内部的にindexOfを呼んでおり速度は変わらないのでcontainsでいいよ。

むしろ、出現率を踏まえた処理を書く方が速くなりますよという話。

String lower_ua = userAgent.toLowerCase();
bool isIOS = (lower_ua.contains("iphone") || lower_ua.contains("ipad") || lower_ua.contains("ipod"));

String lower_ua = userAgent.toLowerCase();
bool isIOS = (lower_ua.contains("ip") && (lower_ua.contains("iphone") || lower_ua.contains("ipad") || lower_ua.contains("ipod"));

アホみたいなソースですが、
iOSの出現率が低く想定される場合は、先に”ip”という文字列で事前チェックすることで、分岐が減るって話です。
iOS以外で”ip”でかかるのは”Sleipnir”くらいなモノっていう事前調査は必要ですが。