Googleカレンダーと連携しており、カレンダーに予定を登録するだけで出欠が管理できます。
チーム専用のURLが発行されるので、メンバーはいつでも最新の予定を確認できます。
予定一覧画面
出欠投稿画面
投稿一覧画面
初期設定は少々面倒ですが、はじめだけなので、日々の運用はチョーラクチンになるはずです。
よかったら使ってみてご意見ください!
チームの出欠管理サービス「BitScheduler」
Starting update of app: **********, version: 4
12:38 AM Getting current resource limits.
2016-12-02 00:38:08,108 ERROR appcfg.py:2455 An error occurred processing file '': HTTP Error 403: Forbidden Unexpected HTTP status 403. Aborting.
Error 403: --- begin server output ---
You do not have permission to modify this app (app_id=u'**********').
--- end server output ---
If deploy fails you might need to 'rollback' manually.
The "Make Symlinks..." menu option can help with command-line work.
*** appcfg.py has finished with exit code 1 ***
*** Running dev_appserver with the following flags:
--skip_sdk_update_check=yes --port=8080 --admin_port=8000
Python command: /usr/bin/python2.7
INFO 2016-12-01 22:00:41,793 devappserver2.py:769] Skipping SDK update check.
INFO 2016-12-01 22:00:41,845 api_server.py:205] Starting API server at: http://localhost:62864
INFO 2016-12-01 22:00:41,850 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO 2016-12-01 22:00:41,853 admin_server.py:116] Starting admin server at: http://localhost:8000
2016-10-08 10:02:39.407 VocabularyCards[27586:2139298] Error saving to keychain: Error Domain=com.samsoffes.ENSSKeychain Code=-34018 "errSecDefault" UserInfo={NSLocalizedDescription=errSecDefault} -34018
2016-10-08 10:02:39.409 VocabularyCards[27586:2139298] Error getting password from keychain: Error Domain=com.samsoffes.ENSSKeychain Code=-25300 "errSecItemNotFound" UserInfo={NSLocalizedDescription=errSecItemNotFound}
https://www.google.com/calendar/feeds/{カレンダーID}/public/embed?ctz=Asia%%2FTokyo&singleevents=true&start-min=2015-12-13T00%%3A00%%3A00%%2B09%%3A00&orderby=starttime&sortorder=ascend&alt=json
![]() |
| 「カレンダー設定」メニュー |
![]() |
| カレンダーID |
https://www.googleapis.com/calendar/v3/calendars/{カレンダーID}/events?orderBy=startTime&singleEvents=true&timeMin=2015-12-13T00%3A00%3A00Z&key={API Key}
[Window] -> [Preferences] -> [Team] -> [CVS] -> [Ext Connection Method]
"-l {user} -pw {password} {host}"6) [OK] を押す。
$u = Model_User::forge(array(
'username' => '担当1',
'password' => 'KWd27qfZtlw9qbEVMe5v2zRnZUuC0Eqa330cdN+9lro=',
'email' => 'hoge@hoge.jp',
'last_login' => '2013-08-30 00:00:00',
'created_user' => 1,
));
$u->save();
$g = Model_Group::forge(array(
'name' => 'グループ1',
'status' => 0,
'created_user' => 1,
));
$g->save();
id: 1
name: 小野小町
email: komachi@example.jp
comment: |
花の色は移りにけりないたづらに
我が身世にふるながめせし間に
ip_address: 192.168.1.1
user_agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0
created_at: 1333524234
updated_at: 1333524234
-
id: 2
name: 文屋康秀
email: yasuhide@example.jp
comment: |
吹くからに秋の草木のしをるれば
むべ山風を嵐といふらむ
ip_address: 10.10.10.10
user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
created_at: 1333534305
updated_at: 1333534305
$data = file_get_contents($fixt_file);
$data = Format::forge($data, static::$file_type)->to_array();
foreach ($data as $row) {
DB::insert($table)->set($row)->execute();
}
use AspectMock\Test as test;
・・・略・・・
test::double('Fuel\Core\Validation', ['run' => true]);
// HMVCリクエストを実行
$response = Request::forge('form/confirm')->execute()->response();
// 下記SQLを Query Builder を使って記述すると
// SELECT * FROM `users` WHERE `name` != "John" AND `surname` = "Doe"
// AND (`email` = "jim@jim.com" OR `email` = "haha@joke.com")
// 下記のようになります。
$query = DB::select('*')->from('users');
// 最初の where ステートメントをセット
$query->where('name', '!=', 'John');
// あたらしい条件を追加
$query->and_where('surname', 'Doe');
// ネストした where をコールバックで
$query->where(function($query){
$query->where('email', 'jim@jim.com')
->or_where('email', 'haha@joke.com');
});
$name = DB::quate($name);
$surname = DB::quate($surname);
$email1 = DB::quate($email1);
$email2 = DB::quate($email2);
$query = "SELECT * FROM users WHERE name != $name AND surname = $surname AND (email = $email1 OR email = $email2)";
$users = DB::query($query, DB::SELECT)->as_object('Model_User')->execute();
// IE9 未満の場合は専用の CSS を出力する
if(Agent::browser() == 'IE' and Agent::version() < 9) {
echo Asset::css('ie.css');
}
env_variables: FUEL_ENV: 'production' # FUEL_ENV: 'development'
handlers: # assets dir - url: /assets static_dir: public/assets # favicon file - url: /favicon.ico static_files: favicon.ico upload: favicon.ico # php files - url: /.* script: public/index.php
![]() |
| ローカルでは動くのですが。。。 |
'base_url' => 'http://{your_app_id}.appspot.com/',
'log_threshold' => Fuel::L_NONE,
![]() |
| log をファイル出力すると 500 エラーにもかかわらず何も出力されません。 |
![]() |
| パッチをあててもらうと Fuel の log 出力も debug log も出力できます。 |
'locale' => 'C',
'fail_silently' => true,
echo Asset::css('http://{your app id}.appspot.com/assets/css/bootstrap.css');
![]() |
| ようやく appspot.com 上でも Welcome! が拝めました。 |
$result = DB::query("select * from productusers where product_id = $product_id", DB::SELECT)->as_object('Model_Productuser')->execute();
Log::debug('[sql:'.get_called_class().']'.DB::last_query());
<コンパイルエラーのメッセージ>
/evernote-sdk-ios/EvernoteUserStore.m:68:0 /Users/isatanisatan/Documents/WordCard5/evernote-sdk-ios/EvernoteUserStore.m:68: error: incompatible block pointer types initializing 'void (^)(struct EDAMBootstrapInfo *)', expected 'void (^)(struct objc_object *)'
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; [indicator setCenter:CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2)];
インジケーター生成 → インジケーターViewを追加 → やりたい処理 → インジケーターView削除ではダメなんです。
// インジケーターView追加 [self.navigationController.view addSubview:self.indicator]; // インジケーター再生 [self.indicator startAnimating]; // 別スレッドで処理 [self performSelectorInBackground:@selector(othreProcess) withObject:nil]; [self.window makeKeyAndVisible];
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // // ここでやりたい処理を実行。 // [pool release]; // 終了処理をメインスレッドへ通知 [self performSelectorOnMainThread:@selector(hideIndicator) withObject:nil waitUntilDone:NO];
-(void)hideIndicator {
[self.indicator removeFromSuperview];
[self.indicator stopAnimating];
}