2011年12月30日金曜日

Lubuntuで.psファイルを置いたディレクトリを開くと固まる

ここ2,3日、LubuntuのPCのPicturesディレクトリをファイルマネージャで開くとCPU負荷が飛び上がって固まってしまう現象に悩まされていました。

他のディレクトリでは何の問題もないし、

仕事用のLubuntuのPCの方にも素材やら壁紙やら同じようにあっても何の問題もないので
違いを考えてみたところ、
ちょっと前に画像ファイルの変換を色々試していて.svg,.ai,.sk,.eps,.psなどのベクタフォーマットのファイルが転がっており、
プレビューを出そうとして処理が重くなっているのではないかと予想。

順にmvで別なディレクトリにどかしてみたら、
最後に.psファイルを取り除いて普通に開くようになりました。
svgは実際に使うので戻してみたら、svgは問題なし。

2011年12月21日水曜日

gitosisからgitoliteへの移行

gitosisのソース管理サーバを別サーバに移行する。
そのタイミングでgitoliteに移行。
移行先はUbuntu 10.04。
10.04ではaptでインストールできないので手作業で。

まずアカウントを作る。
$ sudo adduser git
パスワードは無効にしておく。
$ sudo vim /etc/shadow
git:$6$...:0:...
となっている部分を
git:*:0:...
に書き換える。

gitアカウントに乗り移る。
$ sudo su git
(git)$ cd
大抵のチュートリアルは別PCからセットアップするような手順になっているが
諸事情によりサーバ側でやる。

ssh鍵作る。
(git)$ ssh-keygen
gitoliteをgithubからもらってくる。
(git)$ git clone https://github.com/sitaramc/gitolite.git
インストールはrootで。
(git)$ exit
$ cd /home/git
$ sudo mkdir -p /usr/local/
$ sudo gitolite/src/gl-system-install
gitアカウントのssh鍵でセットアップしようと思うが
id_rsa.pubという名前のままはアレなので。
$ sudo su git
(git)$ cp .ssh/id_rsa.pub git-server.pub
(git)$ gl-setup git-server.pub
エディタが開くがそのまま閉じる。

