エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

ITエンジニアが飲んではいけない飲み物

きっかけ

ある飲料水を飲んだら、酷い自体に落ちた。
自分への戒めと他のエンジニアの助言のために書く

問題の商品

日清食品ピルクル

www.nissin.com

問題になった減少

飲んで数時間後、お腹の調子が。。。
数日便秘だったこともあり、強烈な便意が。。。
たぶん、下剤並みの威力があるんじゃないかな?

下記のサイトによると、カゼイ菌・ナトリウムが入っているらしい。

ピルクルの便秘への効果と飲み方について!

問題は、カゼイ菌のようだ。
通常の乳酸菌は、乳酸菌は胃酸や胆汁で死滅してしまうらしいが、カゼイ菌は耐性が強く死滅することがないらしい。
ゴキブリみたいな菌だな。。。
そして、生きたまま腸内に運ばれることによって、整腸効果、つまり排便作用が働く。

カゼイ菌については、下記サイトに詳しく書いてあるので、参考にしてみて。

L・ガゼイ菌の効果・効能

善玉菌として働いた際に、乳酸と酢酸が分泌され、便が押し出されるらしい。

飲んだ時間帯

これが最悪だった。
朝の出社前。
そして、便意が来たのが、出社時間の1時間あと。
知らない人が多いかもしれないが、東京のソフトウェア開発のビルのトイレって空いていることが少ない。
特に朝と昼は、開いているトイレは奇跡に近い。

おかげで、「お外の世界にこんにちは」思想な物体を必死に食い止めながら、いろんな階のトイレを探した。
開いているトイレを見つけた時は、昇天するような気持ちだった。

じゃ、どうすればいいんだってばよ?

トイレを確保した状態で飲む。これしかない!
トイレで飲むわけにも行かないので、なるべく家で飲んだほうがいい。
ただし、一人暮らしの人に限る。
たまに家族が入っていてダメな時があるからな。

得た教訓

  • 排便を促す時は家でやる
  • 便秘にならないようにする
  • 開いているトイレに入ったら神に感謝する
  • エンジニアはお腹が弱い
  • 朝・昼の排便は要注意

平成29年度データベーススペシャリスト対策まとめ

データモデル

概念データモデル

ユーザの要件定義に基づいて作成。
使用するDBMSに依存しない。
E-R図が該当する。

論理データモデル

概念データモデルを使用するDBMSの種類を前提に、再整理したデータモデル。
階層・ネットワーク・関係モデルが該当。

物理データモデル

DBMS固有のデータ構造や格納する型を前提に、詳細に定義したデータモデル。
テーブル定義表、インデックスなど。

ERD(ER図)

概念データモデルを表現する図形。
エンティティを表す四角形と、関係を表す矢印・直線を使用する。

インスタンス

エンティティの内容に沿った実データのこと

主キー

インスタンスを一意に識別できる属性の組み合わせ。
ERD上では、下線を引いて主キーを示す。
主キーが複数の属性からなる場合、複合キー・連結キーということがある。
主キーには下記の制約がある。

制約名 内容
一意性制約 エンティティ内に1つ(もしくは、1くみ)しか存在しない組み合わせであること。UNIQUE制約とも言う
非NULL制約 値がNULLではないこと(そのまんまやないかい!)

リレーションシップ

エンティティ間のインスタンスの数の対応関係のこと。

  • 1:1
  • 1:多(多:1)
  • 多:多

上記表現は、カーディナリティ、デグリー、多重度という。
なるべく1:1の関係になるように心がける。
また、それを目指して複雑なテーブル設計にならないようにする。 多:多は、必ず避ける。 なぜならば、未完成の設計に該当するため。
回答する場合は、多:多の関係を書いたら、必ず減点されるので注意

外部キー

あるエンティティの属性が、他のエンティティの主キーを参照する属性のこと。
エンティティでは、破線の下線で表現する。 主キーと外部キーの関係は、ほぼ1:多の関係になる。

連関エンティティ

