Archives by date

You are browsing the site archives by date.

【Git】不要になったリモートブランチを削除する。

消したいブランチ名が「hoge」だとしたら。

まずはローカルブランチを削除

$ git branch -D hoge

次にリモートブランチを削除

$ git push origin :hoge

「:hoge」のコロンの意味やgit pushの実体に関する解説は下記ページが神分かりやすい。

http://shoma2da.hatenablog.com/entry/2014/03/08/234523

 

【Symfony2.3/Doctrine2】で生SQLを実行する。

DQLではMySQLのDATE_FORMATが使えないので生クエリを発行してみた。

例えばブログなどの投稿記事を男女別、日別でカウントを取りたいとすると
雰囲気下記のような感じになる。

// ファイルの先頭で宣言
use Hoge\FugaBundle\Entity\Post;
use Doctrine\ORM\Query\ResultSetMapping;

...
// 関数内
$em = $this->getDoctrine()->getManager();
// 何日前の投稿分まで集計するか
$pastRange = date('Y-m-d', strtotime('-16 days'));

$sql = "select date_format(p.createdAt, '%Y-%m-%d') as date, p.sex as sex, count(p.id) as cnt from posts as p where p.deletedAt is null and p.status in (1, 2) and p.createdAt >= ? 

group by date, sex";

$rsm = new ResultSetMapping();
$rsm->addEntityResult('HogeFugaBundle:Post', 'p');
$rsm->addScalarResult('date', 'date');
$rsm->addScalarResult('sex', 'sex');
$rsm->addScalarResult('cnt', 'cnt');

$query = $em->createNativeQuery($sql, $rsm);
$query->setParameter(1, $pastRange);

// FOSRestBundleを用いてjsonでレスポンスを返却する。
$view = $this->view($query->getResult(), 200)->setFormat('json');
return $this->handleView($view);

これでDQLに無い関数も利用出来るようになった。

おまけ。曜日、時間帯、男女別ごとにカウントを取るSQL。

$sql = "select date_format(p.createdAt, '%w') as day, date_format(p.createdAt, '%H') as hour, p.sex as sex, count(p.id) as cnt from posts as p where p.deletedAt is null and p.status 

in (1, 2) and p.createdAt >= ? group by day, hour, sex";

$rsm = new ResultSetMapping();
$rsm->addEntityResult('HogeFugaBundle:Post', 'p');
$rsm->addScalarResult('day', 'day');
$rsm->addScalarResult('hour', 'hour');
$rsm->addScalarResult('sex', 'sex');
$rsm->addScalarResult('cnt', 'cnt');

うん。楽しい。

createNativeQuery()の詳細は下記公式を参照されたし。

http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html

 

【MySQL】二つの日付の差を算出する。

ためのめちゃくちゃ便利な関数を見つけたのでメモ。

■TIMESTAMPDIFF

フォーマット

 TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

日付または日付時刻式 datetime_expr1 および datetime_expr2 間の整数の差を戻す。結果のユニットは、unit 引数によって提示される。
unit に指定出来る引数は下記の通り。

FRAC_SECOND 、SECOND 、MINUTE 、HOUR 、DAY 、WEEK 、MONTH 、QUARTER 、YEAR
※上記引数には「SQL_TSI_」のプレフィックスを付加することも可能。

例)SQL_TSI_SECOND(SECONDと同等)

下記SQLの例。この場合二つの日付の差が秒数で返却される。

select timestampdiff(SQL_TSI_SECOND, insert_date, update_date) from posts;

これめちゃくちゃ便利ですわ。

 

【AngularJS】フロントサイドでログイン認証機能を実装する。

下記URLのstackさんを参考にやってみた。っていってもほぼそのまんまだけど。

http://stackoverflow.com/questions/20969835/angularjs-login-and-authentication-in-each-route-and-controller

■constants.js(ログインが必要なページ(URI)をここで定義しておく)

app.constant('requireAuth', [
    '/admin/dashboard'
]);

■app.js

app.run(['$rootScope', '$location', 'auth', 'requireAuth',
    function($rootScope, $location, auth, requireAuth) {

    // login check
    $rootScope.$on('$routeChangeStart', function(event) {
        if (requireAuth.indexOf($location.path()) > -1 && !auth.isLoggedIn()) {
            // ログインページに飛ばす
            event.preventDefault();
            $location.path('/login');
        }
    });
}]);

■factories.js

app.factory('auth', function(){
    var user;
    
    return {
        setUser: function(aUser) {
            user = aUser;
        },
        isLoggedIn: function() {
            return (user) ? user : false;
        }
    }
});

■controllers.js(ログインが必要なコントローラーにて)

var controller = function($scope, $location, auth) {
    $scope.$watch(auth.isLoggedIn, function(value, oldValue) {
        if (!value && oldValue) {
            // ログインページに飛ばす
            $location.path('/login');
        }
    }, true);
}

こんな感じでなかなかよさ気に実装することが出来た。
ただしこのままだとページをリロードするとログアウトしてしまうため、そこは$cookieなどをうまく利用してログイン状態を維持しておくのがベター。

 

【Git】GitHubやBitbucketにpushしたcommitの削除方法。

メモ。

※自己責任で。

リモート上とローカルが同じ状態であることが前提。
また手順でコミットを消すと、そこで追加したファイルは削除されるので後で手で戻す必要がある。

まずリモート上のhistoryを遡って取得する。

例)4個遡る

git rebase -i HEAD~4

下記のようにpick行が表示される。

pick 6f6e387 modify
pick abc7e07 modify
pick c7fd962 modify
pick 76a95b7 modfiy

# Rebase 27fda5c..76a95b7 onto 27fda5c
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

消したいコミットの行を削除後、保存して閉じる
※全部削除してしまうとキャンセルとみなされてしまうため1行は残すこと。

下記のメッセージが表示されれば成功

Successfully rebased and updated refs/heads/master.

下記コマンドで消えていることを確認。

git log

リモートにpushする。

git push origin +master

以上で完了。

pickを削除して保存した際、Successにならなかった場合の手順は下記URLを参照されたし。

http://pandazx.hatenablog.com/entry/2012/10/14/005716

 

【AngularJS/Kendo-ui】Angularでkendo-uiを使う。

メモ。

CSSとJSを読み込む。

<link rel="stylesheet" href="//cdn.kendostatic.com/2014.1.318/styles/kendo.common.min.css" />
<link rel="stylesheet" href="//cdn.kendostatic.com/2014.2.716/styles/kendo.default.min.css" />
<link rel="stylesheet" href="//cdn.kendostatic.com/2014.2.716/styles/kendo.dataviz.min.css" />
<link rel="stylesheet" href="//cdn.kendostatic.com/2014.2.716/styles/kendo.dataviz.default.min.css" />

<script src="//cdn.kendostatic.com/2014.1.318/js/kendo.all.min.js"></script>
<script src="/angular-kendo.js"></script>

モジュールを読み込む。

angular.module('app', [
    'kendo.directives',
]);

あとは公式のDEMOでも見て好きに使えばおk。

http://demos.telerik.com/kendo-ui/

 

【CSS】fontプロパティ引数まとめ。

http://phpjavascriptroom.com/?t=css&p=font

 

【Git】ファイルのパーミッション変更を無視する。

$ git config core.filemode false

設定出来ているかの確認は下記の通り行う。

$ git config -l | grep filemode