«Prev || 1 | 2 | 3 | 4 | 5 || Next»

文字化けわけ分からん

DBをmysqldumpして,エディタで見てみたらちゃんとUTF-8でデータが入っています。
それなのにRailsでは文字化け。
$KCODEもdatabase.ymlのencodingも指定しているのになあ…
ほかに何かあったっけ?


22 Nov, 2007 | General | | Andy | Leave comment - 0 -

そんなわけで

RadRailsのSubversion対応はできました(Thanks to hsurさん)。で,結局夕べは眠くて,コントローラをローカル変数で渡したときに動かないというバグだけ取って寝ました。昨日は睡眠時間4時間オーバー。

全体の進捗を書いておくと,パーサの基本部分はできていて,後はスキンやテンプレートでparse_●●というのを書いていけばいい状態。次に与えられたURLに対して動作を振り分けるところを作っていて,それに対応するURL生成をテストしているところ。これがうまく行ってcreateLink系の部分ができると基本的にブラウズはできる形になります(検索除く)。

その後は,認証系を作り,コメントなどの更新系の作業に移る計画です。

21 Nov, 2007 | General | | Andy | Leave comment - 0 -

もろもろ

●パーサをクラスでなくてモジュールにするかという件。パーサが複数になって連動したりすると名前のコンフリクトとか絶対に起きるだろうなと思い,やっぱり却下。今はコントローラをグローバル変数に入れているのが,事実上は問題なくてもちょっと気持ち悪いところ。そこをパラメータで渡してインスタンス変数にしようかと。でも,なぜかエラーが出ます。グローバル変数はあまり使いたくないのだけど,プラグインで様々な機能を入れていくときに結局必要になるのではないかという気もします。

●プログラムを書くのは夜中12時くらいから2時くらいまでなのですが,デバグなどしているとついつい時間オーバーしてしまいがち。朝7時に起きることを考えると3時までには寝るようにしないときついのですが。さらに,夜1回1時間くらい寝てしまってから,起きて作業をすると,目が冴えてしまって,今度は眠りに着くのが大変。夕べも結局睡眠時間が3時間くらいに。こうなると昼間の仕事に影響が出てしまうので,一回寝てしまった日はプログラム書かないとか,デバッグしないとか,ルールを決めないと体壊しそうです。

●Subversionの使い方が,相変わらずよく分かっていません。今はローカルにtrunkだのbranchだののツリーを作って,サーバーのリポジトリと同期させ,trunkの下だけをInstantRailsの下にコピーして作業しています。作業内容をツリーに入れるときに,どこを更新したかちゃんと覚えていないので,更新忘れのファイルなどが出現しがちです。それから,他の場所で更新したものを反映するときも,ローカルのツリーでどこが変わったのかを忘れてしまい,作業ディレクトリに反映し忘れてしまうことがあります。RadRails(Eclipse)にはSubversionの機能があるというのですが,使い方が分かっていません。作業ディレクトリから直接リポジトリと同期させるのでしょうか。

●このブログ,カテゴリーもちゃんと作っていないいい加減な構成。基本的に作業メモだからいいんだけど,実際には動作チェックもここのデータを使っているので,もうちょっとまじめに作っておかないとちょっと大変。MCやTagEXも入れようかなあ。あ,既に入っているのだけどつかってないだけでした。

20 Nov, 2007 | General | | Andy | Leave comment - 5 -

実装方針で迷い

URLによってディスパッチ先を決めていくのは,割と簡単な作業なので,淡々と進めています。
それと並行して,各スキンタイプによる処理を加え始めているのですが,ちょっと迷い。

今のNucleusの場合,スキンタイプごとに,サポートしているスキン変数を配列に持っていて,それを参照して実行するかどうかを決めています。その部分の実装をどうするか。Nucleusと同じにしてもいいのですが,あまり格好よくありません。スキンタイプごとにサブクラスを作ってそこで対応するのがスマートですが,今度は複数のスキンタイプでサポートしているときにどうするか,という問題があります。

全部のタイプでサポートしているならば親クラスで定義してしまえばそれで済むのですが,そうでない場合,各スキンタイプに書くのは無駄です。Railsにはdelegateという機能があって,特定のメソッドをインスタンス変数に実行させることができますが,そのためだけに,他のスキンタイプ用のオブジェクトをインスタンス変数に持つのもどうなのか。まあ,それでもこれが一番きれいな気がするので,多分それにするでしょう。

