みんな大好き! Hello, World
Upcoming SlideShare
Loading in...5
×
 

みんな大好き! Hello, World

on

  • 2,244 views

 

Statistics

Views

Total Views
2,244
Views on SlideShare
2,223
Embed Views
21

Actions

Likes
2
Downloads
10
Comments
0

2 Embeds 21

https://twitter.com 20
http://paper.li 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

みんな大好き! Hello, World みんな大好き! Hello, World Presentation Transcript

  • みんな大好き! Hello, World
  • 今回のスライドはこの「Hello, World」 についてだけ 解説します
  • % vim hello.py% chmod u+x hello.py%
  • % vim hello.py% chmod u+x hello.py% ./hello.py
  • その前に ZSH
  • unsigned int 引数 タイプ タイプ0x241 001 0010 1 (00001) WC_LIST0xc02 110 0000 2 (00010) WC_SUBLIST0x083 000 0100 3 (00011) WC_PIPE0x026 000 0001 6 (00110) WC_SIMPLE0x000 WC_SIMPLEの引数0x000 000 0000 0 (00000) WC_END
  • WC_LIST 01 0010 0: Z_SIMPLE 1: Z_END 0: Z_DISOWN 0: Z_ASYNCtest -f hoge && 1: Z_SYNCfuga & 0: Z_TIMED
  • WC_SUBLIST 110 0000 11: 次のSUBLISTまで 0: WC_SUBLIST_SIMPLE 0: WC_SUBLIST_NOT 0: WC_SUBLIST_COPROCtest -f hoge && 0: WC_SUBLIST_OR... 0: WC_SUBLIST_AND
  • unsigned int 引数 タイプ タイプ0x241 001 0010 1 (00001) WC_LIST0xc02 110 0000 2 (00010) WC_SUBLIST0x083 000 0100 3 (00011) WC_PIPE0x026 000 0001 6 (00110) WC_SIMPLE0x000 WC_SIMPLEの引数0x000 000 0000 0 (00000) WC_END
  • WC_PIPE 000 0110 000011: 行番号 0: WC_PIPE_MIDtail -f hoge | ...
  • WC_SIMPLE 000 0001 引数の個数test -f hoge
  • WC_SIMPLEの引数 000 0000 00000: バッファ位置 0: 3文字以下? 0: トークンを含む?test
  • 3文字以下だと?たとえばabcが 00000 0110 0011 (c) 0110 0010 (b) 0110 0001 (a) 010 空文字用
  • さあ、これでPyQ.... いや、まだまだexecve(“./hello.py”,...) しただけ
  • do_execve_common()ファイルを開くファイルの先頭128byteを読みこむbinary handlerの探索
  • ./hello.pyだと
  • load_script#!から始まる?/usr/bin/pythonを読む/usr/bin/pythonをopenbprmを新しくして再度binary_handler探索
  • /usr/bin/python
  • load_elfELF headerを読むelf interpreterのパス取 得elf interpreterとプログ ラムを読むstart_thread()
  • ELF インタプリタライブラリのリンクを行なう「リンカ・ローダ実践開発テクニック」
  • Python/usr/lib/python2.7/site-packages/PyQt4/QtGui.soinitQtGui() sipModule = Py_InitModule(sipName_PyQt4_QtGui, sip_methods);
  • C++で書くと…int main( int argc, char **argv ){ QApplication app(argc, argv); QPushButton w( "Hello world!"); app.connect(&w, SIGNAL(clicked()), &w, SLOT(close())); w.show(); return app.exec();}
  • QPushButtonQPushButton::QPushButton(const QString &text, QWidget *parent) : QAbstractButton(*new QPushButtonPrivate, parent){ Q_D(QPushButton); setText(text); d->init();}
  • Q_D#define Q_D(Class) Class##Private * const d = d_func() QpushButtonPrivate * const d = d_func(); setText(text); d->init();
  • Q_DECLARE_PRIVATEclass QpushButton ...{Q_DECLARE_PRIVATE(QPushButton)}inline const QPushButtonPrivate* d_func() const {return reinterpret_cast<const QPushButtonPrivate *> (qGetPtrHelper(d_ptr));}
  • こういうデザインパターンを…
  • QWidget parent == 0なので Q_WINDOWになる QWidget::create() create_sys() XCreateWindow()
  • connectapp.connect(&w, SIGNAL(clicked()), &w, SLOT(close()));
  • connect実装app.connect(&w, SIGNAL(clicked()), &w, SLOT(close()));→ app.connect(&w, "2clicked()", &w, "1close()");meta-object
  • w.show()w.show(); == w.setVisible(true);type == Qt::Window? d->show_helper() show_sys() XMapWindow(X11->display, q->internalWinId());
  • Xとの通信MapWindow
  • Xのイベント処理xorg-server/dix/dispatch.c: Dispatch()入力イベント処理イベント待ちクライアントのイベント処理クライアントは複数いる
  • Need Scheduling ...
  • スケジューリング 同じ優先度なら 前回のIDとの差(& 0xff)が大きいも の スライス: 20msec 優先度上がる 40msec以上event来てなかった キー入力などが来ている 優先度下がる スライスを使いきる 一つだけが動いている時は多めに
  • Rendering.....
  • window出た
  • evdevvoidEvdevPostRelativeMotionEvents(InputInfoPtr pInfo, int num_v, int first_v, int v[MAX_VALUATORS]){ EvdevPtr pEvdev = pInfo->private; if (pEvdev->rel_queued) { xf86PostMotionEventM(pInfo->dev, Relative, pEvdev->vals); }}
  • Qt signalconectionListsからシグナル通知先を取得イベントを投げるあとはQtのイベントループで処理すれば… !
  • すばらしいHello, World みんなもGentooに Hello, world してみよう