アシアルブログ - 記事一覧
| 発行日時 | 見出し |
|---|---|
| 2009-1-5 19:34 |
続・Macを買ったらすぐインストールするアプリケーション
明けましておめでとうございます。熊谷です。あっという間に過ぎ去ったお正月休み、皆さんはいかがお過ごしでしょうか。今日から仕事始めの方が多いのではないのでしょうか。
もう昨年のことになってしまいますが、またMacユーザに戻りました。MacBook Airで懲りたはずなんですが、やはりその魅力に負けてしまいアルミのMacBookを購入してしまいました。そんなことで、今回は私がMacを買ったらすぐインストールするアプリケーションを紹介します。以前にも同じようなことをやっていますが、ほぼ1年前のことになるので、そこでは触れなかった(もしくは新たな)アプリケーションを紹介します。 Thunderbird 以前はOSX標準のMail.appを使用していたのですが、使い難いというかやはり使い慣れたメーラーが一番ということでこれに戻ってきました。 Adobe Photoshop Lightroom 写真管理ソフトとでもいいましょうか。最近写真はrawで撮るようにしているのでその現像はこれを使用しています。また、Flickrにアップロードするプラグインがあるのでそれとの組み合わせがとても使いやすいです。 ATOK 2008 日本語入力はやはりこれでしょう。定番中の定番ですね。早くWindows版にあるATOKダイレクトAPIが実装されないかなと思ってます。 InputHilitter Windowsのときは当たり前だった日本語入力時に変換中の文字列を色付けしてくれるものです。「ことえり」や「ATOK」で変換しているとその文字列に下線が引かれるだけで、場合によっては文節の区切りがわかりにくくなります。これをインストールするとWindowsの時と同じように文字列に背景色がつくのでわかりやすくなります。ただ、その仕組み上Cocoaアプリケーションにしか効きません。でも、これがあるとないとでは、視認性が全然違います。必須。 MacVim 以前はターミナル(iTerm)上でvimを使用していたので今回も同じようにと思っていたのですが、GUIをCocoaにしてさらにMac用に機能を付け加えているMacVimを知り、使用してみたところなかなかいい感じ。何よりもCocoaでGUIが作られているというのが素晴らしいです。 Cruz Webkitをベースにしたブラウザ。SafariでもプラグインをインストールすることによりFirefox並に機能を拡張することが出来ますが、これははじめからそれ並みの機能を持っています。セッションのリストアやユーザスクリプト等。しかもこちらのサイトで公開されている方法を使用すると最新のWebkitを使用してこのブラウザを使うことができるので、Firebug並の新しいインスペクタが使用できてさらに便利に。最近はこれとFirefoxを使い分けています。 そんなことで、Macの世界に戻ってきました。文字はきれいで読みやすいし、何といっても新しいMacBookは速くて快適ですね! |
| 2008-12-25 17:47 |
linuxでリモートデスクトップ
今回は、rdesktopについて書いていきます。
Windowsで遠隔操作と言えば、手軽に出来るリモートデスクトップが有名です。 XP以降デフォルトで入っているので手間をかけずにかつ、レスポンスも高速なのでかなり便利な機能ですが、 実はLinuxからでもrdesktopを使えばアクセスできます。 それを実現するのが rdesktop(http://www.rdesktop.org/) です。 インストールは、 apt-get install rdesktop 以上。 使い方は、
で、ログイン画面を表示出来ます。 私の場合は、もう少しオプションを付加して、
こんな感じになります。 -g 解像度 -u ドメイン名\\ユーザー名 -K キーボードを乗っ取らせない(デフォルトでは、キーボードからの入力を完全に乗っとるので、ratpoisonのキーが使えない・・・) その他オプションはman pageを見てください。 実際の使用感としては、vncに比べかなり高速。 vncの場合は、プロトコルがシンプルで画面をそのままキャプチャして送るのでどうしても遅くなりがちですが、リモートデスクトップはできるだけ必要最小限にする工夫をしてあるのでこれだけの速度が出る模様。 ただし、スクロールなど短時間で書き換えが起こる場合はやはり通信速度がネックになります。 windowsを使う必要があって、リモートデスクトップで十分な場合にはかなり役立つツールかと思いますので、ぜひ使ってみてください。 おまけ Xenの完全仮想化でwindowsXPなどを動かす場合は、付属のコンソールを使うよりrdesktop使った方が軽快に動くかもしれません。 |
| 2008-12-24 12:45 |
MemcachedではなくRepcachedをセッション管理に使用する(ついでにTokyo Tyrantについても少し)
森川です。
複数台のWebサーバでセッション管理をする場合、NFS・DB・Memcachedなんかが一般的ですが、今回はMemcachedじゃなくてレプリケーションができるRepcachedを使ってみよう!というお話です。 まずは、Repcachedの話です。といってもMemcachedにレプリケーション機能が追加されたものというものです。 RepcachedはKLab株式会社さんのクラブラボで公開されています。インストール方法などについては、リンク先のページを見ればわかると思います。 今回のエントリで重要なのは、 ・高速であること (Memcachedと遜色ない) ・レプリケーションができること (1台が落ちてもデータが失われない) ・Memcachedのクライアントが使えること(設定を変更する必要がない) ということです。 ただし、割り当てたメモリを超えてデータを保存した場合には、データが失われてしまうので、きちんと割り当てメモリには余裕を持ちましょう。 NFSは使いたくないけど、もっと信頼性が欲しい、という場合はTokyo Tyrantを使ってみるというのも一つの手です。 Tokyo Tyrantについてですが、すごく簡単に言ってしまうと、Tokyo Tyrantはmemcachedくらい速いけど、ファイルにデータを保存できるDBみたいなのです。 Tokyo TyrantはTokyo Cabinetというライブラリの(ホームページにも書いてある通り)ネットワークインタフェースです。 なにやら意味がわからん!という人は、MySQLのストレージエンジン(MyISAMとかInnoDBとか)がTokyo Cabinetで、MySQLそのものがTokyo Tyrantだと思うと良いと思います。MySQLはその2つが一緒になっているけど、今回は別々なんだと。もっと詳しく知りたい人は、Web+DB Vol.47を参照したり、mixi Engineers' Blogもすごく簡単です。 それでTokyo Tyrantについて今回のエントリで重要なのは、 ・高速であること (Memcachedに比べると遅いみたい) ・ファイルにデータを保存できること (データが自動的に削除されることがない) ・レプリケーションができること (1台が落ちてもデータが失われない) ・Memcachedのクライアントが使えること です。ただし、最悪な欠点が一つだけあって、ガーベッジコレクションを自分で実装する必要があります。つい最近までそれを知らずに、セッションストレージに使おうかなと思っていたのですが… というのも、セッション管理でmemcachedを使用する場合、ガーベッジコレクションは行われず、memcachedの有効期限の設定で管理されているのですが、Tokyo Tyrantではデータの有効期限ができないのです。そのため、memcachedと同じように使用するとセッションデータが肥大化することになってしまうので、注意しましょう。 そのため、Tokyo Tyrantを使用する場合はセッションハンドラを自分で作成する必要があります。そこまでするなら、共有ファイル領域にファイルとして保存したほうがよいかと個人的には思います。 |
| 2008-12-18 21:06 |
GDとImageMagickの画質比較
こんばんは、牧野です。
以前、GDでの画像処理を紹介しました。 今日はPHPでよく使われるもう1つの画像処理方法、ImageMagickを使うやり方で画質にどれくらい差があるのか比べてみました。 まずは早速、テスト用プログラムです。 gd_test.php
GDの場合、以前笹亀さんが書いていたように、サムネイル画像サイズを自力で計算する必要があります。 ImageMagickはpeclエクステンションもありますが、サーバにインストールされているImageMagick、PHPのバージョンの制限がわりと厳しいので、コマンドラインから使う方が手軽だと思います。 今回比べたかったのは画質なので、それ以外のことはとりあえず無視します。 (プログラムの書き方がいい加減というつっこみは今回はできればなしの方向で。。。) 画像をアップロードして、それを適当な大きさの表示用画像とサムネイル画像にサイズ変更して保存する、という機能は、ウェブアプリケーションでは比較的よくある機能だと思います。その時にどれくらい差が出るものなのかを調べるのが今回の目的です。 元画像のsample.jpgは、615×410で、今回のテストでは少しだけ小さくしています。 結果は、、 GDで変換した画像 ImageMagickで変換した画像 ブログの写真では変わらないように見えるかもしれませんが、ImageMagickを使ったほうがピントが合っているような感じで少し綺麗でした。 ということで、ImageMagickの方が画質的にはいいということがわかりました。 GD、ImageMagickともに様々な関数、オプションが用意されています。 GDでもこの関数をこんなふうにするともっと綺麗になる、等、何かご存知の方がいましたら、ぜひお知らせ下さい。 |
| 2008-12-15 19:49 |
TextMateで全角スペースと半角スペースの区別ができるようにする
こんにちは。先日、我慢しきれずに、MacBookを購入してしまった橋本です。
開発環境がMacになったということで、最近はTextMateを使って開発をしているのですが、 TextMateを使ってコーディングをしていると、ぱっと見問題なさそうなコードなのにバグが出て、調べてみると全角スペースが隠れていたということがよくあります。 TextMateは元々マルチバイト文字に対応していないため、日本語を無理やりまともな形で表示させると、全角スペースと半角スペースが等幅で表示されてしまい、一見半角なのか全角なのか判断がつきません。 そこで、今回はTextMateで全角スペースと半角スペースを見分けるために、全角スペースをハイライト表示するという設定を紹介します。 設定は以下の手順で行います。 (今回はHTMLファイルで表示させるための設定を例にすすめます。) 1.TextMateのメニューから、「Bundles」の中の「Bundle Editor」の中の「Edit Languages」を選択。 2.左のメニューでHTMLを選択。 3.以下の場所に次のコードを挿入
4.以下の場所に次のコードを挿入
↓ここに挿入することで、PHPタグ内でもハイライト表示がされるようになります。 5.TextMateのメニューから「Preferences」の「Fonts & Colors」を選択。 6.「+」アイコンをクリックしてElementを追加し、以下のとおり設定する。 Element名: whitespace-multi(ここは他の名前でも大丈夫です) Scope Selecter: invalid.whitespace-multi(ここはこのとおり入力してください) 背景色(BG): 目立つ色(ここも自由です) 設定は以上です。 上記の設定を行うと、全角スペースが以下のように表示されます。 これで、全角スペースが入っている場合にはハイライト表示されるため、全角スペースの消し忘れに悩まされることもなくなります。 TextMate愛好家の皆様、TextMate2.0が出るまでは上記の方法でなんとか乗り切りましょう! |
| 2008-12-12 18:12 |
2008年社員旅行 @千葉
小林です。
社員旅行というと温泉でまったり、ゆっくりというのが通説かもしれませんが、アシアルの社員旅行は、少々趣向が異なります。 1. ご飯は自分たちで用意する。 → 働かざるもの食うべからず!!?? 2. 体育館を貸し切って、ひたすら運動 → 気分爽快☆ 飲み会も月1~3回開催と何かと社員が集まってワイワイする機会が多い会社ですが、こう改めて一緒に時間を過ごすことで、それぞれの良さなどに改めて気がつくものです。 ご飯を作る、片付けるなど共同作業をどう遂行するかも、それぞれの性格が如実に表れ、新たな発見などもありました。 来年はどこに行こうかな・・・。 良く晴れて海の青と空の青が際だつ一日でした。波の音が心地よかったです。。。 鴨川シーワールド。シャチのショウでは容赦なくずぶ濡れになっている人がいました。 餌付け。ペンギンたちは意外に賢く、自分の番をじっと待っていました。 本日の献立は、海鮮鍋×2+もつ鍋(キムチちげ)、サラダ、カルパッチョでした。 試練のとき。マザー牧場にこんなアトラクションがあったとは・・・。 バドミントン、バレー、フットサル・・・終わってみるとへとへとでした。 |
| 2008-12-11 16:27 |
iPhoneアプリ開発にかかせない静的解析ツール「clang」
こんにちは、中川です。
今回は、最近行っているiPhoneアプリの開発で非常に便利な ツール「clang」というものがありましたのでご紹介したいと思います。 iPhoneアプリではPHPとは違いメモリの扱いが非常に重要になってきます。 allocしたものの、リリースをしていないが為に、メモリリークをおこし、 実行が非常に遅くなったり、フリーズしたりということがおこってきます。 よく気をつけてコードを書いていても、うっかりということがありので、 コードの静的解析をおこなうツールというものは非常に役にたちます。 では、早速使い方を。 まずは、以下のページからclang (checker-132.tar.bz2)をダウンロードし解凍します。 LLVM/Clang Static Analyzer 解凍した中身を /usr/local/bin/に全て配置します。 (/usr/local/binにPATHが通っていることとします。/usr/local/binがない場合、root権限で作成してから配置します。) 次にターミナルを起動して、対象アプリのxcodeのプロジェクトディレクトリで、 以下のコマンドを発行します。
これで、問題がある場合は、デスクトップにレポートがHTML形式で出力されます。 コードのどの部分がどういった原因でおかしいかまで、 非常に分かりやすい形式で出力してくれますので、iPhoneアプリ開発には 欠かせないツールだと思います。 是非みなさんも試してみてください。 参考URL: iPhone向けサイトを考える : 静的コード解析をしてメモリリーク等を教えてくれるclang - livedoor Blog(ブログ) clangでObjective-Cプログラムを静的解析 - きりかリポーツ |
| 2008-12-9 18:18 |
GoFデザインパターン2
濱田です!
今回も前回に引き続きGoFのデザインパターンを紹介します。 みなさんはクラス設計もしくは運用時にこんな事を思った事はありませんか? 「大量にクラスをインスタンス化したいのにリソースがたりない・・・」 例えば学生の情報を管理しようと思った場合オブジェクト指向を使ったクラス設計をすると学生オブジェクトが学生の人数分必要になります。こういった場合コンストラクターとセッター・ゲッターの簡単なクラスでも1000人学生がいれば1000個のインスタンスが必要になり、インスタンスを保持するためのリソースと保持するためのリソースが学生の人数分必要になります。 こんな時に適用するデザインパターンがFlyweightパターンです。 日本語で言うと「フライ級」って訳すそうです。 ではでは、今回も3つのチェックポイントにそって説明します。 ■目的 小さくて軽いオブジェクトをいっぱい作りたいけどコストを抑えたい! ■背景 オブジェクト生成と保持のコストを抑えたい。 ■効果 あらかじめインスタンス化しておいたオブジェクトをグローバル領域に保持しておき必要におうじて検索キーワードで必要な属性値を持つオブジェクトを取得することにより一度に保持するオブジェクトの数を減らす。 ではコードを見てみましょう。
実行結果は以下のようになります。
オブジェクトが4つあるように見えますが実際のオブジェクトは2つしかない所がFlyweightパターンのミソになります。 Javaだとガベージコレクションがしっかりしているのであまり使いどころのないデザインパターンですが、Permanen領域が不足するような場合にFlyweightパターンの発想でオブジェクトの共有化をはかるのも一つの手になると思います。 |
| 2008-12-4 19:37 |
Interface Builderを使わずに作るiPhoneアプリケーション作成入門
こんにちは、亀本です。
最近では、だいぶiPhoneアプリ開発に関するチュートリアルも日本語で散見されるようになってきて、以前よりも状況は改善されてきたかなーと思います。 そういった様々なチュートリアルが出てくる中でちょっと気になったのは、どれもこれもInterface Builder(IB)ばりばりに活用しようぜ!なチュートリアルだということ。 多分やり方的には正しいんですが、正直なところ自分がiPhone開発をしていく上で一番苦労したのがIBでした。 ぶっちゃけていうと、iPhoneのフレームワークであるUIKitなどの挙動や感覚がわからないうちからIBを使いこなすのは結構大変なんじゃないかなぁ、と思うのです。僕がへっぽこなだけかもしれませんが。 というわけで、チュートリアル読んだけど結局 IBチンプンカンプンで開発とかできねーYO!!という方、および一度に二つのことを覚えられないObjective-C初心者兼iPhone開発初心者に贈る、IBを極力使わないiPhoneアプリケーション開発入門を書いていこうと思います。 だって僕らプログラマだもん><全部コードで表現できた方がいいよね! なお、僕自身もまだまだエキスパートには程遠く、完全に体当たりだけでiPhone開発を学んできたので、中には勘違いやおかしな点、そこはこう書くべき!などの点も含まれているかもしれません。 そういった点はどんどんご指摘いただけたらうれしいです。 ちなみに、ここではiPhone SDK等のインストールに関しては扱いません。そこまでだけで記事になってるのがあちこちにあると思うので、そういったものを参照してください。 だいたい、読者としても全くプログラミングが出来ない人ではなく、何かしらの言語で簡単なことは出来るかなーぐらいの人を想定しています。なので、空気読めばわかるぐらいの細かい言語仕様とかの説明は省きます。 なお、開発環境としてはiPhone 2.2 SDKを想定しています。 今回の目標 ここでは、単純なテーブルを表示させてみます。今回は初回なので、まずは理解しておくべき基本事項を説明しながら進めていきたいと思います。 普通なら最初は何もないところに[Hello, world!]なんでしょうが、多分iPhoneアプリを作る中で一番使用頻度が高く応用範囲が広いのが、テーブル表示です。なので、この記事ではTableviewを使うことを軸に進めていきます。 プロジェクトの作成 まずは、Xcodeを起動してこれから作成していくプロジェクトを生成します。 Xcodeのメニューから[ファイル]→[新規プロジェクト]と進み、新規プロジェクトのテンプレート選択画面に進みます。 ここで、iPhoneOSのApplicationカテゴリの中から、[Window-Based Application]を選択し、プロジェクトの名前を付けてください。ここではsamplePrjという名前で作成します。 プロジェクトの生成が終わると、Xcodeの編集画面が開きます。 ここでまず、プロジェクトが正常に生成されている確認の意味も込めて、試しにビルドしてみましょう。 Xcode上部の[ビルドして進行]ボタンを押すと、ビルドが完了した後iPhoneシミュレータが起動し、samplePrjアプリケーションが呼び出されます。 今はまだ、真っ白な画面が表示されますが、これに実装を施していきます。 基本的な呼び出しの仕組み ほとんどのお約束事項はこの段階でXcodeがやってくれていますが、どういう流れでアプリケーションが呼び出されているか、の本当に基本的なところがわからないと、これから作っていく上で気持ち悪いですよね。 なので、ここでは簡単にアプリケーションの呼び出しの流れがどういう経路をたどっているのかを超ざっくり説明しておきます。 まず、Other Sourcesに入っているmain.mですが、ここにすべてのソースに先立って呼ばれるmain関数が実装されています。 Objective-CはC言語の拡張なので、C言語同様main関数からすべてが始まります。ヘッダーもC言語同様に.hファイルに記述します。ただし、実装を記述するのは.cではなく.mというファイルになります。 基本的に、このmain.mを編集することはありません。 この中で呼び出されているUIApplicationMain関数がiPhoneアプリケーションのフレームワークであるUIKitを呼び出すメソッドになっており、この関数内から、プロジェクトのClassesグループツリー内にあるxxxxAppDelegateというオブジェクト(ここではsamplePrjAppDelegate)が呼び出されます。 実際のiPhoneアプリケーションは、こちらに実装していきます。 ClassesのsamplePrjAppDelegate.mをみてみると、
これからテーブル等を実装していくのも、このメソッド側になります。 まずはテーブル表示 さて、基本的な流れを説明したところで、しばらくおまじないモードに入ってテーブルを実装してみましょう。 先ほど説明したapplicationDidFinishLaunchingメソッドを以下のように変更します。
さて、追記をしたところで、ビルドを実行してみましょう。 先ほどと異なり、何かテーブルらしきもの(^^;が表示されたかと思います。 では、ここでやっている処理をざっくりと解説していきます。 1行目の解説 まず1行目。この行では、変数の宣言と初期化を行っています。
UITableViewControllerは、iPhoneのフレームワークUIKitに定義されている、Tableを操作するためのオブジェクトです。 かわって右辺では、UITableViewControllerのインスタンス生成と初期化を行っています。 Objective-Cでは、メソッドの呼び出しを[]で囲んだ中で行います。ここで[UITableViewController alloc]と書いてあるのはUITableViewControllerクラスのallocメソッドを呼び出していることになります。 (なお、メソッド呼び出しをメッセージと呼んだりする、とかsmalltalkに影響を受けたObjective-Cならではの話もありますが、ここではその辺は割愛します。) また、[]が2重になって呼び出しを行っていますが、これはallocの返り値に対してそのまま次のメソッド呼び出しをしているためです。 allocメソッドはUITableViewControllerのインスタンス生成を行い、そのオブジェクトを返しますが、実際にはこれはメモリ領域を確保した、程度のものにすぎません。 これをiPhoneフレームワーク内で利用するには初期化をする必要があります。 その初期化を行っているのがその後のinitWithStyleメソッドで、このように初期化を行うメソッドをイニシャライザと呼びます。 各クラスにはほぼ必ずイニシャライザが定義されており、initもしくはinitHogehogeといった名前で何らかの初期化メソッドがあります。 このallocによるインスタンス生成とイニシャライザの使用は、二つセットで一つだと思っておいてください。 (なお、中には、インスタンス生成とイニシャライズを同時に行ってくれるメソッドを持っているものもあります。が、またそれは次の機会に。) ちなみに、メソッド名に続けて:(コロン)で付与されているのは、このメソッドに渡す引数です。 ここでは、initWithStyleメソッドに対して、UITableViewStylePlainという定数を渡しています。 このinitWithStyleメソッドはテーブルのstyleを定義するメソッドで、UITableViewStylePlainという定数を渡すことでこのテーブルをPlainなスタイルで表示する、ということを指定しています。 このような処理のもと、tableViewControllerという変数にUITableViewControllerオブジェクトが格納されます。 2行目の処理 2行目ですが、こちらは単純です。
windowという変数は、このsamplePrjAppDelegateクラスが持っているメンバ変数で、UIWindowというiPhoneのウィンドウを形作るオブジェクトが格納されています。 この辺りは、ヘッダー等について詳しく説明する際にあわせてお話しします。 window変数に格納されているUIWindowオブジェクトのaddSubviewメソッドを呼び出して、ウィンドウの中にテーブルのviewを渡しています。 ここで、変数tableViewControllerに.(ピリオド)でつなげてviewというのを記述しています。 これは、tableViewControllerオブジェクトが内部に持っているメンバ変数viewを(実際にはメンバ変数viewのgetterを)呼び出しています。 こうして、テーブルを操作するUITableViewControllerが保持しているテーブルのViewを、iPhoneの表示側であるUIWindow内にsubviewとして渡すことで、上でビルドしたようにテーブルが表示されるようになります。 今回のまとめ というわけで、ものすごーく基礎からの解説でしたが、どうでしょうか。 今回は、 1.基本的な呼び出しの流れ 2.テーブルの表示 3.メソッドやメンバ変数の呼び出しとか あたりについてざっくりと説明しました。 最初はちょっと簡単すぎましたね。。。 でもどんどん長くなっちゃうので、ひとまずこの辺で>< 多くのチュートリアルだとこのテーブル表示はIBでやってしまうことがほとんどですが、こんな感じで完全にプログラマブルな感じで生成していくことも可能です。 どのくらいこの手の話の需要があるかもわからないんで、なんか需要があるようだったら続き書いていくつもりです。 次回続いたら、テーブルを拡張/カスタマイズしていく方法とかについて書こうと思います。 |
| 2008-12-4 17:35 |
Doctrineでサブクエリを使う
こんにちは、小川です。
今週はsymfony 1.2がリリースされ、Jobeetという新たなチュートリアルが始まったりとsymfony界隈がとても盛り上がっていますね。symfonyに力を入れてるアシアルとしてもうれしい限りです。 さて、symfony 1.2にデフォルトで含まれているDoctrine。そのDoctrineでデータベースからオブジェクトを取得するにはDoctrine_Queryというオブジェクトを使いますが、実はこのDoctrine_Queryはサブクエリにも対応しています。今回はそのサブクエリの使い方をご紹介したいと思います。 今回使うスキーマは以下になります。
では、早速サブクエリを使ってオブジェクトを取得してみましょう。 以下は購入平均額が3000円を超えているユーザをサブクエリを用いて取得する例です。
まずcreateQuery()で基準となるDoctrine_Queryオブジェクトを生成します。 そのオブジェクトにcreateSubquery()というメッセージを送ると、もう1つDoctrine_Queryオブジェクトが生成されます。このオブジェクトは内部でサブクエリフラグを持っており、このオブジェクトに対してサブクエリの条件をつけていきます。 そしてこのサブクエリを適応する方法は至って単純です。getDql()メソッドで文字列にして、where文の中にいれるだけです。ただし、ここでプレースホルダを使用するとシングルコーテーションで囲まれてクエリとして認識されないので、直接文字列の内部に入れてください。 ちなみにサブクエリを用いるときに、SELECT句やFROM句の中にもサブクエリを使いたい場合があると思います。少し試してみただけなのですが、SELECT句にはサブクエリを使えるものの、FROM句の中では使えないようです。というのも、どうやらDQLでは、FROM句には必ず実在するクラス名を指定する必要があるようです。FROM句にサブクエリを使いたい場合は素直にSQLを書きましょう。 symfony 1.2にはDoctrineが最初から含まれていますので、今までPropelを使っていた方々もぜひ使ってみてください。今後もsymfonyやDoctrineに関する様々な情報やノウハウを配信していく予定ですので、どうぞよろしくお願いいたします。 |
| 2008-12-4 13:31 |
アシアル社員のイラスト公開 番外編 ~Saity先生3D化への道~
こんにちは、阿部です。
最近、3Dソフトを使う機会があり、せっかくなのでSaity先生を3D化してみようかと考えました。 (Saity先生は、アシアルが運営するPHP情報ポータル&コミュニティサイト「PHPプロ!」で活躍中です!PHP初心者向けの講座「PHP基礎講座」の先生なのです☆ちなみにPHP講座では、本日yossy先生のSmarty講座も連載を開始いたしました!) 今回からアシアル社員イラスト公開の番外編という事で、3D版Saity先生を紹介していきます! なかなか時間がとれず、完成は来年になりそうですが。年末の事務員は忙しいのです。。 現状は、少し顔の形ができてきたくらいです。(まだ後頭部や左側はハゲの状態です。Saity先生ゴメンネ。) 何かに使う予定もなかったので、ポリゴン使い放題で進めたら多すぎるのも面倒なものでした。やっぱり無駄遣いはよくないんですね。。 作っていて楽なところは、実はPHP講座の先生達は鼻がないんです!これは楽。 ちゃんと完成したら、アニメーションつけてみるのもいいですね。モーションは苦手なので更に時間がかかりそうです(^^; いつか生徒のゆきちゃんも作れたらいいなと考えてます。いろいろと夢がふくらみます(アシアルの社員イラストも3D化するかも?) 私はちょこっとかじったくらいですが、3Dは趣味で制作している人もスゴイ作品が多いですよね。プロ級。 Saity先生、何とかちゃんと完成させたいものです。 |
| 2008-11-28 16:31 |
旅行時に遭遇したトラブル
旅行が大好きで、ここ数年は1年に1回ほど海外旅行に行っています。
旅行自体はすごく楽しくていい経験にもなるのですが、やはり何かと(ささいなものですが)トラブルはつきものです。。。 特に海外だと言葉の問題もあるので、実際にトラブルに遭遇するとかなりあせります^^; 海外旅行というと、盗難や言葉がうまく通じず騙されたりといった危険があると良く聞きますが、 一番大変だったのが、使用した航空会社のストにより乗り継ぎ便が欠航になり、当日着く予定がその晩一泊するハメに。さすがに、ホテルと翌日の朝一のチケットは航空会社が用意してくれました。 しかし、若干不安だったので、ホテルについてから、空港のサポートにチケットの確認をしたら、とれてません!!しかも予定の便は満席と。。。 その後、やさしいサポート担当者にチケットを手配し直してもらい、なんとかなりました。 すごく楽しみにしていた旅行だけに初日からのトラブルでもう泣きそうでした>< また、こういった状況でも、ツアー会社を通して飛行機のチケットやホテルを予約している場合、恐らく出発後は旅行スケジュールの変更は一切きかないと思うので(自分のときはそうでした)、現地の航空会社に直接お願いしてみると案外変更してくれたりします。 この時は、欠航になったため一日丸々つぶれてしまって、どうしてもこのままは嫌だったので、だめもとでお願いして、旅行のスケジュールを1日分延長できるよう、帰りに使用する予定だった便をずらしてもらいました。 さすがに2日の延長は無理でしたが、結構言ってみるとなんとかなります。 ホテルはもちろん延長した分、延長料金を払う必要がありましたが。 唯一の救いが、加入する海外旅行保険にもよると思いますが、宿泊が伴う飛行機の遅延だったため、私の場合3万円の保険金がおりました。 ※こういうこともあるかもしれないので、事前に海外旅行保険等チェックしておくといいかもしれないです。 今まで飛行機の遅延は何度かありましたが、欠航になったのははじめてのことで、こんなことってあるんですね。 日本だとまだましだったと思うのですが、海外だと余計にパ二くるしどうしようって感じになります。 一番実感したのは、やっぱりこういったときホント英語って大切ですね>< 今後はもっと柔軟に対処できるようにしたいです。 |
| 2008-11-26 12:47 |
VMware Server 2.0をちょっと便利に使うための設定
こんにちは、ThinkPadというかWindowsマシンに戻ってきたというのにここ最近新しいMacBookが気になりだしてきた、熊谷です。MacBook Airで懲りたというのにまたアップル製品が欲しくなってきています・・・。
そんなことで、前回VMware Server 2.0のインストールについて書いたわけですが、今回はそれをちょっと便利に使うための私なりの設定をメモ書きしたいと思います。 1. 仮想マシンの起動方法ですが、毎回毎回、仮想マシンのショートカットをクリックするというのは面倒になってきます。そこでホストマシンの起動時に一緒に起動するように設定します。 管理画面を表示し、Configure Optionsにある「Edit Virtual Machine Startup/Shutdown Settings」をクリックします。 表示されるウインドウの中にある「Allow virtual machines to start and stop automatically with the system」にチェックを入れ、そのほかの項目を好みで変更することにより、ホストマシンの起動時に仮想マシンも一緒に起動、終了時にサスペンドという動作を設定することができるようになります。 2. VMware ServerはノートPCにインストールしました。ノートPCということで会社はもちろん自宅に持ち帰ることもあります。そうするとネットワーク環境が異なりホストマシンのIPアドレスが変わるわけで、VMwareのNAT Serviceを再起動する必要があります。そんなことで、私がとった方法は、ホストマシンがサスペンドや休止状態から復帰したときにそのVMware NAT Serviceを再起動するようにしてみました。 Windows Vistaの場合ですが、タスクスケジューラを使うことによりそれが可能になります。コントロールパネル>管理ツールの中にあるタスクスケジューラを起動します。 タスクスケジューラの右側にある「操作」の「タスクの作成」から新しいタスクを作成します。まずは[全般]の名前の部分に適当な名前を入力し、[トリガ]にてこのタスクを実行するためのトリガを作成します。 ソースの部分で指定している「Power-Troubleshooter」というものが重要でサスペンドや休止状態から復帰したときにシステムのログにこの情報が記録されます。それをトリガとして利用するわけです。 次に[操作]にてVMware NAT Serviceを再起動するバッチファイルを指定します。バッチファイルはあらかじめ作成しておいてください。
あとは[条件]にて、「次のネットワーク接続が使用可能な場合のみタスクを開始する」にチェックを入れ、「任意の接続」を選んでおけば、サスペンド・休止から復帰しネットワーク接続ができる場合のみ、このタスクが実行されるようになります。 ということで、今現在これら二つの設定を行ってVMware Serverを快適に使用しています。便利ですねー。 |
| 2008-11-25 16:50 |
Doctrineのアクセサとオーバーライドについて
小川です。WEB+DB PRESS Vol.46のプレゼントで応募した「はまちちゃんのセキュリティ講座の生イラスト&直筆サイン入り色紙」が当たってしまいました。感激です。ありがとうございます。 先月末に第2回symfony勉強会があり、そこでDoctrineについて簡単に発表を行ってきました。 そこでDoctrineのアクセサ(Getter/Setter)について色々と疑問を抱いてる方がいらっしゃったので、今日はそれについてまとめてみようと思います。 まず、DoctrineのGetterがどのようなものかを解説していきます。 基本的に僕はDoctrineを単体ではなくsymfonyとあわせて使っているので、sfDoctrinePluginを使っていることを前提として進めていきます。 またDoctrineは1.0系を想定しています。 Doctrineのプロパティには以下のようなアクセス方法があります。
上記の4種類があります。結論からいうと、上記はすべて同じ挙動をとります。 では具体的にどのような挙動をとるかを説明していきます。 まず、Productクラスを例に、継承構造をさかのぼってクラス定義を並べると、
上記のようになっています。ここでキモになるのがDoctrine_Accessクラスです。 Doctrine_Accessクラスは何をやっているかというと、No.1とNo.2の形式でアクセスしてきたとき、すべてNo.3のget('price')を呼び出すようになっています。 そしてDoctrine_Recordクラスにアクセサの実処理が記述されています。 get()メソッドの定義は以下のようになっています。
|
