vim のインサートモードで行頭をトグルする
vim を使ってて、emacs みたいに C-a で行頭と空白以外の最初の文字を トグルしたかったので作ってみました。
function! ToggleBol() let col = virtcol('.') let cmd = (col == 1) ? '^' : '0' execute "normal! " . cmd endfunction inoremap <C-a> <C-o>:call ToggleBol()<CR>
コメントアウトする時とかに便利かも。
追記
Qiitaのコメント で教えてもらったやり方のがよさそうなので、こっちにも書いときます。
inoremap <expr> <C-a> \ search('^\s\s*\%#', 'bcn') ? "\<C-o>0" : "\<C-o>^"
search とか初めて知ったよ。
twig で配列の数をカウントする
ちょっと検索しただけでは分からなかったので。 ほとんど参考サイトのコピペですが。
{% if my_list|length > 10 %} ... {% endif %}
ubuntu に samba を入れる
もう少し簡単にファイル共有できないかと思い、 ubuntu に samba を入れてみました。
いつも通り、 apt-get を使います
$ sudo apt-get install samba
共有するディレクトリを作成し、 だれでも読み書きできるようにオーナー、権限を設定します。
$ sudo mkdir /var/samba $ sudo chown nobody:nogroup /var/samba $ sudo chmod 777 /var/samba
/etc/samba/smb.conf をエディタで開いて設定します。
[global] workgroup = WORKGROUP dos charset = CP932 # Windows 側の文字コード unix charset = UTF-8 # Linux 側の文字コード map to guest = Bad User # Linux に存在しないユーザーでのアクセスはゲストとして扱う [share] path = /var/samba # さっき作ったディレクトリ writeable = yes # 書き込み許可 force create mode = 0666 # ファイルを作った時の権限 force directory mode = 0777 # ディレクトリを作った時の権限 guest ok = yes # ゲストアクセスを許可 guest only = yes
設定したら再帰動します。
sudo service smbd restart
これで接続できました。
ubuntu に Symfony2 をインストール
Symfony2 を ubuntu にインストールした時のメモ
まず、 Symfony を落としてきて展開
mkdir ~/temp cd ~/temp wget http://get.symfony.com/Symfony_Standard_Vendors_2.3.1.tgz tar -zxvf Symfony_Standard_Vendors_2.3.1.tgz sudo mv Symfony /var/www
で http://hostname/symfony/web/app_dev.php にアクセス。 以下のエラーが出たので、 app_dev.php を修正します。
You are not allowed to access this file. Check app_dev.php for more information.
sudo vim /var/www/Symfony/web/app_dev.php
app_dev.php はローカルからのみ接続できるようになっています。 今回は開発用に他マシンからも接続するので、 以下の行をコメントアウトします。
# if (isset($_SERVER['HTTP_CLIENT_IP']) # || isset($_SERVER['HTTP_X_FORWARDED_FOR']) # || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) # ) { # header('HTTP/1.0 403 Forbidden'); # exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); # }
再びブラウザからhttp://hostname/symfony/web/app_dev.php にアクセス
RuntimeException: Unable to create the cache directory (/var/www/Symfony/app/cache/dev)
エラーが出たので権限を変更します
chmod 777 /var/www/Symfony/app/cache
さらにブラウザでチェックすると エラーが出たので権限を変更します。 UnexpectedValueException: The stream or file "/var/www/Symfony/app/logs/dev.log
chmod 777 /var/www/Symfony/app/logs
これで正しく表示できるようになりました。
ubuntu の Apache で Userdir を使えるようにする
デフォルトでは各ユーザの ~/public_html にアクセスできないようなので 設定を追加しました。
cd /etc/apache2/mods-enabled sudo ln -s ../mods-available/userdir.conf userdir.conf sudo ln -s ../mods-available/userdir.load userdir.load
apache を再起動します。
sudo service apache2 restart
public_html ディレクトリを作って 確認用の html をコピー。
mkdir ~/public_html cd ~/public_html cp /var/www/index.html .
ブラウザから http://<サーバ>/~<ユーザ名> にアクセスして 表示されれば OK です。
MySQL を外部接続できるようにする
前回で MySQL をインストールしましたが、 外部から接続するために設定が必要だったのでメモ。
まず、普通に接続しようとすると以下のエラーメッセージが出ました。
SQL Error (2003) Can't connect to MySQL server
で、設定ファイルを編集します。
sudo vim /etc/mysql/my.cnf
↓この bind-address の行をコメントアウトします。
# bind-address = 127.0.0.1
編集したら再起動
sudo service mysql restart
で、外部から接続テストすると
sql error 1130 host is not allowed to connect to this mysql server
なエラーメッセージが。 まだ権限付与しないとダメらしいので コマンドラインから接続して設定します。
mysql -u root -p mysql> GRANT ALL PRIVILEGES ON *.* TO root@'192.168.%' IDENTIFIED BY 'root のパスワード' WITH GRANT OPTION;
これで他ホストから接続できました。
IP address 'XXX.XXX.XX.XX' could not be resolved: Name or service not known
ただ、以下のようなワーニングが出て気になったので設定した。 /etc/mysql/my.cnf に
skip-name-resolve
を追加したら OK でした。
PHP で簡易 Enum を実装する
php では java のように enum 型がないのですが、 やはり使いたい場合があります。
本格的に実装してもいいのですが、 そこまでするのも大げさだなぁ、という場合に リフレクションを使って簡単に実装する方法があります。
<?php trait SimpleEnum { public static function values() { $className = get_called_class(); $refClass = new ReflectionClass($className); $values = $refClass->getConstants(); return $values; } public static function valueOf($value, $notfound = null) { $values = self::values(); if (!array_key_exists($value, $values)) return $notfound; return $values[$value]; } }
使い方
<?php class TestEnum { use SimpleEnum; const HOGE = 0; const FUGA = 1; } echo TestEnum::HOGE; // => 0 echo TestEnum::FUGA; // => 1 echo TestEnum::valueOf('FUGA'); // => 1 echo TestEnum::valueOf('UnDefined'); // => null echo TestEnum::valueOf('UnDefined', 'undefined'); // => undefined
java みたく複数の値を定義したり、型検証できませんが、 ちょっと使う分にはこれでもいいかと。
trait を使ってますが、 class にして継承すれば 5.3 以下でも使えると思います。