GROUP BY のイメージ
ただ並べ替えるだけの「GROUP BY」じゃなくて、指定されたカラムで分けて、分けられたそれぞれで考える というイメージ。
mysql> select * from users; +----+------+------+------+ | id | name | age | sex | +----+------+------+------+ | 1 | hoge | 12 | 1 | | 2 | foo | 76 | 0 | | 3 | bar | 45 | 0 | | 4 | hoge | 34 | 0 | | 5 | foo | 44 | 1 | | 6 | bar | 24 | 1 | +----+------+------+------+
これを以下のような name, man_age, woman_age カラムのような男女別の年齢を出すことを考える。
+------+---------+-----------+ | name | man_age | woman_age | +------+---------+-----------+ | bar | 24 | 45 | | foo | 44 | 76 | | hoge | 12 | 34 | +------+---------+-----------+
出してみる
まずは、hoge, foo, bar それぞれでまとめたいので、GROUP BY name として分ける。
mysql> select name from users; +------+ | name | +------+ | hoge | | foo | | bar | | hoge | | foo | | bar | +------+ 6 rows in set (0.00 sec) mysql> select name from users group by name; +------+ | name | +------+ | bar | | foo | | hoge | +------+ 3 rows in set (0.00 sec)
また、CASE を使うことで if else のような操作ができる。
mysql> select name,case when sex = 1 then age else 0 end as man_age, case when sex = 0 then age else 0 end as woman_age from users; +------+---------+-----------+ | name | man_age | woman_age | +------+---------+-----------+ | hoge | 12 | 0 | | foo | 0 | 76 | | bar | 0 | 45 | | hoge | 0 | 34 | | foo | 44 | 0 | | bar | 24 | 0 | +------+---------+-----------+ 6 rows in set (0.00 sec)
上記の表を name ごとにそれぞれ合計すれば出したい表ができる。
mysql> select name,sum(case when sex = 1 then age else 0 end) as man_age, sum(case when sex = 0 then age else 0 end) as woman_age from users group by name; +------+---------+-----------+ | name | man_age | woman_age | +------+---------+-----------+ | bar | 24 | 45 | | foo | 44 | 76 | | hoge | 12 | 34 | +------+---------+-----------+ 3 rows in set (0.00 sec)
まとめ
GROUP BY name ときたら、「name で分けてそれぞれで考える」 かつ並べ替えるというイメージ
AndroidからSlack WebHookを利用
Android から Slack WebHookにPOSTしてみます。
使用ライブラリ
- Gson
- ButterKnife
- OkHttp
build.gradle の dependencies に追加
compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' compile 'com.google.code.gson:gson:2.8.0' compile 'com.squareup.okhttp:okhttp:2.0.0'
コード
送るメッセージを入れるクラス
public class Slack { public String text; public Slack(String text) { this.text = text; } }
ボタンを押したらPOSTする
@OnClick(R.id.button) public void getRequest(final Button button) { button.setEnabled(false); new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String result = null; Gson gson = new Gson(); RequestBody requestBody = RequestBody.create( MediaType.parse("text/plain"), gson.toJson(new Slack("Hello")) ); Request request = new Request.Builder() .url("WebHook URL") .post(requestBody) .build(); OkHttpClient client = new OkHttpClient(); try { Response response = client.newCall(request).execute(); result = response.body().string(); } catch (IOException e) { e.printStackTrace(); } // 返す return result; } @Override protected void onPostExecute(String result) { Log.d("result", result); button.setEnabled(true); } }.execute(); }
各言語のテストコードのメモ
テストの書き方のメモ
たまに忘れるので、随時更新。 プログラムの例は 足し算するだけの add関数
Python
テストツールは nose を使います。
$ pip install nose
で入ります。
add関数
# calc.py def add(a: int, b: int) -> int: return a+b
テストコード
# test_calc.py import unittest from nose.tools import ok_, eq_ import calc class TestCalc(unittest.TestCase): def test_add(self): value = calc.add(1,5) eq_(6, value)
テスト実行
$ nosetests -v
Golang
add関数
# calc.go package main func add(a, b int) int { return a + b }
テストコード
# calc_test.go package main import ( "testing" "fmt" ) func TestSum(t *testing.T) { if add(1, 2) != 3 { // Failed Message t.Fatal("sum(1,2) should be 3, but doesn't match") } }
テスト実行
$ go test -cover -v
glide
入れてるなら
$ go test -cover -v `glide novendor`
Ruby
Gemfileを使って rspec をインストール
Gemfile を使って rspec を入れます。
Gemfile生成
$ bundle init
Gemfileをいじる
$ vim Gemfile source "https://rubygems.org" gem "rspec"
インストール
$ bundle install
入ってるか確認
$ bundle exec rspec -v 3.5.4
add関数
# calc.rb def add(a, b) a + b end
テストコード
テストコードをまとめるディレクトリを作ります。
$ mkdir spec
テストコード
# spec/calc_test.rb require "./calc" describe 'add' do it '1 + 1 = 2' do expect(add(1, 2)).to eq 3 end it '10 - 1 は 9 になること' do expect(add(10, -1)).to eq 9 end end
テスト実行
$ bundle exec rspec
recipe でよく使うコマンド
recipeでよく使うコマンドのメモです。
パッケージインストール
NTPサーバの例
%w{ ntp }.each do |pkg| package pkg do action :install end end
サービスの起動
service "ntpd" do action [:enable, :start] end
テンプレートファイル切り替え
template "/etc/ntp.conf" do source "ntp.conf.erb" user "root" group "root" mode 0644 end
コマンド実行
execute "ntpdate ntp.nict.jp" do command "ntpdate ntp.nict.jp" user "root" group "root" end
コマンド連続実行
zabbixでの例
bash "create user, database" do code <<-EOH mysql -u root -e "create database zabbix character set utf8 collate utf8_bin;" mysql -u root -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';" mysql -u root -e "flush privileges;" EOH end
rpmファイルのインストール
nginxの場合
remote_file "#{Chef::Config[:file_cache_path]}/nginx-release-rhel-6-0.el6.ngx.noarch.rpm" do source "http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm" not_if "rpm -qa | grep -q '^nginx-release'" action :create notifies :install, "rpm_package[nginx-release]", :immediately end rpm_package "nginx-release" do source "#{Chef::Config[:file_cache_path]}/nginx-release-rhel-6-0.el6.ngx.noarch.rpm" action :nothing end
githubのリポジトリを入れる
%w{ https://github.com/k2la/tuning.git }.each do |repo| file = repo.split("/")[-1].split(".")[0] git "/home/vagrant/#{file}" do repository repo revision "master" user "vagrant" group "vagrant" action :sync end end
俺を支えた専門書 「コンピュータシステム」
今までに読んだコンピュータシステムに関する専門書を書いていきます。
コンピュータシステム
- OS
- アーキテクチャ
- データベース
- ネットワーク
- セキュリティ
OS
- 作者: Robert Love,ロバートラブ,千住治郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/16
- メディア: 大型本
- 購入: 5人 クリック: 181回
- この商品を含むブログ (31件) を見る
- 作者: 林晴比古
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/07
- メディア: 単行本(ソフトカバー)
- 購入: 19人 クリック: 182回
- この商品を含むブログ (41件) を見る
- 作者: 河野健二
- 出版社/メーカー: 朝倉書店
- 発売日: 2007/10
- メディア: 単行本
- 購入: 2人 クリック: 19回
- この商品を含むブログ (6件) を見る
Inside Linux Software オープンソースソフトウェアのからくりとしくみ
- 作者: 佐藤竜一
- 出版社/メーカー: 翔泳社
- 発売日: 2007/03/14
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 99回
- この商品を含むブログ (17件) を見る
Linuxシステム[実践]入門 (Software Design plus)
- 作者: 沓名亮典
- 出版社/メーカー: 技術評論社
- 発売日: 2013/07/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (13件) を見る
- 作者: 平田豊
- 出版社/メーカー: 工学社
- 発売日: 2011/07
- メディア: 単行本
- 購入: 1人 クリック: 48回
- この商品を含むブログ (5件) を見る
アーキテクチャ
コンピュータアーキテクチャ (電子情報通信レクチャーシリーズ)
- 作者: 坂井修一,電子情報通信学会,電子通信学会=
- 出版社/メーカー: コロナ社
- 発売日: 2004/03/01
- メディア: 単行本
- 購入: 8人 クリック: 75回
- この商品を含むブログ (2件) を見る
- 作者: 馬場敬信
- 出版社/メーカー: オーム社
- 発売日: 2016/11/23
- メディア: 単行本
- この商品を含むブログを見る
- 作者: デイビッド・A・パターソン,ジョン・L・ヘネシー,成田光彰
- 出版社/メーカー: 日経BP社
- 発売日: 2011/11/17
- メディア: 単行本
- 購入: 7人 クリック: 19回
- この商品を含むブログ (8件) を見る
データベース
達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2012/03/16
- メディア: 単行本(ソフトカバー)
- 購入: 21人 クリック: 316回
- この商品を含むブログ (24件) を見る
- 作者: 高橋麻奈,あづま笙子,トレンドプロ
- 出版社/メーカー: オーム社
- 発売日: 2005/12
- メディア: 単行本
- 購入: 22人 クリック: 292回
- この商品を含むブログ (57件) を見る
ネットワーク
インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門
- 作者: みやたひろし
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/12/27
- メディア: 大型本
- この商品を含むブログ (8件) を見る
- 作者: 竹下隆史,村山公保,荒井透,苅田幸雄
- 出版社/メーカー: オーム社
- 発売日: 2012/02/25
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 34回
- この商品を含むブログ (35件) を見る
- 作者: 網野衛二
- 出版社/メーカー: 技術評論社
- 発売日: 2010/09/11
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 8回
- この商品を含むブログ (11件) を見る
〔改訂新版〕 3分間ルーティング基礎講座 (3分間NetWorkingシリーズ)
- 作者: 網野衛二
- 出版社/メーカー: 技術評論社
- 発売日: 2013/06/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
- 作者: 網野衛二
- 出版社/メーカー: 技術評論社
- 発売日: 2010/01/06
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 129回
- この商品を含むブログ (11件) を見る
- 作者: 日経NETWORK
- 出版社/メーカー: 日経BP社
- 発売日: 2014/01/17
- メディア: 単行本
- この商品を含むブログ (3件) を見る
実践 パケット解析 第2版 ―Wiresharkを使ったトラブルシューティング
- 作者: Chris Sanders,高橋基信,宮本久仁男,岡真由美
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/11/17
- メディア: 大型本
- 購入: 1人 クリック: 10回
- この商品を含むブログ (9件) を見る
- 作者: 網野衛二
- 出版社/メーカー: 技術評論社
- 発売日: 2009/06/12
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 85回
- この商品を含むブログ (23件) を見る
セキュリティ
- 作者: 齋藤孝道
- 出版社/メーカー: オーム社
- 発売日: 2013/09/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
- 作者: 徳丸浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2011/03/01
- メディア: 単行本
- 購入: 119人 クリック: 4,283回
- この商品を含むブログ (146件) を見る
- 作者: 姜秉卓,金輝剛,金凡峻
- 出版社/メーカー: インプレスジャパン
- 発売日: 2013/09/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
- 作者: Digital Travesia管理人うさぴょん
- 出版社/メーカー: 秀和システム
- 発売日: 2014/10/22
- メディア: 単行本
- この商品を含むブログ (1件) を見る
Linuxサーバーセキュリティ徹底入門 オープンソースによるサーバー防衛の基本
- 作者: 中島能和
- 出版社/メーカー: 翔泳社
- 発売日: 2013/10/22
- メディア: 大型本
- この商品を含むブログ (4件) を見る
デジタル・フォレンジック概論?フォレンジックの基礎と活用ガイド?
- 作者: ?室 英太郎,國浦 淳
- 出版社/メーカー: 東京法令出版
- 発売日: 2015/04/14
- メディア: 単行本
- この商品を含むブログ (2件) を見る
俺を支えた専門書 「数学系」
今までに読んだ数学系の内容に関する専門書を書いていきます。
数学系
微分積分
スバラシク実力がつくと評判の微分積分キャンパス・ゼミ―大学の数学がこんなに分かる!単位なんて楽に取れる!
- 作者: 馬場敬之
- 出版社/メーカー: マセマ
- 発売日: 2013/05
- メディア: 単行本
- この商品を含むブログを見る
まずはこの一冊から 意味がわかる微分・積分 (BERET SCIENCE)
- 作者: 岡部恒治,本丸諒
- 出版社/メーカー: ベレ出版
- 発売日: 2012/03
- メディア: 単行本
- 購入: 1人 クリック: 1回
- この商品を含むブログを見る
線形代数
- 作者: 平岡和幸,堀玄
- 出版社/メーカー: オーム社
- 発売日: 2004/10
- メディア: 単行本
- 購入: 27人 クリック: 278回
- この商品を含むブログ (90件) を見る
スバラシク実力がつくと評判の線形代数キャンパス・ゼミ―大学の数学がこんなに分かる!単位なんて楽に取れる!
- 作者: 馬場敬之
- 出版社/メーカー: マセマ
- 発売日: 2015/12
- メディア: 単行本
- この商品を含むブログを見る
まずはこの一冊から 意味がわかる線形代数 (BERET SCIENCE)
- 作者: 石井俊全
- 出版社/メーカー: ベレ出版
- 発売日: 2011/06/22
- メディア: 単行本
- 購入: 1人 クリック: 5回
- この商品を含むブログを見る
確率統計
- 作者: 平岡和幸,堀玄
- 出版社/メーカー: オーム社
- 発売日: 2009/10/20
- メディア: 単行本(ソフトカバー)
- 購入: 10人 クリック: 133回
- この商品を含むブログ (31件) を見る
まずはこの一冊から 意味がわかる統計学 (BERET SCIENCE)
- 作者: 石井俊全
- 出版社/メーカー: ベレ出版
- 発売日: 2012/01
- メディア: 単行本
- 購入: 4人 クリック: 15回
- この商品を含むブログを見る
まずはこの一冊から 意味がわかる統計解析 (BERET SCIENCE)
- 作者: 涌井貞美
- 出版社/メーカー: ベレ出版
- 発売日: 2013/02
- メディア: 単行本
- この商品を含むブログ (2件) を見る
まずはこの一冊から意味がわかる多変量解析 (BERET SCIENCE)
- 作者: 石井俊全
- 出版社/メーカー: ベレ出版
- 発売日: 2014/06/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
機械学習
- 作者: 谷口忠大
- 出版社/メーカー: 講談社
- 発売日: 2014/09/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
- 作者: 中井悦司
- 出版社/メーカー: 技術評論社
- 発売日: 2015/10/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)
- 作者: Sebastian Raschka,株式会社クイープ,福島真太朗
- 出版社/メーカー: インプレス
- 発売日: 2016/06/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
- 作者: Willi Richert,Luis Pedro Coelho,斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/10/25
- メディア: 大型本
- この商品を含むブログ (5件) を見る
暗号
- 作者: 結城浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/08/26
- メディア: 大型本
- この商品を含むブログ (14件) を見る
- 作者: 三谷政昭,ひのきいでろう,佐藤伸一,ウェルテ
- 出版社/メーカー: オーム社
- 発売日: 2007/04
- メディア: 単行本
- 購入: 3人 クリック: 35回
- この商品を含むブログ (16件) を見る
トコトンやさしい暗号の本 (B&Tブックス―今日からモノ知りシリーズ)
- 作者: 伊豆哲也,佐藤証,田中実,花岡悟一郎,岩田哲,今井秀樹
- 出版社/メーカー: 日刊工業新聞社
- 発売日: 2010/04
- メディア: 単行本
- クリック: 4回
- この商品を含むブログ (3件) を見る
アルゴリズム
- 作者: George T. Heineman,Gary Pollice,Stanley Selkow,黒川利明,黒川洋
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/04/26
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 656回
- この商品を含むブログ (72件) を見る
- 作者: (株)アンク
- 出版社/メーカー: 翔泳社
- 発売日: 2003/08/05
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 77回
- この商品を含むブログ (7件) を見る
- 作者: 高橋麻奈
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/03/02
- メディア: 単行本
- クリック: 1回
- この商品を含むブログ (2件) を見る
俺を支えた専門書 「プログラミング言語」
今までに読んだプログラミング言語に関する専門書を書いていきます。
言語
今現在で書ける言語は以下のとおりです。
C
- 作者: MMGames
- 出版社/メーカー: 秀和システム
- 発売日: 2011/06/24
- メディア: 単行本
- 購入: 3人 クリック: 600回
- この商品を含むブログ (1件) を見る
- 作者: 株式会社アンク
- 出版社/メーカー: 翔泳社
- 発売日: 2016/12/15
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/01
- メディア: 単行本
- 購入: 22人 クリック: 147回
- この商品を含むブログ (75件) を見る
C++
- 作者: ハーバート・シルト,神林靖,トップスタジオ
- 出版社/メーカー: 翔泳社
- 発売日: 2010/10/20
- メディア: 大型本
- 購入: 8人 クリック: 14回
- この商品を含むブログ (3件) を見る
- 作者: (株)アンク
- 出版社/メーカー: 翔泳社
- 発売日: 2005/04/21
- メディア: 単行本
- 購入: 11人 クリック: 126回
- この商品を含むブログ (21件) を見る
Java
- 作者: 林晴比古
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/12/01
- メディア: 大型本
- クリック: 2回
- この商品を含むブログ (1件) を見る
パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)
- 作者: アリエル・ネットワーク株式会社,井上誠一郎,永井雅人,松山智大
- 出版社/メーカー: 技術評論社
- 発売日: 2009/09/24
- メディア: 大型本
- 購入: 26人 クリック: 360回
- この商品を含むブログ (35件) を見る
HTML/CSS
- 作者: 狩野祐東
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/05/28
- メディア: 単行本
- この商品を含むブログ (3件) を見る
- 作者: 富士通エフ・オー・エム株式会社
- 出版社/メーカー: FOM出版
- 発売日: 2013/06/04
- メディア: 大型本
- この商品を含むブログを見る
JavaScript
改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/30
- メディア: 大型本
- この商品を含むブログを見る
パーフェクトJavaScript (PERFECT SERIES 4)
- 作者: 井上誠一郎,土江拓郎,浜辺将太
- 出版社/メーカー: 技術評論社
- 発売日: 2011/09/23
- メディア: 大型本
- 購入: 24人 クリック: 588回
- この商品を含むブログ (12件) を見る
PHP
- 作者: 山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2016/04/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
MySQL
- 作者: 西沢夢路
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/05/01
- メディア: 単行本
- 購入: 2人 クリック: 10回
- この商品を含むブログ (9件) を見る
Python
- 作者: 柴田淳
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/08/29
- メディア: 単行本
- 購入: 1人 クリック: 13回
- この商品を含むブログ (41件) を見る
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (30件) を見る
Ruby
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (22件) を見る
Golang
- 作者: 松木雅幸,mattn,藤原俊一郎,中島大一,牧大輔,鈴木健太,稲葉貴洋
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/09
- メディア: 大型本
- この商品を含むブログ (2件) を見る
- 作者: 飛松清,奥谷謙一
- 出版社/メーカー: リックテレコム
- 発売日: 2016/06/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る