SlideShare a Scribd company logo
QPlanetの作成に挑戦中
CUIもQtで行こうよ
13年7月13日土曜日
自己紹介
Twitter :hermit4
職業 : 文系出身のプログラマ
所属   :フリーランス
分野   :最近何でも屋の雰囲気
最近の興味 : プライベート時間の作り方
最近の課題 : 勉強時間の確保
13年7月13日土曜日
最後の関東Qt勉強会では
13年7月13日土曜日
QtでCUIってぶっちゃけどうなの?
正規表現が使えます
Write-on-Copyなコンテナが使えます
文字列ならQString最高
豊富なマルチスレッド機能
シグナルやスロットを使ったイベントドリブンな実装も
13年7月13日土曜日
ところで、Qtユーザー会のページには
Planet Qt JP
というページがあります
登録されているブログから
記事を転載してくれています
13年7月13日土曜日
ところで、Qtユーザー会のページには
まぁ、名古屋の方がお二人も
いるので、ご存知かとも思い
ますが・・・・。
13年7月13日土曜日
Planetとは
Pythonで書かれたFeed aggregator
投稿者のFeed URLをリストに登録しておく
cron等で定期的に動作させる
最新のFeed情報から1枚の静的なWebページを作成する
http://www.planetplanet.org/
13年7月13日土曜日
一応、久々にブログにも記事を載せてみたのですが
自分のページでは、
Slide Shareが表示され
ましたが、Planetでは
消されていました。
残念ながら朝木さん
の投稿で消えていて
見せられませんが
13年7月13日土曜日
そのうえ・・・
大事なブロガーが一人参加してないから・・・
13年7月13日土曜日
これはQtで作り直すしか無い!
あたしって、ほんとバカ
13年7月13日土曜日
おわび
XQueryの勉強を初めたばかりなので、XQueryの方はダメダ
メかも
まだ完成していません。モクモク時間が取れればなんとか
13年7月13日土曜日
ところでFeedって何?
Feedとはウェブサイト、特にブログやニュースサイト等のコンテ
ンツの概要もしくはコンテンツ全体を配信用に加工した文章のこ
と。またはそのファイルフォーマットを言う
(Wikipediaより抜粋)
まぁ、RSSとAtomとをひっくるめた呼び名だと思えば良いのか
も。
Aggregateとは、集める、集約するなどといった単語なので、
Feed AggregatorとはFeedを集約するツールという意味になりま
す。
13年7月13日土曜日
ところでRSSって何?
1997年にScriptingNews開発
1999年にNetscape社がMy Netscapeチャンネル登録用にRDFベースのRSS 0.90を公
開
ScriptingNewsから幾つかの仕様を取り入れ独自のXMLベースのRSS 0.91を公開
RSS-Devワーキンググループからの提案で、シンプルなコアと拡張を分けたRDFベー
スの RSS 1.0が開発
しかし、なぜ機能を後退させるんだかわけわからんといったRSS 0.91の方向を押し
ていた人たちがRSS 0.92以降の開発を継続
RSS 0.91以降の仕様と互換性を持った高機能なRSS 2.0が策定
もともとScriptingNewsベースの仕様とRDFベースの仕様とでRSSの名称のままごた
ごた揉めていて、わけわからない状態だったので、一般的になるまでだいぶかかっ
たように記憶しています。
13年7月13日土曜日
ところでAtomって何?
Atomは主にイカの2つを示しているとの事です。
Atom配信フォーマット(RFC 4287)
Atom出版プロトコル(RFC 5023)
今回の件と密接に関係するのは、配信フォーマットの方になります。
まぁ、要するにRSSの混乱に嫌気がさした人たちが作ったもので、イカのモットーを上
げているらしいです(Wikipediaの話でまだ大元の出典は調べてません)
特定のベンダーに依存しない
すべての人が自由に実装できる
誰でも自由に拡張可能である
仕様を明確かつ詳細に定義する
13年7月13日土曜日
結局どれを対象にすればいいのだろう・・・。
まぁ、一応3種類に対応していればなんと
かなりそうな感じ
RSS 1.0
RSS 2.0
Atom 1.0
13年7月13日土曜日
RSS 1.0の例
13年7月13日土曜日
RSS 2.0の例
13年7月13日土曜日
RSS 2.0の例
13年7月13日土曜日
注意事項
Chromeで見てるから奇麗に見えるけど、ネットから
落ちて来るデータの一部はエンティティ文字で構成
されています。XMLですから。
<description>&lt;p&gt;
Qt Meta-object Language(以下 QML) という言語を使用したウェブフレームワ
ーク &lt;a href="http://silk.qtquick.me/" target="_blank"&gt;Silk&lt;/a&gt; の
0.0.1 をリリースしました。
&lt;/p&gt;
&lt;p&gt;
13年7月13日土曜日
あれ、Feedって全部XMLじゃね?
実はQtには便利なXMLの実装が色々入っています
QtCore ModuleのQXmlStreamReader/Writer
QtXml ModuleによるSAXとDOMの実装
QtXmlPatterns ModuleによるXQueryの実装
13年7月13日土曜日
XQueryがあるじゃなイカ
XQueryはXMLをデータベースとして操作するクエリ言語
XPath 2.0とXSLT 2.0を内包している
XPath2.0はXML中の特定の要素を指し示す
XQueryは要素の中の特定の条件のデータを抜き出し
XSLT 2.0 は、XMLを変換する
13年7月13日土曜日
例えば、XPathでたすくさんのfeedのDescriptionを抜く
#include <QCoreApplication>
#include <QTextStream>
#include <QStringList>
#include <QXmlQuery>
#include <QDebug>
int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
QString path = "http://qt5.jp/rss.qml";
QXmlQuery query;
query.bindVariable("path", QVariant(path));
query.setQuery("doc($path)/rss/channel/item/description/string()");
if(!query.isValid()) {
qDebug() << "invalid query";
}
QStringList descs;
if(!query.evaluateTo(&descs)) {
qDebug() << "eavaluate error";
}
foreach (QString desc, descs) {
QTextStream(stdout) << desc << endl;
}
return 0;
}
13年7月13日土曜日
例えば、XPathでたすくさんのfeedのDescriptionを抜く
<p>
Qt Meta-object Language(以下 QML) という言語を使用したウェブフレームワーク <a href="http://silk.qtquick.me/"
target="_blank">Silk</a> の 0.0.1 をリリースし
ました。
</p>
<p>
2012年の秋から少しずつ実装を進めてきた Silk ですが、<a href="/qt-5-1-released.html">Qt 5.1 のリリース</a> に合わせて初め
てのリリース 0.0.1 を公開しました。
</p>
<p>
<a href="http://silk.qtquick.me/" target="_blank"><img src="/upload/62/silk.png" width="517" height="207" /></a>
</p>
:
:
13年7月13日土曜日
XQueryを外部ファイルにして結果をファイルに出す
#include <QCoreApplication>
#include <QTextStream>
#include <QStringList>
#include <QXmlQuery>
#include <QXmlSerializer>
#include <QFile>
#include <QDebug>
int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
QFile input("qplanet.xq");
QFile output("index.html");
input.open(QIODevice::ReadOnly);
output.open(QIODevice::WriteOnly);
QString path = "http://qt5.jp/rss.qml";
QXmlQuery query(QXmlQuery::XQuery10);
query.bindVariable("path", QVariant(path));
query.setQuery(&input);
if(!query.isValid()) {
qDebug() << "invalid query";
}
QXmlSerializer serializer(query, &output);
if(!query.evaluateTo(&serializer)) {
qDebug() << "eavaluate error";
}
return 0;
}
<html>
<head>
<title>Planet Qt JP Blogs</title>
</head>
<body>
<div id="contents">
{
for $i in doc($path)/rss/channel/item
return
<div class="entry">
<h2><a href="{string($i/link)}">
{$i/title/text()}</a>
</h2>
<div class="entry-contents">
{string($i/description)}
</div>
</div>
}
</div>
</body>
</html>
13年7月13日土曜日
というわけでCUIでもQt使ってみませんか
正規表現が使えます
Write-on-Copyなコンテナが使えます
文字列ならQString最高
豊富なマルチスレッド機能
シグナルやスロットを使ったイベントドリブンな実装も
XMLも機能豊富!
13年7月13日土曜日

