MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

ミラクル・リナックス株式会社営業・マーケティング部所属。

Linux, OSSに関するマーケティング情報から英語のニュースまで、幅広いトピックを扱っていきます。

ミラクル関連リンク

採用情報

サイト検索

最近のトラックバック

2009年8月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

2008年1月16日 (水)

CakePHPを触ってみました

いまさら感がありますが、先日友人からCakePHPがいいという噂を聞いたため、週末ちょっと試してみました。

感想としては、なるほどこれがアジャイルプログラミングと言うものかと、なかなか感心。簡単なウェブアプリケーションが、少ないコード量で書けるのは驚きです。個人的に馴染みのあるPHPでできるため、Ruby on Railsに挫折したぬるプログラマでも心地よい感じです。デフォルトでもキャッシングしているのでパフォーマンスも速い気がするし。

お試しコーディングで参考になったのは以下のページ。少しずつ開発が進展し、かつ全ての答えが公開されているわけではないので、同じものを作るにしても足りない部分を随時補填していくパズル感覚でコードが組めます。

http://www.ideaxidea.com/archives/cakephp/

ただ、最大の弱点は私のデザインセンスのなさ。例えフレームワークを使っても、CSSから開放されるわけではないのですね。精進します。

2007年4月11日 (水)

Port 80 の占有者

ここ二ヶ月ほど、会社から支給されていたノートPCがずっと故障中だったのですが、このたび出張にいくことになってようやく修理された物が手元に戻ってきました。

ちょっと出発までに時間がなかったので環境をいじる余裕がなく、OSもデフォルトであるWindows XPから変えていないのですが、暇つぶしのためにこの上にApacheを入れようとしたのが間違いの始まり。Apacheをポート80で動くように登録しようとすると、以下のエラーメッセージがDOS窓に出力されます。

(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。
  : make_sock: could not bind to address 0.0.0.0:80

no listening sockets available, shutting down

Unable to open logs

Note the errors or messages above, and press the <ESC> key to exit.  27...

エラーメッセージから推測するに、他のサービスが使用しているかなにかでポートがブロックされてしまっているようです。

まず実行したのが、Windowsセキュリティセンターでファイアウォールを無効にしてみましたがどうやらこれは原因ではないみたいです。確かにパケットのフィルターはサービスの登録とは関係なさそうです。

次に、コントロールパネルから「プログラムの追加と削除」の「Windowsコンポーネントの追加と削除」でIISがインストールされていないかを確認しましたが、やはり入っていませんでした。

そこで、本当にポート80がブロックされているのかを確認するために、DOS窓からnetstat -aを実行しました。

c:\> netstat -a
Proto  Local Address  Foreign Address   State
TCP   SHIRO3:http   localhost:0      Listening
(略)

以上の実行結果をみるに、netstat コマンドでなんらかのサービスがポート80 (http)で動いているのはわかりましたが、それがなになのかはわかりません。

そこでGoogleで調べてみると、TCPViewなるツールがあることがわかりました。こちらを使用することで、やっとポート80を占有する犯人がSkypeだとわかりました。

最新バージョンの3.1をインストールしていたのですが、Skypeの接続設定を見てみると、着信の接続にポート80を使用するような設定になっていました。設定を変更することで、無事にApacheを80番で動かすことができるようになりました。

意外な犯人が見つかったところで今回はお終いにします。普通の人はApacheとSkypeを同じマシンで動かさないでしょうし、こういう落とし穴にはまる人は少ないんでしょうね。

2007年4月 6日 (金)

OpenOffice.orgのメニュー

OpenOffice.org も2.1が出ているのですが、残念ながらMIRACLE LINUX V4.0用のメニューファイルはtarballの中に用意されていません。そこで、他のディストリビューションを参考にして作ってみました。

 RPMS: openoffice.org-asianux-menus-2.1.0-5.1ml.i386.rpm
 SRPMS: openoffice.org-asianux-menus-2.1.0-5.1ml.src.rpm 

申し訳ありませんが、動作保証外になりますので予めご了承ください。

使用するには、まず公式サイトで公開されているtarballのRPMを入れてから、こちらのパッケージをいれてください。

 # tar zxvf OOo_2.1.0_LinuxIntel_install_ja.tar.gz
 # cd OOE680_m6_native_packed-1_ja.9095       (←適当なディレクトリ名を指定)
 # cd RPMS
 # rpm -ivh openoffice.org*.rpm
 # cd
 # rpm -ivh openoffice.org-asianux-menus-2.1.0-5.1ml.i386.rpm

これでスタートメニューにオフィススィート用のリンクが表れる他、拡張子の関連付けが行われデスクトップ上で *.doc や *.xls ファイルをダブルクリックすると OpenOffice.org が起動するようになります。

ちょっとこれだけだと内容が寂しいので、最後に MIRACLE LINUX V4.0 のちょっとした強みをご紹介。普通 Linux の世界では、文字化けしてしまうため丸数字の使用は厳禁なのですが、MIRACLE LINUX V4.0 は商用フォントを使用しているため、正常に表示されます。というわけで、他の Linux と比べて Microsoft Word への互換性が若干高くなっています。(もっとも、丸数字の使用を推奨しているわけではありませんが)

2007年3月20日 (火)

ML40でOpenPNEの文字化けを直す

最近は高性能なOSSのグループウェアも増えてきました。

弊社でも効率的な情報共有を模索するため、これらのOSSを試している最中です。今回は、SNSのOpenPNEを導入するにあたり、LAMPの知識が乏しい私がはまった箇所を残しておこうかと思います。

続きを読む "ML40でOpenPNEの文字化けを直す" »

2006年12月 8日 (金)

JSONとdojo

イベント行ったり風邪ひいたりしていたら、前回の投稿から十日も空いてしまいました。今回は二個前にやったJSONの続きです。他にも書きたいネタはあるのですが、終わるものは終わらせておかないと気持ち悪いですしね。

前回まででサーバサイド、サービスを提供する側の準備は整いました。JSONはご存知のとおりテキストベースのデータフォーマットなので大抵の言語では扱えるのですが、ここではJavascriptの共通ライブラリであるdojoのコールバック関数を使ってみます。公式サイトより、Ajax版をダウンロードしてきてください。現時点で最新版はバージョン0.4.1のようです。

ゲットしたzipファイルを、/var/www/html/ へ展開します。dojo-0.4.1-ajax というディレクトリができるので、特に意味はありませんが dojo にリネーム。このとき注意しなくてはいけないのは、dojo.js 以外に src/ ディレクトリと iframe_history.html も必要になる点。必要なファイルがないと dojo が正常に動作しなくなります。

  $ cd /var/www/html
  $ unzip dojo-0.4.1-ajax.zip
  $ mv dojo-0.4.1-ajax dojo

次にHTMLを書きます。

<html>
  <head>
    <script type="text/javascript" src="./dojo/dojo.js"></script>
    <script type="text/javascript">
      dojo.require("dojo.io");
      dojo.require("dojo.io.ScriptSrcIO");

      function getData() {
        dojo.io.bind(
          url: 'http://localhost/test_json.php',
          load: function(type, data, req) {
            showData(data);
          },
          mimetype: "text/json"
        });
      }

      function showData(json) {
        var html = '';
        if (json) {
          html += json['j_id'] + "番目は" + json['j_name'] + "さんです。<br />";
        }
        document.getElementById('output').innerHTML = html;
      }
    </script>
  </head>

  <body onLoad=getData()>
    <div id="output"></div>
  </body>
</html>

簡単に挙動を説明すると、HTML読み込み時にgetData()関数が実行され、前回作ったPHPへJSONデータをとりにいきます。データの転送が終わった段階でコールバック関数のshowData()が呼ばれ、JSONを分解した後、<div id="output"> の中にHTML文を挿入するといった動作になります。

dojoの関数についてもっと知りたい方は、いろいろなAjaxの本で詳しく解説されていますので読んでみてください。かくいう私のコードも本の受け売りなのでちょっと怪しいです。

ここでのポイントは、JSONのサービスを受ける側には、必ずしもプログラムの知識が必要でないことではないでしょうか。従来クロスサイトのデータ交換はJavascriptでは行えないため、PHPなどでできたプロクシを経由する必要がありました。しかしdojoのような強力なライブラリを使えば、サービス提供側が提示するHTML文をブログのテンプレートにコピペするなどで、労せずしてWeb2.0チックなサービスを受けることができます。

逆にいえば、敷居が下がった分だけサービス提供側はセキュリティに気を配る必要があります。Javascriptがクロスサイトのデータ通信を禁止しているのはセキュリティの観点から考えると理解できます。送られてきたデータによっては、格好のクロスサイトスクリプティングのターゲットになり得ますので。このようなサービスを提供するには、サーバから送られてくるデータをどれだけ信頼のおける状態に保てるかが重要だなあと、コードを書いていて思いました。

2006年11月27日 (月)

PHPでJSON2

前回のマインドマップの投稿より一週間が過ぎてしまいました。定期更新は難しいものですが、ブログ投稿を煽っている立場上そうも言っていられません。そこで、前回の続き、JSONをやります。

とはいっても、前回のようにphp-jsonをモジュールを読み込ませておけば、あとは簡単です。配列に対して json_encode 関数でエンコード、json_decode 関数でデコードすればいいだけですし。ここでは、mysql データベースと連携してランダムな列を返すようにします。

それでは、まずmysqlでの準備です。データを格納するのデータベースを "testdb"、接続ユーザを "myuser"、パスワードを "mypass" とすると、以下のコマンドで接続します。

 $ su - myuser
$ mysql testdb -p

パスワードを聞かれますので "mypass" と入力すれば、mysql のコマンドプロンプトが出るはずです。SQLコマンドの CREATE TABLE でテーブルを作成し、その後 INSERT で何個かデータを入れてみましょう。

 mysql>  CREATE TABLE test_json (
mysql>      j_id smallint(5) unsigned NOT NULL auto_increment,
mysql>      j_name varchar(255) NOT NULL,
mysql>      PRIMARY KEY (j_id)
mysql>  );
Query OK, 0 rows affected (0.09 sec)

mysql>  INSERT INTO test_json(j_name) VALUES ('joe');
mysql>  INSERT INTO test_json(j_name) VALUES ('smith');
mysql>  INSERT INTO test_json(j_name) VALUES ('bill');

mysql> SELECT * FROM test_json;
+------+--------+
| j_id | j_name |
+------+--------+
|    1 | joe    |
|    2 | smith  |
|    3 | bill   |
+------+--------+

次にPHPスクリプト json_test.php を書きます。データベース接続にはmysql用の関数もあるのですが、ここではより汎用的に使えるPEAR::DBを使います。PEAR::DBの詳しい使いかたはここでは触れませんが、興味のあるかたは各自調べてみてください。完成したファイルは /var/www/html に置きます。

<?php

require_once('DB.php');
$dsn = 'mysql://myuser:mypass@localhost/testdb';

$db = DB::connect($dsn);
if (DB::isError($db)) {
  die($db->getMessage());
}

$db->setFetchMode(DB_FETCHMODE_ASSOC);

$sql  = "SELECT j_id, j_name FROM test_json ORDER BY rand() LIMIT 0,1";
$result = $db->query($sql);
if (DB::isError($result)) {
  die($result->getMessage());
}

$row = $result->fetchRow();

$db->disconnect();

$js = json_encode($row);

header("Content-Type: text/json; charset=utf-8");

print $js;

?>

これで、test_jsonテーブルの中のランダムな一列をJSON方式で返すスクリプトのできあがりです(エラー処理はあまり考慮してません)。wgetでアクセスするとどんなデータが返ってきているかわかります。

 $ wget http://localhost/json_test.php
(略)
長さ: 29 [text/json]

100%[====================================>] 29            --.--K/s

16:49:46 (1.11 MB/s) - `json_test.php' を保存しました [29/29]

$ cat json_test.php
{"j_id":"2","j_name":"smith"}

JSONのヘッダはウェブサイトによって書いてあることが違うのですが、UTF-8を指定しておくと多くのブラウザで対応できるようです。また、クライアント側でprototype.jsを使用する場合は、X-JSONヘッダを使うとライブラリの中で簡単に扱えるようです。

次回は、返ってくるJSONを汎用Javascriptライブラリであるdojo.jsでパースしてみようかと思います。こういう処理が手軽にできるようになってたんですねえ。

2006年11月14日 (火)

PHPでJSONしたい

SOAPやらRSSの隆盛で、データ通信の規格はほとんど全てXMLが使われていて他の選択肢はないものかと思っていましたが、その考えは時代後れだったようです。巷では JSON(Javascript Object Notation)が流行っているようです。(詳細

JSONの大きな特徴としては、その軽量なデータの表現方法にあります。冗長な節があるXMLファイルに比べ、データ量が少なくJavaScriptで簡単にオブジェクトとして扱うことができるほか、その簡素なデータ構造により多くのプログラム言語で処理することができます。prototype.jsdojoなど、Javascriptライブラリの発達により人気が高まり、多くのAjaxソリューションに使われているようです。

それでは、Asianux 2.0でJSONを使う方法を見ていきましょう。PHPでJSONを扱うには何個か選択肢がありますが、ここではメインストリームに取り込まれたphp-jsonモジュールを使う方法を解説します。php-jsonはPHP-5.2.0からデフォルトで組み込まれるようですが、Asianux 2.0のPHPは5.0.5のため、ソースを持ってきてビルドする必要があります。こちらよりソースをダウンロードしてください。

ダウンロードが完了したら、以下の手順でシステムにモジュールをシステムに組み込みます。(※注:なお、php-jsonモジュールはAsianuxサポート対象外になりますので、あらかじめご了承ください。)

  $ tar jxvf php-json-ext-1.2.1.tar.bz2
  $ cd php-json-ext-1.2.1
  $ ./configure
  $ make

root ユーザで、json.so を /usr/lib/php/modules/ へコピーします。

  # cp modules/json.so /usr/lib/php/modules/json.so

同じく root ユーザで、/etc/php.d/json.ini というファイルを作成します。内容は以下になります。

  extension=json.so

最後に、httpdを再起動させます。

  # /sbin/service httpd restart

php-jsonモジュールが正常にロードされているか確認するには、phpinfo() を実行するPHPスクリプトを書けばいいでしょう。/var/www/html/phpinfo.phpというファイルを作成し、以下の内容を記述してください。

  <?php
    phpinfo();
  >

ブラウザで http://localhost/phpinfo.php へアクセスし、以下の画面のようにjsonモジュールがロードされていたら成功です。

Phpjson

次は、このモジュールの使いかたを簡単に説明できればと思います。

2006年10月11日 (水)

今更ながらのJavascript

XoopsなどのCMSをいじっていると、デザインに関してはテンプレートのHTMLファイルやCSSファイルに手を加えなくてはいけないため、非常にわずらわしいです。

もちろん細部に関してはそれでいいかもしれませんが、できればGoogleのパーソラナイズドホームのように、ドラッグアンドドロップで簡単にレイアウトを変更できたらなあと思っていたところ、こちら のページに行き着きました。

興味があったので、スクリプトに少し手を加えてみました。マウスをリリースするとスタックするようになります。いずれCMSにもこういう機能も実装されていくのでしょうねえ。

※ absolute値でデザインが崩れるため、コードのみを載せます。

<script type="text/javascript">
<!--
var obj;
var offsetX;
var offsetY;
var des;
var destX = 500;
var destY = 500;

onload=function () {
   obj = document.getElementById("miracle1");
   if (!obj) {
      return null;
   }
   obj.onmousedown = onMouseDown;
   document.onmousemove = onMouseMove;
   document.onmouseup = onMouseUp;
}
function onMouseDown(e) {
   obj = this;
   if (!des) {
      des = document.createElement("div");
      des.style.position = "absolute";
      des.style.left = destX;
      des.style.top  = destY;
      des.style.width = obj.style.width;
      des.style.height = obj.style.height;
      des.style.border = "3px #cccccc dashed";
      des.style.visibility = 'visible';
      document.body.appendChild(des);
   }
   if (document.all) {
      offsetX = event.offsetX + 2;
      offsetY = event.offsetY + 2;
   } else if (obj.getElementsByTagName) {
      offsetX = e.pageX - parseInt(obj.style.left);
      offsetY = e.pageY - parseInt(obj.style.top);
   }
   return false;
}
function onMouseMove(e) {
   if (!obj) {
      return true;
   }
   if (document.all) {
      obj.style.left = event.clientX - offsetX + document.body.scrollLeft;
      obj.style.top = event.clientY - offsetY + document.body.scrollTop;
   } else if (obj.getElementsByTagName) {
      obj.style.left = e.pageX - offsetX;
      obj.style.top = e.pageY - offsetY;
   }
   return false;
}
function onMouseUp(e) {
   if (des) {
      document.body.removeChild(des);
   }
   des = null;
   if (obj) {
      obj.style.left = destX;
      obj.style.top = destY;
   }
   obj = null;
}

-->
</script>

</head>
<body>

<div id="miracle1" style="position:absolute; top:350px; left:350px; width:200px; height:50px; padding: 5px; border:1px #000000 solid; text-align: center; cursor: move; background-color: #eeeeee;">
MIRACLE LINUX
</div>

2006年8月31日 (木)

シンクライアントを導入する第三の理由

みなさんは、シンクライアントってご存知でしょうか?噛み砕いた言い方をすると、ハードディスクを搭載しない端末で、全てのファイルをリモートサーバで管理します。このシンクライアントですが、技術自体はそれほど新しいものではありません。むしろ、少し前まではPC価格の下落により、見向きもされませんでした。それが最近また注目を集めています。そこでこのエントリでは、私の理解の範囲でシンクライアントを導入するメリットについてあげてみます。

まず第一にシンクライアント導入はセキュリティ対策の一環として有効だということ。情報漏えい対策が声高に叫ばれる昨今、どの企業も対策に頭を悩ませていることでしょう。漏えいの原因としてPC紛失がどれくらいの割合を占めているかは定かではありませんが、アナログで人為的なミスを防ぐには、最初から重要なデータをハードディスクに溜め込ませないのがなにより効果を発揮するのではないでしょうか。

また、第二のメリットとして、管理コスト(TCO)の削減もよくあげられています。シンクライアントが採用している方式にもよりますが、データを管理するサーバ郡は一箇所にまとめて集中的に管理できます。データセンターを使うと設置スペースもいりませんし、十分検討に値するでしょう。

ここまでがよく言われている点。ここでは追加でもう一個、シンクライアントを導入する理由をあげます。それは、オフィスのフリーアドレスを実現するきっかけになるのではないか、ということ。

シンクライアントでは、データをクライアント上に貯めることができません。そのためシンクライアントを導入するにあたっては、それまでのローカル環境(クライアント)にあるデータをサーバに移行する、たな卸し作業が発生します。一度この作業を行ってサーバへデータを移してしまえば、それ以降毎日決まった席に座る必要はありません。

フリーアドレスにするとどのようなメリットがあるでしょうか。まず、フリーアドレスとともに「毎日違う席に座らなければいけない」というルールを作ることで、今まで話さなかった人とのインフォーマルなコミュニケーションが増え、社内が活性化するかもしれません。新しいアイディアを出すには、まず自分達をとりまく環境を変えてみることが必要なのではないでしょうか。

また、物が片付かないという悩みはどの会社も持っていることかと思いますが、フリーアドレスはその問題を解決してくれるかもしれません。毎日の座席移動が前提となれば、いちいち物を移動させるといった手間のかかることはできるだけ避けたいという心理が働くでしょうし、整理の問題も自然と解消できるのではないでしょうか。同時に共用で使う収納の数も減らすとなお効果的です。物を捨てるのって思い切りが必要だと思いますし、会社の仕組みにビルトインしないと、なかなか進まないのではないでしょうか。

以上、シンクライアントの可能性についてまとめてみました。
feedpath tags: ,   generated by feedpath

2006年8月30日 (水)

LinuxWorld SF&セグウェイデビュー

先々週、ミラクル社長の佐藤と児玉の三人で、サンフランシスコのLinuxWorld Expoに参加してきました。おもな目的はAsianux (MIRACLE LINUX) のプロモーションでしたが、詳細なリポートはすでに彼のブログ 烏龍の旅 で公開されていることもあり、ここでは大雑把にしか触れません。

私は主にAsianuxブースで、来訪者の方々にAsianuxってなに?といった質問に答える係でした。残念なことにアメリカではAsianuxの存在自体があまり知られておらず、世界に向けたアピールがまだまだ足りていないことを実感しました。とはいうものの、彼らもアジアマーケットの魅力と将来性には強い関心を持っていることを肌で感じたので、アジアのマーケットでの立場をしっかり固めて具体的な数字を出せれば、この状況も変わってくるのではとも思いました。

Segway_linux_sf_2 さて、Asianuxブースで説明をしていたときのこと。隣のブースでは、NetGear さんという、おもにネットワーク機器を取り扱っている会社が、セグウェイを使って集客をしていました。このブースでは訪問者がセグウェイに乗れるほか、ブースの人が自らセグウェイで動き回って集客をかけるなど、なかなかの人気を博していました。かくいう私も、時間があるときに乗ってきて、しっかりとビデオに収めてきました。日本の公道では禁止されていますし、こういう機会がないとなかなか乗れませんからね。

折角ビデオもとったことですし公開しようと思っていたのですが、ちょうど コアテクの路地 で iPodの記事に触発され iPod でも見られるようにしようとしたら、公開するのに時間がかかってしまいました。同じくコアテクの路地で実施している「AAAプロジェクト」の手前、なかなかWindowsは使いづらい雰囲気にあるため、Linuxでやろうとしたらはまってしまいました。

そんなこんなでできたファイルが左記です。編集していてわかったのですが、動画が横向きになっています。これ、どうにかならないですかね?

動画を変換するにあたり行ったことのメモを残しておきます。MPGをMP4形式に変換するのには ffmpeg を使いました。いろいろと試してみましましたが、なぜか画像と音声の両方を一度にエンコードできなかったので、mplayer に含まれる mencoder を使ってまず最初に画像と音声を分離させてから画像のみを ffmpeg で MP4 変換しました。iPodでみるのを前提としているのに音声がないのはどうかと思いますが、そこは次の挑戦者にお任せすることにします。

自分でやってみた結果、LinuxでPodcastingはいろいろと手順が必要で、普通の人には難しいかなと思いました。

結論: YouTubeはいいサービスです。

2006年8月29日 (火)

ミラクル・リナックスサイトの訪問者層って?

Microsoft adCenter Labs(追記:リンク切れのためリンクを外しました)では、おもしろい研究をしているようです。MSNユーザのサーチワードをもとに、サイトやキーワードに対する訪問者の男女比率・年齢構成などがわかるという、Demographics Prediction というのを公開しています。いろいろなブログで取り扱われているので、流行っているのでしょうか。

早速 http://www.miraclelinux.com を試してみました。その結果、84%と圧倒的に男性ユーザが多く、標準分布に比べ18歳未満と50歳以上の訪問者数が多いと出ました。Linuxの男性ユーザが多いのはある程度予想がつきましたが、ミラクル・リナックスは主にビジネス用途が多いと思っていたので18歳未満の方々からのアクセス数が多いのは意外でした。

Adcenter_miracle

この結果がどれほど信憑性のあるものなのかはわかりませんが、こういう試みをオープンにする姿勢は見習うべきところだと思います。

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.