多:多の関係にあるエンティティ間の間に存在するエンティティのこと。
お互いの主キーの組み合わせのエンティティになる。

スーパータイプとサブタイプ

汎化

複数のエンティティに共通する属性・属性値を、1つのエンティティにまとめること。

スーパータイプ

汎化した結果の共通項目のエンティティ。
スーパータイプとサブタイプの主キーは、ほぼ一致する。

サブタイプ

汎化した結果、残った属性のエンティティ

排他的サブタイプ

スーパータイプのインスタンスができたとき、複数あるサブタイプのエンティティのうち、どれか1つだけインスタンスが生成される関係のこと。 スーパータイプに、サブタイプを区別する属性を持つことが一般的。
ほとんどのサブタイプは、排他的サブタイプに該当する。

共存的サブタイプ

スーパータイプのインスタンスができたとき、全サブタイプのインスタンスが生成される可能性がある関係のこと。
スーパータイプにサブタイプの数だけ区分を持つ必要がある。

関係データモデル

関係モデル

行・列の2次元表のデータ構造で表記。

候補キー

データを一意に特定できる極小な属性群のこと。
NULLも許容する。

主キー

候補キーの中から選ぶ。
非NULLでなければならない。

非キー属性

候補キー以外のキー

代理キー

候補キーで、主キーの以外の属性のこと。

関数従属性

ある属性が決まると、他の属性も一意に決まる性質をもつ属性のこと。
1つの関係をもつX,Y間で、Xの属性が決まるとYも決まるとき、YはXに関数従属するという。
Xは、決定項。Yは、非決定項という。
決定項と非決定項は、多:1の関係になる。

正規化

データベースから冗長性を排除すること。

正規化用語

完全関数従属性

非キー属性が、候補キーを構成する全ての属性に関数従属している。
候補キーの属性が1つのみの場合は、他の属性は全て完全関数従属している。
候補キーの属性が2つ以上の場合、全て決まると値がきまる属性を完全関数従属しているという。

部分関数従属

候補キーの属性が2つ以上の場合で、候補キーの一部が決まると、データが一意になること。

推移的従属性

ある属性が決まると非キー属性の属性がきまり、さらにその非キー属性が別の非キー属性と一意になっている関係。

非正規系

1レコード内に、項目が複数ある属性が存在する状態。

第1正規系

繰り返し項目がない状態

第2正規形

非キー属性が、完全関数従属している状態にしなければいけない。
※非キー属性が部分関数従属していないこと。
部分関数従属の属性は、別テーブルに分ける。

第3正規形

非キー属性間で、推移的従属性が存在しないこと。

第4正規形

候補キーと非キー属性に多値従属性がない関係。

多値従属性

決定稿が決まると、複数の非決定項が決まること。

各正規化の判断基準

正規化 根拠
第1正規形 属性値に繰り返しがない
第2正規形 属性に繰り返しがなく、非キーがいずれも候補キーに対して完全従属している
第3正規形 属性に繰り返しがなく、非キーがいずれも候補キーに対して完全従属しており、候補キーと非キーに推移関数従属性がない

非正規化の問題点

DB更新時に異常が発生する

更新種類 問題内容
挿入 事前登録できない。もしくは、重複登録しなければいけない。
更新 重複更新しなければいけない。
削除 最後の行を削除すると、関係が失われる

関係代数

データの関係を定義する演算式。
下記の種類がある。

  • 集合演算
    • 直積
  • 関係演算
    • 射影
    • 選択
    • 結合

SQL

DB定義・操作を実行するために使用される言語。

データ定義

  • CREATE SCHEMA
    スキーマ作成
  • CREATE TABLE
    テーブル作成
  • CREATE VIEW
    ビュー作成
  • CREATE ROLLE
    権限作成
  • ALTER
    スキーマ・テーブル・ビュー定義の変更
  • DROP
    スキーマ・テーブル・ビューの削除
  • GRANT
    アクセス権限付与
  • REVOKE
    アクセス権限削除

データ操作

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

SELECT

基本文法