More Related Content

PDF
Qt小技(修正版)
PDF
QtとC++でGUIプログラミング
PDF
プロ生ちゃんbotを作ろう!
PDF
Hubotで遊ぶ
PDF
Hacking Ruby with Python
PDF
Tickライブラリで遊ぼう(C++)
PDF
社内Lt
PPTX
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Qt小技(修正版)
QtとC++でGUIプログラミング
プロ生ちゃんbotを作ろう!
Hubotで遊ぶ
Hacking Ruby with Python
Tickライブラリで遊ぼう(C++)
社内Lt
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする

What's hot (20)

PDF
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
PDF
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
PDF
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
ODP
底辺webプログラマが今更git語ってみた
KEY
hubotで快適BOT生活
PDF
とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門
PDF
Pythonと出会ったデザイナーの話 #PyLadiesTokyo
PDF
GoPiGo2で遊んでみた
PDF
Lisp tutorial for Pythonista : Day 1
PDF
mrubyのfiberを試してみた
PDF
This is Tsuru.
PDF
Make a graph at Qt(used Qwt library)
PDF
すごい constexpr たのしくレイトレ!
ODP
LKFT作ってみた
ODP
20130608 git-3
PDF
Crucible @ M3, Inc.
PDF
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
PDF
Qt creatorでremote_debug
PDF
Gitoriousをubuntu 10.04 LTSへインストール
PPTX
ゼミGit
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
底辺webプログラマが今更git語ってみた
hubotで快適BOT生活
とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門
Pythonと出会ったデザイナーの話 #PyLadiesTokyo
GoPiGo2で遊んでみた
Lisp tutorial for Pythonista : Day 1
mrubyのfiberを試してみた
This is Tsuru.
Make a graph at Qt(used Qwt library)
すごい constexpr たのしくレイトレ!
LKFT作ってみた
20130608 git-3
Crucible @ M3, Inc.
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
Qt creatorでremote_debug
Gitoriousをubuntu 10.04 LTSへインストール
ゼミGit
Ad

