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

はてブを整理する0

はてブするマシーンになっているので、ましな使い方をしたいなと思っています。
現状、それからやりたいことをまとめておきます。

現状

数値

ブックマーク数: 10,559
タグ数: 2,563

補足

ブックマークするだけしてほぼ読んでいないものが多いと思います。
後から見れるようにっていう感覚。見てないんですけどね。

タグの傾向

例えばJavaScriptタグを見てみると、こんな感じでつけていることがわかりました。

いいやり方ないかな・・・
例えば、一番最後のパターン、これはきっとnode.jsのことがメインだからJavaScriptタグは必要なさそうとか、
2つ目のパターン、フレームワークタグがあるということはいくつかのフレームワークのことが書かれているだろうから、フレームワークタグではなくてそのフレームワークの名前のタグをつけたほうがいいとか。
難しい。

やりたいこと

  • 必要なものはちゃんと読む
  • 必要なものは後から簡単に参照できる

redash使う簡易メモ

実際に使ってみる。

MySQL準備

参照するテーブル等作っておく。

$ mysql -u root -p

# ユーザー
mysql> CREATE USER 'mfham'@'localhost' IDENTIFIED BY '****';

# 権限
mysql> show grants for 'mfham'@'localhost';
+-------------------------------------------+
| Grants for mfham@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'mfham'@'localhost' |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> GRANT SELECT ON redash_test.statistics to 'mfham'@'localhost';                                                                                                                   
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'mfham'@'localhost';                                                                                                                                             
+-------------------------------------------------------------------+
| Grants for mfham@localhost                                        |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'mfham'@'localhost'                         |
| GRANT SELECT ON `redash_test`.`statistics` TO 'mfham'@'localhost' |
+-------------------------------------------------------------------+
2 rows in set (0.00 sec)

# テーブルこんな感じ
mysql> select * from redash_test.statistics;
+------------+----------+----------+----------+----------+----------+
| date       | summaryA | summaryB | summaryC | summaryD | summaryE |
+------------+----------+----------+----------+----------+----------+
| 2016-10-01 |       10 |      123 |       30 |     3000 |      100 |
| 2016-10-02 |       14 |      113 |       10 |     2400 |      200 |
| 2016-10-03 |       30 |      313 |       23 |     1300 |      140 |
| 2016-10-04 |       50 |      613 |       83 |     6300 |      641 |
| 2016-10-05 |        6 |       23 |       13 |      500 |       41 |
+------------+----------+----------+----------+----------+----------+
5 rows in set (0.00 sec)

Re:dash

summaryA, summaryB, summaryCを棒グラフに

こんな感じ。
f:id:mfham:20161104003733p:plain:w300

iframeも吐き出してくれる

さっきの画像の左下にある「<>Embed」をクリックするとiframeソースをポップアップで教えてくれます。
自前のHTMLにペロッと貼ってそれを共有用にするのもいいかも。
f:id:mfham:20161104005016p:plain:w300

その他

1日1回SQLカウントするバッチを作る代わりに、SQL定期実行をRe:dashにやらせてデータも保持してくれたら最高やんって思ってたけど、単に与えられたSQLを実行して表示してるだけっぽいかな・・・
だからデータは手元で持っておかんといかんぽい。
さっきの画像には載ってないけど、ボタンひとつで結果をCSVExcelとしてダウンロードできるので、エンジニア以外の人が手軽にデータ見たりダウンロードしたりできるのはいいかも。

Ubuntu+redash簡易メモ

Ubuntu+VirtualBox簡易メモ - にっちとだじゃれ
これでUbuntuを入れたので、次に
Re:dash - Make Your Company Data Driven
を入れる。

環境

インストール

$ git clone https://github.com/getredash/redash.git
$ cd redash/setup/ubuntu

# apache止めていないとbootstrap.sh実行時にnginxのエラーが起きた
$ sudo /etc/init.d/apache2 stop

$ chmod a+x bootstrap.sh
$ sudo ./bootstrap.sh

Ubuntu+VirtualBox簡易メモ

忘れないようにするためのメモ。
Re:dash - Make Your Company Data Drivenを触りたくて。

インストール

  1. Ubuntu Server 16.04.1 LTSのイメージダウンロード
  2. virtualboxのホストオンリーアダプタの設定をしておく
  3. インストール中の言語はEnglish、enp0s3とenp0s8選ぶやつは前者
  4. 初期インストールできるやつはOpenSSH, LAMPを選択しておいた。
  5. インストールが終わったら参考資料を参考に/etc/network/interfacesを設定(enp0s8を加える)