SELECT 属性
FROM 表明
WHERE 条件
GROUP BY グループ化項目
HAVING グループ化後の抽出条件
ORDER BY ソート条件

属性に対する操作

DISTINCT

重複した行をまとめる

集合関数

  • MAX
  • MIN
  • AVG
  • SUM
  • COUNT

演算子の優先順位

優先順位 演算子
1 *, /
2 +, -
3 =, <>, <, >, <=, >=
4 IS NULL, IS NOT, LIKE, IN, BETWEEN
5 NOT
6 AND
7 OR

()をつければ、優先されて計算される。

特殊な操作

UNION

UNION, UNION ALL で和演算ができる。
UNION ALLで重複した行をまとめられる。

INTERSECT

積演算

EXCEPT

差演算

INSERT, UPDATE, DELETE

INSERTの基本文法

INSERT INTO テーブル名 (属性)
VALUES(値)

UPDATEの基本文法

UPDATE テーブル名
SET 列名 = 値, 列名 = 値
WHERE 条件

DELETEの基本文法

DELETE FROM テーブル
WHERE 条件

DDL

CREATE TABLE

CREATE TABLE テーブル名(
    列名 データ型 列制約,
    列名 データ型 列制約
    )

外部キーの更新・削除規則

動作 概要
NO ACTION 主キー側の行を削除・更新するとき、外部キー側に同じ値があれば、主キー側の更新・削除が拒否される。
CASCADE 主キー側が更新・削除される場合、外部キー側の同一値の値が更新・削除される。
SET DEFUALT 主キー側を削除するとき、外部キー側をデフォルト値に変える。
SET NULL 主キー側を削除するとき、外部キー側をNULLに設定する。

DBMS関連

トランザクション

トランザクション処理

データベースの更新・削除・参照などの複数の処理を1つにまとめること。

ACID特性

  • Atoromicity:原子性
    処理された/されてないのどちらかになること。
  • Consistency:一貫性
    データベースの状態が一貫していること。
  • Isolation:隔離性
    トランザクションの並列処理ができること。
  • Durability:耐久性
    トランザクション終了後、その後の障害に影響されずにデータを保持できること。

隔離性を満たさない現象

ロストアップデート

更新したはずのデータが更新される前に戻ってしまい、更新内容が消失する現象。

ダーティリード

ロールバック前のデータを読み取って、誤読してしまう現象。

ノンリピータブルリード

トランザクションが2回同じデータを読み取った時、別々の値を読み込んでしまう現象。

ファントムリード

トランザクションが2回以上、同一範囲のデータを読み取った時、最初の1回目はなかったデータを2回めで読み取ってしまうこと。

隔離性水準

トランザクションが別トランザクションが受ける影響の許容度。
下記種類が存在する。

隔離性水準 ダーティリード ノンリピータブルリード ファントムリード
Read Uncommitted あり あり あり
Read Committed なし あり あり
Repeatable Read なし なし あり
Serializable なし なし なし

排他制御

楽観法

書き込み時に更新の有無をチェックする。
ロックをしない。

時刻印法

時刻印を保持し、他のトランザクションと競合して内科を判定する。
ロックしてない。

ロック法

一定の制約があるロックを掛けて、更新を行う。
ロックする範囲を、行・ページ・テーブル・データベースから選べる。

ロックには、共有ロックと専有ロックがある。

デッドロック

トランザクションが互いに共有資源をロックし、ロック解除を待って処理が進まなくなる状態

防止

決められた順序に従って更新をさせる。

検知

2相ロック

更新時にロックを掛け、ロックを開放する際は、すべてのロックを開放する。
デッドロックは防げない。

障害回復機能

ログファイル

障害回復の準備として、ログファイルを出力する。
ログファイルが消失すると、復旧ができなくなる。
※試験は、ログファイルを消失しない暗黙のルールがある。

ログファイルは、更新前後に書き込まれる。
出力されるタイミングは、以下の通り。

操作 更新前ログ更新後ログ
データ挿入 なし | あり
データ更新 あり | あり
データ削除 あり | なし

