SlideShare a Scribd company logo
CakePHPでお小遣い帳を
つくってみよう
株式会社ジュライ 溝江
@tmizoe
対象者
• CakePHPのbakeを使ったことがある人
バージョン
• CakePHP 2.8.7
最初の目標
• 日時、用途、入金、出金のCRUDができること
DB設計
カラム名 データ型 Null 備考
id int x
created datetime x
modified datetime x
date datetime x 仕訳が発生した日時
usage_id int x 用途。usagesテーブル
deposit int o 入金
payment int o 出金
journals
カラム名 データ型 Null 備考
id int x
created datetime x
modified datetime x
name Varchar(255) x 用途
usages
Bakeの準備
• Cakeダウンロード
https://github.com/cakephp/cakephp/archive/2.8.7.zip
• Webサーバのhtdocs下に展開
• PHPと(Cake)/app/ConsoleへのPATHを確認
• シェル(コマンドプロンプト)でcake bake
残高を表示する(1)
• 残高 = 直前の残高 ー いまの仕訳の増減値
• 残高を保存していない場合、残高を求めるたびにすべての仕訳
レコードにアクセスする必要がある。よって残高を保存してお
いたほうが良さそう。
カラム名 データ型 Null 備考
id int x
created datetime x
modified datetime x
date datetime x 仕訳が発生した日時
usage_id int x 用途。usagesテーブル
deposit int o 入金
payment int o 出金
balance int o 残高
journals
(New!)
残高を表示する(2)
• DBを変更したら、MVCすべてbakeしなおす
• 課題:残高を毎回、ユーザが計算して入力す
る?
→ 計算間違える、面倒
よって自動計算すべき
• いつ計算するか?
仕訳の追加・編集の時
残高を表示する(3)
• Viewで残高を入力できないように変更する
• View/Journal/add.ctp
• View/Journal/edit.ctp
echo $this->Form->input(‘balance’); // 削除
echo $this->Form->input(‘balance’); // 削除
残高を表示する(4)
• Controllerで残高を計算し、Modelに渡す
• まずは、新しい仕訳は必ず日付も新しいものになるという前提にする。既存
の仕訳の間に入ってしまうと、他のレコードの残高も書き換える必要がある
ため、それはあとでやる。
• Controller/JournalsController.php
• add() と edit() を変更
• 直前の仕訳を探し、そのときの残高を獲得。直前の仕訳が存在しない場合、直前の残高
はゼロ。
• (この項続く)
日付 入金 出金 残高
1/1 1000 1000
1/3 200 800
1/2 に新しい仕訳を入れ
る場合は、1/3の残高を
書き換える必要がある
→あとでやる
残高を表示する(5)
• 直前の仕訳を探す:Model/Journal.php に新しいメソッドを追加
/*
* $this(JournalModel)のレコードを日付が新しい順に並べ、そ
の最初のレコードにおける、balanceカラムのデータを返す
*/
public function getLastBalance(){
$lastCreated = $this->find('first', array(
'order' => array('date' => 'desc')
));
return $lastCreated['Journal']['balance'];
}
残高を表示する(6)
• getLastBalance()をController/JournalsController.phpのaddメソッ
ドから呼び出す
public function add() {
if ($this->request->is('post')) {
$this->Journal->create();
$lastBalance = $this->Journal->getLastBalance();
$newBalance = $lastBalance
+ $this->request->data['Journal']['deposit']
- $this->request->data['Journal']['payment'];
$this->request->data['Journal']['balance'] = $newBalance;
if ($this->Journal->save($this->request->data)) {
$this->Flash->success(__('The journal has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Flash->error(__('The journal could not be saved. Please, try again.'));
}
}
$usages = $this->Journal->Usage->find('list');
$this->set(compact('usages'));
}
追加
残高を表示する(7)
• getLastBalance()をController/JournalsController.phpのaddメソッ
ドから呼び出す
直前の残高: $this->Journal->getLastBalance();
入力された入金額:$this->request->data[‘Journal’][‘deposit’]
入力された出金額:$this->request->data['Journal']['payment'];
過去の日付でのレコード追加に対応(1)
作業の流れ
1. 新レコードの日付より古い仕訳の中で、最も新しい残
高を求める(この例の場合は1/1の残高)
2. 新レコードの残高を求め、追加する
3. 新レコードより新しい日付の仕訳のすべてについて、
残高を更新する
日付 入金 出金 残高
1/1 1000 1000
1/3 200 800
1/2 に新しい仕訳を入れ
る場合は、1/3の残高を
書き換える必要がある
過去の日付でのレコード追加に対応(2)
新レコードの日付より古い仕訳の中で、最も新
しい仕訳の残高を求める
どこにコードを書く? → モデル
さっきのgetLastBalance()を改良して、引数に日付をもらえるよう
にする
引数で指定された日付より古い仕訳を探す
public function getPreviousBalance($date){
$dateString = $date['year'] . '-' . $date['month'] . '-' .$date['day']
. ' ' . $date['hour'] . ':' . $date['min'];
$previous = $this->find('first', array(
'conditions' => array('date < ' => $dateString),
'order' => array('date' => 'desc')
));
$this->log('getPreviousBalance:' . $previous['Journal'], 'debug');
return $previous['Journal']['balance'];
}
もらった日付をSQLの形式に加工
その日付より古いものを検索
$this->Journal
過去の日付でのレコード追加に対応(3)
新レコードの残高を求め、追加する
Controller/JournalsController.php
getLastBalance()をgetPreviousBalance()に置き換える。
ついでに、戻り値を入れる変数も $previousBalance にしておく。
getLastBalance()はもう使わないかも。
$previousBalance = $this->Journal->getPreviousBalance(
$this->request->data['Journal']['date']
);
$newBalance = $previousBalance
+ $this->request->data['Journal']['deposit']
- $this->request->data['Journal']['payment'];
過去の日付でのレコード追加に対応(4)
新レコードより新しい日付の仕訳のすべてについて、
残高を更新する(1)
• いつやるの? 新レコードの追加が成功したあと
Controller/JournalsController.php の次のブロックの中
• 更新に必要な情報:新しいレコードの日付
… save()実行時の結果として残っている。これを変数に保存してお
くため上記のブロックを少し変更
$resultにいろいろ入っているので$this->log()で確認しておくこと。
if ($this->Journal->save($this->request->data)) {
}
$result = $this->Journal->save($this->request->data);
if ($result) {
}
過去の日付でのレコード追加に対応(5)
新レコードより新しい日付の仕訳のすべてについて、
残高を更新する(2)
• モデルに新メソッド追加:
1. $dateと等しいか新しい日付のレコードを探す。
2. 日付が古い順にそれぞれ、残高を計算し、1.の連想配列を書き換える
3. DBに保存する: モデルのsaveAll() メソッドを実行
public function updateNewBalance($date){}
過去の日付でのレコード追加に対応(5)
新レコードより新しい日付の仕訳のすべてについて、
残高を更新する(3)
Public function updateNewBalance($date){
$newJournals = $this->find(‘all’, array(
‘conditions’ => array(‘date >= ‘ => $date),
‘order’ => array(‘date’ => ‘asc’)
));
if(count($newJournals) == 0){
$this->log('not need to update:', 'debug');
return false;
}
for($i = 1; $i < count($newJournals); $i++){
$journal = $newJournals[$i]['Journal'];
$balance = $newJournals[$i-1]['Journal']['balance'] + $journal['deposit'] - $journal['payment'];
$newJournals[$i]['Journal']['balance'] = $balance;
}
$result = $this->saveAll($newJournals);
return $result;
}
1. 引数の日付より新しい仕訳をす
べて獲得し、古い順に並べたうえ
で $newJournalsに入れる
結果がゼロであ
れば何もせずに
return
2. 日付が古い順にそれぞれ、残高を
計算し、1.の連想配列を書き換える
3. すべてDBに保存。
saveAll()を使うときは、$newJournals配列の
データ形式を正しく維持すること。
完成品
https://github.com/mizoe/cakephp_expenses
Editのときも関連レコードを更新する(1)
• Editのとき: JournalモデルのupdateNewBalance($date)を実行する。
add()と同じsaveの処理があるので、該当部分を書き換える
• addのときと異なり、日付が書き換えられる可能性がある
• 既存のレコードより新しい日付になったとき
→既存のレコードより新しい日付の残高をすべて更新
• 既存のレコードより古い日付になったとき
→編集後の日付より新しい日付の残高をすべて更新
… 既存レコードの日付と、編集後の日付を比較し、古いほうを
updateNewBalanceに与えれば解決!
$result = $this->Journal->save($this->request->data);
if ($result) {
$this->Journal->updateNewBalance($result[‘Journal’][‘date’]);
$this->Flash->success(__('The journal has been saved.'));
(以下略)
public function edit($id = null) {
if (!$this->Journal->exists($id)) {
throw new NotFoundException(__(‘Invalid journal’));
}
if ($this->request->is(array(‘post’, ‘put’))) {
// get the date before edit
$previousBalance = $this->Journal->getPreviousBalance(
$this->request->data[‘Journal’][‘date’]
);
$newBalance = $previousBalance
+ $this->request->data[‘Journal’][‘deposit’]
- $this->request->data[‘Journal’][‘payment’];
$this->request->data[‘Journal’][‘balance’] = $newBalance;
$result = $this->Journal->update($this->request->data);
if ($result) {
Editのときも関連レコードを更新する(2)
JournalsController.php
以下略
直前の残高
更新後の残高
save()の代わりに、新しいメソッド
update()をモデルにつくる
この処理もモデルに
移動したほうが良い。
add()でも同じ処理が
あるから。また、
DBに強く関連する
処理だから。
Editのときも関連レコードを更新する(3)
Model/Journals.php
直前の残高
更新後の残高
save()の代わりに、新しいメソッド
update()をモデルにつくる
public function update($data){
$date = $data['Journal']['date'];
$requestDate = $date['year'] . '-' . $date['month'] . '-' .$date['day']
. ' ' . $date['hour'] . ':' . $date['min'];
$currentJournal = $this->find('first', array(
'conditions' => array('Journal.id = ' => $data['Journal']['id'])
));
$dateToUpdate = $currentJournal['Journal']['date'];
if(strtotime($currentJournal['Journal']['date']) > strtotime($requestDate) ){
$dateToUpdate = $requestDate;
}
$result = $this->save($data);
if($result == false){
return false;
}
$result = $this->updateNewBalance($dateToUpdate);
return $result;
}
日付を比較しやすいよ
うに加工(もっといい
やり方があるかも)
編集前のJournalを
探す。編集前の日
付を調べるため。
編集前の日付 編集の前後の日付を比
較し、古いほうを採用
編集対象の
Journalを保存
失敗したらfalse
該当するレコードの
残高を一括更新
Deleteのときも関連レコードを更新する(1)
• Deleteのとき: $resultには日付が入っていない… oh..
• updateNewBalance()の引数にIDを追加して、そこから調べよう!
• IDから日付を割り出す
updateNewBalance($date, $id = null)
にしておけば、既存のコードを再利用できる
• $idが指定されたとき:日付を割り出して$dateとみなす
Deleteのときも関連レコードを更新する(2)
• JournalsController.php
public function delete($id = null) {
$this->Journal->id = $id;
if (!$this->Journal->exists()) {
throw new NotFoundException(__('Invalid journal'));
}
$this->request->allowMethod('post', 'delete');
$result = $this->Journal->deleteAndUpdate($id); delete()の代わりに
deleteAndUpdate()
↑今から作る
public function deleteAndUpdate($id){
$result = $this->updateNewBalance(null, $id);
if($result == false){
return false;
}
$this->id = $id;
$result = $this->delete();
return $result;
}
Deleteのときも関連レコードを更新する(3)
• Model/Journal.php
updateNewBalanceを呼ぶ。
Modelの中から呼ぶので
$this->Journal->updateNewBalance
ではなく
$this->updateNewBalance
失敗したらfalse
通常のdelete処理
Deleteのときも関連レコードを更新する(4)
• Model/Journal.php
public function updateNewBalance($date, $id = null){
$balanceBeforeUpdate = 0;
if($id){
$currentJournal = $this->find('first', array(
'conditions' => array('Journal.id = ' => $id)
));
if(count($currentJournal) == 0){
return false;
}
$date = $currentJournal['Journal']['date'];
$balanceBeforeUpdate = $currentJournal['Journal']['balance']
- $currentJournal['Journal']['deposit'] + $currentJournal['Journal']['payment'];
}
$newJournals = $this->find('all', array(
'conditions' => array('date >= ' => $date),
'order' => array('date' => 'asc')
));
(続く)
更新前
の残高
Idが指定さ
れていたら
そのidのJournal
を取ってくる
失敗したらfalse 仕訳の日付
その仕訳の直前
における残高
その仕訳より新しい
仕訳のすべてを獲得
(既出と変更なし)
if(count($newJournals) == 0){
return false;
}
for($i = 1; $i < count($newJournals); $i++){
if($id == null || $i != 1){
$balanceBeforeUpdate = $newJournals[$i-1]['Journal']['balance'];
}
$journal = $newJournals[$i]['Journal'];
$balance = $balanceBeforeUpdate + $journal['deposit'] - $journal['payment'];
$newJournals[$i]['Journal']['balance'] = $balance;
}
return $this->saveAll($newJournals);
}
(続き) 失敗したらfalse 該当するレコードの残
高を更新
Deleteのときに対応するためのブ
ロック。Idが指定されているとき、
かつ$iが1の時だけは、以前計算し
た残高を用いる。それ以外の場合
は$i-1の残高を用いる
Viewを更新して見やすくしよう(1)
• id, created, modified は要らない
• 標準状態でdateカラムの順に並べたい
• メニュー項目をカスタムしたい
Viewを更新して見やすくしよう(2)
id, created, modified は要らない
• View/Journal/index.ctp
次の6行を削除
<th><?php echo $this->Paginator->sort('id'); ?></th>
<th><?php echo $this->Paginator->sort('created'); ?></th>
<th><?php echo $this->Paginator->sort('modified'); ?></th>
(中略)
<td><?php echo h($journal['Journal']['id']); ?>&nbsp;</td>
<td><?php echo h($journal['Journal']['created']); ?>&nbsp;</td>
<td><?php echo h($journal['Journal']['modified']); ?>&nbsp;</td>
Viewを更新して見やすくしよう(3)
標準状態でdateカラムの順に並べたい
• Viewかなと思いきや、Controllerを変更したほうが簡単
Controller/JournalsController.php
Pagenatorコンポーネントの呼び出しオプションの変更。
並べ替え順を Journalモデルのdateカラム、昇順とする。
public $components = array('Paginator' => array(
'order' => array('Journal.date' => 'asc')
), 'Session', 'Flash');
Viewを更新して見やすくしよう(4)
メニュー項目をカスタムしたい
• View/Journal/index.ctp
<th><?php echo $this->Paginator->sort('date', '日付'); ?></th>
sortの第2引数を追加。
この文字列が表示される
<h2><?php echo __('お小遣い帳'); ?></h2>
__(‘xxx’)は、そのまま表示される
完成!

More Related Content

What's hot (20)

Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
Kazuaki Ueda
 
WordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えようWordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えよう
Naoki Matsuda
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディング
Akihiro Okuno
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
 
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクトEWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
Kiyoshi Sawada
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
Kuninobu SaSaki
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
Satoshi Suzuki
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
Ashitaba YOSHIOKA
 
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
Etsuji Nakai
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
Yu Iwama
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
Akabane Hiroyuki
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
infinite_loop
 
20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
Eiji Kuroda
 
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
Shinzo SAITO
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
dcubeio
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
Yukihiro Katsumi
 
WordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えようWordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えよう
Naoki Matsuda
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディング
Akihiro Okuno
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
 
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクトEWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
Kiyoshi Sawada
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
Satoshi Suzuki
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
Ashitaba YOSHIOKA
 
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
Etsuji Nakai
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
Yu Iwama
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
Akabane Hiroyuki
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
infinite_loop
 
20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
Eiji Kuroda
 
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
Shinzo SAITO
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
dcubeio
 

Similar to CakePHP でお小遣い帳をつくってみよう (20)

CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
Sho A
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
ericsagnes
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
Takahiro Hidaka
 
Web 02
Web 02Web 02
Web 02
XMLProJ2014
 
Wb osaka 20120623
Wb osaka 20120623Wb osaka 20120623
Wb osaka 20120623
Miho Ishida
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
 
Laravel勉強会(データベーステスト編)
Laravel勉強会(データベーステスト編)Laravel勉強会(データベーステスト編)
Laravel勉強会(データベーステスト編)
AyakaNishiyama
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
totty jp
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
Sho A
 
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
Makoto Setoh
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
 
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
ichikaway
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
Sho A
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
ericsagnes
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
Takahiro Hidaka
 
Wb osaka 20120623
Wb osaka 20120623Wb osaka 20120623
Wb osaka 20120623
Miho Ishida
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
 
Laravel勉強会(データベーステスト編)
Laravel勉強会(データベーステスト編)Laravel勉強会(データベーステスト編)
Laravel勉強会(データベーステスト編)
AyakaNishiyama
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
totty jp
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
Sho A
 
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
Makoto Setoh
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
 
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
ichikaway
 

More from Tomo Mizoe (6)

PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門
Tomo Mizoe
 
Git入門 (Windows)
Git入門 (Windows)Git入門 (Windows)
Git入門 (Windows)
Tomo Mizoe
 
Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期
Tomo Mizoe
 
はじめてのASP.NET MVC5
はじめてのASP.NET MVC5はじめてのASP.NET MVC5
はじめてのASP.NET MVC5
Tomo Mizoe
 
Unity勉強会資料2014-05-31
Unity勉強会資料2014-05-31Unity勉強会資料2014-05-31
Unity勉強会資料2014-05-31
Tomo Mizoe
 
MCP and Microsoft University
MCP and Microsoft UniversityMCP and Microsoft University
MCP and Microsoft University
Tomo Mizoe
 
PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門
Tomo Mizoe
 
Git入門 (Windows)
Git入門 (Windows)Git入門 (Windows)
Git入門 (Windows)
Tomo Mizoe
 
Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期
Tomo Mizoe
 
はじめてのASP.NET MVC5
はじめてのASP.NET MVC5はじめてのASP.NET MVC5
はじめてのASP.NET MVC5
Tomo Mizoe
 
Unity勉強会資料2014-05-31
Unity勉強会資料2014-05-31Unity勉強会資料2014-05-31
Unity勉強会資料2014-05-31
Tomo Mizoe
 
MCP and Microsoft University
MCP and Microsoft UniversityMCP and Microsoft University
MCP and Microsoft University
Tomo Mizoe
 

Recently uploaded (9)

DEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdf
DEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdfDEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdf
DEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdf
Matsushita Laboratory
 
自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC
自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC
自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC
shomayama0221
 
DEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdf
DEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdfDEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdf
DEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdf
Matsushita Laboratory
 
岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料
岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料
岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料
Matsushita Laboratory
 
LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面
LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面
LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面
CRI Japan, Inc.
 
茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料
茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料
茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料
Matsushita Laboratory
 
LoRa/LoRaWAN HMIタッチスクリーン LTS5 A4サイズ両面カタログ
LoRa/LoRaWAN HMIタッチスクリーン LTS5  A4サイズ両面カタログLoRa/LoRaWAN HMIタッチスクリーン LTS5  A4サイズ両面カタログ
LoRa/LoRaWAN HMIタッチスクリーン LTS5 A4サイズ両面カタログ
CRI Japan, Inc.
 
What the end of support of Windows 10 will mean?
What the end of support of Windows 10 will mean?What the end of support of Windows 10 will mean?
What the end of support of Windows 10 will mean?
Atomu Hidaka
 
井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」
井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」
井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」
Matsushita Laboratory
 
DEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdf
DEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdfDEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdf
DEIM2025_Shinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援.pdf
Matsushita Laboratory
 
自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC
自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC
自宅でも出来る!!VCF構築-概要編-JapanVMUG Spring Meeting with NEC
shomayama0221
 
DEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdf
DEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdfDEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdf
DEIM2025_LLMを利用した果樹農家の経験知の対話的蓄積支援_Shinkawa.pdf
Matsushita Laboratory
 
岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料
岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料
岩本 駿平, 松下 光範, 堀 寛史, 杉本 明文「けが予防を目的とした跳躍動作の継続的計測による運動特性の評価」発表資料
Matsushita Laboratory
 
LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面
LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面
LoRaWANプッシュボタン PB05-L カタログ A4サイズ Draginoカタログ両面
CRI Japan, Inc.
 
茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料
茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料
茂木奈々瀬,畑玲音,安尾萌,松下光範「LLMによる生成コメントがもたらすニュースの印象変化分析」発表資料
Matsushita Laboratory
 
LoRa/LoRaWAN HMIタッチスクリーン LTS5 A4サイズ両面カタログ
LoRa/LoRaWAN HMIタッチスクリーン LTS5  A4サイズ両面カタログLoRa/LoRaWAN HMIタッチスクリーン LTS5  A4サイズ両面カタログ
LoRa/LoRaWAN HMIタッチスクリーン LTS5 A4サイズ両面カタログ
CRI Japan, Inc.
 
What the end of support of Windows 10 will mean?
What the end of support of Windows 10 will mean?What the end of support of Windows 10 will mean?
What the end of support of Windows 10 will mean?
Atomu Hidaka
 
井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」
井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」
井上梨々花,畑玲音,松下光範「ニュースに対するコメントの属性提示が意見形成に与える影響の調査」
Matsushita Laboratory
 

CakePHP でお小遣い帳をつくってみよう

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy