2012/08/05

LL Decade 2012 覚書

今年も Lightweight Languageイベントへ行って参りました
(LLの詳細は 公式で)

去年のPlanetも相当面白かったのですが
今年は 10周年の記念の年だそうで
LL界隈では著名な方とか?ゆかりの方とか?LLの歴史を振り返る的な?
ちょうど自分の開発歴も10年ちょいなので、それともあわせてなかなか楽しめそうな内容で期待大ですぞ

んがしかし、なんせ文章能力低いワタクシなので
技術的な詳細な話とかは、もっとぐっとわかりやすくまとめてくださる方がきっといらっさると思うので、そちらにお任せするとして
講演で印象に残ったこととか、自分的メモがわりに記しておきます

◆基調講演
宮川さん Perlの人

サンフランシスコは夏でも20℃くらいしかないってほんとー?いいなぁ
10年前に比べて 良いコードに触れる機会が増えた
どんどん Github とか 触るべき
Plack/PSGIのはなし

Pythonやら Rubyからだいぶ いいとこ取りさせてもらってる
- 今すぐやることが大切だけど
焦って始めて なにかやらかすより ちょっと待ってからはじめるのもイイ
みたいな言葉が良かったw
言語を超えて 影響しあうのっていいね(PHPが出てこないけどー・・・)

名前をつけるのって大変
Perl名前がカオスなの多い
Python → はじめにpyがつくとか さいごにつくとか
Rubyは 名前見ても何するものなのかわからいもの多し カオス


↓今年も受付で うちわ頂いた
あと、会場のパス(お昼は外に食べに行くので)



◆Language Update Decade
【出演】
Perl:小飼弾
PHP:廣川類
Python:柴田淳(ウェブコア)
Ruby:まつもとゆきひろ
【司会】
法林浩之(日本UNIXユーザ会)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Pythonの柴田さんの おはなしがおもしろい!w
2008年頃のPython・・・珍獣扱い(知ってる人がまだ少なかった)
Zope・・懐かしいな
Pythonもやらないと・・・

ノンプログラマーに パイソンが広まった ・・・シンプルさ
最近のPythonは 研究機関とかで使われてる(金融とか 気象とか)

Pythonベースサービス
Instagram/Pinterest/youtube/Dropbox

パイソンの2から3への移行タイミングは?? →そろそろいいと思うよ
これから3を覚えれば あと10年はこれで飯食っていけるよ

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ruby まつもとさん 超早口なんだなぁ・・・
Ruby20周年 来年 2013 2月に 2.0でます!

2.0は 多言語の痛い目にあってるさまをみならって、 あんまし変なことはしないように
互換性を重視して出します!(的なことをおっしゃってたような・・)
・・・キーワード引数とか、ライブラリGem化・・・いろいろ 性能上がるはず



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
午後の部

◇プログラミング言語処理系を自作してわかったこと

ココらへんのセッションから どんどこコアなお話になってゆきます


・「next Perl5プログラミング言語Toraの設計と実装」@tokuhirom
perl触ってて date(日付表示とか)に係る処理がめんどくさ~い ってのは 常に思ってた
myってかくけど べつに変な愛着はないです

・「世界で最も仕様に忠実なECMAScript言語処理系」@Constellation
序盤に足つるハプニング!!Σ
ECMAScriptって なんだろー
JavaScirptにも仕様があるんですよ
コンストなんとかさんおもしろいよー

・「型安全なJavaScript処理系JSXを作ってみた」@kazuho
jsの問題点
遅い
デバッグに時間が掛かる ex)プロパティ名の間違い
読みにくい

以下 JSXのご案内

・「組み込みを意識したmrubyを作ってみた」@yukihiro_matz
組み込み向けに 開発されたRuby
− 組み込みAPI
− 移植性 ・・・コアは超シンプル ほぼ何もない(FileI/O とかもない) 必要なオプションは 環境に応じてextensionで追加していくって設計仕様
− 省メモリ

インクリメンタルGC採用

応用例
太陽光発電管理システム・自動販売機メンテナンスシステム・Ruby対応インテリジェントルーター

将来 rubyでうごく 何かしらの端末がでてきたり?スマホ的な?
(?)フットプリント・・・ってなんすか

そういえば 小飼さんが 壇下の座席からふつーに 大声で松本さんとかに質問(会話)してておもしろかったw