機種変メモ

iPhone5sからiPhone7に変えました。
5sがもう言うこと聞かないレベルになってたのでちょうどいいタイミングでした。
今後のためにメモ。
※あくまでもこの記事は個人用メモなので、機種変してデータ損失起きるのが許せない方はご自身で十分調べることをおすすめします。

前提

ざっくりやったこと

  • MNP予約番号取得
    • 毎月使っていたサービス系、ポイントなどがどうなるか確認
  • OSを最新版へ更新
  • iTunesに暗号化バックアップ
  • LINE引き継ぎ方法実行
  • アプリ引き継ぎ方法実行
  • GoogleAuthenticatorで二段階認証しているサービスのバックアップコード取得

MNP予約番号取得

とあるサービスでまとめてau支払いを使っており、SIMフリーにすることでどうなるかサポートに確認しました(想像はつくけど一応)。
そのときに合わせてMNP予約番号を取得できるとのことだったので取得。

OSを最新版へ更新

7へデータを復元するときに差異があるとよくないのかなと思って、一応5sも10.0.2に更新しておきました。
(ググって、OSバージョン合わせたほうがいいという記事を見た気がします。)

iTunesに暗号化バックアップ

iTunes でのバックアップの暗号化について - Apple サポート
5sで使っていたアプリや各種データを7にも入れたかったので、iTunesでバックアップをとり7でそこから復元する方法をとることに。
なんで"暗号化"バックアップをしておいたのかというと、ググったときに、そうすればTwitterとかの認証系をやり直すことないよっていう記事をいくつか見たからです。
まぁ、もしできなかったとしてもアイパス覚えているんで困りはしないんですが、一応やっておきました。
実際、アイパス入れ直すことなく使えました。
(通常のバックアップならどうなるかはわかりません)

LINE引き継ぎ方法実行

【2016年最新版】 LINEのアカウントを引き継ぐ方法 : LINE公式ブログ
LINEの過去履歴は消えてもいいけど、フレンドリストとかは残っていて欲しいので調べて実行しておきました。
7で起動したとき、上記ブログに載っていない「本人確認する/初期化する」っていう画面が出て、本人確認するをラブとメアドとパスワードを求められました。パスワードを入力したけど通らなかったので、アプリをアンインストールしてもう一度インストールしたらブログと同じようになったのでそのままいけました。

アプリ引き継ぎ方法実行

ゲームなど、データを引き継ぎたいものはそれぞれやり方を調べて実行しておきました。
問題なし。

GoogleAuthenticator利用のもののバックアップコード取得

個人的にはこれが一番大事。危うく忘れそうでした。
事前に各サービスすべてログインし、バックアップコードを保存しておきました。
実際、7で起動した時いくつか消えていたので、バックアップコードが重宝しました。

まとめ

機種変大変。

Rubyメモ2

[mfham@localhost work]$ ruby -v
ruby 2.1.8p440 (2015-12-16 revision 53160) [x86_64-linux]

[mfham@localhost work]$ irb
2.1.8 :009 > sprintf('%05d', '10101')
 => "10101" 
2.1.8 :010 > sprintf('%05d', '02101')
 => "01089" 
2.1.8 :011 > sprintf('%05d', '08101')
ArgumentError: invalid value for Integer(): "08101"
        from (irb):11:in `sprintf'
        from (irb):11
        from /home/mfham/.rvm/rubies/ruby-2.1.8/bin/irb:11:in `<main>'

2.1.8 :017 > sprintf('%02d%03d', '10','101')                                                                                    
 => "10101" 
2.1.8 :018 > sprintf('%02d%03d', '02','101')                                                                                    
 => "02101" 
2.1.8 :019 > sprintf('%02d%03d', '08','101')                                                                                    
ArgumentError: invalid value for Integer(): "08"
        from (irb):19:in `sprintf'
        from (irb):19
        from /home/mfham/.rvm/rubies/ruby-2.1.8/bin/irb:11:in `<main>'


# Kernel.#Integer
2.1.8 :028 > Integer('10')                                                                                                      
 => 10 
2.1.8 :029 > Integer('02')                                                                                                      
 => 2 
2.1.8 :030 > Integer('08')
ArgumentError: invalid value for Integer(): "08"
        from (irb):30:in `Integer'
        from (irb):30
        from /home/mfham/.rvm/rubies/ruby-2.1.8/bin/irb:11:in `<main>'

