8. Workflow
quality control
1 Every commit needs to be reviewed
2 Broken commit must be reverted
zero-regression policy
9. Level of Involvement
Contributor
after 10-20 patches
after 80 patches
Committer
≈ 150 Reviewer
checks in reviewed patches ≈ 90
accept or reject patches
24. Exposing to the Web world
QWebFrame::addToJavaScriptWindowObject(QString, QObject*)
Public functions
Object properties
Child objects
25. Exposing to the Web world
page()->mainFrame()->addToJavaScriptWindowObject("Dialog", new Dialog);
class Dialog: public QObject
{
Q_OBJECT
public:
Dialog(QObject *parent = 0);
public slots:
void showMessage(const QString& msg);
};
26. Exposing to the Web world
<input type="button" value="Try this"
onClick="Dialog.showMessage('You clicked me!')">
instance of
public slot
Dialog object
27. Signal and Slot
signal
foobar.modified.connect(refresh);
QObject instance JavaScript function
foobar.modified.connect(obj, refresh);
any object
55. Test Framework
specrunner SpecRunner.html
5 specs, 0 failures in 0.013s
specrunner SpecRunner.html
FAIL: 5 specs, 1 failure in 0.014s
Selenium, Watir, Squish Web, JSUnit, Jasmine,
QUnit, ...
56. Headless WebKit
if (phantom.state.length === 0) {
phantom.state = 'pizza';
phantom.open('http://www.google.com/m/local?site=local&q=pizza+in+new+york');
} else {
var list = document.querySelectorAll('div.bf');
for (var i in list) {
console.log(list[i].innerText);
}
phantom.exit();
}
http://phantomjs.org
66. Today
Web technologies are moving really fast
Various frameworks and libraries boost the productivity
Hybrid approach helps the migration
Tools need to catch-up
67. Future
More bindings to the native world
Platinum-grade productivity tools
Ubiquitous mesh and cloud solutions