別サーバからリポジトリを移行。
(git)$ cd repositories
(git)$ rsync -azr gitosis@gitserver:/home/gitosis/repositories/* .
作業ディレクトリを作って、gitoliteの管理用リポジトリを取得。
(git)$ cd ~
(git)$ mkdir work
(git)$ cd work
(git)$ git clone git@localhost:/gitolite-admin.git
gitosisの管理用リポジトリも取得。
(git)$ git clone ~/repositories/gitosis-admin.git
公開鍵をgitosisからgitoliteにコピー。
(git)$ cp gitosis-admin/keydir/* gitolite-admin/keydir/
gitosis.confをgitolite用に変換。
(git)$ gl-conf-convert < gitosis-admin/gitosis.conf > gitolite.conf
このgitolite.confにはgitolite-adminにアクセスするための設定が無いので、
追加してから上書き。
(git)$ cat gitolite-admin/conf/gitolite.conf >> gitolite.conf
(git)$ cp gitolite.conf gitolite-admin/conf/gitolite.conf
変更をcommitし、push
(git)$ cd gitolite-admin
(git)$ git add keydir/*
(git)$ git add conf/gitolite.conf
(git)$ git commit -m 'migrate'
(git)$ git push
要らないディレクトリやファイルを削除。
(git)$ rm -rf ~/work ~/gitolite
(git)$ exit

2011年12月13日火曜日

lubuntuのシステムトレイの右に余白が表示される

ふと思い立ってlubuntuにしました。
といっても単にubuntuで
apt-get install lubuntu-desktop
して再起動しただけ。
デフォルトで下に表示されるパネルを上に持ってくると、懐かしいあの感じになりました。

しばらく使ってて、ふと気付いたのがシステムトレイ。
システムトレイのIMEやネットワークのアイコンと時計の間に
変な余白が空いていました。
右クリックしたり色々してみると、どうもシステムトレイの右側が伸びている様子。
右クリックのPanel Settingから、System Trayを一度消して再度追加すると
余白が消えてきれいな表示に。

検索してみる。あった。
http://ubuntuforums.org/showthread.php?t=1766304

スクリプトをコピペ。
#!/bin/bash

killall lxpanel
find ~/.cache/menus -name '*' -type f -print0 | xargs -0 rm
lxpanel -p Lubuntu &
fixsystray.shとかそれっぽい名前で保存して、chmod u+xして実行。
パネルが再表示されて、きれいな表示に。

ちょっと力技っぽくてイマイチだけど、用は足りるね。

2011年12月2日金曜日

Zend FrameworkでContent-Dispositionヘッダが二行出る

Zend Frameworkを使用しているWebアプリで
あるxlsファイルをダウンロードさせようと
$filename = 'attachment; filename="Download.xls"';
$resp = $this->getResponse();
$resp->setHeader('Content-Type', 'application/vnd.ms-excel');
$resp->setHeader('Content-Disposition', $filename);
$resp->appendBody(file_get_contents($filepath));
$resp->sendResponse();
みたいに書いた。

動かしてみたら問題なく動いた。

と思ったら、他の数人からChromeでアクセスした際に
エラー 349 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): 複数の Content-Disposition ヘッダーを受信しました。これは、HTTP レスポンス分割攻撃を防ぐために禁止されています。
と出るとの話を聞いた。

自分もChromeなのに別に何も出ない。

一体どう複数なんだいとパケットキャプチャ。
HTTP/1.1 200 OK
Date: ■■■■■■■■■■■■
Server: ■■■■■■■■■■■■■
X-Powered-By: PHP/5.3.4
Expires: ■■■■■■■■■■■■■
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Disposition: attachment; filename="Download.xls"
Content-Disposition: attachment; filename="Download.xls"
Connection: close
Transfer-Encoding: chunked
Content-Type: application/vnd.ms-excel
ぐうの音も出ない程に複数。

同僚の人からアドバイスをゲット。
第三引数をtrueにして上書きにすればいいのでは、とのこと。

変更してみた。
$resp->setHeader('Content-Disposition', $filename, true);
ヘッダが正しく一行だけ出るようになった。

でもソース内で他にContent-Dispositionを設定している所なんかない。
(そもそも上の例でこそファイル名をDownloadで固定にしているが実際はその場で作成している)

なんなの。

2011年11月20日日曜日

MySQLのテーブルを一括削除するワンライナー

モデル定義からテーブルを自動生成できるフレームワークでガチャガチャやってると、
外部キー制約とかに引っかかってうまく消えなくなったりする。

無理やり片っ端から消すワンライナー。
mysql -Br -u【ユーザ名】 -p【パスワード】 【スキーマ名】 -e "show tables;" | tail -n +2 | xargs -i{} mysql -u【ユーザ名】 -p【パスワード】 【スキーマ名】 -e "SET FOREIGN_KEY_CHECKS=0; drop table {};"

バッチモードで実行することで枠線なし、tailの行数を+2指定する事で「Tables_of_【スキーマ名】」の行を削り取る。
あとは外部キー制約外し→drop tableのコンボをひたすら叩き込む。

必要であればtailとxargsの間でgrepとかで必要なテーブルのみに絞り込む。
(というか絞り込まないんだったらdrop databaseでいいじゃんって話ではある)

MySQLの文字コードをUTF-8に(Ubuntu)

my.cnfを編集するとバージョンアップの時に面倒なので、
/etc/mysql/conf.d 以下に、以下の内容でファイルを作る。
[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
ファイル名は一応 charset.cnf とかそれっぽい名前にした。

2011年11月17日木曜日

linux版chromeでメモリ開放ボタンが出るようにする

/usr/bin/google-chrome の最後の行

exec -a "$0" "$HERE/chrome" "$@"

exec -a "$0" "$HERE/chrome" "--purge-memory-button" "$@"
こうする。

2011年11月7日月曜日

DjangoのModelFormにidを追加する

普通にModelからModelForm作ってas_pとかしてもidは含まれない。
でもちょっとした理由によりModelFormにまとめて扱いたかったので
何とかしてみた。

Modelがこんな感じだとして
class Person(models.Model):
    name = models.CharField("名前",max_length=50)
    birthday = models.DateField("誕生日")
ModelFormには「id」って名前でフィールドを追加すればいいっぽい。
class PersonForm (forms.ModelForm):
    id = forms.DecimalField()

    class Meta:
        model = Person
        fields = ('name','birthday','id')
しばらく「pk」でやってて詰まってた。

2011年11月3日木曜日

Linkstation FW1.54でSSHできるようにした

LS-CHLv2をFW 1.54にした。

標準ファームウェアだともちろんtelnetもsshも使えないので
とにかくrootで繋げられるようにする。

前提は以下。

  • シリアルコンソールは無し
    (ケーブルはあるけど加工が面倒くさくてやってない)
  • 箱は開ける
  • 母艦はUbuntu 11.10 Linkstationのディスクが読み書きできる

1.箱開けてディスクを取り出し、母艦に繋ぐ。

2.パーティションが3つ認識されるのでルートパーティションを探す。etcがあるやつ。

3./etc/init.d/sshd.sh をsudoでエディタで開き、

強制的にフラグを変更する行を追加する。
[ -f /etc/nas_feature ] && . /etc/nas_feature

[ -f /etc/nas_feature ] && . /etc/nas_feature
SUPPORT_SFTP=1
/etc/nas_feature を書き換えても再起動すると書き戻されてしまう。


4./etc/sshd_config をsudoでエディタで開き、二ヶ所変更。

#PermitRootLogin yes
PermitRootLogin no
↓ yesの方を有効にする。
PermitRootLogin yes
#PermitRootLogin no

#PermitEmptyPasswords no
↓ yesの行を追加する。
#PermitEmptyPasswords no
PermitEmptyPasswords yes

5./etc/shadow をsudoでエディタで開き、
rootのパスワードを消す。
オーナーの書き込み権限も無いのでパーミッション振ってから。
sudo chmod o+w shadow 
root:$1$$??????????????????????:11009:0:99999:7:::

root::11009:0:99999:7:::
6.アンマウントしてlinkstationに繋ぎ戻す。

7.ユーザ名rootでssh接続。パスワード無しでログイン出来る。

8.迅速にrootパスワードを変更。
passwd
ユーザ追加などは適宜。

2011年10月31日月曜日

flexigridで高さを動的に変更する

webアプリ作るのにflexigridを使い中。
上に検索項目があって下にグリッドを出すような画面で
document.readyやwindow.resizeの時にwindow.heightを元にして計算して下いっぱいにグリッドを出してやりたいんだけれども、
どうも高さをセットする、というメソッドがない。
ググってみてもいまいち情報が見つからない。

How to change the hight of the flexigrid dynamically
http://groups.google.com/group/flexigrid/browse_thread/thread/cdc162a440de5cff/541acdc8a8052871
放置されてたり、適当ぶっこいてる奴がいたりはしたが。

仕方なくソース読んで無理やり実装してみた。
function gridAutoSize(){
    var windowHeight = $(window).height();
    var gridTop = $('#grid').offset().top;
    grid = $('#grid')[0].grid;
    p = $('#grid')[0].p;
    hfoot = $(grid.pDiv).height() + $(grid.vDiv).height();
    newH = windowHeight - gridTop - (hfoot + 30);
    grid.bDiv.style.height = newH + 'px';
    p.height = newH;
    grid.fixHeight();
}
[0]とかpとかgrid.bDivとp.heightの二ヶ所同じ値セットとかなんなのって感じだけど
表一個の画面ではひとまずそれっぽい動きはしてる模様。
ちなみにhfootの「grid.pDiv」はページャ、「grid.vDiv」は表の下の高さ変えられる引っ張り部分。
なのでその辺を無効にしてると何か起こるかも。
あと30は単なる表の下余白。

2011年10月27日木曜日

続MySQL Workbenchインストール(パッチ版)

先日のエントリでubuntu 11.10にMySQL Workbenchをインストールして
スプラッシュスクリーンこそF4で閉じれたはいいものの、
実は右側のServer Administrationは動くけど
大事な左側のSQL Developmentが動かなかった。

情報を探すと見つかった。
http://bugs.mysql.com/bug.php?id=62347

んで、最終的にどこかのイケメンがパッチをあてたものがダウンロードできるようにしてくれていた。
多謝多謝。
sudo add-apt-repository ppa:olivier-berten/misc
sudo apt-get update
sudo apt-get install mysql-workbench-gpl
 そのうち公式もバグフィックス版になるんだろうけど待ってられないしね。

2011年10月20日木曜日

MySQL Workbenchインストール

mysqlをいじるのにはやっぱりGUIツールが欲しい。
ubuntuのApplication Centerでもmysql-adminとmysql-query-browserは入れられるけど、
ちょっとしょぼい。
なのでMySQLのサイトからdebを落とす。
http://dev.mysql.com/downloads/workbench/5.2.html
下の方の「Select Platform:」というところでubuntuを選択。
11.04用までしか出ていないがひとまず気にせずにダウンロード。
ダウンロードしたファイルをファイルマネージャ上でダブルクリックしてインストール。

インストールしたらDash Homeでmysqlで検索するとアイコンがでてくるけど、
クリックしてもスプラッシュスクリーンで止まってしまう。
これは実はフェイク。スプラッシュスクリーン上でAlt+F4を押して閉じてしまえば、
メインメニューが表示される。

2011年10月18日火曜日

Ubuntu Serverを固定IPにしたら再起動させること。

Ubuntu ServerでVM立てると毎回忘れる。
というか、DHCPの設定でインストールしたVMをクローンして作ってるからだけど。

/etc/network/interfacesにstaticな設定を書き加えて、
sudo /etc/init.d/networking restart
…だけではだめ。
dhcpクライアントのプロセスが動き続けて、
せっかくstaticにしたIPをDHCPで取り直してしまいます。

どうしても再起動させたくなければdhcpのプロセスをkillすればいいけど
どうせセットアップ中だろうから、再起動してしまうのがよろしげ。

2011年10月15日土曜日

ubuntu 11.10入れました(Unity-2Dへのnetbeansアイコン登録)

入れました。
11.04からのアップデート。特に問題なく完了。

フォントが残念な感じになる対策は
http://ubuntuapps.blog67.fc2.com/blog-entry-317.html
Ubuntu 11.10 Oneiric Ocelot のインストールとインストール直後のシステム設定
こちらが詳しいのでご参照のこと。
Unity-2Dランチャーのアイコンサイズも11.10ではCompiz設定マネージャから小さくできました。
(2012/02/08)↑勘違いでした。アップデート後普通のUnityを使っていたようです。

と、気づくとランチャーに設定しておいたnetbeans 7.1 betaのアイコンがありません。
11.04と同様、起動したあと「Keep in launcher」としても、クリックしても起動しないし
再起動すると消えてしまっています。

解決策は、ファイルマネージャで /usr/share/applications/ を開き、その中の
「Netbeans IDE 7.1 Beta」アイコンを、ランチャー上にドラッグ&ドロップ。
クリックして起動するとランチャー上でアイコンが2つに増えてしまう現象が
11.04と同様発生しますが、起動すると元に戻るのであまり気にしないことにします。

2011年8月22日月曜日

ubuntu11.04 phpのエラーを画面に表示

前のエントリを色々やり始めた時、phpのエラーが出なくて一瞬ひるんだ。
デフォルトだとoffなのね。

/etc/php5/apache2/php.iniを編集。
display_errors = Off On
display_startup_errors = Off On

例のごとくapache再起動。
sudo /etc/init.d/apache2 restart

phpでGoogle appsアカウントのOpenID

この概要は表示できません。投稿を閲覧するには ここをクリック してください。

2011年8月21日日曜日

unity-2dランチャーのアイコンサイズ変更

unity-2dのアイコンでかすぎだよね。
↓の通りにすると、アイコンを小さくして縦はいい感じに圧縮できる。横は微妙に余白ができちゃうけど。

http://bhou.wordpress.com/2011/05/06/change-the-icon-size-in-unity-2d-launcher/

メニュー全体の幅はどうすれば変えられるのかな。

2011年8月19日金曜日

h2o-phpにifequal追加してみた


h2o-php テンプレートエンジン

ifequalテンプレートタグが無かった。

別に if x == y で済むけど。適当に実装してみる。
tags.phpの最後にでも追加する。
class Ifequal_Tag extends H2o_Node {
    private $body;
    private $else;
   
    function __construct($argstring, $parser, $position = 0) {
        $this->body = $parser->parse(‘endifequal’, ‘else’);
        if ($parser->token->content === ‘else’)
            $this->else = $parser->parse(‘endifequal’);
         $this->args = H2o_Parser::parseArguments($argstring);
    }

    function render($context, $stream) {
        $argleft = $context->resolve($this->args[0]);
        $argright = $context->resolve($this->args[1]);
        if ($argleft != $argright) {
            if($this->else)
                $this->else->render($context, $stream);
        } else{
            $this->body->render($context, $stream);
        }
    }
}
はい適当。
あと最後のH2o::addTagにも’ifequal’を追加する。

2011年8月17日水曜日

TTbaseのスタートアップ時のエラー回避


Windows7でTTbaseをスタートアップに入れると、起動時タスクトレイ格納に失敗する。
そのあと手動で起動させると普通に起動できる。
よくわからんけど、ちょっと待たせてみよう。 
wsh.sleep(10000)
set wshshell = createobject(“wscript.shell”)
wshshell.run(“C:\APP\ttb10100\TTBase.exe”)
こんなのをttbaseboot.vbsみたいなファイル名で作って、
スタートアップにこれへのショートカットをセットする。
ひとまず回避できてるっぽい。ちなみにsleepが1000msだとだめだった。

2011年8月8日月曜日

xdebug入れてなかった


xdebug入れてなかった。どうせならNetBeansからステップ実行できるほうがいいもんね。
sudo apt-get install php5-xdebug
インストール後、 /etc/php5/conf.d/xdebug.ini を編集。
zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so
;ここから下を追加
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
Apache再起動。
sudo /etc/init.d/apache2 restart

Ubuntu 11.04にZend Framework環境構築

必要っぽいパッケージのインストール。
sudo apt-get install apache2 php5 mysql-server mysql-client php5-mysql
Zend Frameworkもapt-getで入れてみる。
最新バージョンを追いたい事になったらその時に考える。
sudo apt-get install zend-framework
とりあえずNetBeansで新しいプロジェクト作成。
ソースフォルダは伏せ字だけど自分のホームディレクトリ以下にしている。






実行する際に公開フォルダにコピーする設定を使ってみる。
ubuntuのルートディレクトリは/var/wwwで、root以外の書き込みは不可なので警告が出ている。
自力で作る。
cd /var/www
sudo mkdir test
sudo chown <user>:<user> test

このあとNetBeans providerの登録に失敗とかエラーが出るがそれは後で考える。
後はいくつかファイル修正。
  • /etc/php5/conf.d/zend-framework.ini
[Zend]
include_path=${include_path} ":/usr/share/php/libzend-framework-php"
include_pathの行頭コメントを削除。
  • /etc/apache2/sites-available/mysites 
Alias /test/ "/var/www/test/public/"
<Directory "/var/www/test/public/">
    AllowOverride All
</Directory>
作成したあと、sites-enabledの方にシンボリックリンク作成。
cd /etc/apache2/sites-enabled
sudo ln -s ../sites-available/mysites 001-mysites
  • Rewriteモジュールの有効化。
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/rewrite.load .
あとはApache再起動。
sudo /etc/init.d/apache2 restart
ブラウザでアクセスしてみる。
http://localhost/test/

出た出た。

2011年8月6日土曜日

NetBeans7.0.1にgitプラグインを入れる

NetBeans7.0.1入れたらgitプラグインがプラグイン一覧に出てこなかった。

http://plugins.netbeans.org/plugin/37577/git-versioning-system-support

ここからダウンロードしたzipを展開して、downloadedタブのAdd Plugins...からインストールすればひとまずはよさげ。