◇俺たちの継続的hogehogeは始まったばかりだ!

・「Pythonプロフェッショナルプログラミング」を執筆する上でのCI的な何か(仮) / cactusman (BeProud.inc、日本Jenkinsユーザ会)
スフィンクスで cronで自動で ドキュメントビルドしてるそうな

・JenkinsableじゃないプロジェクトをJenkinsable にするまで Perl編 / 太田健一郎 (TDD研究会、Androidテスト部)
自動テスト環境を組み込むには・・・・0からはじめるのは大変なのですよ

・ルビコンペレストロイカ(Ruby on rails Continuous integtration Perestroika)~RubyOnRails開発におけるオレオレCI改革~ / 高倉利明 @TrinityT (アピリッツ)

・JSのCIで椅子を投げられないため方法 / @kyo_ago (KAYAC)
jsのテスト興味ある
Test.js
Sinon.js(非同期系 モックツール)
Swarm系のツール(?)

このあたりで・・・・眠気Max( ゚Д゚)ネムヒー

JsTestDriver(簡単 おすすめ)javaでできてる
− ブラウザのマネージメントツールみたいな感じ

・PHPでJenkinsをはじめるための108の方法(仮) / 山城 裕 @yamashiro
StageHandTestRunnerおすすめ
PHPでTDD&CIワークショップ、Jenkins + PHP の各種プラグインパート資料 - Yamashiro0217の日記 http://d.hatena.ne.jp/Yamashiro0217/20110619/1308491991

yamashiroさんの講演でめがさめた!

・継続的コミット-エンジニア的ライフログ- / きょん
ファイル変更を検知して 勝手にビルドしてくれる便利なもの
定期的にコミットしてくれるもの
IDE使うほうが頭いい!
じぇっとぐれーぶ?(正解)→ http://www.jetbrains.com/



◇Lightning Talks
【出演】
ゆーすけべー
角谷信太郎
川崎有亮
庄司嘉織
法林浩之
LLNOCチーム
yuroyoro
ただただし
髙橋征義
竹迫良範

どの方のTLも すばらしく たのしかった!!!!
わたしも 紫色の何かがほしい
LLの中のかたの あんな話も すごく面白かった


◆お楽しみ抽選会!!!!

スタッフの方たちが 壇上から一斉に投げるカラーボールをキャッチできた人が当選
わたしのところに 黄色いボールが降ってきたー!!!
そして 近くに緑のボールが飛んできたので 更にキャッチ!(みーとくんにあげました)


9番の景品は↓WordPressの 本でございました ヤッタ~(いつか使う)
みーとくんにはPerlの本があたりました(会社で使おう)

そんなこんなで、とても楽しい一日なのでしたよー
とにかく このLLイベントは
裏方さんからスタッフみなさんの心意気の感じられる 素敵なイベントだし
イベント後の懇親会も すごく楽しい(らしい)し
なにより 言語の垣根を超えてのお祭りなので
ぜひ LLに携わる(興味のある)若者に どんどこ参加していただきたいのですよ


以下 参考リンク)
LL Decadeのツイート - Togetter http://togetter.com/li/350207
LL decade のプログラミング言語処理系を自作してわかったこと & 俺たちの継続的hogehogeは始まったばかりだ!のまとめ - Togetter http://togetter.com/li/350301
#lldecade に参加したら楽しかった - 941::blog http://blog.kushii.net/archives/1767276.html?utm_source=dlvr.it&utm_medium=twitter


2012/07/25

[MySQL] テンポラリーテーブル&「INSERT ... ON DUPLICATE KEY UPDATE」構文

集計バッチで
MySQLのテンポラリーテーブルと
「INSERT ... ON DUPLICATE KEY UPDATE」構文の合わせ技を使ったので
メモ

まず テンポラリーテーブルを使うにあたって、MySQLのメモリ関係の設定値を確認する
参考) MySQLのメモリ関係のシステム変数 - 祈れ、そして働け ~ Ora et labora http://d.hatena.ne.jp/tetsuyai/20111006/1317873012


メモリ上に作成される テンポラリファイルは max_heap_table_size内まで
超えるとISAMテーブルとしてディスクに書き出されます。

(デフォ)max_heap_table_size グローバル 16MB

それから、今現在のDBのテーブルデータサイズから
テンポラリーテーブルのおよそのデータサイズを出す

