_onichannn

【Symfony】のベスト・プラクティス。

が公式に纏められていたのでペタリ。

http://symfony.com/doc/current/best_practices/index.html

設計時の参考になるね。

 

【Symfony2.3】ParamConverterがくっそ便利な件。

これ使うとコントローラーをかなり圧縮できる。

例)

namespace Hoge\FugaBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;

// 例えばFOSRestBundleを道入してRestAPIを作成していたとする。
use FOS\RestBundle\Controller\Annotations\View;

class PiyoController extends Controller
{
    /**
     * @Route("/user/{id}.{_format}", name="hoge_fuga_piyo_show", defaults={"_format" = "json"})
     * @View(serializerEnableMaxDepthChecks=true, serializerGroups={"piyoShow"})
     * @ParamConverter("entity", class="HogeFugaBundle:User")
     * @Method("GET")
     */
    public function showAction(User $entity)
    {
        return $entity;
    }

}

見て分かる通り、URLよりIDを取得後対応するエンティティをjson文字列として返却するメソッドは上記の通り1行で済むようになる。

アノテーションでParamConverterを指定してやると、自動でDoctrineから習得したエンティティを注入してくれているのである。

基本的に指定がなければリポジトリのfind()メソッドにRouteアノテーションから受け取ったidを渡してエンティティ習得を試みてくれるが、リポジトリ内のメソッドを指定することも出来る

/**
 * @ParamConverter("entity", class="HogeFugaBundle:User", options={"repository_method"="customGet"})
 */

といった具合である。

更に便利な機能もあるのであとは公式を参照されたし。

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

これはまじで便利。

 

【Javascript】関数の引数名を習得する。

AngularJSとかで変数名から注入するサービスを習得してくれる所でやっている処理。

Qiitaで素晴らしいソースを発見。

function getParams(func) {
    var source = func.toString()
        .replace(/\/\/.*$|\/\*[\s\S]*?\*\/|\s/gm, ''); // strip comments
    var params = source.match(/\((.*?)\)/)[1].split(',');
    if (params.length === 1 && params[0] === '')
        return [];
    return params;
}

関数オブジェクトのtoString()がソースコードを返してくれるのでそれを利用しているとのこと。

使い方としては関数をそのまま渡せばOK。

 

【Windows8.1】で壁紙を設定すると画質が超絶劣化する問題。

を回避する際のメモ。

まずWindows8は壁紙を設定した際にそのキャッシュファイルを生成して特定のディレクトリに保存している。
そのキャッシュ生成の際に画像を圧縮して保存しているために画質の劣化が発生してしまうのである。

そしてWindowsが壁紙をキャッシュとして保持しておくディレクトリは、壁紙の設定方法によって異なる。
下記がその一覧。

■「デスクトップの背景の変更」で壁紙を指定した場合
C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Themes\TranscodedWallpaper.jpg

■Windowsフォトビューアで開いている画像を右クリックから背景に設定した場合
C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows Photo Viewer\Windows フォト ビューアー壁紙.jpg

■Web上の画像を右クリックから背景に設定した場合
C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Internet Explorer\Internet Explorer Wallpaper.bmp

といった具合にディレクトリに差異がでてくるので注意。
※ファイル名は上記のもので固定(な模様?)

よって、壁紙の画質劣化を回避したい場合は上記いずれかの方法で壁紙を設定した後に生成されるファイルを高画質なものに置き換えてやればOK。
こうすることでPC側が壁紙を再読み込みした際に高画質なものと置き換わってくれる。

 

【Windows8.1】で日本語が入力出来なくなったら。

ほんとこの問題困る。一応下記手順で復帰出来る模様。

1, 「Windowsキー」を押しながら「X」を押す。

2, 出てきたメニューの中から「コンピューター管理」をクリック。

3, 左側のメニューから「システムツール」→「タスク スケジューラ」→「タスク スケジューラ ライブラリ」→「Microsoft」→「Windows」→「TextServicesFramework」を選択。

4, 「MsCtfMonitor」を右クリックし、「有効」をクリック。その後もう一度右クリックし、「実行する」をクリック。

これで言語バーが復活するはずなので、あとはローマ字入力に切り替えればOK。

 

【CentOS7】IPを固定する。

CentOS7でIPアドレスを固定する方法をメモ。

/etc/sysconfig/network-scripts/ifcfg-xxxxx
※xxxxxは環境によって違うっぽい??


...

#BOOTPROTO=dhcp
BOOTPROTO=static

...

IPADDR=192.168.XX.YY
NETMASK=255.255.255.0
GATEWAY=192.168.XX.2
DNS1=192.168.XX.2
DNS2=8.8.8.8

といった感じで設定する。
BOOTPROTOをstaticにするのがポイント。

 

【MySQL】でひらがな、カタカナ、大文字、小文字、全角、半角を区別したい。

結構ハマったのでメモ。

何も考えずにカラムの照合順序を「utf8_unicode_ci」にしていた所、MySQLの有難すぎる仕様が判明。

たとえば「テスト」という文字列で特定カラムをselectすると、上記の型の場合

「テスト」、「てすと」、「テスト」、「てスト」の全てにヒットしてしまうらしい。というかヒットした。

アルファベットも同様、「ABC」を検索すると

「ABC」、「ABC」、「abc」、「ABc」がヒットし、

数値「123」の場合

「123」、「123」、「123」といった具合にヒットする。

今回はあくまでも完全一致のみを引っ張ってきてほしかったため、解決方法を探した所
カラムの照合順序を「utf8_bin」に変更すればOKとのことが判明。

変更後、無事完全一致で引っ張ることができた。

場合によってはとても便利な仕様だけどもしっかりと把握しておくべき重要なポイントだね。

 

【Excel】異なるブックにシートをコピーする。

メモ。

1, シートの見出しを右クリックし「移動またはコピー」を選択。

2, 移動先ブック名を「(新しいブック)」に設定し、「コピーを作成する」にチェックを入れてOKを押す。

新しいブックにシートがコピー作成されて完了。