プログラマ向け技術情報共有サービス「Qiita(キータ)」、5周年を迎え月間UU数は250万人を突破、累積投稿数は17万件に

0

Increments株式会社(本社:東京都港区、代表取締役:海野 弘成)が開発・運用するプログラマ向け技術情報共有サービス「Qiita(キータ)」は、月間ユニークユーザー数が250万人を突破した。

Qiitaは2011年のリリース以降、オープンな技術情報コミュニティとして多くのプログラマの方が利用し、毎日200件の記事が投稿されている。累計17万件もの技術情報が蓄積されているサービスとなっている。
プログラマのための、プログラミングに関する知識を記録・共有するための情報共有サービス。自分の得たプログラミングに関する情報を投稿することにより、他のプログラマから投稿に対する適切な評価やフィードバックをもらうことができる。また、プログラミングに困ったときには多くの投稿の中から、問題解決につながる情報を探すことも可能だ。

 

■運営会社はIncrements株式会社 
Incrementsは社会を支えるソフトウェアの開発やそれを支えるプログラマの開発効率の向上に貢献することを通して、社会の変化、世界の進化を加速させている。

そのための事業として、プログラマ向けの技術情報共有サービス「Qiita」、手軽に書けるチーム内情報共有ツール「Qiita:Team」、プログラミングのメモやスニペットの記録に最適なMac・Windowsアプリ「Kobito」を開発している。http://increments.co.jp/

SecureWorksがAWS対象のセキュリティサービス、ビッグデータ解析と機械学習を活用

http://image.itmedia.co.jp/

 デル傘下のSecureWorks Japanは2016年9月14日、Amazon Web Services(AWS)に特化したマネージドセキュリティサービスおよびセキュリティインシデントへの緊急対応サービスを国内で提供開始すると発表した。これは同社が2015年10月のre:Invent 2015で発表したサービスを日本市場で展開するもの。顧客に対しては、日本のスタッフが日本語で対応、一方で世界的に展開するサービスから得た情報やノウハウを活用する。

