flint>flint blog
ページ: « 0 1 2 3 4 5 6 7 8 9 10 11 12 13 »

「選択アルゴリズム」と「中央値の中央値」

ある小説の登場人物、あるいは、あるアーティストの曲といった集合について考えるとき、「それらの中で最も好きなものはどれですか?」という問いに答えることは (甲乙付け難くて悩むケースもあるかも知れませんが) 比較的簡単です。 しかし、「2番目に好きなものは?」「3番目に好きなものは?」...といった具合に質問を続けていくと、どんどん回答が困難になっていくはず。 最も嫌い (好きでない) ものについては、好きでないものと同じように簡単に答えられるので、最も特定が困難なのは、好きな (あるいは嫌いな) 順に並べたとき、そのシーケンスの中央に位置する要素だと言えるでしょう。

私はこれまで、プログラミングにおいてもこれと同様の問題が存在する、即ち、ある配列 (要素数n )について特定の指標に沿っての並べ替え (ソート) を行ったときに中央あるいはその付近に配置される要素を特定するには、ソートそのものと同じオーダ、つまり最低でも O(n logn ) の計算量が必要になると考えていました。 しかし実は、それはまったくの間違いで、選択アルゴリズムと呼ばれるものを使用すれば、線形、即ち O(n ) の計算量でこれを探し当てることができます。

このことは計算理論ではごく初歩的なトピックらしく、これまで知らなかったことについて大変恥ずかしくなってしまうわけですが、実際に調べていくとなかなかに複雑なものであることが判明。 そこで、自分なりに理解できたことをまとめて、ひとつのエントリとしてみることにしました。

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

内製のススメ

気が付けば前回の投稿から随分と時間が経ってしまいました。 仕事の方がなかなかにスパイシーな状況であったため、平日は殆ど何もできず、休日は家の中のことや、各種手続き、そして何より疲労の回復が最優先となり、ブログ記事を書く余裕を持つことができなかった次第。 しかし、それらのゴタゴタもようやく一段落し、気力・体力ともに以前の水準まで復旧しつつあります。 そんなわけで、文章作成のリハビリも兼ね、以前より構想していた「業務管理システムの内製」について、思うところを書いてみたいと思います。

私はこれまでに幾つかのお客様のオフィスに入って仕事をさせて頂いてきました。 その際、どこの現場でも共通して感じるのは、製品として提供されるソフトウェアシステムの開発技術と比較して、社内の業務を管理・支援するシステムが圧倒的に貧弱である、ということ。 顧客向けのプロダクトして創意と工夫を凝らしたソフトウェアを生み出す一方で、勤怠・スケジュール管理, 内部レビュー, インシデント報告, 各種申請・稟議といった社内業務は市販のグループウェアや、Excel などによって賄われている場合が殆どです。 もちろん、それで業務が効率的に回っているのであれば問題はないのですが、実際のところ、そうした本質的でない作業 (およびそれらが正しく行われているかのチェック) にかなりの時間と労力が費やされています。 ひとつひとつの手間は些細なものでも、職場全体で1日あるいは1ヶ月あたりにこうした作業に浪費されるコストを見積もってみると、「必要経費」として簡単に割り切ることが難しいほどに大きくなるのではないでしょうか。

私は以前、自分の勤務時間を毎日4ヶ所に入力しなければならない現場に入ったことがありましたが、それぞれの入力ファイル/画面上での配置や書式が異なっていたため、食い違いなくデータを記入するために (それなりに) 神経を使いました。 各作業員が留意に努めて、1日あたりの記入ミス発生率を0.5%まで抑えたとしても、20人がいれば、そのうちの誰かが間違える確率はおよそ1割。(1 - 0.99520 ≅ 0.095) 平均すれば10日に一度は集計にエラーが紛れ込む計算になります。

とは言え、こうした社内業務のためのシステムを自分たちの手で作るとなれば、やはりかなりのコストが掛かることは想像に難くありません。 しかしながら、システムの内製は、適切な管理・運用を行うことさえできれば、それを補って余りあるメリットを生み出すことができる、というのがこのエントリにおける私の主張です。

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

プラセボ効果との付き合い方

みなさんは、「プラセボ (プラシーボ) 効果」と呼ばれるものをご存知でしょうか。 最近ではネットなどで発信される健康・医療情報や、フィクション内での薀蓄として言及されることも多いため、聞いたことがあるという人も多いかもしれません。

しかしながら、その内容をきちんと理解している人はごく僅か。 殆どの人は「暗示や思い込みによって病気が治ること」だと認識しているのではないでしょうか。 ある種の人たちによって、精神の力で病気や障害を克服する、いわゆる「念ずれば通ず」の例として取り上げられることもしばしば。 また、科学・医学では説明のつかない (とされる) 超常的あるいは神秘的な現象に説明を与えるためのロジックとして用いられることも多いようです。

ガダラの豚 (III)