WAL

ログは、更新前後ともにデータベースの更新より先に出力される方式。
理由は、ログファイルがデータベース更新後に出力できないと、復旧できなくなる可能性があるため。
それを回避するために、最初に出力する。

ロールバック

後退復旧。
障害が発生した時点から、更新前ログを使って、指定された時点に復旧する。

ロールフォワード

前進復旧。
バックアップからコピーされたテーブルに対し、更新後ログを使って、指定された時点に復旧する。

トランザクション障害

更新前ログを使って、後退復旧。

媒体障害

バックアップ・リストア、更新後ログでロールフォワード。

システム障害

電源断、OS障害、DBMS障害などでDBMSが動作しなくなった状態。
DBMSが停止するので、ログが出力されない。

分散データベース

遠隔地にあるデータベースをネットワークを使って連携させる。

透過性

名称 説明
アクセス透過性 同一法歩でアクセス
位置透過性 物理的な配置場所を意識しなくていい
移動透過性 格納サイトが変更されても影響がない
分割透過性 1つのデータが複数サイトに分割されても意識しなくていい
重複透過性 1つのデータが複数サイトで重複格納されても意識しなくていい
規模透過性 OSやアプリの影響を受けない
並行透過性 同時並行でデータベースの操作が行える

テーブル結合法

  • セミジョイン
    結合処理はサイトごと
  • 入れ子ループ法
    データを1行づつ送信
  • マージジョイン法(ソートマージ法)
    データを全行送信

表領域

物理的な格納領域

牽引

  • ユニーク牽引
    検索キーに該当するのは1行だけ
  • 非ユニーク牽引 検索キーに該当するのは複数行
  • クラスタ牽引
    検索キー順番と、検索キーに該当する行の物理的な並び順が一致
  • クラスタ牽引
    検索キー順番と、検索キーに該当する行の物理的な並び順が一致しない

午後問の解法テク

主キー・外部キーを見つける

問題に出てくるスキーマは未完成の状態。
そのため、関係名や属性名を見ながら主キー・外部キーのあたりをつけて、問題を読み進めながら特定する。

主キーになりそうな項目は、「〜番号」「〜コード」「〜区分」「〜ID」とかが多い。
この項目名が出てきたら、要注意。 また、主キーは一番最初に列挙されることが多い。
一番左に該当する項目は、要注意して確認すること。

問題文中に、「一意な」「識別される」の文言がある場合は、主キー確定。

多重度を見極める

多重度が曖昧に表現されていることが多い。
不明な場合は、多対多、1対多を想定して考える。

スーパータイプ・サブタイプに注目しておくこと。
区分、フラグが該当する事が多い。

隔離性水準の覚え方

分離レベル ダーティリード ノンリピータブルリード ファントムリード
Read Uncommitted
Read Committed
Repeatable Read
Serializable

◯:発生する
✕:発生しない

ダノフはシリコン
ダ:ダーティリード ノ:ノンリピータブルリード フ:ファントムリード (は) シ:serializable リ:repeatable read コ:read committed ン:read uncomitted

配置順序さえ間違えなければ、これで完璧!
あとは、わかりやすい○の配置なので、覚えられるハズ。

その他参考サイト

データベース研究室 – DATABASE LABO

データベーススペシャリストドットコム

情報処理試験まとめ/データベーススペシャリスト試験の勉強法まとめ - まとめwiki - アットウィキ

Firefox51 アップデート機能内容まとめ

提供開始日

2017 年 1 月 24 日

更新内容

公式サイト

詳しくは、公式サイト見たほうが正確

Firefox 51 for developers - Mozilla | MDN

使うだけの人は、リリースノート見たほうが分かりやすい。
※自分はこっち側なので、こっちの情報をまとめる

Firefox 51.0 リリースノート

