デフォルトのエディター設定
% sudo update-alternatives --config editor
デフォルトのエディター設定
% sudo update-alternatives --config editor
Redmineのタスクの更新メール、自分に関係あるものだけ届くようにしてるんですが、複数のプロジェクトが平行して動いているのでいかんせん数が多い。(ミーティングが多い日などは1日でいきなり100通超える)
Gmailでj,kを使ってどんどん見て行くんですが、最近高速に処理するコツが分かって来た。
チケットメールを素早く処理するコツ
基本、(HTMLメールにした場合)このhr線から上だけを見て行けばサクサク処理できる。
チケット作成で繰り返し起きるコミュニケーションミスを減らすコツ
新規チケットを作る時にテキストエリアにデフォルトのテンプレを設定しておくと書かなきゃ行けないことがわかりやすい。(特に終了条件が曖昧だと作業者は非常にやり辛い。明確な成果物やエビデンスを残すことをゴールにすると上手く行く。)
「xxxを考える/決定するという」タスクが乱立するしていたら、「xxxの内容をまとめてxxxさんにメールする」「Googleサイトに内容をまとめる」などに変更すると終了条件が明確化する。
デフォルトテンプレを入れるredmine 0.8系trunkへのdiff:
Index: app/controllers/issues_controller.rb
===================================================================
--- app/controllers/issues_controller.rb (リビジョン 2819)
+++ app/controllers/issues_controller.rb (作業コピー)
@@ -115,6 +115,7 @@
@issue = Issue.new
@issue.copy_from(params[:copy_from]) if params[:copy_from]
@issue.project = @project
+ @issue.description ||= l(:default_issue_description)
# Tracker must be set before custom field values
@issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first)
if @issue.tracker.nil?
Index: lang/ja.yml
===================================================================
--- lang/ja.yml (リビジョン 2819)
+++ lang/ja.yml (作業コピー)
@@ -635,9 +637,10 @@
setting_mail_handler_api_key: APIキー
text_email_delivery_not_configured: "メールを送信するために必要な設定が行われていないため、メール通知は利用できません。\nconfig/email.ymlでSMTPサーバの設定を行い、アプリケーションを再起動してください。"
field_parent_title: 親ページ
-label_issue_watchers: Watchers
+label_issue_watchers: ウォッチャー
+default_issue_description: "h3. 目的\n\n(何故このタスクをする必要があるのか)\n\nh3. 終了条件\n\n# (終了条件1)\n# (終了条件2)\n# (終了条件3)"
setting_commit_logs_encoding: コミットメッセージのエンコーディング
-button_quote: Quote
+button_quote: 引用
setting_sequential_project_identifiers: プロジェクト識別子を連番で生成する
notice_unable_delete_version: バージョンを削除できません
label_renamed: renamed
Redmine上だけで問題を追跡するコツ
開発人数をスケールさせるにはRailsの設計思想みたいに、開発環境も中央集権的ではなくて、「何も共有しない」というようにすると上手くいくなあと感じます。 (リモートからのみの作業者と共同で開発する場合)
こんな感じでプログラミングって楽でいいかもなあと、膝パソコンを実践してみたら結構まじめに良い。
MacBookぐらいバッテリーが持てば、大抵は電源無しで済んで、寝る時に充電しとけばいいので取り回しが楽。
外部ディスプレイはリビングPC的な物として、眠ってたノートPCにつなげてみました。
windowsを192dpiぐらいに設定すると全部巨大になって結構見易い。Firefoxなら画像も拡大してくれるし、拡大しといたURLも記憶してくれるので便利。
coLinuxにremedie入れてiTunesとremedie専用になりました。(操作はMacBookからvncでする)
ThinkPad x61もあるんですが、膝パソコンすると裏面はパームレストどころじゃない熱量を発するんでちょっと厳しいです・・・。
関連:冷えピタ – p0t
・・・なんて小洒落たエントリーで終わると思ったか!!糞がぁ!
膝パソコンとか言ってる場合じゃない! 膝RAP3(REAL ARCADE PRO.3)なんですよ!
テーブル、椅子、こたつ、布団を粗大ゴミに出しました。
リサイクル業者に頼むと大きなテーブルとかは物凄く高くつくイメージだったんですが、区の粗大ゴミに頼んだらテーブルが600円、他は300円で事足りてお得な感じでした。
ネットから引き取りに来てもらう日と対象を登録して、当日8:00時までにコンビニで粗大ゴミ券買って張って出しておくだけ。
ソファーベッド以外の家具を全部出しちゃった感じです。すっきりした。
全部捨てた結果がこれだよ!
リビングPC的なもの(Debian Lenny)にRemedieインストール。(また)
% sudo apt-get install perl perl-modules git-core build-essential libxml2 libxml2-dev libxml-atom-perl libxml-feed-perl libxml-libxml-common-perl libxml-libxml-perl libxml-perl libxml-rss-perl libxml-xpath-perl libyaml-perl libyaml-syck-perl libsqlite3-dev sqlite3 libnet-ssleay-perl
% cd /var/www
% git clone git://github.com/miyagawa/remedie.git
% cd remedie
% sudo chown -R komagata:komagata blib pm_to_blib
% perl -MCPAN -e shell
cpan> install Bundle::CPAN
cpan> install Http::Engine
cpan> install MooseX::ConfigFromFile
cpan> install MooseX::Getopt
% env PERL_MM_USE_DEFAULT=1 cpan -i .
こちらを参考にinitファイルを前より少しだけちゃんと書く。
% sudo vi /etc/init.d/remedie
#!/bin/sh
### BEGIN INIT INFO
# Provides: remedie
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start remedie at boot time
# Description: Enable service provided by remedie.
### END INIT INFO
case $1 in
start)
cd /var/www/remedie/bin
sudo -u komagata env HOME=/home/komagata nohup perl ./remedie-server.pl > /dev/null 2>&1 &
;;
esac
% sudo chmod 755 /etc/init.d/remedie
% sudo update-rc.d remedie defaults 99 1
今回、リバースプロクシはnginxを使ってみました。
% sudo apt-get install nginx
% sudo vi /etc/nginx/sites-available/remedie
server {
listen 80;
server_name remedie;
location / { proxy_pass http://localhost:10010; }
}
% sudo ln -s /etc/nginx/sites-enable/remedie /etc/nginx/sites-available/remedie
Debian apacheの作法“a2ensite”のnginx版はあるんですかね?わからないので普通にシンボリックリンク張りました。(敗北)
ヒャッハー!
動画もジャンルの細分化/深化が進んだのでこういうの必要ですよね。
![]() |
|
闘うプログラマー新装版が出たそうです。一時絶版してたので図書館とかでしか手に入り辛かったんですがこれで解決。
新しいプログラミングパラダイムや方法論、学術論も好きですが、こういう泥臭い実録プロジェクト系も大好きです。
“プログラマーのスポーツはスカッシュ”という偏見を僕に植え付けてくれた本でもあります。
WindowsXPの安定性もこいつらのカーネルのおかげ。いや、スカッシュのおかげ。
Mac開発秘話系では同じく泥臭めのレボリューション・イン・ザ・バレーがおすすめ。
どっちも華やかなイノベーションとやらの陰では、
「おい、この腐った変数名を付けた馬鹿はどこだ!」
とか
「このバグを直すまで帰れない」
とかいったみみっちぃ出来事が満載なんですね。
参照:会社のブログがCommon Lispで書かれたAllegroServeになったので更新するにはCommon Lispが書ける必要がある。
g000001さんに初心者におすすめの環境を教えてもらったので設定しました。
どうやらLispは起源が古いのでUNIX文化とはかなり違うらしい。そこがとても面白く感じました。
処理系のインストール
Lispの実装(処理系)はたくさんあるようですが、SBCLというのがネイティブバイナリを実行するので速く、オープンソースで人気があるそうです。(ポータブルなバイトコードを実行するCLISPというのも人気があるみたいです)
% port variants sbcl
sbcl has the variants:
powerpc: Platform variant, do not select manually
darwin_8_i386: Platform variant, do not select manually
darwin_9_i386: Platform variant, do not select manually
html: Builds the SBCL and ASDF documentation as HTML
threads: enable threaded runtime
% sudo port install sbcl +threads +html
エディタのインストール
“郷に入っては郷に従え”ということでCarbon Emacsをインストールしました。zshやmacがemacs key bindなので移動とかは大丈夫なんですが、windowとか、bufferとか殆ど忘れてたので入門GNU Emacs 第2版をチラ見しながらやっていきます。(第3版が出てるみたいですが、僕が持ってるのは第2版・・・)
Lisp用のモードをインストール
SLIMEという単なるLispモード以上に処理系のプロセスに接続してやりとりしたり、デバッガついてたり、激甘スイーツ環境を提供してくれるものがあると教わったので入れました。
% port variants slime
slime has the variants:
app: Build SLIME against editors/emacs-app
sbcl: Require lang/sbcl for SLIME
openmcl: Require lang/openmcl for SLIME
clisp: Require lang/clisp for SLIME
% sudo port install slime +sbcl
処理系の選択は別としてappは何だろうなぁ。
“インストール後に.emacsにコレ貼付けろ”と表示されるのでそのまま張付け。
;; h key
(global-set-key [(control ?h)] 'delete-backward-char)
;; slime
(setq load-path (cons "/opt/local/share/emacs/site-lisp/slime" load-path))
(require 'slime-autoloads)
(setq slime-lisp-implementations
`((sbcl ("/opt/local/bin/sbcl"))
(clisp ("/opt/local/bin/clisp"))))
(add-hook 'lisp-mode-hook
(lambda ()
(cond ((not (featurep 'slime))
(require 'slime)
(normal-mode)))))
(eval-after-load "slime"
'(slime-setup '(slime-fancy slime-banner)))
;; japanese
(setq slime-net-coding-system 'utf-8-unix)
(最初の行はC-hがヘルプで糞うざい対策、最後のは日本語用設定)
EmacsでM-x slimeで起動。あぁこれが噂の・・・というアニメーションでプロンプトが出現。
REPLが動いた。(上にSBCL:とあるのはSBCLとソケット通信してるみたいです。)
マニュアルのインストール
% sudo port install lisp-hyperspec
仕様書兼マニュアルはHyperSpecというそうです。 C-c C-d hでマニュアルが。
しかし、これは俺の中でのLispじゃない!みんな何か適当なバッファに落書きみたいにコードを書いて適当に評価してたはず。
C-M-xでカーソルを含むトップレベルのフォームを評価してミニバッファに出してくれるらしい。
そうそう、こういう感じ。
疲れたのでAllegroServeまで行かなかった。
参照:Linux, Mac, Windowsでの共有ライブラリの作り方/使い方が知りたくて調べてたんですが、どういうキーワードで探せば良いのかすらわからず、苦戦したのでメモ。
Linux
Mac OS X
Windows
名前が分かったら検索すれば勉強になるサイトが沢山見つかった。
本だと各プラットフォーム毎に大体6000円以上するような分厚いやつの一章だけだったりするので辛い。立ち読みでキーワードを拾って来て検索しました。
Linuxの情報が圧倒的に多くて、MacとWindowsは見つけ辛かった。
参考:
内容符号化 (Content-Encoding) に問題があります不正または不明な形式で圧縮されているため、ページを表示できません。 この問題を Web サイトの管理者に報告してください。
Firefoxで上記の様な症状が出るという報告を受けたのでちょっと調べてみました。
参考:もじら組フォーラム [One Topic All View / Re: 本当に、問題が全くないサイト?
Apache1.3系のmod_gzipとFirefox3.xのRangeヘッダー対応関係の話らしい。たぶん、gzipで圧縮されたByte数とFxにキャッシュされたByte数が違うのにRangeで間違った場所から読み始めるからおかしくなるんだと思う。
Range使わなきゃいいかなということで、レンタルサーバーの.htaccessに下記を書いたら直った。
Header set Accept-Ranges none
ちゃんと追ってないので根本的にサーバーとクライアントどっちが悪いのか分かってません。
正しい答えをお持ちの方は情報いただけるとありがたいです!