これに関連してもう1つの実装として考えているのがパーサの処理部分をクラスではなくモジュールにしてしまって,コントローラにmix-inすること。これから先,Railsのコントローラで提供されている様々な機能(例えばキャッシュ)を利用していくためには,処理をなるべくコントローラ内でするのがいいのではないか,という発想です。

モジュールにした場合に機能的に問題があるのかないのか。その場合,サブクラスとして考えている分も,単なる別のモジュールという扱いになって,それぞれmix-inすることになります。一応それでも動きそうな気はするのですが,検証はしていません。まだ,モジュールの扱い方には慣れていないので,ちょっと危険な感じもします。

19 Nov, 2007 | General | | Andy | Leave comment - 0 -

メモ

後で,クラスごとの役割分担を考えるときに必要かと思って,「Ruby on Rails入門」をみながらページスイッチの機能を一応入れてみようとしてみたのですが,うまく動かず。

少し調べていたら,この問題の解決にはつながっていないのですが,そもそもこのPaginationの機能自体がなくなって,will_paginateあるいはpaginating_findプラグインを使うとのこと。will_paginateの方が標準推奨のようですが,吐き出すSQLがいけてないらしく,どちらを使うかちょっと悩ましいところです。

どちらもモデルに組み込む形なので,使うのは比較的簡単そうな気がします。ということで,これは先送り。

Ruby on Rails入門―優しいRailsの育て方
Ruby on Rails入門―優しいRailsの育て方
西 和則
秀和システム
2006/08
¥ 2,940 (定価)
¥ 2,940 (Amazon価格)
29pt (Amazonポイント)
 (私のおすすめ度)
★★★☆ (Amazonおすすめ度)
単行本
通常24時間以内に発送
(価格・在庫状況は11月21日 8:17現在)



18 Nov, 2007 | General | | Andy | Leave comment - 0 -

一応パースはしています

文字化け問題は完全には解決していませんが,とりあえずいくつかのMySQLのうちちゃんと動くものもあったので,問題は当面たなあげということで進めます。

ということで,一応進捗はここまで。

画像サンプル
テンプレート変数など,まだ少ししか実装していないので<%,%>だらけですが,それでもタイトルや本文が表示されると,すこし格好が付きました。

リンク系をちゃんとしないと,トップページを表示する以外,何もできないので,次はコントローラのディスパッチの設定をして,それにあわせてURL生成をするという作業に移ります。

コードは暫定的なのばかりなので,特に載せませんが,テンプレートのパーツにアクセスする部分を変えたので,そこだけ書いておきます。

  def [] partname
    begin
      @parts[partname].to_s
    rescue
      if !@parts
        @parts = Hash.new
         partsarray = TemplatePart.find(:all, :conditions=>["tdesc = ?", self.tdnumber])
         partsarray.each do |part|
           @parts[part['tpartname']]=part['tcontent']
        end
      end
      @parts[partname].to_s
    end
  end

これでテンプレート・オブジェクトに対してtemplate['ITEM']みたいな形でパーツを取ってこれます。ブログを展開するとき,連続していくつかのパーツを使うため,一回のDBアクセスでそのテンプレートの内容を全部取り込むようにしました。Rubyは例外処理が簡単に書けるので,こういうのはやりやすいです(これくらいなら例外処理使わなくても構いませんが,この方が読みやすいと思います)。スキンの場合は,一回のアクセスで使うパーツはたいてい1つなので,今のところこの処理は入れていません。ただ,スペシャル・スキン・パーツを多用するようになってきたら,入れた方がいいかもしれません。

それから,パートのデータを返すところにわざわざto_sを付けているのは,そのパートのデータがないときに,nilの代わりに空文字列を返すためです。こうしておかないと,文字列にnilを連結させてしまいエラーを起こすことになります。

17 Nov, 2007 | General | | Andy | Leave comment - 0 -

文字化けorz

パースはなんとかしてくれるようになってきたものの,文字化け問題が再発していることが判明しました。phpMyAdmin上ではちゃんと見えているのですが。