「こんなことは大生部先生の方がお詳しいでしょうけれど。 たとえば学者の間でよく話題になるのに "プラシーボ" ってものがあるわ」
「プラシーボ。 偽薬だね」
「そう。 通常のお薬でなかなか症状の退かない患者さんに、小麦粉を渡すの。 その際、"これは非常に高価で貴重な薬だが、特別に処方します" といった情報を与えておくの。 それでみるみるうちに症状がおさまってしまうことが実験例としてあるわけ」
「メリケン粉でかね」

「そうね。 西洋医学者の中にはムキになって反論する人もいるけれど、私は認めるわ。 病気と言うのはね、人間のひとつの "表現" でもあるのよ。 肉体が何かを訴えかけてきていて、無意識のうちに治ることを拒否している場合もある。 そういうときにプラシーボ的なもの、それは偽薬じゃなくて呪文だっていいわけだけれど、そっちのほうが効く場合もあると思うの」
大生部が言った。
「それは封じ込められていた人間の自然治癒能力を引き出すってこったな」
「そう。 ただの鍵にすぎないのよ。 パワーの詰まった部屋の扉を開けてあげるの」
「私も異論はないね。 キリストも空海も、マホメットも、聖人というのは万能の合鍵を持っていて、人々に奇跡を起こしてきたんだ。 欧州には昔から "ロイヤル・ハンド" というものがある。 これはいわば国王による手かざしだな。 病人には劇的に効くもんだそうだ」

こうした通俗的な見方に反して、現代の医学・医療においては、プラセボ効果は強く注目されると同時に、詳しく研究されてもいます。 ただし、上記で述べたような「人間の可能性 (自然治癒力) を引き出すもの」「新たな治療を拓くもの」としてではなく、治療効果の正しい評価を妨げる厄介な相手として、ですが。

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

ナスとキュウリの塩揉み

5月が終わったばかりだというのに、先日より真夏日が続いてる甲府市。 今日の気温は35度だそうで、この調子ではまた昨年のように記録的な猛暑になるのではと恐れ戦いております。 いやぁ、あの生命力の塊のようなセイタカアワダチソウが立ち枯れるさまを今年もまた見物できるとは愉快至極......なわけもなく、今から憂鬱なことこの上ありません。

さて、こうも暑いと食欲も減退気味なわけですが、食事を疎かにすれば身体はますます弱っていく一方。 そんなわけで、今年もまた個人的に頼りにしている「夏を乗り切るための料理」を紹介してみたいと思います。 (ちなみに一昨年紹介した料理はこちら: 冬瓜と鶏肉のスープ)

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

Less Chance to Make Mistakes

私の大学時代の指導教官 (Prof. Nikolay N. Mirenkov) は、このようなフレーズをよく口にしていました:

"There is more (less) chance to make mistakes."
「そういうやり方だと、間違い易く (難く) なるよね。」

これは要するに、「間違えて欲しくない操作を受け付けるシステムは、そもそも間違えることができないようにするべきだ」という主張です。

ソフトウェア工学において、ユーザインターフェイスの設計は重要な研究課題のひとつ。 人間工学などの観点を取り入れ、それを使う人間にとって、より負担の小さい、「自然な」システムを作るための知見や方法論が積み重ねられています。 例えば、「フールプルーフ (バカ避け)」と呼ばれる設計思想などがここに含まれます。

ところが、現在のIT産業の現場を見渡してみると、こうしたソフトウェア工学の概念あるいは技術が未だ充分には浸透していないように観察されます。 顧客に向けて便利で快適なシステムを提供することに腐心する一方で、自分たちの日々の業務に関しては、時代錯誤的とも言えるほどに原始的で不便な仕組みが採用されている現場は意外に多くあるもの。 これぞまさしく「紺屋の白袴」というやつです。

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

息抜きの作法

ペンローズ・タイル

先日、探し物をしていたら、部屋の片隅から会津にいた頃に作った玩具 (左写真参照) が出てきました。 これは段ボールペンローズ・タイルと呼ばれる、周期的でないパターンで敷き詰めることのできる形に切ったもの。 これを上手く並べるにはちょっとしたコツが必要で、全体の構造を考えながら進めていかないと、ピースを入れられない隙間ができてしまいます。

仕事に詰まったときなど、床に座ってこれを並べていると、しばらくは無心でタイリング作業に没頭できるので、気分転換にはうってつけ。 ピースの数がそれほど多くないので、気が付いたら30分も経っていた、ということもありません。 こうした気晴らしの手段をどれだけ持っているかということは、仕事を長く続けていく上では意外に、そして、なかなかに重要なことなのではないでしょうか。

そんなわけで、今回は私のリフレッシュ法のいくつかを紹介してみたいと思います。

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

短縮URL廃絶運動

私が常々「ウェブ上から消えればいいのに」と思っている仕組みのひとつに、短縮URLサービスがあります。 短縮URLとは、例えば以下のURL:

http://t.co/rxhxUZXsR6

のようなもので、これをブラウザのアドレスバーに入れて移動すると、

flint blog: チョークのマークひとつ
http://www.flint.jp/blog/?entry=56

へとリダイレクトされます。 この種のサービスが出現したのがいつのことかは定かではありませんが、1投稿あたり140文字までという制限のある Twitter の普及に伴って、頻繁に目にするようになりました。 現在では、多くの人が、毎日、大量の短縮URLをクリックして、ウェブコンテンツの移動を行っていることでしょう。

しかしながら、短縮URLには「健全な (と私が考える)」ウェブの発展を阻害する性質が備わっています。 このエントリでは、それらの性質について紹介していきます。

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

IDシーケンスの管理

データベースを利用したシステムでは、各レコードにそれを一意に識別するための識別子 (ID) を付与する必要があります。 多くの場合、この識別子はレコードがデータベースに登録された順に連番で割り振られるわけですが、こうした連番での識別子発行は、PostgreSQL では "SERIAL" を、MySQL であれば "AUTO_INCREMENT" を利用して実装するのが一般的な手法でしょう。

ところが、こうしたデータベース管理システムによって提供される機能を利用できない (したくない) 場合もあります。 当ブログシステム「鵞鳥の羽根ペン」もそのひとつ。 このシステムは複数のブログを管理するように作られているのですが、スケーリングなどの将来的な拡張を見越して、エントリやコメントなどのレコード識別子はブログごとに独立したシーケンスになるように設計されています。 例えば、テーブル "entry" は以下のように定義 (一部) されています:

カラム 制約 説明
blog INTEGER PRIMARY KEY ブログ識別子 (blog.id)
id INTEGER エントリ識別子
title TEXT NOT NULL 表題
content TEXT - 本文
author INTEGER NOT NULL 投稿者 (user.id)
time_post TIMESTAMP NOT NULL 投稿日時

そのため、同じデータベース内であっても、異なるブログに属していれば、複数のエントリに同一の識別子値が割り当てられることになります。 より正確に表現するならば、システムはブログ識別子 (blog.id) とエントリ識別子 (entry .id) の組 (ペア) を「完全な」識別子として個々の entry レコードを識別している、となるわけですが、いずれにしても、SERIAL や AUTO_INCREMENT によるテーブル単位での連番付加では、こうした運用には対応できません。

>> 続きを読む
成田
このエントリーをはてなブックマークに追加

大雪の記録 (甲府市/甲斐市)

関東甲信越地方では14日から記録的な降雪が記録されました。

14日から15日午前にかけて降り続いた記録的な大雪の影響で、県内の道路や鉄道の交通網は寸断された。 大勢の人が車内や列車内で足止めを受けるなど、県全体が孤立状態に。 路面凍結によるスリップ事故なども多発し、けが人は多数に上った。 県は14日夜、陸上自衛隊に災害派遣要請した。 甲府地方気象台によると、15日午前9時現在、甲府でこれまでの過去最高記録だった49センチの倍以上となる114センチの積雪となり、1894年の観測開始以降最高を記録。 山中湖村でも163センチの積雪を記録した。

雪による事故も多発した。 県と県警のまとめによると、歩行中の転倒や車のスリップ事故、除雪中の転落などで少なくとも40人が重軽傷を負い、けが人のない物損事故も194件 (15日午後4時現在) に上った。 また、積雪の重みによって、住宅や倉庫の少なくとも5棟が全半壊した。

私が住んでいるのは、山梨県の中心からやや北西に離れた、甲府市甲斐市の境界となっている道路沿い。 このあたりの被害は県内ではおそらく軽微なものだったと思われますが、後に何かの資料になればと思い、この数日間の自宅周辺の状況を写真で記録してみました。 (サムネイルをクリックすると、大きなイメージを見ることができます。)

最終更新: 2014/02/18 09:00
>> 続きを読む
成田
このエントリーをはてなブックマークに追加

ファイル管理システム

現在仕事に使用しているウェブシステムに、ファイル管理機能を追加しました。 「どうせ作るなら汎用的なものに」と考え、ユーザ, グループごとにアクセス許可を設定したり、外部に公開できるような機能も実装。 そして、その外部公開機能のテストとデモを兼ねて、写真データを閲覧できるサイトを作ってみました。

ちなみに、このサイト内のページには、写真データが主体となっている記事内のサムネイルをクリックすることで移動できるようになっています。 現時点で、この仕組みが適用されている記事は以下の通り:

記事内には登場しない画像もあるので、気になる方は写真ページのパンくずリストで、ディレクトリのインデクスページへ移動してみてください。

成田 (ディレクトリトラバーサル? 試すだけ無駄無駄ァ!!)
このエントリーをはてなブックマークに追加
ページ: « 0 1 2 3 4 5 6 7 8 9 10 11 12 13 »