目立った変更内容

  • パスワード保存ダイアログで保存前のパスワードを確認
  • URL バーにズームボタンが追加
  • GPU が搭載されていない環境での動画再生性能が向上
  • “submit” イベントが発生しない場面でも、パスワードを保存できる
  • 安全でない接続のログインページに対して警告を表示
  • FLAC (Free Lossless Audio Codec) の再生に対応
  • E10s の高速化

他にもあるけど、使う側で目につくのはこんなところか?
以下、気になった機能の感想と補足

URL バーにズームボタンが追加

100%以外の倍率にすると、アドレスバーに倍率が表示される。
そして、表示された倍率をクリックすると、100%に戻る。
今までは倍率がすぐにわからなかったため、変更したのか確認するのに手間がかかったが、簡単にできるようになった。

“submit” イベントが発生しない場面でも、パスワードを保存できる

毎回パスワード保存できる画面とできない画面があるのはなんで?って思っていたが、submitイベントをトリガーにしていたのか。。。。
初めて知った。
しかし、今回のバージョン対応されるから、知ったところで意味は薄い。
利便性は良くなりそう。

E10s の高速化

まだ、俺のブラウザはe10sに対応してないから、意味はないんだけどね。
確認の方法は、過去記事参照

suzaku-tec.hatenadiary.jp

対応されるまで待つしかないか。

TypeScriptでハマったこと インタフェース編

きっかけ

業務でTypeScriptを使っていたが、意味不明なエラーが出て、かなり悩んだ。

インタフェースの重複の問題

コード

問題になったコードとは異なるが、だいたい同じような感じ。

export interface testif1 <T1, T2>{
    value1: T1;
    value2: T2;
}

export interface testif1 <E1, E2>{
    value3: E1;
    value4: E2;
}

class Sample implements testif1<string, string> {

}

おきること

このコードだと、実際にコンパイルエラーになる。
Javaをやってきたら「何で?」って思うけど、エラーなのだ。
コンパイルエラーの原因は、インタフェースがマージされるため、宣言しなければいけない型が増える。

上記コードは、下記のインタフェースを実装するのと同じ。

export interface testif1 <T1, T2, E1, E2>{
    value1: T1;
    value2: T2;
    value3: E1;
    value4: E2;
}

対策

namespace使うなり、モジュール化する。
影響範囲が小さくなるようにすることが大切。

こんな状況に陥ることはレアケースだと思うが、知っている/知らないでは、ドツボにハマることがある。

mac os x の.bashrcの設定方法と反映方法

そもそも

初心者的なことが分かっていなかったのでメモ。
知っている人は、嘲り笑うがいい!

./bash~の種類

~/.bash_profile

ユーザ単位の設定ファイル。
あれば読み込まれる。

~/.bash_login

ログインした際、~/.bash_profileが存在しなければ読込まれる設定ファイル。
なくてもいい。
ややこしいので、なるべく~/.bash_profileに寄せるべき。

~/.profile

ログイン時、~/.bash_profile ・ ~/.bash_loginが存在しなければ読み込まれる設定ファイル。
なくても良い。

~/.bashrc

bash実行時に読み込まれる設定ファイル。
ターミナル起動時に読み込ませたい場合、sourceで反映されることができる。
しかし、ターミナル再起動した場合は、毎回コマンドを叩く必要があるので、下記の設定を.bash_profileにしておくのが楽。

if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi

使い分け

~/.bash_profile, ~/.bashrcで十分。

~/.bash_profile

ログイン時に行う処理を記載する。

~/.bashrc

ターミナル起動時に必要な処理を記載する。
パスやコマンドのエイリアスなど。

ハマったこと

そもそもの発端は、node.jsの環境をmacに作ろうと思ったから。
bashrcにパスを通していたが、反映されずに困惑していた。
ターミナル再起動時に毎回sourceコマンドを叩く必要はないはずと思い、いろいろ調べた。

参考サイト

.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの? - Qiita

mac os x ターミナルで.bashrcを反映させるには | MATUKEN's Blog

Tabulator概要

Tabulator

olifolkerd.github.io

GitHub - olifolkerd/tabulator: A table generation JQuery UI Plugin

概要

