2011年6月22日水曜日

echo -e

echo -e "      ___       _\n \V ̄ ̄ ̄__| \二二/|_\n  /  / ̄__| [__]  | \\n │ / /`ヽ__∟∠__>J__>\n |/ /| ‐―――――――― |\n (  / |  ――――――――‐ |\n (_/  |     ●      ●  |\n |\ |       (_人_)    \_\n  | ) |    _ __|||||||||||_____)\n  ヽ_|  ///└┘   ̄ ̄ ̄  └┘| |\n    ///              //\n   |//\_ (⌒Y⌒)    _//\n    \   ヽ―─―⌒ ̄ ̄ /\n       `―──―――‐―´\n"

2011年6月8日水曜日

tramp

emacs でリモートファイルを編集する TRAMP (Transparent Remote Access, Multiple Protocols) を利用してみたら非常に便利
emacsインストールしたら今はデフォルトでlispが入っている様なので、.emacsに以下を記述するのみで準備完了

(setq tramp-default-method "ssh")

2011年6月6日月曜日

開発衰弱

IT企業を運営するにおいて大事なことはなんだろう?とふと考えてみた。
# 別に起業したいとかではない
IT企業 = サービスを提供するというところが大半かと思うので、やはりサービスを企画したり収益を生むものを考えるアイデア、発想の豊かさというところは捨てられない。
それを形にしていくには開発が入り、それを運営(運用)する技術者も当然ながら必要となる。

企業によってどこに力を入れるかでその会社の色が出てき、社風となっていく様に思える。
技術に特化した会社、他が追随出来ない様な特殊な事業、真新しく実験的なサービス。

そんな中、一時は技術で売りだそうとしてたのに気付いたら日本国内での事業展開がメインなのに社内英語化に熱心になっている企業が。
どういう下駄の履き替えか分からないが、基本的に人と話すことがあまり得意でなくコンピュータ言語と日々格闘しているエンジニアがいきなり英語下駄に履き替えれるわけも無く、悩み苦しみ辞めていく。
今まで支えていた開発部隊が急に傾き始め、トラブルが増え新規サービスを考えても肝心要の開発が衰弱縮退してしまい、開発に着手できない。
開発が弱体するとこないだまでは敵にもならなかった同業者が急に敵として踊り出てくる、そして長きに渡り独占状態だった市場をあっさり明け渡すはめに。

これからはハイエナとして大手企業が衰弱していくのを待つというビジネスモデルが生まれるかも知れない。
そうならないように、柱をしっかりとした土台で支えるべきで、社長自ら堅牢な柱に態々斧を入れ屋台骨を崩す様な事をするといつか自分の頭に崩れた屋根が落ちてくることになるかもしれない。

かなり脱線したけど、自分なりの結論としては初志貫徹な堅牢なシステムと豊かな発想力が必要不可欠。

2011年6月1日水曜日

[memo] firefox + scim

いつからかfirefoxでscimを利用しての日本語入力が出来なくなった
環境変数を一つ追加することで回避(work around)できるのでメモ

$ sudo cp -ip $(which firefox){,.org}
$ sudo vi $(which firefox)
$ diff $(which firefox){,.org}
5,6d4
< export GTK_IM_MODULE=scim-bridge
<

2011年5月24日火曜日

apache moduleを作る#1

何事もとりあえずやってみるだと長続きせずandroid開発は放り出し中
仕事で久々にapache moduleを開発することになりそうなのでネタ的にこっちをメモっておこうと思う。目的があると続けれる気がする

ターゲットはapache2.2
apache1.3からは仕様が大分変り、もし1.3を2.2に移植するなら新仕様で枠を作りロジックをはめ込んで行くほうが方が早い気がする

先ずは、家でも会社でもapache2.2をインストールしないことには始まらないのでdsoオプションを付けてインストールをする

インストールしたらapxsがbinの下に置かれるのでモジュールの雛形を生成する
モジュール名をmod_psychoにするなら

$ apxs -g -n psycho

で雛形が出来る
確認するとこんな感じ

$ find psycho
psycho
psycho/.deps
psycho/Makefile
psycho/mod_psycho.c
psycho/modules.mk
mod_psycho.c以外は取り敢えずは弄らなくてもokなので、mod_psycho.cに何かロジックを埋め込んでみる。
自動生成された状態はこんな感じ

/*
** mod_psycho.c -- Apache sample psycho module
** [Autogenerated via ``apxs -n psycho -g'']
**
** To play with this sample module first compile it into a
** DSO file and install it into Apache's modules directory
** by running:
**
** $ apxs -c -i mod_psycho.c
**
** Then activate it in Apache's httpd.conf file for instance
** for the URL /psycho in as follows:
**
** # httpd.conf
** LoadModule psycho_module modules/mod_psycho.so
**
** SetHandler psycho
**
**
** Then after restarting Apache via
**
** $ apachectl restart
**
** you immediately can request the URL /psycho and watch for the
** output of this module. This can be achieved for instance via:
**
** $ lynx -mime_header http://localhost/psycho
**
** The output should be similar to the following one:
**
** HTTP/1.1 200 OK
** Date: Tue, 31 Mar 1998 14:42:22 GMT
** Server: Apache/1.3.4 (Unix)
** Connection: close
** Content-Type: text/html
**
** The sample page from mod_psycho.c
*/

#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"

/* The sample content handler */
static int psycho_handler(request_rec *r)
{
if (strcmp(r->handler, "psycho")) {
return DECLINED;
}
r->content_type = "text/html";

if (!r->header_only)
ap_rputs("The sample page from mod_psycho.c\n", r);
return OK;
}

static void psycho_register_hooks(apr_pool_t *p)
{
ap_hook_handler(psycho_handler, NULL, NULL, APR_HOOK_MIDDLE);
}

/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA psycho_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
NULL, /* create per-server config structures */
NULL, /* merge per-server config structures */
NULL, /* table of config file commands */
psycho_register_hooks /* register hooks */
};

psycho_handler関数にロジックを埋め込む、、その前に、この関数内を眺めてみる
if (strcmp(r->handler, "psycho")) {
return DECLINED;
}
これは psycho ハンドラー以外のリクエストなら(httpd.confで記述するsethandler)このモジュールを抜けて次のモジュールに処理を投げる(チェイン?する)という意味。
if (!r->header_only)
ap_rputs("The sample page from mod_psycho.c\n", r);
これは、headメソッドでなかったら文字列(ap_rputs内)を返す(表示する)という意味。

次はrequest_rec構造体とメモリ管理をapacheに任すと楽な件を書く

2011年5月3日火曜日

android

アンドロイドアプリ開発を始めた
環境は、
netbeans + nbandroid + sdk

eclipseは何度チャレンジしても使えなかったがnetbeansは直感的に分かりやすく良く出来ている
お陰でjava開発に関してはemacsから脱却ができた

何を作るかなー、の前にフレームワークを覚えるためにサンプルアプリなんかを参考にさせてもらって少しずつ

2011年4月30日土曜日

grub "no loaded kernel"

ubuntu 11.04 にupgradeして再起動したら grub の画面で止まってしまい、
grub> boot
と打っても
error: no loaded kernel
となってしまう

grubを弄るのはいつ以来だろうか?
当然覚えてないので復旧方法を探る
以下のコマンドを投げたら無事 boot してくれた

grub> linux /vmlinuz root=/dev/sda1
grub> initrd /initrd.img
grub> boot
起動後に以下のコマンドを叩いてgrubを馴染ませる

sudo grub-install /dev/sda
sudo update-grub