2004年7月アーカイブ

やっぱ書いておきます。

先日リリースされたMT3.0にてバグを発見しました。バグとかいってもそんな大袈裟なものではなく、コーディングミスなのですが。

影響が出るのは、トラックバックエントリ一覧から削除をするときで、投稿者のみが自分が投稿した内容のトラックバックを削除することは当たり前として、管理者でログインした場合通常なら全てのトラックバックデータの削除権限が与えられていると思います。
ですが現状ですと管理者でも通常投稿者と同様の操作しか出来ず、トラックバック内容は表示されてもチェックボックスが表示されず、削除ができません。

そこでちょっとソース内をチェックしてみたのですが、CMS.pm内にて(多分)記述ミスと思われるものを発見、そこを修正したら正常に管理者でも表示されるようになりました。下記がそのdiff部分です。

$> diff -c CMS.pm CMS.pm.org
*** CMS.pm      Thu Jul 29 18:42:37 2004
--- CMS.pm.org  Wed Jul 28 16:32:30 2004
***************
*** 1485,1491 ****
                if (my $ts = $obj->created_on) {
                    $row->{created_on_time_formatted}
                       = format_ts("%Y.%m.%d %H:%M:%S", $ts);
!                   $row->{has_edit_access} = $perms->can_edit_all_posts
                    || $app->{author}->id == $entry->author_id;
                }
            }
--- 1485,1491 ----
                if (my $ts = $obj->created_on) {
                    $row->{created_on_time_formatted}
                       = format_ts("%Y.%m.%d %H:%M:%S", $ts);
!                   $row->{has_edit_access} = $perms->{can_edit_all_posts}
                    || $app->{author}->id == $entry->author_id;
                }
            }
***************
*** 2221,2227 ****
                format_ts("%Y.%m.%d %H:%M:%S", $ts);
        }
        $row->{has_edit_access} =
!               ($perms->can_edit_all_posts
                 || $app->{author}->id == $entry->author_id);
      }
--- 2221,2227 ----
                format_ts("%Y.%m.%d %H:%M:%S", $ts);
        }
        $row->{has_edit_access} =
!               ($perms->{can_edit_all_posts}
                 || $app->{author}->id == $entry->author_id);
      }