Viewers also liked (20)

PDF
Amebaアプリ QAの歴史(サイバーエージェント関根様)
PDF
関西Qt勉強会 ごーるでん 発表資料
ODP
Qt Widget 入門① -様々なHello World編-
PDF
Qt5 の新機能 2012/12/15
PDF
How To Redmine !
 
PDF
Qt + MSVC でビルドする時に Qt Creator のデバッガを使う方法
PDF
Redmine + MySQL 応答性能の調査結果と対策
PPTX
インフラエンジニアから見たRedmine redmine.tokyo #9
PDF
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
PPTX
講演2 実例に基づくRedmine管理者入門 r2
PDF
Oftec Lightning Talk 第7回 最近触ったLinuxディストリビューションの紹介
PDF
第6回品川Redmine勉強会発表資料「開発基盤としてのRedmine~Redmineをカスタマイズするポイント」
PDF
JaxaのRedmineモデル
PDF
発見から納品へ
PDF
Redmineプラグイン導入・開発入門
PDF
OpenStackもオンプレミスもまとめて一元監視 Hatohol+Zabbixでハイブリッドクラウド監視を実現 - OpenStack最新情報セミナー...
PDF
Redmine勉強会vol.1 なぜ組織にはドキュメンテーションが必要なのか
PDF
ある工場の Redmine 2016
PPTX
Redmineサーバ統合事例
PDF
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
Amebaアプリ QAの歴史(サイバーエージェント関根様)
関西Qt勉強会 ごーるでん 発表資料
Qt Widget 入門① -様々なHello World編-
Qt5 の新機能 2012/12/15
How To Redmine !
 
Qt + MSVC でビルドする時に Qt Creator のデバッガを使う方法
Redmine + MySQL 応答性能の調査結果と対策
インフラエンジニアから見たRedmine redmine.tokyo #9
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
講演2 実例に基づくRedmine管理者入門 r2
Oftec Lightning Talk 第7回 最近触ったLinuxディストリビューションの紹介
第6回品川Redmine勉強会発表資料「開発基盤としてのRedmine~Redmineをカスタマイズするポイント」
JaxaのRedmineモデル
発見から納品へ
Redmineプラグイン導入・開発入門
OpenStackもオンプレミスもまとめて一元監視 Hatohol+Zabbixでハイブリッドクラウド監視を実現 - OpenStack最新情報セミナー...
Redmine勉強会vol.1 なぜ組織にはドキュメンテーションが必要なのか
ある工場の Redmine 2016
Redmineサーバ統合事例
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
Ad

Q planet