動かざることバグの如し

近づきたいよ 君の理想に

Ubuntu 18.04以降でDNSサーバーを変更する方法

めっちゃハマった

環境

ネームサーバーを変更できない問題

DNSの変更は/etc/resolv.conf、という時代は古い。Ubuntu 17.04以降ではsystemd-resolvedがデフォルトで動作しているため、/etc/resolv.confを書き換えても変更されない

そもそも/etc/resolv.confは/run/resolvconf/resolv.confのシンボリックリンクになっている()

$ ls -l /etc/resolv.conf 
lrwxrwxrwx 1 root root 29  1月 15 11:13 /etc/resolv.conf -> ../run/resolvconf/resolv.conf

UbuntuDNSサーバーを変更する方法

systemd-resolve --statusを実行すると現在の設定されているDNSサーバーが表示される。

変更したいときは /etc/systemd/resolved.confDNSの項目に追加する 複数ある場合は半角スペースで区切って追加

[Resolve]
DNS=8.8.8.8 8.8.4.4

で再起動して反映

systemctl restart systemd-resolved

再度systemd-resolve --statusを実行すると設定したネームサーバーに変わっている。

# systemd-resolve --status
Global
         DNS Servers: 8.8.8.8
                      8.8.4.4
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
(略)

Pythonでヒストグラムを生成する

こんなグラフ ヒストグラム自体に「グラフ」の意味があるからヒストグラムのグラフを生成っていうのはおかしいらしい(棒グラフグラフ的な

f:id:thr3a:20180708205455p:plain

環境

コード

%matplotlib inline

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 平均 50, 標準偏差 10 の正規乱数を1,000件生成
dummy_nums = np.random.normal(50, 10, 1000)

df = pd.DataFrame(dummy_nums)
plot = df.plot( y=[0], bins=50, alpha=0.5, figsize=(16,4), kind='hist')
plot.get_figure().savefig("output.png")

グラフ生成にはmatplotlibを使っているが、実はpandasの中にmatplotlibのラッパーがあり、特にいじらなくてもいい感じのグラフを生成できる。いえい

Rubyの並列処理でWEBサイトの負荷テストを実行する

いわゆるWEBサイトのベンチマークApache Benchがいちばん有名だが、いかんせんインストールしてやらなきゃいけなくて面倒

Rubyでサクッと負荷テストしてみたかったので作ってみた

環境

コード

10並列で計1000リクエスト実行したい場合

require 'thread'
require "rest-client"

locks = Queue.new
10.times { locks.push :lock }
error_count = 0

Array.new(1000) do |i|
  Thread.new do
    lock = locks.pop
    print "#{i} "
    options = {
      method: :get,
      url: "http://example.com/",
      timeout: 2
    }
    begin
      RestClient::Request.execute(options)
    rescue => e
      error_count += 1
    end
    locks.push lock
  end
end.each(&:join)
puts
puts "ERROR_COUNT: #{error_count}"

これをtime bundle exec ruby bench.rbとかで実行すると、時間計測とエラー落ちの数を調べることができる

Railsでrakeタスクから別のタスクを呼び出す

環境

やりたいこと

Railsのtaskから別のタスクを実行したい。

方法

Railsのタスクはbundle exec rails xxx:xxxxのように実行するが、結局実態はただのrakeタスクなのでinvoke()を実行すれば良い

namespace :sample do
   task hoge: :environment do |t|
    puts "hoge"
  end
  
  task piyo: :environment do |t|
    puts "piyo"
    Rake::Task["sample:hoge"].invoke
  end

rails sample:piyoを実行するとpiyoからhogeが実行される。

piyo
hoge

引数を受け取る場合はinvokeメソッドで渡せば良い

namespace :sample do
  
  task :hoge, [:name] => :environment do |task, args|
    puts "hello ! #{args.name}"
  end
  
  task piyo: :environment do |t|
    puts "piyo"
    Rake::Task["sample:hoge"].invoke("taro")
  end

piyo
hello ! taro

となる

stat.inkの統計CSVのスキーマ

game-ver 2.2.1 #ゲームバージョン
lobby-mode gachi 
lobby standard 
mode yagura
stage tachiuo
time 106
win bravo
knockout TRUE
A1-weapon momiji # A1は必ず投稿者になる
A1-kill-assist 3
A1-kill 1
A1-assist 2
A1-death 3
A1-special 1
A1-inked 413
A1-rank a-
A1-level 41
A2-weapon 52gal_deco
A2-kill-assist 2
A2-kill 2
A2-assist 0
A2-death 5
A2-special 0
A2-inked 221
A2-rank a+
A2-level 28
A3-weapon splatscope
A3-kill-assist 0
A3-kill 0
A3-assist 0
A3-death 3
A3-special 0
A3-inked 284
A3-rank a-
A3-level 31
A4-weapon kelvin525
A4-kill-assist 1
A4-kill 0
A4-assist 1
A4-death 5
A4-special 1
A4-inked 278
A4-rank a-
A4-level 22
B1-weapon bucketslosher_deco
B1-kill-assist 5
B1-kill 5
B1-assist 0
B1-death 1
B1-special 2
B1-inked 421
B1-rank a-
B1-level 19
B2-weapon liter4k_scope
B2-kill-assist 9
B2-kill 7
B2-assist 2
B2-death 1
B2-special 3
B2-inked 511
B2-rank a+
B2-level 52
B3-weapon sshooter_collabo
B3-kill-assist 5
B3-kill 3
B3-assist 2
B3-death 1
B3-special 1
B3-inked 311
B3-rank a+
B3-level 60
B4-weapon hotblaster_custom
B4-kill-assist 0
B4-kill 0
B4-assist 0
B4-death 0
B4-special 0
B4-inked 0
B4-rank a-
B4-level 41