このことをSixApartへメールにて報告したところ、サポート担当様からは期待していた返答が返ってきませんでした。(- -;;
そりゃ確かに技術サポートは現在行ってはいないのでしょうけど、あまりにもにべもない回答でちょっとがっくししてしまいました。

その後別の方からメール連絡がありましてPerlのバージョンに依存するところがあるとのことですのでPerlのバージョンと使用OSのご返答をさせていただきました。
使用しているPerlは5.8.4でほぼ最新のもの(この時点では最新は5.8.5)だと思いますが、OSについてはRedHat6.2JなのでOSのみが心配なのですが、とはいってもCMS.pmをみていただければわかると思うのですが、明らかなコーディングミスかと思っております。

MTを法人向けにも提供していくとのことでライセンスなども発表しているので、もう少しがんばっていただければと思います。

MTTrackbackRanking

| コメント(0) | トラックバック(4)
先のエントリで書いたのですが、トラックバックランキングのプラグインを紹介します。 ベースはyujilogさんで紹介されているものとなっております。

概要・機能

トラックバックされたページを、トラックバック数でランキング表示します。 機能は下記のようになっております。
  • 総トラックバック数が表示できます
  • ランキングのソート方法を昇順、降順に設定できます
  • 表示件数を設定できます
  • やり方次第ではJavaScriptによるリスト配信も可能です

ダウンロード・インストール

ダウンロードしたアーカイブを展開して、MTのpluginsディレクトリへコピーしてください。

設定方法

MTTrackbackCount 今までの総トラックバック数を表示します。これは単体でも使用できます。
MTTrackbackRankingEntries トラックバックランキングエントリリストの開始タグです。下記が属性一覧です。
  • sort_order:昇順(asc)、降順(desc)を指定できます。
  • lastn:表示件数を設定します。
MTTrackbackRankingEntry トラックバックランキングエントリの開始タグです。 この中では通常のMTEntriesで書かれているタグも使用できます。
MTTrackbackRankingEntryRanking エントリのランキングを表示します。 MTTrackbackRankingEntry内で使用されないとエラーとなります。
MTTrackbackRankingEntryCount エントリのトラックバック数を表示します。 MTTrackbackRankingEntry内で使用されないとエラーとなります。

設定例

<h3>総トラックバック数: <$MTTrackbackCount$></h3>

<div class="trackback-ranking">
<MTTrackbackRankingEntries lastn="10" sort_order="desc">
<MTTrackbackRankingEntry>
[<$MTTrackbackRankingEntryRanking$>]
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
(<$MTTrackbackRankingEntryCount$>)<br />
</MTTrackbackRankingEntry>
</MTTrackbackRankingEntries>
</div>

注意点

  • かなり大雑把に作ったので、バグがあると思います。
  • 全エントリから調査するのでエントリ数が多いと結構生成に時間がかかると思います。

今日は仕事でMTのプラグイン作りをしていました。
とはいっても最初からつくるのではなくて、人様が作ったものを改良したものなのですが...

ひとつは自分のBlogにトラックバックしてくれたエントリのランキングを表示するもので、
これはyujilog様で作られているCPEntriesプラグインを改良したものです。今日は時間がないので改めてアップできればと思います。

あとはカテゴリIDを指定することで、そのカテゴリのエントリ数を表示するものなのですが、これはまだ開発中です。

なんだかプラグインだけの1日でした。

夕刊フジオープン

| コメント(0) | トラックバック(0)

夕刊フジにてBlogサイトをオープンしました。
今まで買ったことなかったけど、結構面白い内容なんですね。

只今オープン記念のプレゼントも実施中とのこと。

トラックバックで

| コメント(0) | トラックバック(0)

昨日なのですが、変なトラックバックがされていました。
Blogをはじめてからスパムコメントは幾つかあったのですが、スパムトラックバックは初めてでした。
何か狙われているのか??、と思ってしまうほどで昨日1日で13件ありました。

トラックバックは自由ですし、コメントも自由なのでいいのですが、スパムをするのはいやですよね。
こうなってくると、結局コメントやトラックバックはできません、ということになってきそうだし。
Blogをやっている意味がなくなってしまいます。

スパムやって楽しんでいる人が、何だか寂しく見えてしまうのは私だけでしょうか...

ちょくちょく、本当に稀なのですが、本ページを見て頂いて情報を参考にしていただいている方々がおりますと、大変うれしく思うのと反面、拙い文章、内容で大変申し訳なく思います。

私も勢いと忘れないようにとのメモ程度で描いているので、実行環境の情報や肝心な情報が抜け落ちていたりと、かなり不手際が目立っております。

とはいっても技術情報の共有は必要なことだと思いますので、出来る限りかければと思います。

かみさん不在で...

| コメント(0) | トラックバック(0)

今日から月曜までかみさんが社員旅行で出かけているので、ひとりぼっちです(笑)。
とはいってもマシンも修理に出さなければならなくなったし、あまりいい3連休とは言えそうもありません...
とりあえずは散髪に行ったり、買い物に行ったりしようかと思っております。

さてさて、サーバ移転をしてから1週間程度、OSの入れ替えなども行って結構大変でした。
結局RedHat9にしてしまいました。マシンのスペック発表しろ、という御人も約1名ありましたのでとりあえず下記がそのスペックです。

CPUCeleron2.8GHz
Memory1GB (512MB x2)
HDD160GB
マザーボードなどドスパラで購入したけどよく覚えていません

ちなみに今回はパーツで購入したのでいわゆる組み立てマシンとなっています。普段なら絶対にしないんですけどね。

購入先情報:

Muramasa故障...

| コメント(0) | トラックバック(0)

私が利用しているMuramasaが故障してしまいました。

サポートに連絡して色々とやってみたのですがどうやらハード障害っぽいので明日午前中に修理で引き取りに来てもらうことになりました。暫くノートがない生活になりそうです。いいのか悪いのか...

Hibernateでleft join

| コメント(0) | トラックバック(0)

HibernateMySQLのleft joinを実装しました。
通常行う場合はそんなに困らないのですが、many-to-manyやone-to-manyなどの関連性がないテーブルどうしをleft joinさせるにはかなりの工夫が必要です。

前提としてテーブルAとテーブルBのHibernateマッピングファイル(A.hbm.xml, B.hbm.xml)はあって、これに対するJavaBeansがあるものとします。下記がそのサンプルテーブル例です。NOT NULLなどはとりあえず書いただけで気にしないでください。また、hbm.xmlは書く気力がないので勘弁してください。

TABLE_A:
    ID INT NOT NULL,
    NAME VARCHAR(20) NOT NULL,
    ACCESS_TIME DATE
TABLE_B:
    ID INT NOT NULL,
    EMAIL VARCHAR(256) NOT NULL

上記テーブルのBeanが下記の通り。

TableA.java:
public class TableA {
    private String id;
    private String name;
    private Date accessTime;
    // 以下setter, getter
}
TableB.java:
public class TableB {
    private String id;
    private String email;
   // 以下setter, getter
}
ではどのように実装すればいいかと申しますと、HibernateのSessionクラスにあるcreateSQLQueryを利用します。このメソッドではほぼSQLを書くのと同じなのですが、上記テーブルにて実装する場合は下記のようなSQLを書きます。
String sql = "select" +
  "a.ID as {a1}.id, a.NAME as {a1}.name,a.ACCESS_TIME as {a1}.accessTime," +
  "b.EMAIL as {b1}.email" +
  " from TABLE_A as a left join TABLE_B as b on " +
  "a.ID=b.ID" +
  " where a.NAME=:name" +
  " order by a.ID";
Query query = Session.createSQLQuery(sql, new String[] {"a1", "b1"},
    new Class[] {TableA.class, TableB.class});
query.setString("name", name);
List = query.list();

まあ結果などはさておき、上記のように書けばleft joinを実装できます。
ここで注意なのは、SQL内で書いているカラム名は実際のテーブルカラム名をかかなければならないことです。HibernateではJavaの変数名で書くのが通常ですが、この場合はSQLを書くので実カラム名でなければなりません。
では戻ってくるリストはどのようになっているかと申しますと、上記のリストを受け取ってループ処理をする例を下記に示します。

for (int i = 0; i < list.size(); i++) {
    Object[] obj = (Object[])list.get(i);
    TableA a = (TableA)obj[0];
    TableB b = (TableB)obj[1];
    // あとは何らかの処理が続く
}

このあたりはちょっと考えればわかりそうなところです。先のcreateSQLQueryでClass配列を渡しているので、その順序で配列に収められています。で、また注意なのが、left joinなのでTableBのオブジェクトがNULLで返ってくる場合もありますのでチェックする必要があります。

ここまで学習して実装するまで6時間近くかかってしまいました。
DBによってSQLの実装方法が異なる場合があるので、上記の方法をとってしまうとMySQL上では動くけど、DBが変わった場合再実装しなければならないというデメリットがあります。
できればDB設計する際にきちんとした関連を持たせた設計をしたほうがいいと思います...

なんとか移動完了

| コメント(0) | トラックバック(0)

なんとかしてサーバの移動を完了しました。
DNS/メールとWWWサーバを分けたんですけど、最初ものは試しでMIracleLinuxの評価版を入れたんですけどインストール2日でなぜかハングアップしてしまいました。泣きです。
仕方が無いので慣れているRedHat9を入れなおしました。

でもってとりあえず移動してある程度稼動してきたので大丈夫かと思います。

そういえば今週末の3連休、かみさんは社員旅行に行ってしまうので、おもいっきり暇になってしまいます。遊んでくれる人募集中です(笑)。

PlayStationページ

| コメント(0) | トラックバック(0)

こちらにてPlayStation.comの商品紹介ページを作りました。
コメントとかは何もつけていないですが、おいおいページを整えられていけたらと思います。

displaytagにてExportオプションがありまして、これでxml, csv, excel形式のファイル出力ができるのですが、あちらの方が作ったためか、日本語などの文字に対応していませんでした。正確に言うと、文字コード変換などしないということです。

自分が実装した文字コード環境はJSPはEUC-JPで表示させているのですが、Excelでダウンロードするともちろん文字化けします。そりゃそうですよね、WindowsはShift_JISですから。

で、何をしたかというと、displaytagのソースをいじりました。具体的にはdisplaytagのTableTag.javaで、この中のwriteExportメソッドを修正しました。
writeExport内でJspWriterで出力しているのですが、これを引数として渡されているHttpServletResponse#getOutputStreamで出力するようにしました。もちろんPrintWriterで文字コード指定してストリームを生成していますが。あと、勝手にタグ属性を追加して、出力文字コードと入力文字コードを指定できるようにしました。下記がその修正した箇所です。

    1126             try
    1127             {
    1128                 if (this.exportEncoding == null)
    1129                     this.exportEncoding = "Shift_JIS";
    1130                 if (this.originalEncoding == null)
    1131                     this.originalEncoding = "EUC-JP";
    1132                 PrintWriter writer = new PrintWriter(
    1133                     new OutputStreamWriter(response.getOutputStream(),
    1134                                            this.exportEncoding));
    1135                 writer.write(
    1136                     new String(exportString.getBytes(this.originalEncoding)));
    1137                 writer.flush();
    1138                 /*
    1139                 out.write(exportString);
    1140                 out.flush();
    1141                 */
    1142             }
    1143             catch (IOException e)

いっそのことdisplaytagに投稿しようかと思っていますが、勇気がないし英語読み書きできないので保留状態です。それに本当にこれでいいのかわかりませんし...

PC到着!!

| コメント(1) | トラックバック(0)

本日PCが到着しました。とはいってもパーツで購入したので組み立てたのですが。

とりあえず1時間ほどで組み立てが完了して電源を入れたところ、なんと一発で正常に立ち上がってきました。私としては珍しいことで、大体HDDが認識しないとか、CD-ROMが認識しないなどで手間取ってしまうのですが、今回はばっちしOKでした。

明日はOSインストールです。

PC買います...

| コメント(0) | トラックバック(0)

PCを新たに買うことになりました。

もとはといえばメモリを購入したはいいけど、今あるPCでは実装できなかったためで、そのメモリを使うために自作で組むことにしました。

最近マシン自体もDNS、メール、ウェブ、DBが一緒なのでかなり重くなりつつありますので、今度はDNS/メールとウェブを分けようかと思います。DBもウェブ側に持っていくかもしれませんが。

パーツが来るまで構成を考えておきましょう。

ちなみにパーツはドスパラで購入しました。

tomochika_satoをフォローしましょう
track feed BoundlessOcean
フィードメーター - BoundlessOcean
あわせて読みたいブログパーツ
人気ブログランキングへ
OpenID対応しています OpenIDについて

BlogPeople

Powered by Movable Type 4.27-ja
アダルトアニメDVD通販

このアーカイブについて

このページには、2004年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2004年6月です。

次のアーカイブは2004年8月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。