ちなみに
show variables like 'char%'
すると
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
とでます。サーバーのlatin1というのが怪しいのかなあ。
(default-character-set=utf8を設定したらutf8になりましたが文字化けは変わらず)
PHPにしろMySQLにしろ,文字コードの自動変換ほど余計なお世話な機能はないと思います。

こういうので作業が止まるのが一番嫌です。

16 Nov, 2007 | General | | Andy | Leave comment - 0 -

「落ちる」RadRails

Railsの開発はRadRailsを使っているのですが,昨晩は編集中に3回もハングアップしてへこみました。しかも毎回,マシンをリセットするしかないという派手な落ち方。

RadRailsのエディタは括弧やクォーテーション・マークなど補完してくれるのですが,間違ってクォーテーション・マークを入れてしまい,すぐに戻って消そうとするとそこでハングします。昨日編集していたファイルの特殊事情なのかどうかは不明です。

後から考えたら2回ハングして時点で,RadRails使わず,テキスト・エディタに切り替えればよかったです。

14 Nov, 2007 | General | | Andy | Leave comment - 0 -

URL周り

今日はちょっとコードは書くのを休んで,NucleusのURL周りを調べていました。実はあんまりちゃんと
知らなかったりして(^^;)。

スキンタイプパラメータblogidパラメータcategory修飾ページング
indexなし指定可(省略時デフォルト)
itemitemid指定可(省略時デフォルト)×
archivelistblogidあるいはなし指定なし×
search検索文字列指定可(省略時デフォルト)×
membermemberid指定可(省略時デフォルト)××
archive年月指定可(省略時デフォルト)
errorURLとしては使われない指定なし××
imagepopupmediaファイルの位置指定可(省略時デフォルト)××


スキンタイプと関連するパラメータ周りをまとめるとこのようになります(多分)。一番右のページングは,ページスイッチを付ける意味があるかどうか。ページスイッチの機能はコアに持たせる予定なので。

これ見ると,archivelistのところだけブログの指定方法が変則ですね。

URL周りはNucleusコアとの互換性はそれほど重視していません。FancyURLに似た形にはすると思いますが違うところも出てくるかもしれません(要は実装しやすい形でということで)。最終的にはCustomURLと互換にするつもりです。

注:archiveとarchivelistで逆になっているところなどがあったので修正しています。

13 Nov, 2007 | General | | Andy | Leave comment - 0 -

<%image%>と<%popup%>

コードは書いていますが,まだ動作テストしていないので,あらましは明日あたり。
テンプレートなどの細かい実装に移っているので,ようやく今のNucleusのコードを調べたりしています。

パーサ書いているときに気付いたのですが,今のNucleusのパーサーの作りってかなりいい加減。
実は<%と%>って全く区別されていないってご存知でしょうか。試しにスキン中で
%>parsedinclude(head.inc)<%
などと書いてしまっても問題なく動きます。今回のパーサはネストを実現したかったこともあり,そのあたりはきちんと見ています。

あと,一般にはNucleusのパーサってスキンとテンプレートの2段階だと思われていると思いますが,実際にはその下に,アイテム・レベルとイメージ,ポップアップ,メディア処理の2段階が入り,計4段階で動いています。Nucleus3.3ではプラグインのアイテム変数が利用できるようになっていますが,アイテムにはもともと<%image%>などを処理するためにパーサを適用していたので,そこを少し変えるだけでこの機能は追加できました(記憶になかったけど,この部分は僕が書いたコードが採用されているようです)。

最後の段階のイメージなどの処理はテンプレートの中のIMAGE_CODEなどの内容がパースされます。ただし,他の段階のようなフルレベルのパースではなく,同じ名前の変数と置き換えるくらいの単純なやり方です。ちなみにこのテンプレートを書き換えるとプラグインを使わなくてもLightBox.jsを呼び出す程度のものは実現できます。このあたりの自由度は,あまり活用されていない気がしますが,どうでしょう。

というわけで,このあたりの処理を,今は書いています。

12 Nov, 2007 | General | | Andy | Leave comment - 0 -
«Prev || 1 | 2 | 3 | 4 | 5 || Next»

© 2007 yoursite.com | Designed by DesignsByDarren
Ported to Nucleus CMS: Suvoroff