あいつの日誌β

働きながら旅しています。

ES6 での range 関数を書いてみた

あらすじ

Ruby でいう to_a のアレを JavaScript で書いてみた

function range(from, to) {
  return [...Array(to - from + 1).keys()].map(x => x + from)
}

console.log(range(0, 10))
console.log(range(3, 10))

出力結果

[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
[ 3, 4, 5, 6, 7, 8, 9, 10 ]

なんだけど

range 関数の from, to のインターフェースなんですがどっちが一般的なんでしょう?

console.log(range(1, 10))
console.log(Immutable.Range(1, 10).toArray())

出力結果

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

今度誰かと会った時の話題にしよう

Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user

Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user とか言われた場合、ドキュメントには pipelining すればいいと書かかれているようです。

http://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user

ということで ansible.cfg に下記を追加すればいいんじゃないかな

[ssh_connection]
pipelining = true

おしまい

DB のインデックス設計できますか?

あらすじ

DB インデックスを知らないエンジニアがいるらしいので啓蒙したいという話です。

DB のインデックス設計は HDD 使っている頃には最重要なスキルだった気がしますが、今の時代、エンジニアに求められる事が増えすぎているのでインデックスの事に関して知らない人(DBインデックスが起因する問題に出会ってない人)がいても不思議ではない気がします。

というわけで何故 DB インデックスを知らない人がいるのか?という事に関しては我々のようなおじさんエンジニアが伝えないといけいない事をちゃんと伝えていないからなんじゃないかと思いペンをとりました。

といいつつ

詳しい事は過去にそういう記事を書いたのでこちらを見てください...

http://okamuuu.hatenablog.com/entry/2013/02/23/005046

そういえば

昔とある企業でいつも同じクエリーが遅いとインフラエンジニアから苦情が来るので解消してくださいと言われたので調べたら掲示板の全件取得にインデックスが効いてなかった事があります。

どうやら最初は index が効いていたようですが、後から delete_flg を追加するタスクが発生し、そのフラグのせいでフルーテーブルスキャンに変わってしまったようです。日時の経過にともないデータ量が増えてある日インフラチームから警告が発生した。という事だと思います。

上述のエントリーはそのタスクを解消したときの方法を紹介しています。

割とあるあるな話ではあると思いますが、こういう昔ながら話をもう一度してみると誰かの役に立つかもしれませんね。近年のWEB開発者は覚える事が多すぎて以外と知らない事が多いでしょうし。

そういえば 2017/5/27(土) にアットホームなカンファレンスが開催されるようです。昔あなたが困った事を発表したりすると誰かの役に立つかもしれません。

http://y8-2017-spring.hachiojipm.org/

問題です。自然数を Invert する関数をつくりなさい。

商談の時にコーディングテストがあったのですが解けなかったので復習

function invert(num) {
  let answer = 0 
  while (num > 0) {
    const rightNumber = num % 10 // num 1 の位を取得
    num = (num - rightNumber) / 10 // num を位下げする

    answer = answer * 10 // answer を位上げする
    answer += rightNumber // 取得した1の位を付け足す
  }
  return answer
}

console.log(invert(12345)) // 54321
console.log(invert(12340)) // 4321
console.log(invert(12040)) // 4021
console.log(invert(12000)) // 21

ちなみに最初は下記のように一回文字列にするやり方で回答したのですが、「文字列にしないで解いて下さい」と言われました。要件を満たしているのに何故なんだろう...

function invert(num) {
  return parseInt((num + "").split("").reverse().join(""), 10) 
}