(引用:http://www.atmarkit.co.jp/ait/articles/1609/15/news055.html

花火や東京五輪にらみ、混雑緩和のシステム開発競う

http://www.nikkei.com/content/

 

花火や東京五輪にらみ、混雑緩和のシステム開発競う

電機大手などがイベント会場の混雑分析システムの開発を競っている。三菱電機は監視カメラ映像から10分後の混雑度合いを予測するシステムを花火大会で実証実験した。NECは群衆が四方八方に散らばるなどの異常を検知するシステムを自治体に売り込み始めた。安全と警備員の業務効率化を両立できるとして、東京五輪・パラリンピックや大型化するイベントの需要を奪い合う。

(引用:http://style.nikkei.com/article/DGXMZO06257410Z10C16A8000000?n_cid=LMNST014)

ローカルの開発がひと段落し、最新とマージしてリモート上でプルリク成功する方法

開発完了後

①リビジョンAをマージ(マスター指定)

②変更箇所を確認 → マージ作業

③マスターからチェックアウト

④新リビジョンBを作成

⑤マージ作業したファイルを配置

⑥コミット → プッシュ

⑦リモート上でプルリク(マージ)

完了

 

「見るに特化!」Gitを使う上で絶対に必要なコマンド(+オプション)

git status (現在の状態を見る)
git diff (差分を見る)
git ls-files (管理しているファイルを見る)
git shortlog (軽くコミットログを見る)
git log (コミットログを見る)
git reflog (HEADの遷移を見る)
git show (コミットの詳細を見る)
git grep (ワークツリーのファイルを検索する)
git blame (ファイル内の行ごとの最終更新を見る)

Ruby作者まつもとゆきひろ氏「高校生のとき“僕の考えた最強の言語”をノートに書いていた」

http://ascii.jp/

 

「『俺ってスゲェ!』と思える言語を作りたかった」

Ruby作者まつもとゆきひろ氏2万字インタビュー

──ためしに、紙にプログラミング書いてみるとかそういうことはやっていたんじゃないですか?

まつもと「やっていましたね。コード書いたりしていました。Pascal を勉強した時はPascalを使って紙に書いたり……”僕の考えた最強の言語”みたいなものをノートに書いていました(笑)」

──“最強の言語”! どんなのですか?

まつもと「そのノートはどこに行ったかわかんないのですが、Pascalの影響を結構受けていた、ような気がします。結局何がしたかったかというと、ユーザー定義関数とか。当時のBASICだとできないんですね。データ構造も配列と文字列しかありませんし」

(引用:http://ascii.jp/elem/000/001/226/1226385/index-2.html

FuelPHPでページネーション

参考:http://w.builwing.info/2012/06/05/fuelphp(実践その6)

1. FuelPHPのページネーションは、残念ながらCakePHP程簡単ではありません。

FuelPHPでページネーションを行うには、いくつかの前処理をしなければなりません。

indexアクションを下記のように修正します。

app/classes/controller/collection.php

public function action_index(){
 //ビューに渡す配列の初期化
 $data=array();
 //データ件数の取得
 $count=Model_Collection::count();
 //Paginationの環境設定
 $config=array(
 'pagination_url'=>'collection/index',
 'uri_segment'=>3,
 'num_links'=>4,
 'per_page'=>5,
 'total_items'=>$count,
 'template'=>array(
 'wrapper_start'=>'<div class="pagination"><ul>',
 'wrapper_end'=>'</ul></div>',
 'previous_start'=>'<li class="previous">',
 'previous_end'=>'<li>',
 'previous_inactive_start'=>'<li class="active"><a href="#">',
 'previous_inactive_end'=>'</a></li>',
 'next_inactive_start'=>'<span class="active"><a href="#">',
 'next_inactive_end'=>'</a></span>',
 'next_start'=>'<li class="next">',
 'next_end'=>'</li></ul>',
 'active_start'=>'<span class="active"><a href="#">',
 'active_end'=>'</a></span>',
 ));
 //Paginationのセット
 Pagination::set_config($config);
 //モデルCollectionからページネーションデータを取得
 $data['collections']=Model_Collection::find()
 ->order_by('created','desc')
 ->limit(Pagination::$per_page)
 ->offset(Pagination::$offset)
 ->get();
 //テンプレートファイルにデータの引き渡し
 $this->template->title="WinRoad徒然草";
 $this->template->content = View::forge('collection/index', $data);
 }


2. 次に、ページネーション用のリンクを作成するためにビューファイルも修正します。修正といっても、たった1行を追加するだけです。

app/views/collection/index.php

 

  • $count=Model_Collection::count();
    ページネーションをするには、まず全データのデータ件数を取得する必要があります。countメソッドで、まず最初に全データ件数を取得します。
  • ‘pagination_url’=>’リンク先のURL’
    ページネーションクラスの設定に必要なリンク先のURLを指定します。indexページをページネーションで表示しますので、’collection/index’を指定しています。
  • uri_segment’=>URIセグメント番号
    ページ番号を指定するURLセグメント番号を指定します。 第1セグメントがコントローラ名、第2セグメントがアクション名ですので、第3セグメントを指定します。
  • ‘num_links’=>表示リンク数
    現在のページの前後何ページ分を表示するかを指定します。前半は、アクティブページを加えたページ数、後半は、指定したページ数を表示します。最高で、指定リンク数の倍のページを表示することになります。
  • per_page’=>1ページあたりのデータ件数
    1ページにデータを何件表示するかを指定します。
  • ‘total_items’=>全データ件数
    表示する全データ件数を指定します。 ここでは、countメソッドで取得したデータ件数を指定しています。
  • ‘template’=>array()
    ページネーションエレメントを作成する為のHTMLマークアップを指定します。

FuelPHPを快適に開発するためのNetBeansで設定まとめ

3. インデントの乱れは心の乱れ

PSR-2に準拠しないとプルリクエスト送った時に怒られます(自分は怒られた事がある)
なのでフォーマットを指定しましょう。

  1. ツール→オプション→エディタ→フォーマット
  2. 言語を「PHP」
  3. カテゴリを「中括弧」
  4. クラス宣言とメソッド宣言を「改行」に変更

http://soudai1025.blogspot.jp/2015/12/fuelphpnetbeans.html

FuelPHP1.6、クエリビルダ一覧 その4

FuelPHP1.6、クエリビルダ一覧 その1

FuelPHP1.6、クエリビルダ一覧 その2

FuelPHP1.6、クエリビルダ一覧 その3

FuelPHP1.6、クエリビルダ一覧 その4

今回は

1.データの取得項目(全項目を取得とかこの項目のみを取得とか)
2.データの取得形式(文字列で取得とか配列で取得とか)
3.データの取得条件、他(where句とかorder by句とか)

3.データの取得条件、他(where句とかorder by句とか)を見ていきます。多分これがクエリビルダの検索系におけるキモ

■ テーブル指定:from(‘table01‘)

$q = DB::select()->from(‘tbl_test01’);
var_dump($q->execute());
SELECT * FROM `tbl_test01`

 

■ where条件を指定:where(‘column01‘, value01)

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘あああ’);
var_dump($q->execute());

SELECT * FROM `tbl_test01` WHERE `column_varchar01` = ‘あああ’

■ where条件を指定(イコール以外):where(‘column01‘, operator01value01)

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘<>’, ‘あああ’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` <> ‘あああ’

■ where条件を指定(like句):where(‘column01‘, ‘like’, ‘value01‘)

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘like’, ‘%ああ%’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` LIKE ‘%ああ%’

■ where条件を指定(in句):where(‘column01‘, ‘in’, array(‘value01‘, ‘value02‘))

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘in’, array(‘あああ’, ‘あああ2’));
var_dump($q->execute());

SELECT * FROM `tbl_test01` WHERE `column_varchar01` IN (‘あああ’, ‘あああ2’)

■ where条件を指定(not in句):where(‘column01‘, ‘not in’, array(‘value01‘, ‘value02‘))

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘not in’, array(‘あああ’, ‘あああ2’));
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` NOT IN (‘あああ’, ‘あああ2’)

■ where条件を指定(between句):where(‘column01‘, ‘between’, array(‘value01‘, ‘value02‘))

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘pk_id’, ‘between’, array(2, 7));
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `pk_id` BETWEEN 2 AND 7

■ where条件を複数指定(and条件):where()を複数指定。

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘あああ’);
$q->where(‘column_varchar02’, ‘いいい’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` = ‘あああ’ AND `column_varchar02` = ‘いいい’

