ためすう
AUTO INCREMENT の値を確認する (MySQL)
2020-02-29やったこと
データベースのテーブルにある AUTO_INCREMENT の値を確認します。
確認環境
$ mysql --version
mysql Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using EditLine wrapper
調査
SELECT
auto_increment, table_name
FROM
information_schema.tables
WHERE table_schema = 'learning'
;
出力結果
+----------------+------------+
| auto_increment | table_name |
+----------------+------------+
| 10 | aaa |
| NULL | bbb |
| 6 | ccc |
+----------------+------------+
vim で改行を消す
2020-02-24やったこと
vim で改行を消してみます。
調査
変更前
test.txt
aaa
bbb
ccc
1
2
3
1
2
3
VISUAL LINE で全選択してから、置換します。 改行コードを削除します。
:'<,'>s/\n//g
変更後
test.txt
aaabbbccc123123
test コマンドを使ってみる (unix)
2020-02-23やったこと
unix の test コマンドを使ってみます。
調査
man より抜粋
DESCRIPTION The test utility evaluates the expression and, if it evaluates to true, returns a zero (true) exit status; oth- erwise it returns 1 (false). If there is no expression, test also returns 1 (false).
$ ls -ls
total 0
0 drwxr-xr-x 2 xxxxx wheel 64 2 23 22:29 a_dir
0 -rw-r--r-- 1 xxxxx wheel 0 2 23 22:29 abc.txt
ファイルがあるかどうかの確認
$ test -e a_dir; echo $?
0
$ test -e abc.txt; echo $?
0
$ test -e abc222.txt; echo $?
1
ディレクトリかどうかの確認
$ test -d abc222.txt; echo $?
1
$ test -d abc.txt; echo $?
1
$ test -d a_dir; echo $?
0
TRUNCATE を使ってみる (MySQL)
2020-02-16やったこと
MySQL の truncate を使ってみます。
テーブルを空にする方ではなく、数値を削るほうです。
確認環境
$ mysql --version
mysql Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using EditLine wrapper
調査
TRUNCATE(X,D)
D 小数点に切り捨てて、数字 X を返します。D が 0 の場合は、結果に小数点または小数部が含まれません。D を負の数に指定すると、値 X の小数点左側の D 桁をゼロにすることができます。
小数点をどこまで残すか、指定できます。
mysql> SELECT TRUNCATE(1.234, 0);
+--------------------+
| TRUNCATE(1.234, 0) |
+--------------------+
| 1 |
+--------------------+
1 row in set (0.00 sec)
mysql> SELECT TRUNCATE(1.234, 1);
+--------------------+
| TRUNCATE(1.234, 1) |
+--------------------+
| 1.2 |
+--------------------+
1 row in set (0.00 sec)
mysql> SELECT TRUNCATE(1.234567, 5);
+-----------------------+
| TRUNCATE(1.234567, 5) |
+-----------------------+
| 1.23456 |
+-----------------------+
1 row in set (0.00 sec)
参考
is_a?, kind_of? を使ってみる (Ruby)
2020-02-16やったこと
is_a?
、kind_of?
を使ってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
is_a? と kind_of? の違いはあるのか
下記を見ると、全く同じメソッドのようです。
ruby/object.c at 6b86549df8f6d48eeab3c7b48b3fd9ee02f744ba · ruby/ruby
動かしてみる
is_a.rb
module M
end
class Sample < Object
end
obj = Sample.new
p 'is_a?'
p obj.is_a?(Sample)
p obj.is_a?(Object)
p obj.is_a?(M)
p obj.is_a?(Integer)
p 'kind_of?'
p obj.kind_of?(Sample)
p obj.kind_of?(Object)
p obj.kind_of?(M)
p obj.kind_of?(Integer)
出力結果
$ ruby is_a.rb
"is_a?"
true
true
false
false
"kind_of?"
true
true
false
false
参考
Time の usec を 0 で指定する (Rails)
2020-02-16やったこと
時間を取り扱う時、usec を 0 でセットする方法を試します。
例えば、rspec など自動テストをする時
- MySQL に保存する
- 値を取り出す
とした場合、usec が削り落とされ 0 になってしまうことがあります。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
始めは、usec が設定されていますが、change
を使うことで 0 に設定できました。
$ rails c
Running via Spring preloader in process 42292
Loading development environment (Rails 5.2.3)
irb(main):001:0> a = Time.current
=> Sun, 16 Feb 2020 01:19:08 JST +09:00
irb(main):002:0> a.usec
=> 87388
irb(main):003:0> a.change(usec: 0).usec
=> 0
参考
atan2 を使ってみる (C++)
2020-02-03確認環境
$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
調査
atan2は三角形の底辺と高さから、角度を求めます。
test.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
// ラジアンを求める
// 引数の順番に注意 (高さ, 底辺)
double radian = atan2(1.0, 1.0);
cout << radian << endl;
// ラジアンを角度に変換する
double deg = radian * (180 / M_PI);
cout << deg << endl;
}
出力結果
0.785398
45
参考
FLT_EPSILON を調べる (C++)
2020-01-26確認環境
$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
調査
規格で 1E-5 以下であることが規定されている。
すごく小さい数のことです。
計算で誤差が出るときなどに利用したりします。
test.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << FLT_EPSILON << endl;
}
出力結果
1.19209e-07
参考
all_of を使ってみる (C++)
2020-01-26やったこと
all_of を使ってみます。
確認環境
$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
調査
test.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> v = {2, 9, 3, 5};
bool ans = all_of(v.begin(), v.end(), [](int x) { return x >= 2; });
cout << ans << endl;
bool ans2 = all_of(v.begin(), v.end(), [](int x) { return x >= 5; });
cout << ans2 << endl;
}
出力結果
1
0
参考
YAML の文法をチェックする (Ruby)
2020-01-14やったこと
YAML の文法が正しいかどうかを確認する方法を調べました。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
正常な YAML
sample.yml
aaa:
bbb: 111
ccc: 222
$ ruby -r yaml -e 'YAML.load_file "sample.yml"'
特に何も表示されません。
壊れている YAML
sample2.yml
aaa:
bbb: ccc:::
ccc: 222
$ ruby -r yaml -e 'YAML.load_file "sample2.yml"'
Traceback (most recent call last):
7: from -e:1:in `<main>'
6: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:577:in `load_file'
5: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:577:in `open'
4: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:578:in `block in load_file'
3: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:277:in `load'
2: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:390:in `parse'
1: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:456:in `parse_stream'
/Users/himejima/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:456:in `parse': (sample2.yml): mapping values are not allowed in this context at line 2 column 13 (Psych::SyntaxError)
SyntaxError が発生しました。
コマンドの意味
-r
はライブラリを require します。
-e
はコマンドラインで実行する時に使います。
抜粋
$ man ruby
...
-r library Causes Ruby to load the library using require. It is useful when using -n or -p.
-e command Specifies script from command-line while telling Ruby not to search the rest of the arguments for a script file name.