SlideShare ist ein Scribd-Unternehmen logo
1 von 81
Downloaden Sie, um offline zu lesen
omoon.org の裏側
FuelPHP の task 活用例
FuelPHP&CodeIgniter ユーザの集い(FuelPHP東京勉強会#5、CodeIgniter talk #2)
October 12, 2013
Sotaro OMURA
@omoon
About Me
About Me
•Sotaro OMURA
About Me
•Sotaro OMURA
•大阪から来ました
About Me
•Sotaro OMURA
•大阪から来ました
•Kansai PHP Users Group Staff
About Me
•Sotaro OMURA
•大阪から来ました
•Kansai PHP Users Group Staff
•PHP歴は12年ほど(最近はFuelPHP)
About Me
•Sotaro OMURA
•大阪から来ました
•Kansai PHP Users Group Staff
•PHP歴は12年ほど(最近はFuelPHP)
•omoon.org
About Me
•Sotaro OMURA
•大阪から来ました
•Kansai PHP Users Group Staff
•PHP歴は12年ほど(最近はFuelPHP)
•omoon.org
•@omoon
About Me
•Sotaro OMURA
•大阪から来ました
•Kansai PHP Users Group Staff
•PHP歴は12年ほど(最近はFuelPHP)
•omoon.org
•@omoon
めんどくさがり
About Me
About Me
フレームワークを使った
サンプルアプリケーション
 1	
  <?php
	
  2	
  require	
  __DIR__	
  .	
  '/../vendor/autoload.php';
	
  3	
  
	
  4	
  $app	
  =	
  new	
  SilexApplication();
	
  5	
  
	
  6	
  $app-­‐>register(new	
  SilexProviderTwigServiceProvider(),	
  array(
	
  7	
  	
  	
  	
  	
  'twig.path'	
  =>	
  __DIR__.'/../views',
	
  8	
  ));
	
  9	
  
10	
  //	
  データベース接続情報の読込
11	
  $env	
  =	
  getenv('APP_ENV')	
  ?:	
  'development';
12	
  $config	
  =	
  require	
  __DIR__	
  .	
  "/../config/$env.php";
13	
  $app-­‐>register(new	
  SilexProviderDoctrineServiceProvider(),	
  array(
14	
  	
  	
  	
  	
  'db.options'	
  =>	
  $config['db'],
15	
  ));
16	
  
17	
  //	
  トップ画面
18	
  $app-­‐>get('/',	
  function(SilexApplication	
  $app)	
  {
19	
  	
  	
  	
  	
  $posts	
  =	
  $app['db']-­‐>fetchAll('
20	
  	
  	
  	
  	
  	
  	
  	
  	
  SELECT	
  name,	
  message,	
  unix_timestamp(created)	
  as	
  created
21	
  	
  	
  	
  	
  	
  	
  	
  	
  FROM	
  posts	
  ORDER	
  BY	
  created	
  DESC	
  LIMIT	
  5
22	
  	
  	
  	
  	
  ');
23	
  	
  	
  	
  	
  return	
  $app['twig']-­‐>render('index.twig',	
  array(
24	
  	
  	
  	
  	
  	
  	
  	
  	
  'posts'	
  =>	
  $posts,
25	
  	
  	
  	
  	
  ));
26	
  });
27	
  
28	
  //	
  投稿処理
29	
  $app-­‐>post('/speak',	
  function(SilexApplication	
  $app)	
  {
30	
  	
  	
  	
  	
  $name	
  =	
  $app['request']-­‐>get('name');
31	
  	
  	
  	
  	
  $message	
  =	
  $app['request']-­‐>get('message');
32	
  	
  	
  	
  	
  if	
  ($name	
  &&	
  $message)	
  {
33	
  	
  	
  	
  	
  	
  	
  	
  	
  $app['db']-­‐>insert('posts',	
  array('name'	
  =>	
  $name,	
  'message'	
  =>	
  $message));
34	
  	
  	
  	
  	
  }
35	
  	
  	
  	
  	
  return	
  $app-­‐>redirect('/');
36	
  });
37	
  
38	
  $app-­‐>run();
 1	
  <?php
	
  2	
  require	
  __DIR__	
  .	
  '/../vendor/autoload.php';
	
  3	
  
	
  4	
  $app	
  =	
  new	
  SilexApplication();
	
  5	
  
	
  6	
  $app-­‐>register(new	
  SilexProviderTwigServiceProvider(),	
  array(
	
  7	
  	
  	
  	
  	
  'twig.path'	
  =>	
  __DIR__.'/../views',
	
  8	
  ));
	
  9	
  
10	
  //	
  データベース接続情報の読込
11	
  $env	
  =	
  getenv('APP_ENV')	
  ?:	
  'development';
12	
  $config	
  =	
  require	
  __DIR__	
  .	
  "/../config/$env.php";
13	
  $app-­‐>register(new	
  SilexProviderDoctrineServiceProvider(),	
  array(
14	
  	
  	
  	
  	
  'db.options'	
  =>	
  $config['db'],
15	
  ));
16	
  
17	
  //	
  トップ画面
18	
  $app-­‐>get('/',	
  function(SilexApplication	
  $app)	
  {
19	
  	
  	
  	
  	
  $posts	
  =	
  $app['db']-­‐>fetchAll('
20	
  	
  	
  	
  	
  	
  	
  	
  	
  SELECT	
  name,	
  message,	
  unix_timestamp(created)	
  as	
  created
21	
  	
  	
  	
  	
  	
  	
  	
  	
  FROM	
  posts	
  ORDER	
  BY	
  created	
  DESC	
  LIMIT	
  5
22	
  	
  	
  	
  	
  ');
23	
  	
  	
  	
  	
  return	
  $app['twig']-­‐>render('index.twig',	
  array(
24	
  	
  	
  	
  	
  	
  	
  	
  	
  'posts'	
  =>	
  $posts,
25	
  	
  	
  	
  	
  ));
26	
  });
27	
  
28	
  //	
  投稿処理
29	
  $app-­‐>post('/speak',	
  function(SilexApplication	
  $app)	
  {
30	
  	
  	
  	
  	
  $name	
  =	
  $app['request']-­‐>get('name');
31	
  	
  	
  	
  	
  $message	
  =	
  $app['request']-­‐>get('message');
32	
  	
  	
  	
  	
  if	
  ($name	
  &&	
  $message)	
  {
33	
  	
  	
  	
  	
  	
  	
  	
  	
  $app['db']-­‐>insert('posts',	
  array('name'	
  =>	
  $name,	
  'message'	
  =>	
  $message));
34	
  	
  	
  	
  	
  }
35	
  	
  	
  	
  	
  return	
  $app-­‐>redirect('/');
36	
  });
37	
  
38	
  $app-­‐>run();
 1	
  <?php
	
  2	
  require	
  __DIR__	
  .	
  '/../vendor/autoload.php';
	
  3	
  
	
  4	
  $app	
  =	
  new	
  SilexApplication();
	
  5	
  
	
  6	
  $app-­‐>register(new	
  SilexProviderTwigServiceProvider(),	
  array(
	
  7	
  	
  	
  	
  	
  'twig.path'	
  =>	
  __DIR__.'/../views',
	
  8	
  ));
	
  9	
  
10	
  //	
  データベース接続情報の読込
11	
  $env	
  =	
  getenv('APP_ENV')	
  ?:	
  'development';
12	
  $config	
  =	
  require	
  __DIR__	
  .	
  "/../config/$env.php";
13	
  $app-­‐>register(new	
  SilexProviderDoctrineServiceProvider(),	
  array(
14	
  	
  	
  	
  	
  'db.options'	
  =>	
  $config['db'],
15	
  ));
16	
  
17	
  //	
  トップ画面
18	
  $app-­‐>get('/',	
  function(SilexApplication	
  $app)	
  {
19	
  	
  	
  	
  	
  $posts	
  =	
  $app['db']-­‐>fetchAll('
20	
  	
  	
  	
  	
  	
  	
  	
  	
  SELECT	
  name,	
  message,	
  unix_timestamp(created)	
  as	
  created
21	
  	
  	
  	
  	
  	
  	
  	
  	
  FROM	
  posts	
  ORDER	
  BY	
  created	
  DESC	
  LIMIT	
  5
22	
  	
  	
  	
  	
  ');
23	
  	
  	
  	
  	
  return	
  $app['twig']-­‐>render('index.twig',	
  array(
24	
  	
  	
  	
  	
  	
  	
  	
  	
  'posts'	
  =>	
  $posts,
25	
  	
  	
  	
  	
  ));
26	
  });
27	
  
28	
  //	
  投稿処理
29	
  $app-­‐>post('/speak',	
  function(SilexApplication	
  $app)	
  {
30	
  	
  	
  	
  	
  $name	
  =	
  $app['request']-­‐>get('name');
31	
  	
  	
  	
  	
  $message	
  =	
  $app['request']-­‐>get('message');
32	
  	
  	
  	
  	
  if	
  ($name	
  &&	
  $message)	
  {
33	
  	
  	
  	
  	
  	
  	
  	
  	
  $app['db']-­‐>insert('posts',	
  array('name'	
  =>	
  $name,	
  'message'	
  =>	
  $message));
34	
  	
  	
  	
  	
  }
35	
  	
  	
  	
  	
  return	
  $app-­‐>redirect('/');
36	
  });
37	
  
38	
  $app-­‐>run();
なんかすみません
FuelPHPとのなれそめ
お好きですね
他に
最近は
JSONでやりとり
ありがとう
さて
omoon.org
omoon.org
omoon.org
•2002年ごろスタート
omoon.org
•2002年ごろスタート
•写真と一行コメントだけ
omoon.org
•2002年ごろスタート
•写真と一行コメントだけ
•最初は HTML + FTP アップロード
めんどくさがり
簡易化の歴史
簡易化の歴史
•Flickr
簡易化の歴史
•Flickr
•PHP + MySQL
簡易化の歴史
•Flickr
•PHP + MySQL
•Flickr + Eye-Fi
簡易化の歴史
•Flickr
•PHP + MySQL
•Flickr + Eye-Fi
•独自 cron job
オレオレなので完成しない
Tasks are classes that can be run through the command line or
set up as a cron job. They are generally used for background
processes, timed tasks and maintenance tasks. Tasks can calls
models and other classes just like controllers.
Tasks
Tasks
•コマンドラインから呼べる
Tasks
•コマンドラインから呼べる
•cron jobとして使える
Tasks
•コマンドラインから呼べる
•cron jobとして使える
•バックグラウンド処理とか
Tasks
•コマンドラインから呼べる
•cron jobとして使える
•バックグラウンド処理とか
•定期的な処理とか
Tasks
•コマンドラインから呼べる
•cron jobとして使える
•バックグラウンド処理とか
•定期的な処理とか
•メンテナンスに
Tasks
•コマンドラインから呼べる
•cron jobとして使える
•バックグラウンド処理とか
•定期的な処理とか
•メンテナンスに
•モデルやクラスをコントローラから呼ぶ時みたいに呼べる
いけるかも
やってみた
▾	
  fuel/
	
  	
  ▾	
  app/
	
  	
  	
  	
  ▸	
  cache/
	
  	
  	
  	
  ▾	
  classes/
	
  	
  	
  	
  	
  	
  ▸	
  controller/
	
  	
  	
  	
  	
  	
  ▸	
  model/
	
  	
  	
  	
  	
  	
  ▸	
  twig/
	
  	
  	
  	
  	
  	
  ▸	
  view/
	
  	
  	
  	
  	
  	
  	
  	
  flickr.php
	
  	
  	
  	
  ▾	
  config/
	
  	
  	
  	
  	
  	
  ▸	
  development/
	
  	
  	
  	
  	
  	
  ▸	
  production/
	
  	
  	
  	
  	
  	
  ▸	
  test/
	
  	
  	
  	
  	
  	
  	
  	
  config.php
	
  	
  	
  	
  	
  	
  	
  	
  db.php
	
  	
  	
  	
  	
  	
  	
  	
  parser.php
	
  	
  	
  	
  	
  	
  	
  	
  rest.php
	
  	
  	
  	
  	
  	
  	
  	
  routes.php
	
  	
  	
  	
  ▸	
  lang/
	
  	
  	
  	
  ▸	
  less/
	
  	
  	
  	
  ▸	
  logs/
	
  	
  	
  	
  ▸	
  migrations/
	
  	
  	
  	
  ▸	
  modules/
	
  	
  	
  	
  ▾	
  tasks/
	
  	
  	
  	
  	
  	
  	
  	
  flickr.php
	
  	
  	
  	
  	
  	
  	
  	
  robots.php
	
  	
  	
  	
  ▸	
  tests/
	
  	
  	
  	
  ▸	
  tmp/
	
  	
  	
  	
  ▾	
  vendor/
	
  	
  	
  	
  	
  	
  ▸	
  Goutte/
	
  	
  	
  	
  	
  	
  ▾	
  phpFlickr/
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  auth.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  example.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  getToken.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  phpFlickr.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  README.txt
	
  	
  	
  	
  	
  	
  ▸	
  Twig/
	
  	
  	
  	
  	
  	
  	
  	
  .gitkeep
外部ライブラリ
▾	
  fuel/
	
  	
  ▾	
  app/
	
  	
  	
  	
  ▸	
  cache/
	
  	
  	
  	
  ▾	
  classes/
	
  	
  	
  	
  	
  	
  ▸	
  controller/
	
  	
  	
  	
  	
  	
  ▸	
  model/
	
  	
  	
  	
  	
  	
  ▸	
  twig/
	
  	
  	
  	
  	
  	
  ▸	
  view/
	
  	
  	
  	
  	
  	
  	
  	
  flickr.php
	
  	
  	
  	
  ▾	
  config/
	
  	
  	
  	
  	
  	
  ▸	
  development/
	
  	
  	
  	
  	
  	
  ▸	
  production/
	
  	
  	
  	
  	
  	
  ▸	
  test/
	
  	
  	
  	
  	
  	
  	
  	
  config.php
	
  	
  	
  	
  	
  	
  	
  	
  db.php
	
  	
  	
  	
  	
  	
  	
  	
  parser.php
	
  	
  	
  	
  	
  	
  	
  	
  rest.php
	
  	
  	
  	
  	
  	
  	
  	
  routes.php
	
  	
  	
  	
  ▸	
  lang/
	
  	
  	
  	
  ▸	
  less/
	
  	
  	
  	
  ▸	
  logs/
	
  	
  	
  	
  ▸	
  migrations/
	
  	
  	
  	
  ▸	
  modules/
	
  	
  	
  	
  ▾	
  tasks/
	
  	
  	
  	
  	
  	
  	
  	
  flickr.php
	
  	
  	
  	
  	
  	
  	
  	
  robots.php
	
  	
  	
  	
  ▸	
  tests/
	
  	
  	
  	
  ▸	
  tmp/
	
  	
  	
  	
  ▾	
  vendor/
	
  	
  	
  	
  	
  	
  ▸	
  Goutte/
	
  	
  	
  	
  	
  	
  ▾	
  phpFlickr/
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  auth.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  example.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  getToken.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  phpFlickr.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  README.txt
	
  	
  	
  	
  	
  	
  ▸	
  Twig/
	
  	
  	
  	
  	
  	
  	
  	
  .gitkeep
クラス
require_once	
  APPPATH	
  .	
  'vendor'	
  .	
  DS	
  .	
  'phpFlickr'	
  .	
  DS	
  .	
  'phpFlickr.php';
class	
  Flickr
{
	
  	
  	
  	
  protected	
  static	
  $_instance	
  =	
  null;
	
  	
  	
  	
  private	
  function	
  __construct()
	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  $this-­‐>api	
  =	
  new	
  phpFlickr(
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'xxxxxxxxxxxxxxxxxxxx'	
  //Config::get('app.flickr_api_key')
	
  	
  	
  	
  	
  	
  	
  	
  );
	
  	
  	
  	
  }
	
  	
  	
  	
  public	
  static	
  function	
  forge()
	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (empty(self::$_instance))	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  static::$_instance	
  =	
  new	
  static();
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  	
  	
  	
  	
  return	
  static::$_instance-­‐>api;
	
  	
  	
  	
  }
}
▾	
  fuel/
	
  	
  ▾	
  app/
	
  	
  	
  	
  ▸	
  cache/
	
  	
  	
  	
  ▾	
  classes/
	
  	
  	
  	
  	
  	
  ▸	
  controller/
	
  	
  	
  	
  	
  	
  ▸	
  model/
	
  	
  	
  	
  	
  	
  ▸	
  twig/
	
  	
  	
  	
  	
  	
  ▸	
  view/
	
  	
  	
  	
  	
  	
  	
  	
  flickr.php
	
  	
  	
  	
  ▾	
  config/
	
  	
  	
  	
  	
  	
  ▸	
  development/
	
  	
  	
  	
  	
  	
  ▸	
  production/
	
  	
  	
  	
  	
  	
  ▸	
  test/
	
  	
  	
  	
  	
  	
  	
  	
  config.php
	
  	
  	
  	
  	
  	
  	
  	
  db.php
	
  	
  	
  	
  	
  	
  	
  	
  parser.php
	
  	
  	
  	
  	
  	
  	
  	
  rest.php
	
  	
  	
  	
  	
  	
  	
  	
  routes.php
	
  	
  	
  	
  ▸	
  lang/
	
  	
  	
  	
  ▸	
  less/
	
  	
  	
  	
  ▸	
  logs/
	
  	
  	
  	
  ▸	
  migrations/
	
  	
  	
  	
  ▸	
  modules/
	
  	
  	
  	
  ▾	
  tasks/
	
  	
  	
  	
  	
  	
  	
  	
  flickr.php
	
  	
  	
  	
  	
  	
  	
  	
  robots.php
	
  	
  	
  	
  ▸	
  tests/
	
  	
  	
  	
  ▸	
  tmp/
	
  	
  	
  	
  ▾	
  vendor/
	
  	
  	
  	
  	
  	
  ▸	
  Goutte/
	
  	
  	
  	
  	
  	
  ▾	
  phpFlickr/
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  auth.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  example.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  getToken.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  phpFlickr.php
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  README.txt
	
  	
  	
  	
  	
  	
  ▸	
  Twig/
	
  	
  	
  	
  	
  	
  	
  	
  .gitkeep
タスク
namespace	
  FuelTasks;
class	
  Flickr
{
	
  	
  	
  	
  public	
  static	
  function	
  run($limit	
  =	
  4)
	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  $response	
  =	
  Flickr::forge()-­‐>photos_search(
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  array(
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'user_id'	
  =>	
  '94387617@N00',
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'per_page'	
  =>	
  $limit,
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'tags'	
  =>	
  'asgt,cover',
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'tag_mode'	
  =>	
  'all',
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'sort'	
  =>	
  'date-­‐taken-­‐desc'
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )
	
  	
  	
  	
  	
  	
  	
  	
  );
	
  	
  	
  	
  	
  	
  	
  	
  foreach	
  ($response['photo']	
  as	
  $photo)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $r	
  =	
  Flickr::forge()-­‐>photos_getInfo($photo['id']);
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $e	
  =	
  Flickr::forge()-­‐>photos_getExif($photo['id']);
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //print_r($e['camera']);
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (null	
  ===	
  Model_Coverphoto::find_by('flickr_id',	
  $r['photo']['id']))	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $r['photo']['dates']['taken'];
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $coverphoto	
  =	
  Model_Coverphoto::forge();
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $coverphoto-­‐>flickr_id	
  =	
  $r['photo']['id'];
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $coverphoto-­‐>title	
  =	
  $r['photo']['description'];
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $coverphoto-­‐>taken_at	
  =	
  $r['photo']['dates']['taken'];
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $coverphoto-­‐>camera	
  =	
  $e['camera'];
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $coverphoto-­‐>data	
  =	
  json_encode($r['photo']);
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $coverphoto-­‐>save();
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
}
#	
  crontab	
  -­‐e
*	
  *	
  *	
  *	
  *	
  cd	
  /var/www/omoon.org;	
  /usr/bin/php	
  oil	
  refine	
  flickr:run
omoon.org
タグ付けだけで更新可能
iPhoneのflickrアプリでも
今後の展望
task を積極的に使いましょう
ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoyakenjis
 
Fuel php osc tokyo2012
Fuel php osc tokyo2012Fuel php osc tokyo2012
Fuel php osc tokyo2012Fumito Mizuno
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1Fumito Mizuno
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門keroyonn
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 Mika Kane
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTMasahiro Nagano
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014Rui Hirokawa
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話y-uti
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013Rui Hirokawa
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門y-uti
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1kenjis
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyYuya Takeyama
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021Rui Hirokawa
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼうDaiki Ichinose
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話y-uti
 

Was ist angesagt? (20)

10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
Fuel php osc tokyo2012
Fuel php osc tokyo2012Fuel php osc tokyo2012
Fuel php osc tokyo2012
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013
 
PHP勉強会 #51
PHP勉強会 #51PHP勉強会 #51
PHP勉強会 #51
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 

Andere mochten auch

Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Keishi Hosoba
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法nasneg
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントnoldor
 
CodeIgniterのライセンスについて
CodeIgniterのライセンスについてCodeIgniterのライセンスについて
CodeIgniterのライセンスについてTakako Miyagawa
 
Codeigniter3フレームアップデート
Codeigniter3フレームアップデートCodeigniter3フレームアップデート
Codeigniter3フレームアップデートtomohiro kitaura
 
CodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみるCodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみる智之 大野
 
PHPUnitでリファクタリング
PHPUnitでリファクタリングPHPUnitでリファクタリング
PHPUnitでリファクタリングTakako Miyagawa
 
2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理Akishige TAKEKOSHI
 
OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳Takako Miyagawa
 
Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Takako Miyagawa
 
CakePHP Console Application 拡張Tips
CakePHP Console Application 拡張TipsCakePHP Console Application 拡張Tips
CakePHP Console Application 拡張TipsKenichirou Oyama
 
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...Kousuke Ebihara
 
Codeigniter4の比較と検証
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証ME iBotch
 
8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会Yusuke Ando
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室Yusuke Ando
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaHidenori Goto
 
CodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたCodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたMasaru Matsuo
 

Andere mochten auch (20)

Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
 
FuelPHP で DynamoDB
FuelPHP で DynamoDBFuelPHP で DynamoDB
FuelPHP で DynamoDB
 
CodeIgniterのライセンスについて
CodeIgniterのライセンスについてCodeIgniterのライセンスについて
CodeIgniterのライセンスについて
 
Codeigniter3フレームアップデート
Codeigniter3フレームアップデートCodeigniter3フレームアップデート
Codeigniter3フレームアップデート
 
CodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみるCodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみる
 
PHPUnitでリファクタリング
PHPUnitでリファクタリングPHPUnitでリファクタリング
PHPUnitでリファクタリング
 
2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理
 
OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳
 
Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料
 
CakePHP Console Application 拡張Tips
CakePHP Console Application 拡張TipsCakePHP Console Application 拡張Tips
CakePHP Console Application 拡張Tips
 
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
 
Codeigniter4の比較と検証
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証
 
8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室
 
BEAR.Sunday 1.X
BEAR.Sunday 1.XBEAR.Sunday 1.X
BEAR.Sunday 1.X
 
BEAR.Sunday $app
BEAR.Sunday $appBEAR.Sunday $app
BEAR.Sunday $app
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
 
CodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたCodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみた
 

Ähnlich wie omoon.org の裏側 〜FuelPHP の task 活用例〜

Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia鉄次 尾形
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方Yosuke Furukawa
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrinoTakeshi Yabe
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925龍一 田中
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用純生 野田
 
Functions
FunctionsFunctions
Functionsdo_aki
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 

Ähnlich wie omoon.org の裏側 〜FuelPHP の task 活用例〜 (20)

Using Dancer
Using DancerUsing Dancer
Using Dancer
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
Capistrano
CapistranoCapistrano
Capistrano
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Silex入門
Silex入門Silex入門
Silex入門
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
Functions
FunctionsFunctions
Functions
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
test
testtest
test
 

Mehr von Sotaro Omura

RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告Sotaro Omura
 
Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Sotaro Omura
 
プログラマ進化論
プログラマ進化論プログラマ進化論
プログラマ進化論Sotaro Omura
 
CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHPSotaro Omura
 
FuelPHP + Pagoda Box
FuelPHP + Pagoda BoxFuelPHP + Pagoda Box
FuelPHP + Pagoda BoxSotaro Omura
 
PHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするPHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするSotaro Omura
 
seleniumをPHPで使う
seleniumをPHPで使うseleniumをPHPで使う
seleniumをPHPで使うSotaro Omura
 

Mehr von Sotaro Omura (7)

RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告
 
Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!
 
プログラマ進化論
プログラマ進化論プログラマ進化論
プログラマ進化論
 
CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHP
 
FuelPHP + Pagoda Box
FuelPHP + Pagoda BoxFuelPHP + Pagoda Box
FuelPHP + Pagoda Box
 
PHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするPHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールする
 
seleniumをPHPで使う
seleniumをPHPで使うseleniumをPHPで使う
seleniumをPHPで使う
 

Kürzlich hochgeladen

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Kürzlich hochgeladen (8)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

omoon.org の裏側 〜FuelPHP の task 活用例〜

  • 1. omoon.org の裏側 FuelPHP の task 活用例 FuelPHP&CodeIgniter ユーザの集い(FuelPHP東京勉強会#5、CodeIgniter talk #2) October 12, 2013 Sotaro OMURA @omoon
  • 6. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP)
  • 7. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org
  • 8. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org •@omoon
  • 9. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org •@omoon
  • 11.
  • 12.
  • 16.  1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  SilexApplication();  5    6  $app-­‐>register(new  SilexProviderTwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9   10  //  データベース接続情報の読込 11  $env  =  getenv('APP_ENV')  ?:  'development'; 12  $config  =  require  __DIR__  .  "/../config/$env.php"; 13  $app-­‐>register(new  SilexProviderDoctrineServiceProvider(),  array( 14          'db.options'  =>  $config['db'], 15  )); 16   17  //  トップ画面 18  $app-­‐>get('/',  function(SilexApplication  $app)  { 19          $posts  =  $app['db']-­‐>fetchAll(' 20                  SELECT  name,  message,  unix_timestamp(created)  as  created 21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5 22          '); 23          return  $app['twig']-­‐>render('index.twig',  array( 24                  'posts'  =>  $posts, 25          )); 26  }); 27   28  //  投稿処理 29  $app-­‐>post('/speak',  function(SilexApplication  $app)  { 30          $name  =  $app['request']-­‐>get('name'); 31          $message  =  $app['request']-­‐>get('message'); 32          if  ($name  &&  $message)  { 33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message)); 34          } 35          return  $app-­‐>redirect('/'); 36  }); 37   38  $app-­‐>run();
  • 17.  1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  SilexApplication();  5    6  $app-­‐>register(new  SilexProviderTwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9   10  //  データベース接続情報の読込 11  $env  =  getenv('APP_ENV')  ?:  'development'; 12  $config  =  require  __DIR__  .  "/../config/$env.php"; 13  $app-­‐>register(new  SilexProviderDoctrineServiceProvider(),  array( 14          'db.options'  =>  $config['db'], 15  )); 16   17  //  トップ画面 18  $app-­‐>get('/',  function(SilexApplication  $app)  { 19          $posts  =  $app['db']-­‐>fetchAll(' 20                  SELECT  name,  message,  unix_timestamp(created)  as  created 21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5 22          '); 23          return  $app['twig']-­‐>render('index.twig',  array( 24                  'posts'  =>  $posts, 25          )); 26  }); 27   28  //  投稿処理 29  $app-­‐>post('/speak',  function(SilexApplication  $app)  { 30          $name  =  $app['request']-­‐>get('name'); 31          $message  =  $app['request']-­‐>get('message'); 32          if  ($name  &&  $message)  { 33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message)); 34          } 35          return  $app-­‐>redirect('/'); 36  }); 37   38  $app-­‐>run();
  • 18.  1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  SilexApplication();  5    6  $app-­‐>register(new  SilexProviderTwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9   10  //  データベース接続情報の読込 11  $env  =  getenv('APP_ENV')  ?:  'development'; 12  $config  =  require  __DIR__  .  "/../config/$env.php"; 13  $app-­‐>register(new  SilexProviderDoctrineServiceProvider(),  array( 14          'db.options'  =>  $config['db'], 15  )); 16   17  //  トップ画面 18  $app-­‐>get('/',  function(SilexApplication  $app)  { 19          $posts  =  $app['db']-­‐>fetchAll(' 20                  SELECT  name,  message,  unix_timestamp(created)  as  created 21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5 22          '); 23          return  $app['twig']-­‐>render('index.twig',  array( 24                  'posts'  =>  $posts, 25          )); 26  }); 27   28  //  投稿処理 29  $app-­‐>post('/speak',  function(SilexApplication  $app)  { 30          $name  =  $app['request']-­‐>get('name'); 31          $message  =  $app['request']-­‐>get('message'); 32          if  ($name  &&  $message)  { 33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message)); 34          } 35          return  $app-­‐>redirect('/'); 36  }); 37   38  $app-­‐>run(); なんかすみません
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 27.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 35.
  • 39.
  • 45.
  • 46.
  • 47.
  • 53.
  • 55.
  • 56. Tasks are classes that can be run through the command line or set up as a cron job. They are generally used for background processes, timed tasks and maintenance tasks. Tasks can calls models and other classes just like controllers.
  • 57. Tasks
  • 66.
  • 67. ▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep 外部ライブラリ
  • 68. ▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep クラス
  • 69. require_once  APPPATH  .  'vendor'  .  DS  .  'phpFlickr'  .  DS  .  'phpFlickr.php'; class  Flickr {        protected  static  $_instance  =  null;        private  function  __construct()        {                $this-­‐>api  =  new  phpFlickr(                        'xxxxxxxxxxxxxxxxxxxx'  //Config::get('app.flickr_api_key')                );        }        public  static  function  forge()        {                if  (empty(self::$_instance))  {                        static::$_instance  =  new  static();                }                return  static::$_instance-­‐>api;        } }
  • 70. ▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep タスク
  • 71. namespace  FuelTasks; class  Flickr {        public  static  function  run($limit  =  4)        {                $response  =  Flickr::forge()-­‐>photos_search(                        array(                                'user_id'  =>  '94387617@N00',                                'per_page'  =>  $limit,                                'tags'  =>  'asgt,cover',                                'tag_mode'  =>  'all',                                'sort'  =>  'date-­‐taken-­‐desc'                        )                );                foreach  ($response['photo']  as  $photo)  {                        $r  =  Flickr::forge()-­‐>photos_getInfo($photo['id']);                        $e  =  Flickr::forge()-­‐>photos_getExif($photo['id']);                        //print_r($e['camera']);                        if  (null  ===  Model_Coverphoto::find_by('flickr_id',  $r['photo']['id']))  {                                $r['photo']['dates']['taken'];                                $coverphoto  =  Model_Coverphoto::forge();                                $coverphoto-­‐>flickr_id  =  $r['photo']['id'];                                $coverphoto-­‐>title  =  $r['photo']['description'];                                $coverphoto-­‐>taken_at  =  $r['photo']['dates']['taken'];                                $coverphoto-­‐>camera  =  $e['camera'];                                $coverphoto-­‐>data  =  json_encode($r['photo']);                                $coverphoto-­‐>save();                        }                }        } }
  • 72. #  crontab  -­‐e *  *  *  *  *  cd  /var/www/omoon.org;  /usr/bin/php  oil  refine  flickr:run
  • 73.
  • 78.
  • 79.