■ where条件を複数指定(and条件):and_where(‘column02‘, value02)

※「where」と「and_where」は同じ動き。

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘あああ’);
$q->and_where(‘column_varchar02’, ‘いいい’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` = ‘あああ’ AND `column_varchar02` = ‘いいい’

■ where条件を複数指定(or条件):or_where(‘column02‘, value02)

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘あああ’);
$q->or_where(‘column_varchar02’, ‘いいい’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` = ‘あああ’ OR `column_varchar02` = ‘いいい’

■ where条件を複数指定(複合条件その1):where_open()、where_close()

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘あああ’);
$q->where_open();
$q->where(‘column_varchar02’, ‘いいい’);
$q->or_where(‘column_varchar02’, ‘いいい2’);
$q->where_close();
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` = ‘あああ’ AND (`column_varchar02` = ‘いいい’ OR `column_varchar02` = ‘いいい2’)

■ where条件を複数指定(複合条件その2):and_where_open()、and_where_close()

※「where_open」と「and_where_open」、「where_close」と「and_where_close」は同じ動き。

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘あああ’);
$q->and_where_open();
$q->where(‘column_varchar02’, ‘いいい’);
$q->or_where(‘column_varchar02’, ‘いいい2’);
$q->and_where_close();
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` = ‘あああ’ AND (`column_varchar02` = ‘いいい’ OR `column_varchar02` = ‘いいい2’)

■ where条件を複数指定(複合条件その3):or_where_open()、or_where_close()

$q = DB::select()->from(‘tbl_test01’);
$q->where(‘column_varchar01’, ‘あああ’);
$q->or_where_open();
$q->where(‘column_varchar02’, ‘いいい2’);
$q->where(‘column_int02’, ‘>’, 1);
$q->or_where_close();
var_dump($q->execute());
SELECT * FROM `tbl_test01` WHERE `column_varchar01` = ‘あああ’ OR (`column_varchar02` = ‘いいい2’ AND `column_int02` > 1)

■ テーブル結合(内部結合):->join(‘table02‘)-on(‘table01.column01‘, ‘=’, ‘table02.column02‘)

$q = DB::select()->from(‘tbl_test01’);
$q->join(‘tbl_test02’)->on(‘tbl_test01.pk_id’, ‘=’, ‘tbl_test02.test01_pk’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` JOIN `tbl_test02` ON (`tbl_test01`.`pk_id` = `tbl_test02`.`test01_pk`)

 

■ テーブル結合(外部結合):->join(‘table02‘,’LEFT/RIGHT‘)

$q = DB::select()->from(‘tbl_test01’);
$q->join(‘tbl_test02’, ‘LEFT’)->on(‘tbl_test01.pk_id’, ‘=’, ‘tbl_test02.test01_pk’);
var_dump($q->execute());

SELECT * FROM `tbl_test01` LEFT JOIN `tbl_test02` ON (`tbl_test01`.`pk_id` = `tbl_test02`.`test01_pk`)

■ テーブル結合(テーブルに別名):->join(array(‘table02‘, ‘alias_table_name‘))

$q = DB::select()->from(‘tbl_test01’);
$q->join(array(‘tbl_test02’, ‘tbl02’))->on(‘tbl_test01.pk_id’, ‘=’, ‘tbl02.test01_pk’);
var_dump($q->execute());

SELECT * FROM `tbl_test01` JOIN `tbl_test02` AS `tbl02` ON (`tbl_test01`.`pk_id` = `tbl02`.`test01_pk`)

 

■ テーブル結合(結合条件複数and条件):and_on(‘table01.column01‘, ‘=’, ‘table02.column02′)

$q = DB::select()->from(‘tbl_test01’);
$q->join(‘tbl_test02’)->on(‘tbl_test01.pk_id’, ‘=’, ‘tbl_test02.test01_pk’);
$q->and_on(‘tbl_test01.column_varchar01’, ‘=’, ‘tbl_test02.column_varchar21’);
var_dump($q->execute());

SELECT * FROM `tbl_test01` JOIN `tbl_test02` ON (`tbl_test01`.`pk_id` = `tbl_test02`.`test01_pk` AND `tbl_test01`.`column_varchar01` = `tbl_test02`.`column_varchar21`)

■ テーブル結合(結合条件複数or条件):or_on(‘table01.column01‘, ‘=’, ‘table02.column02‘)

$q = DB::select()->from(‘tbl_test01’);
$q->join(‘tbl_test02’)->on(‘tbl_test01.pk_id’, ‘=’, ‘tbl_test02.test01_pk’);
$q->or_on(‘tbl_test01.column_varchar01’, ‘=’, ‘tbl_test02.column_varchar21’);
var_dump($q->execute());

SELECT * FROM `tbl_test01` JOIN `tbl_test02` ON (`tbl_test01`.`pk_id` = `tbl_test02`.`test01_pk` OR `tbl_test01`.`column_varchar01` = `tbl_test02`.`column_varchar21`)

■ group by句:->group_by(‘column01‘)

$q = DB::select()->from(‘tbl_test01’)->group_by(‘column_varchar01’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` GROUP BY `column_varchar01`

■ group by句(複数項目):->group_by(‘column01‘, ‘column02‘)

$q = DB::select()->from(‘tbl_test01’)->group_by(‘column_varchar01’, ‘column_varchar02’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` GROUP BY `column_varchar01`, `column_varchar02`

■ group by句(having句指定):->having(‘column01‘, operator01, ‘column02‘)

$q = DB::select()->from(‘tbl_test01’)->group_by(‘column_varchar01’);
$q->having(‘column_varchar01’, ‘!=’, ‘あああ’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` GROUP BY `column_varchar01` HAVING `column_varchar01` != ‘あああ’

※「having()」関係のメソッドは「having()」以外に

・and_having()
・or_having()
・having_open()
・having_close()
・and_having_open()
・and_having_close()
・or_having_open()
・or_having_close()

がありますが、使い方は「where()」関連と同じなので(書くの面倒くさいので)省略。

■ order by句:->order_by(‘column01‘)

$q = DB::select()->from(‘tbl_test01’)->order_by(‘column_varchar01’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` ORDER BY `column_varchar01`

■ order by句(降順):->order_by(‘column01‘, ‘desc’)

$q = DB::select()->from(‘tbl_test01’)->order_by(‘column_varchar01’, ‘desc’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` ORDER BY `column_varchar01` DESC

■ order by句(複数その1):order_by()を複数くっつける

$q = DB::select()->from(‘tbl_test01’)->order_by(‘column_varchar01’, ‘desc’);
$q->order_by(‘column_varchar02’);
var_dump($q->execute());
SELECT * FROM `tbl_test01` ORDER BY `column_varchar01` DESC, `column_varchar02`

■ order by句(複数その2):DB::expr()を使う

$q = DB::select()->from(‘tbl_test01’)->order_by(DB::expr(‘column_varchar01, column_varchar02 DESC’));
var_dump($q->execute());
SELECT * FROM `tbl_test01` ORDER BY column_varchar01, column_varchar02 DESC

■ limit句:->limit(num)

$q = DB::select()->from(‘tbl_test01’)->limit(2);
var_dump($q->execute());
SELECT * FROM `tbl_test01` LIMIT 2

■ offset句:->offset(num)

$q = DB::select()->from(‘tbl_test01’)->limit(5);
$q->offset(2);
var_dump($q->execute());
SELECT * FROM `tbl_test01` LIMIT 5 OFFSET 2

以上で、FuelPHPのクエリビルダ検索関連を完了