高機能なテーブルが作成できると聞いて、試してみたくなった。
REST-fullなwebページ作成の補助につながる気がしたので、気になった。
あとは、Excelを殺してくれそうな気がしたので。。。

試作

前準備

とりあえず、下記をインクルードしていれば、試せる。

<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<link href='https://fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">

<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>

テーブルの作成

<div id="example-table"></div>

指定した要素にテーブルを適用してみる。
当然、jqueryなので、id名指定以外にもクラス名指定もできる。
今回は、とりあえずid名指定で確認。

以下でテーブルを作成する。

$("#example-table").tabulator();

テーブルはできるけど、表示するものが無いので、次で表示設定をする。

列定義

$("#example-table").tabulator({
  columns:[
    {title:"Name", field:"name", sortable:true, width:200},
    {title:"Progress", field:"progress", sortable:true, sorter:"number"},
    {title:"Gender", field:"gender", sortable:true},
    {title:"Favourite Color", field:"col", sortable:false},
    {title:"Date Of Birth", field:"dob"},
    {title:"Cheese Preference", field:"cheese"},
  ],
});

列の定義内容

  • title
    必須:この列のヘッダーに表示されるタイトル。
  • field
    必須:(アイコン/ボタン列では不要)データ配列内のこの列のキー。
  • align
    列のテキストの配置。設定内容は、(left | center | right)
  • width
    列の幅を設定。ピクセル単位、テーブル全体の幅に対するパーセンテージの設定も可能。未設定だと、システムが最適と判断した幅になる。
  • minWidth
    列の最小幅を設定。
  • sortable
    列のデータを並べ替可否の設定
  • sorter
    列のソート方法指定。
  • formatter
    データのフォーマット指定。
  • onClick
    列のセルをクリックしたときの処理内容。
  • editable
    編集可否の設定。Bool値のみ設定可。デフォルト:false
  • editor
    データを編集するときに使用するエディタの設定
  • visible
    可視設定。Bool値のみ設定可。デフォルト:true
  • cssClass
    列のヘッダーとセルに適用するCSSクラスを設定。
  • tooltip
    列の各セルホバー時のツールチップを設定する。
  • tooltipHeader
    列見出しホバー時のツールチップを設定する。
  • editableTitle
    ヘッダータイトルの編集可否設定。
  • headerFilter
    ヘッダ内の要素から列をフィルタリング。
  • mutator
    テーブルに解析されるときに列の値を操作する関数。
    ぶっちゃけ、使い方がよく分からん。
  • mutateType
    データ解析、セル編集、またはその両方で突然変異を発生させるかどうかを定義。
    ぶっちゃけ、使い方がよく分からん。
  • accessor
    getData関数を使用する前の処理内容を記載する。

テーブルへのデータの読み込み

今回はとりあえず配列で試す。

var sampleData = [
  {id:1, name:"Oli Bob", progress:12, gender:"male", rating:1, col:"red", dob:"", car:1, lucky_no:5, cheese:"Cheader"},
  {id:2, name:"Mary May", progress:1, gender:"female", rating:2, col:"blue", dob:"14/05/1982", car:true, lucky_no:10, cheese:"Gouda"},
  {id:3, name:"Christine Lobowski", progress:42, gender:"female", rating:0, col:"green", dob:"22/05/1982", car:"true", lucky_no:12, cheese:"Manchego"},
  {id:4, name:"Brendon Philips", progress:100, gender:"male", rating:1, col:"orange", dob:"01/08/1980", lucky_no:18, cheese:"Brie"},
  {id:5, name:"Margret Marmajuke", progress:16, gender:"female", rating:5, col:"yellow", dob:"31/01/1999", lucky_no:33, cheese:"Cheader"},
];

データを割り当てる。
割り当てるには、setData()を使う。
メソッドを呼ぶんじゃなくて、tabulatorの中で処理するので、注意。

$("#example-table").tabulator("setData", sampleData);

HTMLファイルを開くと、指定したJavaScript配列のデータが表示される。

サンプルHTML

