右:ビッグトート
以前から新しい鞄が欲しくてリストアップしていた鞄が最終販売になった。
どうしても欲しいという欲求と、将来的に手に入らないという危機感みたいな感情に数週間悩まされたが、結局購入しました。
#!/bin/bash # # @(#) TokyoTyrantDeleteUlog.sh ver.1.0.0 2011.08.08 # # Usage: # TokyoTyrantDeleteUlog.sh # # Description: # Tokyo Tyrantのulog削除スクリプト # 最新10ファイルのみを保存 # ########################################################################### # ulog保存先設定 logdir='/home/ttserver/data/ulog/' # ulog保存先内ファイル一覧取得 mydir=`ls -t $logdir` # ファイル分ループ i=1 for file in $mydir do # 10ファイル目までは処理をスキップ if [ $i -gt 10 ] then # 削除処理 rm -rf $logdir$file fi i=$((i+1)) doneあとは定期的に実行するためにcronに登録。
# 午前00時処理 # ・Tokyo Tyrantのulog削除 0 0 * * * TokyoTyrantDeleteUlog.sh
理由:ライセンスが自由な再頒布を要求するよう強制することにより、数多くの長期的利益をちょっとした短期的な販売収益を得るために投げ捨ててしまうというような誘惑を除くことができます。このような縛りをかけないと、協力者たちは変節せよという強い圧力にさらされてしまうでしょう。
理由:私たちは、意図的に分かりにくくされていないソースコードが入手できることを要求します。プログラムを改変することなしにはプログラムを発展させることはできないからです。私たちの目的はソフトウェアの発展をより容易なものにすることですから、変更が簡単に行えることを必要条件に加えています。
理由:単にソースを読むことができるだけでは、独立したピアレビューや急速な発展的淘汰を維持するのに十分ではありません。急速な進化を実際に起こすためには、人々がそのソフトウェアでさまざまに実験し、変更点を再頒布することができる必要があります。
理由:盛んに改良することを奨励するのは良いことですが、ユーザには彼らが使っているソフトウェアについて誰が責任を持っているのか知る権利があります。反対に、ソフトウェアの作者と管理者にも彼らの名声を保護し、何をサポートすることが要求されているのか知る権利があります。 それゆえ、オープンソースなライセンスはそのソースが容易に入手可能であることを保証しなければならないのですが、一方でそれがいっさい変更されていない本来の基本ソースとパッチという形で頒布することを義務付けても構わないということにします。こうすれば、「非公式」な変更点は利用可能でありつつも、元のソースとは簡単に見分けがつくわけです。
理由:進化の過程から最大の恩恵を引き出すためには、可能な限り多種多様な人々やグループに、平等にオープンソースに貢献する資格が与えられている必要があります。そこで、オープンソースなライセンスによって誰かを進化の過程から締め出すことは禁止されています。 アメリカ合衆国を含むいくつかの国では、ある種のソフトウェアに輸出制限を課しています。OSD準拠のライセンスは、適用される可能性がある制限についてライセンス受諾者に警告し、また彼らには法に従う義務があることを示唆しても構いません。しかし、ライセンス自身にそのような制限を取り込んではなりません。
理由:この条項の主な意図は、ライセンスによってオープンソースが商業的に使われることを妨げるような策略を禁止することです。私たちは、営利的なユーザも私たちのコミュニティに加入してくれることを望んでおり、彼らがそこから排除されているような気分になっては欲しくないのです。
理由:この条項は、ソフトウェアを機密保持契約への同意を要求するなどの間接的な手段によって囲い込むことの禁止を目的としています。
理由:この条項は、ライセンスによるこれまたよくあるタイプの策略を禁止します。
理由:オープンソースなソフトウェアの頒布者には、彼ら自身のソフトウェアについては彼ら自身で選択する権利があります。 もちろんGPLはこの要件を満たしています。GPLが適用されたライブラリとリンクされたソフトウェアは、それが単一の著作物を形成する場合のみGPLを継承するのであって、単に一緒に頒布されるというだけならば他のソフトウェアには影響しません。
理由:この規定で特に念頭に置いているのは、ライセンサーとライセンシーの間で契約を成立させるために明示的な同意の意思表示を必要とするようなライセンスです。いわゆる「クリックラップ(click-wrap)」を要求する規定は、ソフトウェア頒布において重要な手法であるFTPダウンロードやCD-ROMアンソロジー、ウェブのミラーリングなどと衝突する可能性がありますので、このような規定もコードの再利用を妨げてしまいます。よって、本定義に準拠するライセンスは、(a)ソフトウェアの再頒布が、ダウンロード時のクリックラップをサポートしないようなウェブ以外の経路で起こりうるという可能性 (b)ライセンスで保護されるコード(あるいは保護されるコードの再利用された部分)はポップアップダイアログをサポートできない非GUIの環境でも実行されれうるという可能性、を認めなければなりません。
/* This file is part of Ext JS 4 Copyright (c) 2011 Sencha Inc Contact: http://www.sencha.com/contact Commercial Usage Licensees holding valid commercial licenses may use this file in accordance with the Commercial Software License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Sencha. If you are unsure which license is appropriate for your use, please contact the sales department at http://www.sencha.com/contact. */
/* This file is part of Ext JS 4 Copyright (c) 2011 Sencha Inc Contact: http://www.sencha.com/contact GNU General Public License Usage This file may be used under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation and appearing in the file LICENSE included in the packaging of this file. Please review the following information to ensure the GNU General Public License version 3.0 requirements will be met: http://www.gnu.org/copyleft/gpl.html. If you are unsure which license is appropriate for your use, please contact the sales department at http://www.sencha.com/contact. */
GPLが採用できないようなアプリケーション(ソースコードを公開したり配布したりできない場合等)を開発する場合に選択。オープンソースライセンス(ext-4.0.2a-gpl.zip)
オープンソースライセンスは、GNU GPL license v3に準拠したオープンソースアプリケーションを作成する場合に選択。OEMライセンス、リセラーライセンス
ソフトウェア開発ライブラリ、ツールキット、フレームワークを作成する場合に該当する場合に選択。Ext Japan, LLC (合同会社イーエクスティー)との契約が必要かと思います。
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
ERROR 1030 (HY000): Got error 139 from storage engine
The maximum row length, except for variable-length columns (VARBINARY, VARCHAR, BLOB and TEXT), is slightly less than half of a database page. That is, the maximum row length is about 8000 bytes. LONGBLOB and LONGTEXT columns must be less than 4GB, and the total row length, including BLOB and TEXT columns, must be less than 4GB.
mysql> SELECT @@innodb_version; +------------------+ | @@innodb_version | +------------------+ | 1.0.8 | +------------------+ 1 row in set (0.00 sec)
# cd /usr/local/src # wget http://www.lua.org/ftp/lua-5.1.4.tar.gz # tar zxf lua-5.1.4.tar.gz # cd lua-5.1.4 # make linux # make install INSTALL_TOP=/usr/local/lua「/usr/local/lua」にluaがインストールされているので動作確認のため以下のコマンドを実施。
# /usr/local/lua/bin/lua以下のように表示されればOK。
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio >
東野圭吾ほど、多彩な作品をおくりだす作家は珍しいだろう。デビュー作は、学園を舞台にした本格推理小説『放課後』(第31回江戸川乱歩賞)。第52回日本推理作家協会賞受賞の『秘密』では、ミステリーの形式を踏みながら家族の美しい情愛をせつなくつづった。クローン技術を題材にした『分身』や大型原子炉が危機に陥る『天空の蜂』などの社会派小説も生みだしている。作品ごとに、まったく違った味わいを読者に与えてくれるのだ。
本書は「探偵ガリレオ」シリーズ2作目。帝都大学理工学部物理学科助教授、探偵ガリレオこと湯川学が、摩訶不思議な事件を論理的に解決していく、本格推理短編集である。
素封家の屋敷に侵入者があった。犯人は27歳の青年。2階で眠っていた娘を襲おうとしたらしい。逮捕された犯人は、17年前、その少女と結婚する夢を見たという。夢に現れた少女が現実に存在するとは? 予知夢はあるのか?
ロマンチックにも感じられる第1章「夢想る(ゆめみる)」をはじめ、「霊視る(みえる)」「騒霊ぐ(さわぐ)」「絞殺る(しめる)」「予知る(しる)」の、全5作が収録されている。軽快な文章の中に凝縮された、オカルチックな題材と巧妙なトリック、明晰な推理と確固たる論理。本書はたぐい稀なるストーリーテラーである著者の技を堪能できる作品といえよう。(冷水修子)
[mysql-proxy] keepalive = true proxy-address = 127.0.0.1:3306 proxy-backend-addresses = masterdb1:3306 proxy-read-only-backend-addresses = slavedb1:3306,slavedb2:3306 proxy-lua-script = /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua daemon = true log-use-syslog = true log-level = message user = mysql-proxy
#!/bin/sh # # mysql-proxy This script starts and stops the mysql-proxy daemon # # chkconfig: - 78 30 # processname: mysql-proxy # description: mysql-proxy is a proxy daemon to mysql # Source function library. . /etc/rc.d/init.d/functions PROXY_PATH=/opt/mysql-proxy/sbin prog="mysql-proxy" # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # Set default mysql-proxy configuration. PROXY_OPTIONS="--daemon" PROXY_PID=/var/run/mysql-proxy.pid # Source mysql-proxy configuration. if [ -f /etc/sysconfig/mysql-proxy ] ; then . /etc/sysconfig/mysql-proxy fi PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH # By default it's all good RETVAL=0 # See how we were called. case "$1" in start) # Start daemon. echo -n $"Starting $prog: " daemon $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --pid-file $PROXY_PID RETVAL=$? echo if [ $RETVAL = 0 ]; then touch /var/lock/subsys/mysql-proxy fi ;; stop) # Stop daemons. echo -n $"Stopping $prog: " killproc $prog RETVAL=$? echo if [ $RETVAL = 0 ]; then rm -f /var/lock/subsys/mysql-proxy rm -f $PROXY_PID fi ;; restart) $0 stop sleep 3 $0 start ;; condrestart) [ -e /var/lock/subsys/mysql-proxy ] && $0 restart ;; status) status mysql-proxy RETVAL=$? ;; *) echo "Usage: $0 {start|stop|restart|status|condrestart}" RETVAL=1 ;; esac exit $RETVAL
1985年から多くのユーザーに支持されてきたC言語解説本の決定版が、2001年のパソコン環境に合わせて改訂された。従来どおりのわかりやすい解説で、C言語のエッセンスを効率的に学べるようになっている。
まず第1章では、簡単な文章の出力方法を学んだ後でコーディングの規則を説明。その後C言語特有のデータ型の宣言と演算方式、プリプロセッサの機能(ファイルの取り込みやマクロ展開、条件付きコンパイルを行う)について触れている。ここでCの基礎知識が大まかに得られるようになっており、第2章からは各トピックについて深く掘り下げて学べるようになっている。
第2章では、「データ型」について学ぶ。基本となる「int型」「float型」「double型」「char型」の4つのデータ型について学んだ後で、変数、配列に値を代入する方法、新しいデータ型の作り方について知ることができる。
第3章では、Cで加減乗除を行う方法について学ぶ。通常の計算(+,-,*,/,%)に加え、比較・論理演算をする方法(<,>,&&,||,!など)、ビットを直接操作する方法、変数に値を代入するための代入演算子などについて知ることができる。
4章では、if-else文による条件分岐、while文、for文を使った繰り返し処理、第5章では関数について学ぶことができる。そして第6章からは、C言語を学ぶうえで重要な配列とポインタについて学ぶ。ポインタはアセンブラでいうアドレスにあたるもので、これで配列や構造体データを直接取り出したり、格納したりすることができる。ここではポインタの基本だけが述べられているので、さらに詳しく知りたい場合は『C言語ポインタ完全制覇』(技術評論社)が参考になる。第7章では構造体と共用体、第8章では標準関数、第9章では入出力関数について述べられている。
全体的に記述内容に無駄のない、すっきりとした構成になっている。C言語を学ぶための最初のテキストとして、ぜひおすすめしたい良書である。(土井英司)
サーバを単に増やすだけでは解決しない(?!)。
大規模サービスの難所は、サービスの成長に伴い巨大化するデータの処理です。
データ量の変化は緩やかには推移せず、突然目の前に現れる大規模化の壁。
そこで求められるのは、いかにして「データを小さく持つか」「複数サーバに分散させるか」「最小限の回数で読み取るか」といった地道な取り組みの積み上げです。
本書では Web開発における大規模サービスの一つの関門、数十~数百ギガバイトのテキストデータを想定し、データ構造、メモリ、OS、DB、サーバ/インフラと広範なレイヤに及ぶ攻略ポイントをまとめて解説します。
はてなインターンシップの初書籍化。
『プログラムはなぜ動くのか』6年ぶり、待望の改訂第2版!
プログラムがコンピュータの中でどのように動作するのかを、誰にでもわかるように説明しました。プログラムは、メモリーにロードされ、CPUによって解釈・実行されます。その仕組みを、多数の図を使って、順序だてて解説していきます。
第2版では、第1版で特に関心の高かったプログラムがメモリーをどう利用しているかについて、より丁寧な説明を加えたほか、多くの注釈を入れました。また、サンプル・プログラムを、第1版のVisual Basicからプログラムの動きが見えやすいC言語に統一し、巻末にC言語の構文を説明した補章を追加しました。初級者、中級者の人、どちらにもお勧めです。
特徴1:CPU、メモリー、プログラムの動作環境など・・基礎からきちんと解説!
CPU(プロセサ)はどうやってプログラムを動かしているの? CPUとメモリーの関係は? どうやってディスプレイに表示されるの? など基礎的な部分からきちんと説明しています。
特徴2:メモリーについて充実した説明!
第1版でなんといっても多かったのが「プログラムがメモリーをどう使っているのかがわかって、自分のプログラムの動きがわかった!」という声でした。第2版では、メモリーの使い方についての説明を強化しました。関数や変数、ポインタや配列は、どうメモリー領域を使っているのかをぜひ知ってください。
特徴3:Windowsの仕組みわかる!
プログラムの動く仕組みを知るとは、Windowsの仕組みを知ることにもつながります。フリーソフトをインストールしたときに出会うDLLファイルや、EXEファイルは、その実体は何だろう、と感じるパソコンユーザーも多いはずです。本書は、プログラミング本ではありません。豊富な図表を使って、その仕組みや流れが感覚的にとらえられるようにしています。
「伝統とは変わり続けること」百年あるいは数百年、京都という土地に根付き、愛され続けている老舗三十六店。お店の歴史は人の歴史、時代の投手たちは何を考え、何を伝えてきたのか。前作『京都職人 匠のてのひら』では技術継承の難しさ同じ仕事を継続していくことの大変さを、シリーズ最新刊の本書では暖簾を守る事の難しさ、伝統を伝えていくことの大変さを書き記しました。三十六店、三十六様の「言葉」を読み終えたとき「京都」と「老舗」に対するイメージに新しいものが加わるはずです。
雨森敬太郎薬房/市原平兵衛商店/一文字屋和助/いづ萬老舗/いもぼう平野屋本店/芸艸堂/帯屋捨松/本家尾張屋/かづら清老舗/かま八老舗/紙司柿本 /御ちまき司川端道喜/菊一文字/鳩居堂/彩雲堂/佐々木竹苞書楼/渋新老舗/清課堂/大市/高橋堤燈/高室畳工業所/玉乃光酒造/たる源/通圓/なり田/原了郭 /柊屋/堀金箔粉/本田味噌/松野醤油/三嶋亭/みなとや幽霊子育飴本舗/村山造酢/香樹園八百林/山中油店/湯波吉
京都の類い希なる「ものづくり」の世界。
消えゆく技術、新たな挑戦──。「能面」「花かんざし」「手摺りカルタ」など京都の伝統工芸をいまに伝える職人50人の「技」と「半生」。
美麗な写真とともに綴る「職人の世界」。
浅田晶久「京瓦」/綾部之「京の木工芸」/石田章一「竹工芸」/磯田達也「蒔絵」/今井義延「京刃物」/岩井彩「能面」/植田勝也「京足袋」/大塚華仙「截金」/大林芳雄「京組紐」/岡崎昭「表装」/鍵谷恭三「房・よりひも」/片岡喜三郎「邦楽器絃」/金谷雅明「京扇子」/河添功「京無地染」/川橋吉春「旗印染」/川本和代「京鹿の子絞り」/木野高利「京丸うちわ」/小泉景「京印章」/小糸敏夫「型友禅」/小嶋豊一「京提灯」/小松二三三「京繍」/佐竹利治「西陣織」/定永光夫「花かんざし」/澤田義春「色紙・短冊」/柴田勘十郎「京弓」/鈴木セツ子「水引細工」/高橋和男「京象嵌」/竹内伸一「黄楊櫛」/田中實「京すだれ」/谷川清三「キセル」/谷野修子「京唐紙」/丹治潔「和ろうそく」/辻賢一「金網細工」/中川利春「京銘竹」/西堀耕太郎「京和傘」/西村金造・大造「京石工芸品」/長谷川淳一「杼」/林利孝「京黒紋付染」/前澤さとえ「京念珠」/松井重夫「手刷りカルタ」/村田定平「数寄屋金具」/八木聖二「茶筒」/矢澤幹子「七宝」/安井文彦「和本」/山崎貞一「京仏具」山下雄治「調べ緒」/山本八郎・晃久「神鏡」/和田伊三男「京真田紐」/松栄堂「薫香」
対談「世界一のものづくりの街、京都」叶松谷×大野木啓人
function expire() local args = {} local cdate = string.format("%d", _time()) table.insert(args, "addcond\0x\0NUMLE\0" .. cdate) table.insert(args, "out") local res = _misc("search", args) if not res then _log("expiration was failed", 2) end print("rnum=" .. _rnum() .. " size=" .. _size()) end
#! /bin/sh # chkconfig: 345 65 55 # description: Startup script for the server of Tokyo Tyrant For Session # processname: tokyotyrant #---------------------------------------------------------------- # Startup script for the server of Tokyo Tyrant #---------------------------------------------------------------- # configuration variables prog="ttservctl" cmd="ttserver" basedir="/home/ttserver/data" port="1978" pidfile="$basedir/ttserver.pid" logfile="$basedir/ttserver.log" ulogdir="$basedir/ulog" ulimsiz="256m" sid=2 mhost="remotehost1" mport="1978" rtsfile="$basedir/ttserver.rts" dbname="$basedir/session.tct#bnum=1000000#idx=x:dec#dfunit=8" ext="/home/ttserver/ext/ttexpire.lua" extpc="expire 1" maxcon="65535" retval=0 # setting environment variables LANG=C LC_ALL=C PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/tokyotyrant/bin" export LANG LC_ALL PATH # start the server start(){ printf 'Starting the server of Tokyo Tyrant\n' mkdir -p "$basedir" if [ -z "$basedir" ] || [ -z "$port" ] || [ -z "$pidfile" ] || [ -z "$dbname" ] ; then printf 'Invalid configuration\n' retval=1 elif ! [ -d "$basedir" ] ; then printf 'No such directory: %s\n' "$basedir" retval=1 elif [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf 'Existing process: %d\n' "$pid" retval=1 else if [ -n "$maxcon" ] ; then ulimit -n "$maxcon" >/dev/null 2>&1 fi cmd="$cmd -port $port -dmn -pid $pidfile" if [ -n "$logfile" ] ; then cmd="$cmd -log $logfile" fi if [ -n "$ulogdir" ] ; then mkdir -p "$ulogdir" cmd="$cmd -ulog $ulogdir" fi if [ -n "$ulimsiz" ] ; then cmd="$cmd -ulim $ulimsiz" fi if [ -n "$sid" ] ; then cmd="$cmd -sid $sid" fi if [ -n "$mhost" ] ; then cmd="$cmd -mhost $mhost" fi if [ -n "$mport" ] ; then cmd="$cmd -mport $mport" fi if [ -n "$rtsfile" ] ; then cmd="$cmd -rts $rtsfile" fi if [ -n "$ext" ] ; then cmd="$cmd -ext $ext" fi if [ -n "$extpc" ] ; then cmd="$cmd -extpc $extpc" fi printf "Executing: %s\n" "$cmd" cmd="$cmd $dbname" $cmd if [ "$?" -eq 0 ] ; then printf 'Done\n' else printf 'The server could not started\n' retval=1 fi fi } # stop the server stop(){ printf 'Stopping the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the terminal signal to the process: %s\n" "$pid" kill -TERM "$pid" c=0 while true ; do sleep 0.1 if [ -f "$pidfile" ] ; then c=`expr $c + 1` if [ "$c" -ge 100 ] ; then printf 'Hanging process: %d\n' "$pid" retval=1 break fi else printf 'Done\n' break fi done else printf 'No process found\n' retval=1 fi } # send HUP to the server for log rotation hup(){ printf 'Sending HUP signal to the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the hangup signal to the process: %s\n" "$pid" kill -HUP "$pid" printf 'Done\n' else printf 'No process found\n' retval=1 fi } # check permission if [ -d "$basedir" ] && ! touch "$basedir/$$" >/dev/null 2>&1 then printf 'Permission denied\n' exit 1 fi rm -f "$basedir/$$" # dispatch the command case "$1" in start) start ;; stop) stop ;; restart) stop start ;; hup) hup ;; *) printf 'Usage: %s {start|stop|restart|hup}\n' "$prog" exit 1 ;; esac # exit exit "$retval" # END OF FILE
#! /bin/sh # chkconfig: 345 65 55 # description: Startup script for the server of Tokyo Tyrant For Session # processname: tokyotyrant #---------------------------------------------------------------- # Startup script for the server of Tokyo Tyrant #---------------------------------------------------------------- # configuration variables prog="ttservctl" cmd="ttserver" basedir="/home/ttserver/data" port="1978" pidfile="$basedir/ttserver.pid" logfile="$basedir/ttserver.log" ulogdir="$basedir/ulog" ulimsiz="256m" sid=1 mhost="remotehost2" mport="1978" rtsfile="$basedir/ttserver.rts" dbname="$basedir/session.tct#bnum=1000000#idx=x:dec#dfunit=8" ext="/home/ttserver/ext/ttexpire.lua" extpc="expire 1" maxcon="65535" retval=0 # setting environment variables LANG=C LC_ALL=C PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/tokyotyrant/bin" export LANG LC_ALL PATH # start the server start(){ printf 'Starting the server of Tokyo Tyrant\n' mkdir -p "$basedir" if [ -z "$basedir" ] || [ -z "$port" ] || [ -z "$pidfile" ] || [ -z "$dbname" ] ; then printf 'Invalid configuration\n' retval=1 elif ! [ -d "$basedir" ] ; then printf 'No such directory: %s\n' "$basedir" retval=1 elif [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf 'Existing process: %d\n' "$pid" retval=1 else if [ -n "$maxcon" ] ; then ulimit -n "$maxcon" >/dev/null 2>&1 fi cmd="$cmd -port $port -dmn -pid $pidfile" if [ -n "$logfile" ] ; then cmd="$cmd -log $logfile" fi if [ -n "$ulogdir" ] ; then mkdir -p "$ulogdir" cmd="$cmd -ulog $ulogdir" fi if [ -n "$ulimsiz" ] ; then cmd="$cmd -ulim $ulimsiz" fi if [ -n "$sid" ] ; then cmd="$cmd -sid $sid" fi if [ -n "$mhost" ] ; then cmd="$cmd -mhost $mhost" fi if [ -n "$mport" ] ; then cmd="$cmd -mport $mport" fi if [ -n "$rtsfile" ] ; then cmd="$cmd -rts $rtsfile" fi if [ -n "$ext" ] ; then cmd="$cmd -ext $ext" fi if [ -n "$extpc" ] ; then cmd="$cmd -extpc $extpc" fi printf "Executing: %s\n" "$cmd" cmd="$cmd $dbname" $cmd if [ "$?" -eq 0 ] ; then printf 'Done\n' else printf 'The server could not started\n' retval=1 fi fi } # stop the server stop(){ printf 'Stopping the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the terminal signal to the process: %s\n" "$pid" kill -TERM "$pid" c=0 while true ; do sleep 0.1 if [ -f "$pidfile" ] ; then c=`expr $c + 1` if [ "$c" -ge 100 ] ; then printf 'Hanging process: %d\n' "$pid" retval=1 break fi else printf 'Done\n' break fi done else printf 'No process found\n' retval=1 fi } # send HUP to the server for log rotation hup(){ printf 'Sending HUP signal to the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the hangup signal to the process: %s\n" "$pid" kill -HUP "$pid" printf 'Done\n' else printf 'No process found\n' retval=1 fi } # check permission if [ -d "$basedir" ] && ! touch "$basedir/$$" >/dev/null 2>&1 then printf 'Permission denied\n' exit 1 fi rm -f "$basedir/$$" # dispatch the command case "$1" in start) start ;; stop) stop ;; restart) stop start ;; hup) hup ;; *) printf 'Usage: %s {start|stop|restart|hup}\n' "$prog" exit 1 ;; esac # exit exit "$retval" # END OF FILE
# cd /usr/local/src # wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.9.tar.gz # wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gzTokyoCabinetインストール。
# tar zxvf ./tokyocabinet-1.4.9.tar.gz # cd tokyocabinet-1.4.9 # ./configure # make # make installTokyoTyrantインストール。
# tar zxvf tokyotyrant-1.1.40.tar.gz # cd tokyotyrant-1.1.40 # ./configure # make # make installTokyo Tyrantの起動スクリプトに以下を追加。
# vi /usr/local/tokyotyrant/sbin/ttservctl # chkconfig: 345 65 55 # description: Startup script for the server of Tokyo Tyrant # processname: tokyotyrant/etc/init.dにリンクを作ってchkconfigに登録&確認。
# ln -s /usr/local/tokyotyrant/sbin/ttservctl /etc/init.d/ # chkconfig --add ttservctl # chkconfig --list ttservctl ttservctl 0:off 1:off 2:off 3:on 4:on 5:on 6:off
# vi /etc/logrotate.d/tokyotyrant /home/ttserver/data/ttserver.log { monthly missingok rotate 12 compress ifempty create sharedscripts postrotate /sbin/service ttservctl hup > /dev/null 2>/dev/null || true endscript }参考サイト
「儲からない」といわれた個人宅配の市場を切り開き、「宅急便」によって人々の生活の常識を変えた男、小倉昌男。本書は、ヤマト運輸の元社長である小倉が書き下ろした、経営のケーススタディーである。
全体を通して読み取れるのは、「学習する経営者」小倉の謙虚さと、そこからは想像もできないほど強い決断力である。成功した人物にありがちな自慢話ではない。何から発想のヒントを得たか、誰からもらったアイデアか、などがこと細かに記されている。講演会やセミナー、書籍、マンハッタンで見た光景、海外の業者に聞いた話、クロネコマークの由来…。豊富なエピソードから伝わってくるのは、まさに学習し続ける男の偉大さである。
一方で、並々ならぬ決断力を持っていたのだと思わせる記述がいくつかある。宅急便に注力するため、大口の取引先であった松下電器との長期にわたる取引関係を終結させたこと、三越岡田社長のやり方に反発し、「とてもパートナーとして一緒に仕事をしていくことはできなかった」として取引関係を解消したこと、運輸省を相手に訴訟を起こしたこと…。いずれも確固たる論理がその根底にあった。それにしても見事な決断力と言わざるを得ない。
終わりの部分で紹介されている宅急便の各種サービス内容や、有名なNEKOシステムなどの話は、流通・物流の関係者以外には興味がわかないかもしれないが、全体的に読みやすく、興味深いエピソードが満載なので、読んでいて飽きることがない。経営者としての小倉の人となりが伝わる、好感の持てる1冊である。(土井英司)
ヤマト運輸の経営者として、かつて宅急便で物流業界に革命を起こした人物が、福祉の世界を変えようとしている。著者は、障害者が健常者と同じ立場で暮らせるというノーマライゼーションを実現するためには、障害者がきちんと働いて稼ぐことが基本だと考える。しかし、障害者の就労施設である民間の共同作業所で働く人々の月給は1万円にも満たず、障害者が自立することはほとんど不可能である。そしてこの現実を変えるには、共同作業所の経営改革を行う必要があると指摘する。
本書の大部分は、ヤマト福祉財団が共同作業所の運営者を対象に行っている「経営セミナー」の講義内容に沿ったもので、「経済とは何か」「経営とは何か」と題し、市場経済の仕組みの中で、どのように利益を得ていくかという具体的な経営ノウハウが盛り込まれている。さらに、実際に障害者に対し月給10万円以上を支払い、フランチャイズを拡大しているスワンベーカリーなどの事例も紹介されている。
本書を読み進めると、著者の福祉に対する考え方や取り組み姿勢には、宅急便に対するそれとの共通点が多いことに気づく。たとえば、働く人のやる気を引き出すことが健常者や障害者を問わず何よりも重要なことと考えているし、国や地方公共団体を頼りにしすぎることもない。もしヤマト運輸と同様にさまざまな企業が経営の知恵を出し合えば、社会全体のノーマライゼーションの実現に一歩近づくことができるのではないだろうか。福祉にとどまらず、企業のあり方についても考えさせられる 1冊である。(戸田圭司)