2013年10月8日火曜日

QPlanetのコード公開そして後悔

ご無沙汰しておりました隠者です。

本当は勉強会参加直後にブログを書く予定だったのですが、ここ最近いろいろと立て続けにあった関係で、ずるずると先延ばしという相変わらずの恥ずかしい状況でしたが、寝付けないのを良いことに朝4時にこそこそ書いていたりします。

さて、名古屋の勉強会ネタにと調べ、そしてQtユーザー会@東京の1,2,3の時間を使ってこそこそやっておりました、QtでPlanetを作ってみよう計画は、一応いろいろと問題を残しながらある程度のところまできました。


本家の画像とスタイルを真似させていただいて、それらしい格好のページを作れるようにはなりました。

ソースコードも、中途半端で使い方とかビルド方法とかのドキュメントが全く用意できていないかなり恥ずかしい感じのコードなのですが、とりあえずgithubに登録しておきました。

そもそもが、Qtを使ってとは名ばかりで、ほとんどXQueryで書いています。
Qtには、QXmlPatternsというモジュールがあり、XQueryが使えるようになっているのですが、どうもいまいち何に使うのか謎が多く、今まで遠くから眺めていました。

でまぁ、ネタ的に利用してみたのですが、コレが使いにくい、使いにくい。
XQueryのコードは何とも気持ち悪い感じ(*個人的な感想です)になってしまいますし、おまけに、QXmlPatternsのよく落ちる事・・・。ちょっと変な事をすると、すぐにSIGSEGV。

bindVariable系は鬼門な感じで、思うように動作せず、結局いびつな感じの処理の仕方になっています。

RSSから必要なデータを抜き出してHTML化するわけなのですが、まぁ、XMLを扱う言語ですので、変換途中に、一部を除いてCharacter Referenceが扱えません。©とか出てくるとエラーになります。おまけに、RSSにはHTMLのタグが参照文字に置換されて配信されていたりするわけですが、この置換をQXmlPatternsの内部で処理できず、Qtのコード側にひっぱってきて変換をかけるという情けない感じになってしまいました。

Qt4.8とQt5.1で試しましたが、どちらも似たような感じで、この落ち方からすると、たぶん利用者は少ないのだろうなぁと感じています。

元Nokiaの某たすくさんには、この無駄な努力をかわいそうな人を見る目で見られるし、泣きながら作業する感じでしたね。

まぁ、隠者は不勉強で、XQuery自体を使うのが初めてだったせいもあるでしょう。がんがん使っている人がきちんと考えて書けば、もっときれいで、もっと効率的で、もっとすっきりと、QXmlPatternsでさっくり動くQuery文が書けるものだと信じたいところですが・・・・まぁ、はやらないのにはそれなりの理由があるんですかね。

無理にQXmlPatternsですべてやるという方針は捨てて、QXmlPatternsで必要な情報を拾い出す事だけに専念して、メインの変換処理は、すべてQtで実装さえすれば、たぶん1日かからずに終わったでしょうねぇ・・・とほほ。

公開しておいてなんですが、実はRSSに相対アドレスが埋め込まれていたりするものがあるので、この変換のためには、HTMLに変換した後で、src属性を修正しなくてはならないのですが、前述の通り、文字参照の扱いがQXmlPatterns内部では処理できず、かなりいただけない状況です。

時間ができたら、やっぱりXQueryをあきらめるという方針で作業してみようかなと思っています。

いや、XQueryでできるだろ!って人は是非直して見てください。

P.S.
いや、QXmlPatternsを直せよ!って心の声は聞かなかった事に・・・。

1 件のコメント:

  1. The Mini features a superbly produced consumer guide and entry to Prusa Labs’ prodigious assist assets and boards. It comes with the company’s PrusaSlicer software, different to|an different selection to|a substitute for} the well-known Cura open-source 3D-printing program. Dremel is best identified for its Freediving Fins rotary energy instruments than its 3D printers, but the company put the identical care and craftsmanship into the DigiLab 3D45 that it has with its extra traditional products. The 3D45 consistently output good-quality prints in our testing.

    返信削除