<html>
    <head>
       <title>tabulator-test</title>
       <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
       <link href='https://fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
       <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
       <link rel="stylesheet" href="tabulator-master/tabulator.css">

       <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
       <script type="text/javascript" src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
       <script type="text/javascript" src="tabulator-master/tabulator.js"></script>
   </head>
    <body>
        <div id="example-table"></div>

        <script type="text/javascript">
           $("#example-table").tabulator({
             columns:[
               {title:"Name", field:"name", sortable:true, width:200},
               {title:"Progress", field:"progress", sortable:true, sorter:"number"},
               {title:"Gender", field:"gender", sortable:true},
               {title:"Favourite Color", field:"col", sortable:false},
               {title:"Date Of Birth", field:"dob"},
               {title:"Cheese Preference", field:"cheese"},
             ],
           });

           var sampleData = [
             {id:1, name:"Oli Bob", progress:12, gender:"male", rating:1, col:"red", dob:"", car:1, lucky_no:5, cheese:"Cheader"},
             {id:2, name:"Mary May", progress:1, gender:"female", rating:2, col:"blue", dob:"14/05/1982", car:true, lucky_no:10, cheese:"Gouda"},
             {id:3, name:"Christine Lobowski", progress:42, gender:"female", rating:0, col:"green", dob:"22/05/1982", car:"true", lucky_no:12, cheese:"Manchego"},
             {id:4, name:"Brendon Philips", progress:100, gender:"male", rating:1, col:"orange", dob:"01/08/1980", lucky_no:18, cheese:"Brie"},
             {id:5, name:"Margret Marmajuke", progress:16, gender:"female", rating:5, col:"yellow", dob:"31/01/1999", lucky_no:33, cheese:"Cheader"},
           ];
           
           $("#example-table").tabulator("setData", sampleData);
       </script>
    </body>
</html>

その他のデータ指定方法

Ajax

$("#example-table").tabulator("setData", "http://www.exampleurl.com/data");

HTML

$("#example-table").tabulator({});

参考

HTMLのテーブルをJSONで動的に更新できる「Tabulator」がスゴい! - WPJ

2016年の振り返りと2017年の目標

2016年の振り返り

KPT法でとりあえず振り返る。

K:やれてよかったこと

  • ブログを大きな間隔を長い期間開けずに書き続けた

    • 詳細
      1ヶ月以上の間隔は開かなかったはず。
      なんとか続けられた。
      やり抜くことは、意外と難しい。
      やり続けることで、文章力が上がった気がする。。。
      あとは、常に情報収集を意識できたかな?
      これは、継続してやりたい。
  • Gitを業務で触れた

    • 詳細
      やっとSVN以外のVCSを業務で使えた。
      GitHubとか使っていたから、Gitを知らないわけではなかったが、チームで使うって意味が初だった。
      使ってみて感じたが、Gitコマンド覚えないとダメだなと感じた。
      なぜなら、やっていることが明確に見えないから。
      やることが魔法の言葉みたいに感じた。
      ※個人で使っているときもよく分かってなかった。。。
      2017年は、それを克服したい。
  • AWSシステム開発できた

    • 詳細
      触ってみた感じ、全然ローカル開発と違和感ない。
      そもそも、開発時点からAWS環境のDBを使う意味があったのか、甚だ疑問だが。。。。
      個人でAWSで開発ができないから、いい経験にはなったと思いたい。
      AWSも個人開発者向けのプランがあればいいのにな。
      容量を大幅制限することで、格安プランを出すとか。
      個人でやるには、料金的にキツイ気がする。
      ※俺の収入が低いってのもあるかもしれないが。
  • Powershellを少し学べた

    • 詳細
      CSVを読み込んで、特定条件のデータを抜き出す方法を覚えた。
      DOSだったらまずやらないようなことが、簡単にできたのが意外だった。
      結構応用が効き、大体の開発環境はWindowsなので、ツールとして使えるようにしておきたい。