参考)データベースとテーブルのサイズを確認する方法 - ふってもハレても
http://d.hatena.ne.jp/sho-yamasaki/20120405/1333640589
DB調べたら
Avg_row_length=151で、200としても
平均4万レコードくらいの データをテンポラリーテーブルにするから

200x4万レコード=800万byte → 7.63MB ・・・もんだいなすっぽ


で、
テンポラリーテーブルを使った 処理について

まず データの出力イメージは
商店Aテーブル、商店Bテーブル があります
それぞれの テーブルから 日付を絞って、商品番号でGroupByした集計を取得して、
それをマージします

↓こんな感じ
┌────┬───┬───┐
│商品番号│商店A │商店B │
├────┼───┼───┤
│   11111│     3│     2│
├────┼───┼───┤
│   11112│     0│     5│
├────┼───┼───┤
│   11113│     2│     0│
└────┴───┴───┘


まず 商店Aテーブルを集計して テンポラリーテーブルに データインサート

CREATE TEMPORARY TABLE `tmp_summary` (
  `商品番号` varchar(10) NOT NULL,
  `商店A購買数` int(11) NOT NULL DEFAULT 0,
  `商店B購買数` int(11) NOT NULL DEFAULT 0,
   PRIMARY KEY (`商品番号`)
)
  SELECT  商品番号 ,count(商品番号) as 商店A購買数, 0 as 商店B購買数
  FROM    商店Aテーブル
  WHERE   del_flg       =  0 
  AND     購買日   >= 'YYYY/MM/DD 00:00:00'
  AND     購買日   <= 'YYYY/MM/DD 23:59:59'
  GROUP BY 商品番号
  ;



SELECT文内の 「0 as 店舗B 購買数」のところは
次に集計する 店舗Bの購買数が入る部分を あらかじめ
0で埋めて先に作っとく的な感じ

次に 商店Bテーブルを集計して
先ほどのテンポラリーテーブル「tmp_summary」に マージしていきます
この時 「INSERT ... ON DUPLICATE KEY UPDATE」構文を使うと
MySQLが
既にPKが存在している時は UPDATE
なかったら INSERTしてくれます

INSERT INTO tmp_summary 
  SELECT  商品番号 , 0 as 商店A購買数, count(商品番号) as 商店B購買数
  FROM    商店Bテーブル
  WHERE   del_flg       =  0 
  AND     購買日   >= 'YYYY/MM/DD 00:00:00'
  AND     購買日   <= 'YYYY/MM/DD 23:59:59'
  GROUP BY 商品番号

  ON DUPLICATE KEY UPDATE
  商店A購買数=tmp_summary.商店A購買数+values(商店A購買数),
  商店B購買数=tmp_summary.商店B購買数+values(商店B購買数);


これで あとは テンポラリーテーブルをよしなに処理すればOK

select * from tmp_summary;

参考)
複合UNIQUEキーでも「INSERT ... ON DUPLICATE KEY UPDATE」構文は使える - 岩本隆史の日記帳
http://d.hatena.ne.jp/IwamotoTakashi/20080329/p1

テンポラリテーブルの作成MySQL|プログラムメモ
http://logic.moo.jp/memo.php/archive/11/

他のテーブルのデータを追加(INSERT ... SELECT文) - データの追加と削除 - MySQLの使い方
http://www.dbonline.jp/mysql/insert/index6.html










2012/07/24

SELECT結果からテーブルを作る

↓こんな感じのね
CREATE TABLE [table_name]
 SELECT  *
 FROM    TBL_A
 WHERE   del_flg       =  0 
 AND     regist_date   <= '2012/07/23 23:59:59'
 ;

2012/07/12

jQueryで同じIDを持つ 複数要素を選択する

<div id="hoge">hoge</div>
<div id="hoge">hoge</div>
<div id="hoge">hoge</div>

↑だったら

$("[id=hoge]").html('fuga');


参考)
$("[id=bar]"). http://www.kinopyo.com/blog/jquery-select-multy-element-with-same-id

コンポーネントでモデルを使うとき [cakePHP2]

↓メソッドの中で 使うモデルを定義しましょう
  public function component_method()
  {

    // Model呼び出し
    $this->controller->loadModel('UserInfo');
    $user = $this->controller->UserInfo->find("first",
              array("conditions"=>array(
  :
  :