# String#to_i
2.1.8 :021 > '10'.to_i(8)                                                                                                       
 => 8 
2.1.8 :022 > '02'.to_i(8)                                                                                                       
 => 2 
2.1.8 :023 > '08'.to_i(8)
 => 0 

2.1.8 :040 > '10'.to_i(0)
 => 10 
2.1.8 :041 > '02'.to_i(0)
 => 2 
2.1.8 :042 > '08'.to_i(0)
 => 0 

都道府県・市区町村コードを処理する何かがあり、都道府県コードがゼロ埋めされたもの、されていないもの、両方くる可能性があるのに上記のような感じで使っていたらやばい。

メモ

Rubyドキュメント

※実行は2.1.8なのにドキュメントは2.3.0見てるっていうのは許してください。

sprintf フォーマット (Ruby 2.3.0)

d
i
引数の数値を10進表現の整数として出力します。
引数が整数でなければ関数 Kernel.#Integer と同じ規則で整数に 変換されます。

module function Kernel.#Integer (Ruby 2.3.0)

引数が数値の場合は直接変換し(小数点以下切り落とし)、 文字列の場合は、進数を表す接頭辞を含む整数表現とみなせる文字列のみ 変換します。

なるほど、sprintfでd(i)を指定したら、Kernel.#Integerと同様の動きをするのか。
String#to_iを使ってみたけど、これとは挙動が違うみたい。なぜ?

気になるなーるね

調べる。
Kernel.#IntegerとString#to_iのソース。
module Kernel - Documentation for Ruby 2.3.0
class String - Documentation for Ruby 2.3.0

Kernel.#Integer

最終的にこれを返す。

rb_convert_to_integer(arg, base);

Integer('08')ならrb_convert_to_integer('08', 0)かな?
rb_convert_to_integerをもう少し追ってみると、
https://github.com/ruby/ruby/blob/4915ce691d147a460e14531f4031d6934c5e8c5c/object.c#L2701
第一引数のタイプがT_STRINGならrb_str_to_inum(val, base, TRUE)をreturnしている。

String#to_i

最終的にこれを返す。

rb_str_to_inum(str, base, FALSE);

'08.to_i(8)ならrb_str_to_inum('08', 8, FALSE)かな?
'08.to_i(0)ならrb_str_to_inum('08', 0, FALSE)かな?

違い

rb_str_to_inumの第三引数がTRUEとFALSEで違うみたい。
ちなみにsprintfはこれかな?
https://github.com/ruby/ruby/blob/00fcd967d9900713fa7f617d9a5077ec178e073f/sprintf.c#L842
rb_str_to_inum(val, 0, TRUE)
(base=0だから、プリフィクスから基数を判断するのかな)

rb_str_to_inumは何するの?

https://github.com/ruby/ruby/blob/772fd010b6a76887d9be9389f60cc024bd34f83b/bignum.c#L4207
rb_cstr_parse_inumの結果を受けて、NIL_P(ret)が真なら第三引数(TRUE, FALSEのやつ)をチェックして、TRUEならエラー(https://github.com/ruby/ruby/blob/772fd010b6a76887d9be9389f60cc024bd34f83b/bignum.c#L3706)、FALSEなら0(macro INT2FIX (Ruby 2.3.0))を返している。
rb_cstr_parse_inumを追うのは今はやめておこう・・・
https://github.com/ruby/ruby/blob/772fd010b6a76887d9be9389f60cc024bd34f83b/bignum.c#L4018

まとめ

Kernel.#Integer、Kernel.#sprintfはrb_str_to_inumの第三引数がTRUEになっておりエラーを投げる。
String#to_iはrb_str_to_inumの第三引数がFALSEになっており、0を返す。
使い方気をつけよう・・・

docs.ruby-lang.orgのKernel.#Integerの引数、第二引数base=0つけたほうがいいんやない?

Rubyメモ1

[mfham@localhost work]$ ruby -v
ruby 2.1.8p440 (2015-12-16 revision 53160) [x86_64-linux]
[mfham@localhost work]$ irb
2.1.8 :001 > str = 'abcde'
 => "abcde" 
2.1.8 :002 > puts str[0..-2]
abcd
 => nil 
2.1.8 :003 > (0..-2).each do |n| puts n end
 => 0..-2 
2.1.8 :004 >