P:悪かったこと

  • Java以外をやれていない
    • 詳細
      Pyconには出たけど、全然Pythonプログラミングできていない。
      セッションの内容は、Javaで得た知識やシステム開発を通して得た知識で付いて行けるので、さほど問題ではなかった。
      Powershellは、言語って感じじゃないから、除外。
      そろそろ、複数言語使えないとまずい年代かな?
      なるはやで使えるようにしておきたい。
      Python以外なら、SwiftかC++
      ネイティブ系の開発をできるようになりたい欲望がある。 Webエンジニアなら分かってくれるハズ!
      Pythonは、ビッグデータ処理やら機械学習など、今後を見据えて必須だと感じているから習得したい。
  • 情報処理技術者試験に合格できなかった
    • 詳細
      セキュリティスペシャリストを受けたけど、合格まで至らなかった。
      30歳までに何かしらの高度情報処理技術者を合格したかったけど、もう来年しかチャンス無いね。。。
      30歳になっても受け続けはしますが。
      試験制度って少し変わっているんだな。
      セキュリティスペシャリストを受けてきたけど、試験制度見たら、情報処理技術者の方が合格したい試験な気がする。
      次の試験は、データベーススペシャリストにしようかな?
      今年が最後だと思って、きっちり予定を立てて試験勉強していきたい。
  • OJCPを受験できなかった
    • 詳細
      勉強はしていたが、受ける機会がなかった。
      最後の方は、業務多忙が影響しているせいもあるが、それは仕方ないね。
      OJCPって、過去問解いてたけど、引掛け問題が頭に来るぜ!
      個人的には、手応えがあったので、Java9が出る前に合格しておきたい。
  • ブログで知識が散らばったまま
    • 詳細
      気になったときに調べはするんだが、それが散らばったままだな。。。
      wiki化するなど、情報をカテゴライズして見やすいようにまとめてたい。
      ココらへんは、ひしだまブログを参考にしたい。
      はてなブログでこういうことはできるのだろうか?
      ブログは、Markdownで書きやすいんだけど、wikiっぽいものを作るのが面倒くさい気がする。
      やり方あるのかな?
      それっぽい機能は、見てもなかった気がする。
      ローカルにKnowledge/GitLab環境作ってみようか画策中。
      いいアイディア持っている人がいたら、コメントをプリーズ!!

T:次に試すこと(2017年目標)

  • JavaScriptJavaレベルに!
    • 詳細
      とりあえず、複数言語取得に向けて、一番手軽にやれるものを。
      もちろん、Pythonの勉強は続ける。
      使えないわけではないが、本格的に触れない&次の業務で使うので、これを機に完璧習得したい。
  • 3DCGの学習
    • 詳細
      これも業務で使うから。
      手を出したい分野ではあったので、これを機に触る。
      とりあえず、Three.jsあたりを使えるようにしたい。
  • Node.jsを使いこなす
    • 詳細
      JavaScriptやっていると、必ず出てくるライブラリなので、覚えておきたい。
      簡単なツールを作るのにも使えそうなので、使えるようにしておけば、払った学習コスト以上のものになるのではないかと感じている。
  • OJCP8受ける
    • 詳細
      Java8は使えているけど、外見え的によく見えるので、持っておきたい。
  • wikiを作る
    • 詳細
      ブログに散らばった知識を集約する
  • Gitコマンドを覚える
    • 詳細
      細かいことや、やっていることがモヤッとしか覚えてないので、コマンド操作できるようにしておく。
      SVNも、コマンド覚えていると、ちょっとしたツールを作れたりしたので、できれば、コマンド操作を覚えたい。
  • FireFoxのアドオン作成
    • 詳細
      開発・趣味の両方とも、FireFoxを愛用。
      たまに、これができたらいいのにってのがある。
      オレオレツールができるようになれば、もっとブラウジングが捗りそうだから、覚えたい。

今年は

今年は、新しいことをチャレンジしたい。
既知の知識の強化も忘れずに。
あとは、得た知識の体系化を考える。
あと、難問中の難問、彼女作るってのもある。