https://wiki.mozilla.org/api.php?action=feedcontributions&user=Wraithan&feedformat=atomMozillaWiki - User contributions [en]2024-03-29T05:59:40ZUser contributionsMediaWiki 1.27.4https://wiki.mozilla.org/index.php?title=Apps/ID_and_Payments&diff=707369Apps/ID and Payments2013-09-12T19:22:17Z<p>Wraithan: /* UX */</p>
<hr />
<div>== Project Management ==<br />
<br />
* [https://docs.google.com/spreadsheet/ccc?key=0AqMmxHRazC75dDAyVjdBM2gwUWlzLUR2S3Y1b0RIdHc Project Plan Under Revision]<br />
<br />
== UX ==<br />
<br />
* [https://www.dropbox.com/s/7f8o9dbr1e76yzh/Marketplace_Payments_Flows_Walkthrough_042913.pdf UX "Happy" Flow (returning user, first time user, credit card payments)]<br />
* [https://www.dropbox.com/s/8qasgh14gdt9cmu/Marketplace_Payments_Flows_Persona_042613.pdf Persona Flows]<br />
* [https://www.dropbox.com/s/rjt9bqa4piso6hf/Marketplace_Payments_Flows_PinCodes_031813.pdf Pin Code Flows]<br />
* [https://www.dropbox.com/s/d5scq50drvyf9nb/Marketplace_Payments_Bango_Flows_042913.pdf Bango Flows]<br />
* [https://www.dropbox.com/s/m38d7bfpnwoirmy/Marketplace_Payments_Flows_Spec_031313.pdf Payments Style Guide]<br />
* [https://www.dropbox.com/s/am1ecw2j6o0a0ji/Marketplace_Payments_Flows_PinLockOut.pdf Pin Lock Out Flows]<br />
<br />
== Payment WebAPI ==<br />
<br />
* [[WebAPI/WebPayment|navigator.mozPay()]] API<br />
* [[WebAPI/WebPaymentProvider|WebPaymentProvider]] spec - hosted buy flow for navigator.mozPay()<br />
** Mozilla's [https://github.com/mozilla/webpay WebPay] implementation<br />
<br />
== Bugs ==<br />
<br />
* [[Marketplace/PaymentQueries|PaymentQueries]]<br />
<br />
== Testing ==<br />
<br />
* [https://wiki.mozilla.org/Apps/ID_and_Payments/Test_Plan Identity and Payments Testing]<br />
<br />
== Sequence Flow ==<br />
<br />
=== Identity Flow ===<br />
[https://wiki.mozilla.org/Security/Reviews/Identity/browserid See Identity Flow]<br />
<br />
=== MobileID device detection flow ===<br />
<br />
[https://dl.dropbox.com/u/64338170/SMS%20MO-based%20MobileID%20%281%29.png|MobileID The SMS MO-based MobileID flow] illustrates how Bango will identify devices for carrier billing on the Telefonica network.<br />
<br />
(MO means mobile-originated and MT means mobile-terminated)<br />
<br />
=== Payment Flow ===<br />
[[Image:Pay_Flow_Sequence.png]]<br />
<br />
== Data Flow Diagrams ==<br />
<br />
=== Payments Data Flow Diagram ===<br />
<br />
[[Image:PaymentsDFD.jpg]]<br />
<br />
=== Payments Data Types ===<br />
<br />
<table border="1"><br />
<tr><br />
<th>Sender</th><br />
<th>Recipient</th><br />
<th>Data</th><br />
<th>Definition</th><br />
</tr> <br />
<tr><br />
<td>Solitude</td><br />
<td>3rd Party App / Marketplace</td><br />
<td>Payment Status JWT</td><br />
<td>JSON Web Token including product / price and a transaction ID for the payment. This is a base64 encoded JSON object that is signed with a shared secret key.</td><br />
</tr> <br />
<tr><br />
<td>Solitude</td><br />
<td>3rd Party App / Marketplace</td><br />
<td>Refund Status JWT</td><br />
<td>JSON Web Token including product / price, a transaction ID for the payment and reason for refund. This is a base64 encoded JSON object that is signed with a shared secret key.</td><br />
</tr> <br />
<tr><br />
<td>Client</td><br />
<td>3rd Party App / Marketplace</td><br />
<td>Payment JWT</td><br />
<td>JSON Web Token with product / price info for the payment. This is a base64 encoded JSON object that is signed with a shared secret key.</td><br />
</tr> <br />
<tr><br />
<td>Client</td><br />
<td>Solitude</td><br />
<td>Assertion, PIN, JWT</td><br />
<td>The client passes the Identity assertion and JWT through to Solitude. The client posts the PIN to Solitude for verification / encrypted storage, etc.</td><br />
</tr> <br />
<tr><br />
<td>Solitude</td><br />
<td>Mozilla IdP</td><br />
<td>Identity assertion</td><br />
<td>Solitude receives an identity assertion from the client and posts it to Persona for verification.</td><br />
</tr> <br />
<tr><br />
<td>Mozilla IdP</td><br />
<td>Solitude</td><br />
<td>Identity email</td><br />
<td>If the assertion is valid, Persona posts the user's email to Solitude.</td><br />
</tr> <br />
<tr><br />
<td>Mozilla IdP</td><br />
<td>Client</td><br />
<td>Identity assertion</td><br />
<td>Persona returns an identity assertion to the client via JavaScript. This is posted to the Solitude server for verification.</td><br />
</tr> <br />
<tr><br />
<td>Solitude</td><br />
<td>Client</td><br />
<td>Start Payment URL</td><br />
<td>Solitude redirects the client to a URL that can be used to start a payment on the processor. This URL contains a Billing Config ID, the result of a subsequent Bango API call.</td><br />
</tr> <br />
<tr><br />
<td>Client</td><br />
<td>Payment Processor</td><br />
<td>Start payment request with network headers / cookie</td><br />
<td>When a client is redirected to the payment processor it makes a request to the processor's pay flow page. This may include network headers that the processor can use to identify the carrier network and the device. This is used to facilitate putting charges directly on a customer's carrier bill. An ID will be stored in a cookie on device for repeat purchases.</td><br />
</tr> <br />
<tr><br />
<td>Payment Processor</td><br />
<td>Carrier</td><br />
<td>Request for device ID</td><br />
<td>The payment processor will send some part of the network headers it received from the client to the carrier to retrieve enough information about the device to put charges on the customer's carrier bill.</td><br />
</tr> <br />
<tr><br />
<td>Carrier</td><br />
<td>Payment Processor</td><br />
<td>Device ID</td><br />
<td>The carrier sends some kind of device and / or customer ID to the payment processor to facilitate putting charges on the customer's carrier bill.</td><br />
</tr> <br />
<tr><br />
<td>Payment Processor</td><br />
<td>Solitude</td><br />
<td>Payment status / refund status</td><br />
<td>The payment processor posts payment status (indication of a successful / unsuccessful payment) or refund status to the Solitude server. This includes customer IDs, carrier info, region info, security tokens, and marketplace specific IDs to reconcile the transaction.</td><br />
</tr><br />
<tr><br />
<td>Solitude</td><br />
<td>Payment Processor</td><br />
<td>Refund request</td><br />
<td>Solitude will post a transaction ID to the payment processor API to initiate a refund on behalf of the user.</td><br />
</tr> <br />
<tr><br />
<td>Solitude</td><br />
<td>Payment Processor</td><br />
<td>Payment Info</td><br />
<td>Solitude prepares a payment by calling Bango's Billing Config ID. Solitude passes in all possible prices at each currency/region, product name, product icon URL, a Mozilla transaction ID, a Mozilla signature, success redirect URL, failure redirect URL, and a Mozilla user ID that was derived from a Persona email.</td><br />
</tr> <br />
<tr><br />
<td>Solitude</td><br />
<td>Payment Processor</td><br />
<td>HMAC/SHA2 email address</td><br />
<td>This is part of Payment Info but called out here for clarity. This is a Mozilla User ID that Bango uses to link users across devices when it cannot use network header auth. It is an HMAC/SHA2 hash derived from a Persona email address that the user logged in with.</td><br />
</tr> <br />
</table><br />
<br />
=== Developer Registration Data Flow Diagram ===<br />
<br />
[[Image:DevPaymentRegistrationDFD.png]]<br />
<br />
=== Developer Registration Data Types ===<br />
<br />
<table border="1"><br />
<tr><br />
<th>Sender</th><br />
<th>Recipient</th><br />
<th>Conduit</th><br />
<th>Data</th><br />
<th>Definition</th><br />
</tr> <br />
<tr><br />
<td>Developer</td><br />
<td>Marketplace Developer Hub</td><br />
<td>website form</td><br />
<td>Contact details</td><br />
<td>Name, email (administrative, support, financial), phone</td><br />
</tr><br />
<tr><br />
<td>Developer</td><br />
<td>Marketplace Developer Hub</td><br />
<td>website form</td><br />
<td>Company details</td><br />
<td>Company name and vendor name (if different)</td><br />
</tr><br />
<tr><br />
<td>Developer</td><br />
<td>Marketplace Developer Hub</td><br />
<td>website form</td><br />
<td>Billing details</td><br />
<td>VAT number (if applicable), billing address / city / zip / country</td><br />
</tr><br />
<tr><br />
<td>Developer</td><br />
<td>Marketplace Developer Hub</td><br />
<td>website form</td><br />
<td>Bank account details</td><br />
<td>Bank account payee name, bank account number, bank account code (swift / sort / fedwire / CHAPS code), bank IBAN (optional), bank name, bank address</td><br />
</tr><br />
<tr><br />
<td>Marketplace Developer Hub</td><br />
<td>Solitude API</td><br />
<td>create_package()</td><br />
<td>All developer registration info</td><br />
<td>The data listed above is collected in a web form and submitted to the Solitude API from the web server.</td><br />
</tr><br />
<tr><br />
<td>Marketplace Developer Hub</td><br />
<td>Solitude API</td><br />
<td>create_product()</td><br />
<td>Developer app info</td><br />
<td>This is what the developer is selling. Data passed includes app name, description, price tier ID.</td><br />
</tr><br />
<tr><br />
<td>Solitude API</td><br />
<td>Bango's Mozilla Exporter API</td><br />
<td>CreatePackage()</td><br />
<td>Developer registration info</td><br />
<td>A package relates to a developer. The data passed includes all personal info and company name info that was collected in the web form. See CreatePackage() in the [[Apps/ID_and_Payments#Bango_API|Mozilla Exporter API]] docs for details.</td><br />
</tr><br />
<tr><br />
<td>Solitude API</td><br />
<td>Bango's Mozilla Exporter API</td><br />
<td>CreateBankdetails()</td><br />
<td>Developer bank details</td><br />
<td>After creating a package, this API call adds the bank account details that were collected in the web form. See CreateBankDetails() in the [[Apps/ID_and_Payments#Bango_API|Mozilla Exporter API]] docs for details.</td><br />
</tr><br />
<tr><br />
<td>Solitude API</td><br />
<td>Bango's Mozilla Exporter API</td><br />
<td>CreateBangoNumber()</td><br />
<td>Developer's app name, price, etc</td><br />
<td>After creating a package, this API call creates a Bango Number that can be sold by Mozilla. A Number corresponds to an open web app that the developer is selling via the Marketplace and ultimately through Bango. See CreateBangoNumber() in the [[Apps/ID_and_Payments#Bango_API|Mozilla Exporter API]] docs for details.</td><br />
</tr><br />
<tr><br />
<td>Solitude API</td><br />
<td>Bango's Mozilla Exporter API</td><br />
<td>MakePremiumPerAccess()</td><br />
<td>Bango Number</td><br />
<td>After creating a Bango Number, this API call simply makes the product for sale. Otherwise it would be free. See MakePremiumPerAccess() in the [[Apps/ID_and_Payments#Bango_API|Mozilla Exporter API]] docs for details.</td><br />
</tr><br />
<tr><br />
<td>Bango's Mozilla Exporter API</td><br />
<td>Solitude API</td><br />
<td>returned from CreatePackage()</td><br />
<td>Package ID</td><br />
<td>Unique identifier for a Bango package.</td><br />
</tr><br />
<tr><br />
<td>Bango's Mozilla Exporter API</td><br />
<td>Solitude API</td><br />
<td>returned from CreatePackage()</td><br />
<td>Person ID</td><br />
<td>Unique identifier for the developer person who was registered Bango package.</td><br />
</tr><br />
<tr><br />
<td>Marketplace Developer Hub</td><br />
<td>Marketplace Database</td><br />
<td>submitted through web form</td><br />
<td>Obfuscated Bank ID</td><br />
<td>In order for the developer to return to the Marketplace devhub and know which bank account he/she signed up with, the Marketplace needs to store an obfuscated identifier. This will most likely be an encrypted partial bank account number such as the last four digits.</td><br />
</tr><br />
</table><br />
<br />
== Bango API ==<br />
<br />
Currently Mozilla uses [http://bango.com/ Bango] to enable mobile payments. They have several [http://bango.custhelp.com/app/answers/detail/a_id/1449/kw/relay/related/1/session/L2F2LzEvc25vLzEvdGltZS8xMzUyNDYzNTU1L3NpZC84WE5OUlFhbA%3D%3D/sno/1 public APIs] but they have also customized some APIs for what Mozilla needs to do. Here is some info on those custom APIs. See [https://bugzilla.mozilla.org/show_bug.cgi?id=797125 bug 797125] for some proofs that were done to use the custom APIs.<br />
<br />
=== Custom Mozilla APIs ===<br />
<br />
==== Mozilla Exporter API ====<br />
<br />
This API is for registering developers to begin selling apps or accepting in-app payments. The API can be used to create packages (which are linked to a single developer) and products for sale which are called Numbers.<br />
<br />
* View: [[Media:MozillaExporterAPI_v1.0.1.pdf]]<br />
* Edit: [[File:MozillaExporterAPI_v1.0.1.pdf]]<br />
<br />
==== Billing Configuration API ====<br />
<br />
After creating a Number (e.g. an app to sell) Mozilla uses the Billing Information API to create a one time token that can initiate a payment.<br />
<br />
* View: [[Media:BillingConfigurationAPI v1.0.0.pdf]]<br />
* Edit: [[File:BillingConfigurationAPI v1.0.0.pdf]]<br />
<br />
==== Mozilla Vendor Portal API ====<br />
<br />
How developers registered through the Marketplace can access information about their payments.<br />
<br />
* View: [[Media:MozillaVendorPortal v1.0.0.pdf]]<br />
* Edit: [[File:MozillaVendorPortal v1.0.0.pdf]]<br />
<br />
=== Standard APIs ===<br />
<br />
* [http://bango.custhelp.com/app/answers/detail/a_id/1547 Direct Billing API], also at [[Media:DirectBillingAPI_v3.1.6.pdf]]<br />
* [http://support.bango.com/entries/23381152-Event-Notification-API Event Notification API], also at [[Media:EventNotification v2.0.pdf]]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Marketplace/PaymentQueries&diff=701496Marketplace/PaymentQueries2013-08-30T17:17:25Z<p>Wraithan: /* By Version */</p>
<hr />
<div>Bugzilla queries for payments.<br />
<br />
[https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=READY&bug_status=ASSIGNED&bug_status=REOPENED&columnlist=priority%2Cbug_severity%2Ctarget_milestone%2Cassigned_to%2Cbug_status%2Cshort_desc%2Cstatus_whiteboard%2Cflagtypes.name&component=Payments%2FRefunds&list_id=7295914&product=Marketplace&query_format=advanced&query_based_on Overall]<br />
<br />
== Whats the team working on? ==<br />
<br />
[https://bugzilla.mozilla.org/buglist.cgi?emailtype1=exact&query_format=advanced&emailassigned_to1=1&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=amckay@mozilla.com&list_id=7295954 Andy] &bull; [https://bugzilla.mozilla.org/buglist.cgi?emailtype1=exact&query_format=advanced&emailassigned_to1=1&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=david%40larlet.fr&list_id=7295954 David] &bull; [https://bugzilla.mozilla.org/buglist.cgi?emailtype1=exact&query_format=advanced&emailassigned_to1=1&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=kumar.mcmillan%40gmail.com&list_id=7295944 Kumar] &bull; [https://bugzilla.mozilla.org/buglist.cgi?emailtype1=exact&query_format=advanced&emailassigned_to1=1&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=scolville%40mozilla.com&list_id=7295929 Stuart] &bull; [https://bugzilla.mozilla.org/buglist.cgi?emailtype1=exact&query_format=advanced&emailassigned_to1=1&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=wraithan%40mozilla.com&list_id=7295937 Wraithan]<br />
<br />
== What are others working on? ==<br />
<br />
[https://bugzilla.mozilla.org/buglist.cgi?emailreporter1=1&list_id=7296023&resolution=---&emailtype1=substring&query_format=advanced&emailassigned_to1=1&email1=%40bango.com Bango] &bull; [https://bugzilla.mozilla.org/buglist.cgi?emailreporter1=1&list_id=7296023&resolution=---&emailtype1=substring&query_format=advanced&emailassigned_to1=1&email1=timplee%40gmail.com DT]<br />
<br />
== By Country ==<br />
<br />
[https://bugzilla.mozilla.org/buglist.cgi?f1=flagtypes.name&list_id=7296130&o1=casesubstring&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=affects-durango&component=Payments%2FRefunds&product=Marketplace Durango] &bull; [https://bugzilla.mozilla.org/buglist.cgi?f1=flagtypes.name&list_id=7296130&o1=casesubstring&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=affects-moss&component=Payments%2FRefunds&product=Marketplace Moss] &bull; [https://bugzilla.mozilla.org/buglist.cgi?f1=flagtypes.name&list_id=7296130&o1=casesubstring&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=affects-seahorse&component=Payments%2FRefunds&product=Marketplace Seahorse] &bull; [https://bugzilla.mozilla.org/buglist.cgi?f1=flagtypes.name&list_id=7296130&o1=casesubstring&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=affects-seville&component=Payments%2FRefunds&product=Marketplace Seville] &bull; [https://bugzilla.mozilla.org/buglist.cgi?f1=flagtypes.name&list_id=7296130&o1=casesubstring&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=affects-tricycle&component=Payments%2FRefunds&product=Marketplace Tricycle] &bull; [https://bugzilla.mozilla.org/buglist.cgi?f1=flagtypes.name&list_id=7296130&o1=casesubstring&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=affects-US&component=Payments%2FRefunds&product=Marketplace US] &bull; [https://bugzilla.mozilla.org/buglist.cgi?f1=flagtypes.name&list_id=7296130&o1=casesubstring&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=affects-UK&component=Payments%2FRefunds&product=Marketplace UK]<br />
<br />
== By Version ==<br />
<br />
[https://bugzilla.mozilla.org/buglist.cgi?list_id=7613143&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&version=1.3&component=Payments%2FRefunds&product=Marketplace v1.3] &bull; [https://bugzilla.mozilla.org/buglist.cgi?list_id=7613143&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&version=1.4&component=Payments%2FRefunds&product=Marketplace v1.4] &bull; [https://bugzilla.mozilla.org/buglist.cgi?list_id=7613143&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&version=1.5&component=Payments%2FRefunds&product=Marketplace v1.5]<br />
<br />
<bugzilla type="count" display="bar"><br />
{<br />
"bug_status": ["UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED"],<br />
"component": "Payments/Refunds",<br />
"product": "Marketplace",<br />
"x_axis_field": "version"<br />
}<br />
</bugzilla><br />
<br />
== Price Point Table ==<br />
<br />
http://metaplace.paas.allizom.org/tiers/stage/ <br />
<br />
http://metaplace.paas.allizom.org/tiers/prod/<br />
<br />
== P1s ==<br />
<br />
=== New ===<br />
<br />
<bugzilla><br />
{<br />
"product": "Marketplace",<br />
"component": "Payments/Refunds",<br />
"priority": "P1",<br />
"status": "NEW"<br />
}<br />
</bugzilla><br />
<br />
=== Reopened ===<br />
<br />
<bugzilla><br />
{<br />
"product": "Marketplace",<br />
"component": "Payments/Refunds",<br />
"priority": "P1",<br />
"status": "REOPENED"<br />
}<br />
</bugzilla></div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2013-08-06&diff=690612Webdev:Meetings:2013-08-062013-08-06T17:09:57Z<p>Wraithan: /* Open Source Citizenship */</p>
<hr />
<div>{{WebdevMeetingInfobox<br />
|date=August 6th, 2013<br />
|etherpad=https://etherpad.mozilla.org/webdev-2013-08-06<br />
|notetaker=mkelly<br />
}}<br />
<br />
Webdev Meetings are open to the public and serve as a gathering point for anyone in the Mozilla community who is interested in Web Development and what Mozilla has been doing in it.<br />
<br />
== Shipping Celebration ==<br />
What did we ship this month? Alternatively, what didn't we ship to spare the world the horror?<br />
<br />
* (List it out, yo)<br />
* Language aware search for the SUMO Knowledge Base!<br />
* Snippets service rewrite!<br />
<br />
== Open Source Citizenship ==<br />
Any updates with our libraries or with libraries we use? Anyone looking for help with a library they maintain?<br />
<br />
* (Always leave a note)<br />
* erikrose: [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch]'s 0.6 release brings an important fix for bulk indexing. Many of the versions of ES we're using don't appear to be affected, but I highly recommend updating if you aren't sure.<br />
* erikrose: I'm looking for co-maintainers for [https://github.com/jbalogh/django-nose/ django-nose], which I don't use much anymore and whose PR hopper is overflowing. (willkg sucked and didn't help at all.)<br />
* jlongster made nunjucks async [https://github.com/jlongster/nunjucks/issues/41#issuecomment-22146596 zomg]<br />
* Wraithan: As always would love help with [http://rtfd.org rtfd]<br />
<br />
== New Hires / Interns ==<br />
Anyone new that we want to induct into the secret order?<br />
<br />
* (His name is Robert Paulson)<br />
* [https://twitter.com/jgmize Josh Mize] is a senior backend developer for WebProd!<br />
<br />
== The Bikeshed / Roundtable ==<br />
Anything else to talk about?<br />
<br />
* erikrose: [https://pypi.python.org/pypi/peep/ peep], pip, fo, fum: the future of cryptographically guaranteed, repeatable Python deployment<br />
** Is this how we'll kill vendor/ good? --wenzel<br />
* <strike>The 79 character line limit is dead, long live the 79 character line limit.</strike><br />
** Not really, that change was reverted within 24 hours by Guido. http://hg.python.org/peps/rev/82e24ac40255<br />
* craigcook: KSS (Knyle Style Sheets, http://warpspire.com/kss/) - should we use it? The main docs are Ruby-centric but there's a Python implementation (https://github.com/seanbrant/pykss).<br />
* peterbe: Apart from stemming, is PostgreSQL's Full-text index much better than MySQL (InnoDB's as of 5.6 only)?<br />
* https://www.djangoproject.com/weblog/2013/aug/06/breach-and-django/</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2013-08-06&diff=690611Webdev:Meetings:2013-08-062013-08-06T17:09:15Z<p>Wraithan: /* Open Source Citizenship */</p>
<hr />
<div>{{WebdevMeetingInfobox<br />
|date=August 6th, 2013<br />
|etherpad=https://etherpad.mozilla.org/webdev-2013-08-06<br />
|notetaker=mkelly<br />
}}<br />
<br />
Webdev Meetings are open to the public and serve as a gathering point for anyone in the Mozilla community who is interested in Web Development and what Mozilla has been doing in it.<br />
<br />
== Shipping Celebration ==<br />
What did we ship this month? Alternatively, what didn't we ship to spare the world the horror?<br />
<br />
* (List it out, yo)<br />
* Language aware search for the SUMO Knowledge Base!<br />
* Snippets service rewrite!<br />
<br />
== Open Source Citizenship ==<br />
Any updates with our libraries or with libraries we use? Anyone looking for help with a library they maintain?<br />
<br />
* (Always leave a note)<br />
* erikrose: [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch]'s 0.6 release brings an important fix for bulk indexing. Many of the versions of ES we're using don't appear to be affected, but I highly recommend updating if you aren't sure.<br />
* erikrose: I'm looking for co-maintainers for [https://github.com/jbalogh/django-nose/ django-nose], which I don't use much anymore and whose PR hopper is overflowing. (willkg sucked and didn't help at all.)<br />
* jlongster made nunjucks async [https://github.com/jlongster/nunjucks/issues/41#issuecomment-22146596 zomg]<br />
* Wraithan: As always would love help with ReadTheDocs<br />
<br />
== New Hires / Interns ==<br />
Anyone new that we want to induct into the secret order?<br />
<br />
* (His name is Robert Paulson)<br />
* [https://twitter.com/jgmize Josh Mize] is a senior backend developer for WebProd!<br />
<br />
== The Bikeshed / Roundtable ==<br />
Anything else to talk about?<br />
<br />
* erikrose: [https://pypi.python.org/pypi/peep/ peep], pip, fo, fum: the future of cryptographically guaranteed, repeatable Python deployment<br />
** Is this how we'll kill vendor/ good? --wenzel<br />
* <strike>The 79 character line limit is dead, long live the 79 character line limit.</strike><br />
** Not really, that change was reverted within 24 hours by Guido. http://hg.python.org/peps/rev/82e24ac40255<br />
* craigcook: KSS (Knyle Style Sheets, http://warpspire.com/kss/) - should we use it? The main docs are Ruby-centric but there's a Python implementation (https://github.com/seanbrant/pykss).<br />
* peterbe: Apart from stemming, is PostgreSQL's Full-text index much better than MySQL (InnoDB's as of 5.6 only)?<br />
* https://www.djangoproject.com/weblog/2013/aug/06/breach-and-django/</div>Wraithanhttps://wiki.mozilla.org/index.php?title=WebAPI/WebPayment&diff=677428WebAPI/WebPayment2013-07-17T19:25:11Z<p>Wraithan: Removing the warning that localizations aren't used yet as they will be live on the 18th</p>
<hr />
<div>= WebPayment API Specification (DRAFT)=<br />
== Goal ==<br />
The goal of this API is to enable web content to collect payment (or issue a refund) for a virtual good via the <code>navigator.mozPay()</code> function.<br />
<br />
== Status ==<br />
See {{bug|767818}} for the <code>navigator.mozPay()</code> implementation.<br />
<br />
Currently only implemented for B2G.<br />
<br />
== Proposed API ==<br />
Expose the <code>pay</code> function to the <code>navigator</code> object<br />
<code><br />
interface nsIDOMNavigatorPayment<br />
{<br />
DOMRequest mozPay(in jsval jwts);<br />
}<br />
</code><br />
<br />
== Proposers ==<br />
Andreas Gal and Fernando Jiménez. Based on Mike Hanson's and Kumar McMillan's work for [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments Firefox Marketplace in-app payments].<br />
<br />
= WebPayments Architecture (DRAFT) =<br />
== Introduction ==<br />
An open web app will interact with a [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider] via <code>navigator.mozPay()</code> and receive notifications POSTed to its server about the result of each payment. Users will see a payment flow hosted by the Payment Provider in a special window on the device.<br />
<br />
== Payment flow overview ==<br />
* The app initiates a payment by signing a [http://openid.net/specs/draft-jones-json-web-token-07.html JSON Web Token (JWT)] request and calling <code>navigator.mozPay()</code>.<br />
* This starts the buyflow in a content iframe inside a trusted dialog ("chrome dialog").<br />
* A purchasing flow is served from the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]'s server as an HTML5 document inside the trusted dialog.<br />
* The buyer is authenticated by the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider] (via the network (radio), Mozilla Persona assertion or whatever authentication mechanisms the Payment Provider chooses).<br />
* The buyer completes or cancels the purchase.<br />
* The app receives a Javascript callback when the buyer completes or cancels the purchase.<br />
* The app server receives a signed POST request with a Payment Provider transaction identifier indicating that the purchase was completed successfully (or it failed).<br />
<br />
== Detailed payment flow ==<br />
<span style="color:#009000">'''This detailed payment flow is based on Mozilla's [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments initial implementation for Firefox OS] but it could be extended to any other Payment Provider.'''</span><br />
<br />
=== Definitions ===<br />
; Application: Open Web App which offers digital goods to be sold. OWAs charge users via <code>navigator.mozPay()</code> and require a client and server.<br />
; Application Key: A public identifier that can be transmitted in a JSON object so that a Payment Provider can identify the Application.<br />
; Application Secret: A private string shared between Developer and Payment Provider. This will be used to sign [http://openid.net/specs/draft-jones-json-web-token-07.html JSON Web Tokens (JWTs)] and must be securely protected on a web server.<br />
; Developer: Application developer, seller of digital goods.<br />
; Firefox Marketplace: Developer portal and application repository. Developers can submit apps to the [https://marketplace.firefox.com/ Firefox Marketplace] so users can purchase and download the apps. The Firefox Marketplace uses the <code>navigator.mozPay</code> function to charge users for application purchases.<br />
; Payment Provider: A client/server web application that serves content in a special iframe controlled by <code>navigator.mozPay()</code>. This conforms to the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider] spec. The provider accepts payment from a user and disperses income to the Developer.<br />
; User: End user who wants to purchase a digital good.<br />
; User Agent: B2G (Firefox OS)<br />
<br />
=== User sign-in ===<br />
This is an implementation detail of the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]. The <code>navigator.mozPay()</code> API does not prescribe any user authorization scheme. <br />
<br />
In [https://github.com/mozilla/webpay Mozilla's Payment Provider] implementation, users will sign-in via [https://login.persona.org/ Persona].<br />
<br />
=== Developer registration ===<br />
This is an implementation detail of the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]. The <code>navigator.mozPay()</code> API facilities two parties -- a Developer and a Payment Provider -- in making a transaction but it does not facilitate any part of the registration process.<br />
<br />
A developer who creates a JSON Web Token must do so with an Application Secret obtained from the Payment Provider. In [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments Mozilla's implementation], a developer signs up through the [https://marketplace.firefox.com/developers/ Firefox Marketplace Developer Hub], enters bank account details for payouts, obtains an Application Key and Application Secret, and can begin signing JWTs for purchase.<br />
<br />
=== Initiating a Payment ===<br />
* The user opens an Application<br />
* The user finds something interesting to purchase. Let's say it's a game and the user wants to purchase a Magical Unicorn to excel in the game.<br />
* The user clicks a Buy Unicorn button.<br />
* The Application server responds by first signing a [http://openid.net/specs/draft-jones-json-web-token-07.html JSON Web Token (JWT)] using its Application Secret. The JWT is a base64-encoded signed JSON object. The JSON contains all the details about the product such as name, description, price, etc.<br />
* The Application bubbles up the JWT to the client and calls <code>navigator.mozPay([theJWT])</code>. This begins the hosted buy flow within a special window on the User Agent.<br />
<br />
Example of server-side JWT generation in Python using [https://pypi.python.org/pypi/PyJWT-mozilla PyJWT-mozilla]:<br />
<code><pre><br />
paymentJWT = jwt.encode({<br />
"iss": APPLICATION_KEY,<br />
"aud": "marketplace.firefox.com",<br />
"typ": "mozilla/payments/pay/v1",<br />
"iat": 1337357297,<br />
"exp": 1337360897,<br />
"request": {<br />
"id": "915c07fc-87df-46e5-9513-45cb6e504e39",<br />
"pricePoint": 1,<br />
"name": "Magical Unicorn",<br />
"description": "Adventure Game item",<br />
"icons": {<br />
"64": "https://yourapp.com/img/icon-64.png",<br />
"128": "https://yourapp.com/img/icon-128.png"<br />
},<br />
"productData": "user_id=1234&my_session_id=XYZ",<br />
"postbackURL": "https://yourapp.com/payments/postback",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback",<br />
"defaultLocale": "en",<br />
"locales": {<br />
"de": {<br />
"name": "Magisches Einhorn",<br />
"description": "Adventure Game Artikel"<br />
}<br />
}<br />
}<br />
}, APPLICATION_SECRET)<br />
</pre></code><br />
<br />
Here is a detailed explanation of the payment JWT:<br />
*'''iss''' (mandatory): The issuer of the JWT. This is the Application Key assigned during the app registration process for this specific payment provider (e.g. Firefox Marketplace).<br />
*'''typ''' (mandatory): The JWT type. This identifies the payment provider, e.g. Firefox Marketplace, and the JWT version that must be supported by the provider. On the User Agent, typ is used to look up white-listed Payment Providers.<br />
*'''iat''': (mandatory) Issued at time. This is a UTC Unix timestamp of when the JWT was issued.<br />
*'''exp''': (mandatory) Expiration. A UTC Unix timestamp of when the JWT should expire.<br />
*'''nbf''': (optional) Not-before time. A UTC Unix timestamp of the earliest time the JWT can be processed.<br />
*'''request''' (mandatory): Request object.<br />
** '''id''' (mandatory): A unique identifier for the product you are selling. This only needs to be unique within your own catalog, not unique among all products from all apps.<br />
** '''pricePoint''' (mandatory): An identifier that corresponds to a price according to the Payment Provider. For example, pricePoint 1 might translate into €0.89 when the buyer is in Europe or $0.99 when in the US, etc. The exact price point values are managed by the Payment Provider and they may change based on currency exchange rates.<br />
** '''name''' (mandatory): A short description of the product.<br />
** '''description''' (mandatory): A long description of the product.<br />
** '''icons''' (optional): A map of icon URLs for the product you are selling. The keys are width/height pixel values (images must be square). The Payment Provider will use an image at the appropriate size on the payment confirmation page. For details about how Mozilla's Payment Provider handles icons, see the [https://developer.mozilla.org/en-US/docs/Web/Apps/Publishing/In-app_payments payments guide].<br />
** '''productData''' (optional): A freeform string, no longer than 255 characters. This can be anything the app might need to identify the product with when a postback is sent back to the app.<br />
** '''postbackURL''' (mandatory): URL where the payment processor sends an HTTP POST message to whenever a purchase completes. The application server needs to acknowledge these POST messages, or else the transactions will be canceled.<br />
** '''chargebackURL''' (mandatory): URL where the payment processor sends an HTTP POST message to whenever a refund associated with this transaction is done.<br />
** '''defaultLocale''' (mandatory if '''locales''' is defined, otherwise it is optional): Describes what language the '''name''' and '''description''' are in.<br />
** '''locales''' (optional): is a map of one or more locale-specific overrides of the data contained in the in-app product, which UIs use to provide localized views based on the accessing device's locale. For example, if you have Italian readers installing your app, you probably want to give them Italian UI text. Each locale entry is keyed on a language tag ([http://www.ietf.org/rfc/rfc4646.txt RFC 4646]) and contains the keys you want to replace. You can only override name and description. <br />
<br />
* For a user to make a purchase, the Application must execute the Javascript method <code>navigator.mozPay()</code> with one or more signed payment requests (the JWTs). For example, the app might have a 'buy' button that triggers this method when clicked. Then <code>navigator.mozPay</code> method should take the signed payment JWT or an array of them. It will return a [https://developer.mozilla.org/en/DOM/DOMRequest DOMRequest] object that the developer can use to monitor the progress of the operation.<br />
<code><br />
var request = navigator.mozPay([signedJWT1, signedJWTn]);<br />
request.onsuccess = function () {<br />
// The payment buy flow completed without errors.<br />
// This does NOT mean the payment was successful.<br />
waitForServerPostback();<br />
}<br />
request.onerror = function (errorMsg) {<br />
console.log('navigator.mozPay() error: ' + this.error.name + ': ' + errorMsg);<br />
}<br />
</code><br />
* The <code>navigator.mozPay</code> method will open a payment request confirmation screen based on the received JWTs, so the user can confirm and choose the payment method that is more appropriate for him. B2G would only show the payment providers for the JWT '''typ''' values that are pre-registered in the User Agent. JWTs containing a '''typ''' value not registered in the UA would be considered as invalid.<br />
* Once the user selects a Payment Provider the UA will open a special window (a "chrome" dialog) containing the Payment Provider's buy flow that is registered in the User Agent for the '''typ''' value of the passed JWT (e.g. Firefox Marketplace in the example above).<br />
* Why an array of JWTs? The Developer will have a specific contract with each Payment Provider and will have a unique Application Secret for each provider. When a payment is initiated, the Application must send all JWTs. The user will select only one Payment Provider to complete the purchase. If there is only one JWT to choose from, the user will automatically use that Payment Provider, and this is the case for the first version of B2G.<br />
* The details of the exact buy flow are implemented by the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]. In Mozilla's pay flow, the user logs in via Persona, enters a PIN, and is presented with details about the item to be purchased.<br />
* The user confirms the purchase or cancels it.<br />
* If the user cancels or something goes wrong with the payment process, the flow returns to the <code>DOMRequest.onerror</code> callback.<br />
<br />
=== Notifications ===<br />
<br />
The Application must only rely on server side notifications to determine the outcome of a purchase. The Payment Provider will POST a confirmation message (a JWT) to the '''postbackURL''' (on success) or the '''chargebackURL''' (on error). The Application provides these URLs in the original JWT request. On a production server, these URLs must be HTTPS. <br />
<br />
The POST request will have a content-type of <code>application/x-www-form-urlencoded</code> and the JWT will be in the '''notice''' form parameter. This JWT contains a copy of the original payment request plus a new response object that has a '''transactionID''' which identifies the Payment Provider's transaction.<br />
<br />
When a JWT is received, the Application first needs to verify the signature using its Application Secret. If the signature is not valid, it probably was not sent from the Payment Provider and should be ignored. If the signtature is valid, then the application server should decode the JWT, record it, and '''respond with a 200 OK that contains the transactionID in plain text'''. If the Application server responds with an error status or does not respond with the right transactionID, the Payment Provider will consider this a failure. It will retry and/or notify the Developer about the failure. The Application must respond to the request in plain text containing just the '''transactionID''' value.<br />
<br />
==== Postback ====<br />
<br />
Here is an example of a JWT POSTed via the '''notice''' parameter to '''postbackURL''' that indicates a transaction was fully processed and was successful:<br />
<br />
<code><pre><br />
{<br />
"iss": "marketplace.firefox.com",<br />
"aud": APPLICATION_KEY,<br />
"typ": "mozilla/payments/pay/postback/v1",<br />
"exp": 1337370900,<br />
"iat": 1337360900,<br />
"request": {<br />
"id": "915c07fc-87df-46e5-9513-45cb6e504e39",<br />
"pricePoint": 1,<br />
"name": "Magical Unicorn",<br />
"description": "Adventure Game item",<br />
"icons": {<br />
"64": "https://yourapp.com/img/icon-64.png",<br />
"128": "https://yourapp.com/img/icon-128.png"<br />
},<br />
"productData": "user_id=1234&my_session_id=XYZ",<br />
"postbackURL": "https://yourapp.com/payments/postback",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback",<br />
"defaultLocale": "en",<br />
"locales": {<br />
"de": {<br />
"name": "Magisches Einhorn",<br />
"description": "Adventure Game Artikel"<br />
}<br />
}<br />
},<br />
"response": {<br />
"transactionID": "webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9"<br />
}<br />
}<br />
</pre></code><br />
<br />
Here is an example response that includes just the transactionID:<br />
<br />
<code><br />
HTTP/1.1 200 OK<br />
Content-Type: text/plain<br />
<br />
webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9<br />
</code><br />
<br />
==== Chargeback ====<br />
<br />
Here is an example of a JWT POSTed via the '''notice''' parameter to '''chargebackURL''' that indicates a transaction was fully processed but was unsuccessful:<br />
<br />
<code><pre><br />
{<br />
"iss": "marketplace.firefox.com",<br />
"aud": APPLICATION_KEY,<br />
"typ": "mozilla/payments/pay/chargeback/v1",<br />
"exp": 1337370900,<br />
"iat": 1337360900,<br />
"request": {<br />
"id": "915c07fc-87df-46e5-9513-45cb6e504e39",<br />
"pricePoint": 1,<br />
"name": "Magical Unicorn",<br />
"description": "Adventure Game item",<br />
"icons": {<br />
"64": "https://yourapp.com/img/icon-64.png",<br />
"128": "https://yourapp.com/img/icon-128.png"<br />
},<br />
"productData": "user_id=1234&my_session_id=XYZ",<br />
"postbackURL": "https://yourapp.com/payments/postback",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback",<br />
"defaultLocale": "en",<br />
"locales": {<br />
"de": {<br />
"name": "Magisches Einhorn",<br />
"description": "Adventure Game Artikel"<br />
}<br />
}<br />
},<br />
"response": {<br />
"transactionID": "webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9",<br />
"reason": "refund"<br />
}<br />
}<br />
</pre></code><br />
<br />
A chargeback JWT might be received instead of or in addition to a postback. The response will contain a '''reason''' attribute, as follows:<br />
; refund: The payment was refunded either upon request of the customer or by an administrator.<br />
; reversal: A buyer has asked the credit card issuer to reverse a transaction after it has been completed. The buyer might do this through the credit card company as part of a dispute.<br />
<br />
Here is an example response that includes just the transactionID:<br />
<br />
<code><br />
HTTP/1.1 200 OK<br />
Content-Type: text/plain<br />
<br />
webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9<br />
</code><br />
<br />
== Refunds ==<br />
<br />
Refunds are not yet supported by the <code>navigator.mozPay</code> API. '''At a future date, an Application may be able to request a refund like this''':<br />
<br />
<code><br />
{<br />
"iss": APPLICATION_KEY,<br />
"aud": "marketplace.firefox.com",<br />
"typ": "mozilla/payments/refund/v1",<br />
"exp": 1337370900,<br />
"iat": 1337360900,<br />
"request": {<br />
"transactionID": "webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9",<br />
"reason": "User requested refund",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback"<br />
}<br />
}<br />
</code><br />
<br />
This would initiate a refund flow and POST a confirmation JWT when completed.<br />
<br />
= Payment Provider facing API =<br />
<br />
See the [[WebAPI/WebPaymentProvider|WebPaymentProvider]] spec for details on how to implement a payment provider for <code>navigator.mozPay()</code>.<br />
<br />
= Testing =<br />
<br />
[https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS Firefox OS] and the [https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Using_Firefox_OS_Simulator Firefox OS Simulator] ship only with settings to make real payments. If you want to test payments, you can use the simulation feature [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments described here]. To test with a custom Payment Provider you need to adjust your settings.<br />
<br />
Consult the [https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Using_the_B2G_desktop_client#Generating_a_profile B2G guide] for how to set custom settings on a device.<br />
<br />
Here is a helpful setting to disable HTTPS checks for testing:<br />
<br />
<code><br />
pref("dom.payment.skipHTTPSCheck", true);<br />
</code><br />
<br />
Here is a rough example of how you could add a custom Payment Provider:<br />
<br />
<code><br />
pref("dom.payment.provider.1.name", "mockpayprovider");<br />
pref("dom.payment.provider.1.description", "Mock Payment Provider");<br />
pref("dom.payment.provider.1.type", "mock/payments/inapp/v1");<br />
pref("dom.payment.provider.1.uri", "https://mockpayprovider.phpfogapp.com/?req=");<br />
pref("dom.payment.provider.1.requestMethod", "GET");<br />
</code><br />
<br />
== Test apps ==<br />
* https://github.com/ferjm/Payment-tests<br />
* https://github.com/kumar303/inapp-pay-test<br />
<br />
= Current implementation =<br />
[[File:MozPayFlow.jpg|600px|thumb|center|Current implementation]]<br />
<br />
[1] The payment confirmation screen will not be shown if the <code>navigator.mozPay</code> call contains only one valid payment request ([https://bugzilla.mozilla.org/show_bug.cgi?id=793811 Bug 793811])<br />
<br />
[2] Once the payment flow is loaded within the trusted UI the chrome code injects in the payment flow content the necessary functions to notify the platform about the successfull or failed purchase.<br />
<br />
== Modules ==<br />
=== DOM part in Gecko === <br />
Contains the common code that exposes the <code>navigator.mozPay</code> function to the DOM and that is supposed to be shared by all the platforms (B2G, Fennec, Firefox).<br />
<br />
This code lives in [http://mxr.mozilla.org/mozilla-central/source/dom/payment/ dom/payment].<br />
<br />
=== B2G Glue part in Gecko ===<br />
Contains the specific B2G code that triggers the trusted UI creation to embed the payment flow iframe and that injects the required <code>paymentSuccess()</code> and <code>paymentFailed()</code> functions within the payment flow content.<br />
<br />
It implements the <code>nsIPaymentUIGlue</code> interface<br />
<br />
<code><br />
interface nsIPaymentUIGlueCallback<br />
{<br />
void onresult(in DOMString result);<br />
};<br />
<br />
interface nsIPaymentUIGlue<br />
{<br />
// The 'paymentRequestsInfo' contains the payment request information<br />
// for each JWT provided via navigator.mozPay call. <br />
void confirmPaymentRequest(in jsval paymentRequestsInfo,<br />
in nsIPaymentUIGlueCallback successCb,<br />
in nsIPaymentUIGlueCallback errorCb);<br />
<br />
void showPaymentFlow(in nsIPaymentFlowInfo paymentFlowInfo,<br />
in nsIPaymentUIGlueCallback errorCb);<br />
};<br />
</code><br />
<br />
This code lives in [http://mxr.mozilla.org/mozilla-central/source/b2g/components/PaymentGlue.js b2g/components] and [http://mxr.mozilla.org/mozilla-central/source/b2g/chrome/content/payment.js b2g/chrome/content].<br />
<br />
=== Gaia part === <br />
Contains the require code to create, open and close the trusted UI and the payment confirmation screen.<br />
<br />
This code lives in the Gaia system app, specifically [https://github.com/mozilla-b2g/gaia/blob/master/apps/system/js/payment.js apps/system/js/payment.js] and [https://github.com/mozilla-b2g/gaia/blob/master/apps/system/js/popup_manager.js apps/system/js/popup_manager.js]<br />
<br />
== Communication ==<br />
The communication between Gecko and Gaia is done via <code>mozChromeEvent</code> and <code>mozContentEvent</code>, which is a communication mechanism between chrome and the Gaia system app. <code>mozChromeEvent</code> are sent from chrome to content and <code>mozContentEvent</code> are sent from content to crhome. Where "sent" is used loosely here, since "broascast" is probably a better term. This communication is required to control the creation and closure of the trusted UI and to inject the required functions to notify the success or failure of the payment flow within the payment provider content.<br />
<br />
= Helper Libraries =<br />
<br />
These are specific <code>navigator.mozPay()</code> libraries:<br />
* [http://mozpay.readthedocs.org/en/latest/ mozpay-py], a Python library<br />
* [https://github.com/mozilla/mozpay-js mozpay-js], a NodeJS library<br />
<br />
These are generic JWT libraries that you can use:<br />
* [https://pypi.python.org/pypi/PyJWT-mozilla PyJWT-mozilla]<br />
* [https://github.com/progrium/ruby-jwt ruby-jwt]<br />
* [https://github.com/hokaccha/node-jwt-simple node-jwt-simple]<br />
* [https://github.com/luciferous/jwt PHP luciferous/jwt]<br />
* [http://code.google.com/p/jsontoken/ Java jsontoken]<br />
* [http://json.codeplex.com/ JSON.NET]<br />
<br />
= See also =<br />
* [[WebAPI/WebPaymentProvider|WebPaymentProvider]]<br />
* [http://www.w3.org/community/webpayments/ W3C WebPayments working group]<br />
* [https://docs.google.com/document/d/1NLKbHVPQXa9uvDBC3cfgOD7sIrtIxi0qDoXMQrxcCsI/edit First draft]<br />
* [https://wiki.mozilla.org/Security/Reviews/navigator.pay Security review]<br />
* [https://docs.google.com/document/d/1EBkzFye6DqCQkMEkXkjLjMvaYYCqvCGJrYhyG38R4DU/edit#heading=h.q13jnkaxpfle Threat model]<br />
* [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments Firefox Marketplace In-app payments]<br />
* [https://wiki.mozilla.org/B2G/QA/WebAPI_Test_Plan/WebPayment Test Plan]<br />
* [https://github.com/mozilla/apps-payment-server/ Original Mozilla Labs Prototype]<br />
<br />
= Similar APIs =<br />
* [https://developers.google.com/commerce/wallet/digital/ Google Wallet's in-app payment API]<br />
* [https://developer.apple.com/appstore/in-app-purchase/index.html iOS in-app payment API]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=WebAPI/WebPayment&diff=677054WebAPI/WebPayment2013-07-16T22:54:06Z<p>Wraithan: Update to show localization of payment products</p>
<hr />
<div>= WebPayment API Specification (DRAFT)=<br />
== Goal ==<br />
The goal of this API is to enable web content to collect payment (or issue a refund) for a virtual good via the <code>navigator.mozPay()</code> function.<br />
<br />
== Status ==<br />
See {{bug|767818}} for the <code>navigator.mozPay()</code> implementation.<br />
<br />
Currently only implemented for B2G.<br />
<br />
== Proposed API ==<br />
Expose the <code>pay</code> function to the <code>navigator</code> object<br />
<code><br />
interface nsIDOMNavigatorPayment<br />
{<br />
DOMRequest mozPay(in jsval jwts);<br />
}<br />
</code><br />
<br />
== Proposers ==<br />
Andreas Gal and Fernando Jiménez. Based on Mike Hanson's and Kumar McMillan's work for [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments Firefox Marketplace in-app payments].<br />
<br />
= WebPayments Architecture (DRAFT) =<br />
== Introduction ==<br />
An open web app will interact with a [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider] via <code>navigator.mozPay()</code> and receive notifications POSTed to its server about the result of each payment. Users will see a payment flow hosted by the Payment Provider in a special window on the device.<br />
<br />
== Payment flow overview ==<br />
* The app initiates a payment by signing a [http://openid.net/specs/draft-jones-json-web-token-07.html JSON Web Token (JWT)] request and calling <code>navigator.mozPay()</code>.<br />
* This starts the buyflow in a content iframe inside a trusted dialog ("chrome dialog").<br />
* A purchasing flow is served from the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]'s server as an HTML5 document inside the trusted dialog.<br />
* The buyer is authenticated by the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider] (via the network (radio), Mozilla Persona assertion or whatever authentication mechanisms the Payment Provider chooses).<br />
* The buyer completes or cancels the purchase.<br />
* The app receives a Javascript callback when the buyer completes or cancels the purchase.<br />
* The app server receives a signed POST request with a Payment Provider transaction identifier indicating that the purchase was completed successfully (or it failed).<br />
<br />
== Detailed payment flow ==<br />
<span style="color:#009000">'''This detailed payment flow is based on Mozilla's [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments initial implementation for Firefox OS] but it could be extended to any other Payment Provider.'''</span><br />
<br />
=== Definitions ===<br />
; Application: Open Web App which offers digital goods to be sold. OWAs charge users via <code>navigator.mozPay()</code> and require a client and server.<br />
; Application Key: A public identifier that can be transmitted in a JSON object so that a Payment Provider can identify the Application.<br />
; Application Secret: A private string shared between Developer and Payment Provider. This will be used to sign [http://openid.net/specs/draft-jones-json-web-token-07.html JSON Web Tokens (JWTs)] and must be securely protected on a web server.<br />
; Developer: Application developer, seller of digital goods.<br />
; Firefox Marketplace: Developer portal and application repository. Developers can submit apps to the [https://marketplace.firefox.com/ Firefox Marketplace] so users can purchase and download the apps. The Firefox Marketplace uses the <code>navigator.mozPay</code> function to charge users for application purchases.<br />
; Payment Provider: A client/server web application that serves content in a special iframe controlled by <code>navigator.mozPay()</code>. This conforms to the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider] spec. The provider accepts payment from a user and disperses income to the Developer.<br />
; User: End user who wants to purchase a digital good.<br />
; User Agent: B2G (Firefox OS)<br />
<br />
=== User sign-in ===<br />
This is an implementation detail of the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]. The <code>navigator.mozPay()</code> API does not prescribe any user authorization scheme. <br />
<br />
In [https://github.com/mozilla/webpay Mozilla's Payment Provider] implementation, users will sign-in via [https://login.persona.org/ Persona].<br />
<br />
=== Developer registration ===<br />
This is an implementation detail of the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]. The <code>navigator.mozPay()</code> API facilities two parties -- a Developer and a Payment Provider -- in making a transaction but it does not facilitate any part of the registration process.<br />
<br />
A developer who creates a JSON Web Token must do so with an Application Secret obtained from the Payment Provider. In [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments Mozilla's implementation], a developer signs up through the [https://marketplace.firefox.com/developers/ Firefox Marketplace Developer Hub], enters bank account details for payouts, obtains an Application Key and Application Secret, and can begin signing JWTs for purchase.<br />
<br />
=== Initiating a Payment ===<br />
* The user opens an Application<br />
* The user finds something interesting to purchase. Let's say it's a game and the user wants to purchase a Magical Unicorn to excel in the game.<br />
* The user clicks a Buy Unicorn button.<br />
* The Application server responds by first signing a [http://openid.net/specs/draft-jones-json-web-token-07.html JSON Web Token (JWT)] using its Application Secret. The JWT is a base64-encoded signed JSON object. The JSON contains all the details about the product such as name, description, price, etc.<br />
* The Application bubbles up the JWT to the client and calls <code>navigator.mozPay([theJWT])</code>. This begins the hosted buy flow within a special window on the User Agent.<br />
<br />
Example of server-side JWT generation in Python using [https://pypi.python.org/pypi/PyJWT-mozilla PyJWT-mozilla]:<br />
<code><pre><br />
paymentJWT = jwt.encode({<br />
"iss": APPLICATION_KEY,<br />
"aud": "marketplace.firefox.com",<br />
"typ": "mozilla/payments/pay/v1",<br />
"iat": 1337357297,<br />
"exp": 1337360897,<br />
"request": {<br />
"id": "915c07fc-87df-46e5-9513-45cb6e504e39",<br />
"pricePoint": 1,<br />
"name": "Magical Unicorn",<br />
"description": "Adventure Game item",<br />
"icons": {<br />
"64": "https://yourapp.com/img/icon-64.png",<br />
"128": "https://yourapp.com/img/icon-128.png"<br />
},<br />
"productData": "user_id=1234&my_session_id=XYZ",<br />
"postbackURL": "https://yourapp.com/payments/postback",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback",<br />
"defaultLocale": "en",<br />
"locales": {<br />
"de": {<br />
"name": "Magisches Einhorn",<br />
"description": "Adventure Game Artikel"<br />
}<br />
}<br />
}<br />
}, APPLICATION_SECRET)<br />
</pre></code><br />
<br />
Here is a detailed explanation of the payment JWT:<br />
*'''iss''' (mandatory): The issuer of the JWT. This is the Application Key assigned during the app registration process for this specific payment provider (e.g. Firefox Marketplace).<br />
*'''typ''' (mandatory): The JWT type. This identifies the payment provider, e.g. Firefox Marketplace, and the JWT version that must be supported by the provider. On the User Agent, typ is used to look up white-listed Payment Providers.<br />
*'''iat''': (mandatory) Issued at time. This is a UTC Unix timestamp of when the JWT was issued.<br />
*'''exp''': (mandatory) Expiration. A UTC Unix timestamp of when the JWT should expire.<br />
*'''nbf''': (optional) Not-before time. A UTC Unix timestamp of the earliest time the JWT can be processed.<br />
*'''request''' (mandatory): Request object.<br />
** '''id''' (mandatory): A unique identifier for the product you are selling. This only needs to be unique within your own catalog, not unique among all products from all apps.<br />
** '''pricePoint''' (mandatory): An identifier that corresponds to a price according to the Payment Provider. For example, pricePoint 1 might translate into €0.89 when the buyer is in Europe or $0.99 when in the US, etc. The exact price point values are managed by the Payment Provider and they may change based on currency exchange rates.<br />
** '''name''' (mandatory): A short description of the product.<br />
** '''description''' (mandatory): A long description of the product.<br />
** '''icons''' (optional): A map of icon URLs for the product you are selling. The keys are width/height pixel values (images must be square). The Payment Provider will use an image at the appropriate size on the payment confirmation page. For details about how Mozilla's Payment Provider handles icons, see the [https://developer.mozilla.org/en-US/docs/Web/Apps/Publishing/In-app_payments payments guide].<br />
** '''productData''' (optional): A freeform string, no longer than 255 characters. This can be anything the app might need to identify the product with when a postback is sent back to the app.<br />
** '''postbackURL''' (mandatory): URL where the payment processor sends an HTTP POST message to whenever a purchase completes. The application server needs to acknowledge these POST messages, or else the transactions will be canceled.<br />
** '''chargebackURL''' (mandatory): URL where the payment processor sends an HTTP POST message to whenever a refund associated with this transaction is done.<br />
** '''defaultLocale''' (mandatory if '''locales''' is defined, otherwise it is optional): Describes what language the '''name''' and '''description''' are in.<br />
** '''locales''' (optional): is a map of one or more locale-specific overrides of the data contained in the in-app product, which UIs use to provide localized views based on the accessing device's locale. For example, if you have Italian readers installing your app, you probably want to give them Italian UI text. Each locale entry is keyed on a language tag ([http://www.ietf.org/rfc/rfc4646.txt RFC 4646]) and contains the keys you want to replace. You can only override name and description.<br />
<br />
{{note | While we validate the '''locales''' and '''defaultLocale''' we do not use them yet. This will be coming soon.}} <br />
<br />
* For a user to make a purchase, the Application must execute the Javascript method <code>navigator.mozPay()</code> with one or more signed payment requests (the JWTs). For example, the app might have a 'buy' button that triggers this method when clicked. Then <code>navigator.mozPay</code> method should take the signed payment JWT or an array of them. It will return a [https://developer.mozilla.org/en/DOM/DOMRequest DOMRequest] object that the developer can use to monitor the progress of the operation.<br />
<code><br />
var request = navigator.mozPay([signedJWT1, signedJWTn]);<br />
request.onsuccess = function () {<br />
// The payment buy flow completed without errors.<br />
// This does NOT mean the payment was successful.<br />
waitForServerPostback();<br />
}<br />
request.onerror = function (errorMsg) {<br />
console.log('navigator.mozPay() error: ' + this.error.name + ': ' + errorMsg);<br />
}<br />
</code><br />
* The <code>navigator.mozPay</code> method will open a payment request confirmation screen based on the received JWTs, so the user can confirm and choose the payment method that is more appropriate for him. B2G would only show the payment providers for the JWT '''typ''' values that are pre-registered in the User Agent. JWTs containing a '''typ''' value not registered in the UA would be considered as invalid.<br />
* Once the user selects a Payment Provider the UA will open a special window (a "chrome" dialog) containing the Payment Provider's buy flow that is registered in the User Agent for the '''typ''' value of the passed JWT (e.g. Firefox Marketplace in the example above).<br />
* Why an array of JWTs? The Developer will have a specific contract with each Payment Provider and will have a unique Application Secret for each provider. When a payment is initiated, the Application must send all JWTs. The user will select only one Payment Provider to complete the purchase. If there is only one JWT to choose from, the user will automatically use that Payment Provider, and this is the case for the first version of B2G.<br />
* The details of the exact buy flow are implemented by the [https://wiki.mozilla.org/WebAPI/WebPaymentProvider Payment Provider]. In Mozilla's pay flow, the user logs in via Persona, enters a PIN, and is presented with details about the item to be purchased.<br />
* The user confirms the purchase or cancels it.<br />
* If the user cancels or something goes wrong with the payment process, the flow returns to the <code>DOMRequest.onerror</code> callback.<br />
<br />
=== Notifications ===<br />
<br />
The Application must only rely on server side notifications to determine the outcome of a purchase. The Payment Provider will POST a confirmation message (a JWT) to the '''postbackURL''' (on success) or the '''chargebackURL''' (on error). The Application provides these URLs in the original JWT request. On a production server, these URLs must be HTTPS. <br />
<br />
The POST request will have a content-type of <code>application/x-www-form-urlencoded</code> and the JWT will be in the '''notice''' form parameter. This JWT contains a copy of the original payment request plus a new response object that has a '''transactionID''' which identifies the Payment Provider's transaction.<br />
<br />
When a JWT is received, the Application first needs to verify the signature using its Application Secret. If the signature is not valid, it probably was not sent from the Payment Provider and should be ignored. If the signtature is valid, then the application server should decode the JWT, record it, and '''respond with a 200 OK that contains the transactionID in plain text'''. If the Application server responds with an error status or does not respond with the right transactionID, the Payment Provider will consider this a failure. It will retry and/or notify the Developer about the failure. The Application must respond to the request in plain text containing just the '''transactionID''' value.<br />
<br />
==== Postback ====<br />
<br />
Here is an example of a JWT POSTed via the '''notice''' parameter to '''postbackURL''' that indicates a transaction was fully processed and was successful:<br />
<br />
<code><pre><br />
{<br />
"iss": "marketplace.firefox.com",<br />
"aud": APPLICATION_KEY,<br />
"typ": "mozilla/payments/pay/postback/v1",<br />
"exp": 1337370900,<br />
"iat": 1337360900,<br />
"request": {<br />
"id": "915c07fc-87df-46e5-9513-45cb6e504e39",<br />
"pricePoint": 1,<br />
"name": "Magical Unicorn",<br />
"description": "Adventure Game item",<br />
"icons": {<br />
"64": "https://yourapp.com/img/icon-64.png",<br />
"128": "https://yourapp.com/img/icon-128.png"<br />
},<br />
"productData": "user_id=1234&my_session_id=XYZ",<br />
"postbackURL": "https://yourapp.com/payments/postback",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback",<br />
"defaultLocale": "en",<br />
"locales": {<br />
"de": {<br />
"name": "Magisches Einhorn",<br />
"description": "Adventure Game Artikel"<br />
}<br />
}<br />
},<br />
"response": {<br />
"transactionID": "webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9"<br />
}<br />
}<br />
</pre></code><br />
<br />
Here is an example response that includes just the transactionID:<br />
<br />
<code><br />
HTTP/1.1 200 OK<br />
Content-Type: text/plain<br />
<br />
webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9<br />
</code><br />
<br />
==== Chargeback ====<br />
<br />
Here is an example of a JWT POSTed via the '''notice''' parameter to '''chargebackURL''' that indicates a transaction was fully processed but was unsuccessful:<br />
<br />
<code><pre><br />
{<br />
"iss": "marketplace.firefox.com",<br />
"aud": APPLICATION_KEY,<br />
"typ": "mozilla/payments/pay/chargeback/v1",<br />
"exp": 1337370900,<br />
"iat": 1337360900,<br />
"request": {<br />
"id": "915c07fc-87df-46e5-9513-45cb6e504e39",<br />
"pricePoint": 1,<br />
"name": "Magical Unicorn",<br />
"description": "Adventure Game item",<br />
"icons": {<br />
"64": "https://yourapp.com/img/icon-64.png",<br />
"128": "https://yourapp.com/img/icon-128.png"<br />
},<br />
"productData": "user_id=1234&my_session_id=XYZ",<br />
"postbackURL": "https://yourapp.com/payments/postback",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback",<br />
"defaultLocale": "en",<br />
"locales": {<br />
"de": {<br />
"name": "Magisches Einhorn",<br />
"description": "Adventure Game Artikel"<br />
}<br />
}<br />
},<br />
"response": {<br />
"transactionID": "webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9",<br />
"reason": "refund"<br />
}<br />
}<br />
</pre></code><br />
<br />
A chargeback JWT might be received instead of or in addition to a postback. The response will contain a '''reason''' attribute, as follows:<br />
; refund: The payment was refunded either upon request of the customer or by an administrator.<br />
; reversal: A buyer has asked the credit card issuer to reverse a transaction after it has been completed. The buyer might do this through the credit card company as part of a dispute.<br />
<br />
Here is an example response that includes just the transactionID:<br />
<br />
<code><br />
HTTP/1.1 200 OK<br />
Content-Type: text/plain<br />
<br />
webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9<br />
</code><br />
<br />
== Refunds ==<br />
<br />
Refunds are not yet supported by the <code>navigator.mozPay</code> API. '''At a future date, an Application may be able to request a refund like this''':<br />
<br />
<code><br />
{<br />
"iss": APPLICATION_KEY,<br />
"aud": "marketplace.firefox.com",<br />
"typ": "mozilla/payments/refund/v1",<br />
"exp": 1337370900,<br />
"iat": 1337360900,<br />
"request": {<br />
"transactionID": "webpay:84294ec6-7352-4dc7-90fd-3d3dd36377e9",<br />
"reason": "User requested refund",<br />
"chargebackURL": "https://yourapp.com/payments/chargeback"<br />
}<br />
}<br />
</code><br />
<br />
This would initiate a refund flow and POST a confirmation JWT when completed.<br />
<br />
= Payment Provider facing API =<br />
<br />
See the [[WebAPI/WebPaymentProvider|WebPaymentProvider]] spec for details on how to implement a payment provider for <code>navigator.mozPay()</code>.<br />
<br />
= Testing =<br />
<br />
[https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS Firefox OS] and the [https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Using_Firefox_OS_Simulator Firefox OS Simulator] ship only with settings to make real payments. If you want to test payments, you can use the simulation feature [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments described here]. To test with a custom Payment Provider you need to adjust your settings.<br />
<br />
Consult the [https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Using_the_B2G_desktop_client#Generating_a_profile B2G guide] for how to set custom settings on a device.<br />
<br />
Here is a helpful setting to disable HTTPS checks for testing:<br />
<br />
<code><br />
pref("dom.payment.skipHTTPSCheck", true);<br />
</code><br />
<br />
Here is a rough example of how you could add a custom Payment Provider:<br />
<br />
<code><br />
pref("dom.payment.provider.1.name", "mockpayprovider");<br />
pref("dom.payment.provider.1.description", "Mock Payment Provider");<br />
pref("dom.payment.provider.1.type", "mock/payments/inapp/v1");<br />
pref("dom.payment.provider.1.uri", "https://mockpayprovider.phpfogapp.com/?req=");<br />
pref("dom.payment.provider.1.requestMethod", "GET");<br />
</code><br />
<br />
== Test apps ==<br />
* https://github.com/ferjm/Payment-tests<br />
* https://github.com/kumar303/inapp-pay-test<br />
<br />
= Current implementation =<br />
[[File:MozPayFlow.jpg|600px|thumb|center|Current implementation]]<br />
<br />
[1] The payment confirmation screen will not be shown if the <code>navigator.mozPay</code> call contains only one valid payment request ([https://bugzilla.mozilla.org/show_bug.cgi?id=793811 Bug 793811])<br />
<br />
[2] Once the payment flow is loaded within the trusted UI the chrome code injects in the payment flow content the necessary functions to notify the platform about the successfull or failed purchase.<br />
<br />
== Modules ==<br />
=== DOM part in Gecko === <br />
Contains the common code that exposes the <code>navigator.mozPay</code> function to the DOM and that is supposed to be shared by all the platforms (B2G, Fennec, Firefox).<br />
<br />
This code lives in [http://mxr.mozilla.org/mozilla-central/source/dom/payment/ dom/payment].<br />
<br />
=== B2G Glue part in Gecko ===<br />
Contains the specific B2G code that triggers the trusted UI creation to embed the payment flow iframe and that injects the required <code>paymentSuccess()</code> and <code>paymentFailed()</code> functions within the payment flow content.<br />
<br />
It implements the <code>nsIPaymentUIGlue</code> interface<br />
<br />
<code><br />
interface nsIPaymentUIGlueCallback<br />
{<br />
void onresult(in DOMString result);<br />
};<br />
<br />
interface nsIPaymentUIGlue<br />
{<br />
// The 'paymentRequestsInfo' contains the payment request information<br />
// for each JWT provided via navigator.mozPay call. <br />
void confirmPaymentRequest(in jsval paymentRequestsInfo,<br />
in nsIPaymentUIGlueCallback successCb,<br />
in nsIPaymentUIGlueCallback errorCb);<br />
<br />
void showPaymentFlow(in nsIPaymentFlowInfo paymentFlowInfo,<br />
in nsIPaymentUIGlueCallback errorCb);<br />
};<br />
</code><br />
<br />
This code lives in [http://mxr.mozilla.org/mozilla-central/source/b2g/components/PaymentGlue.js b2g/components] and [http://mxr.mozilla.org/mozilla-central/source/b2g/chrome/content/payment.js b2g/chrome/content].<br />
<br />
=== Gaia part === <br />
Contains the require code to create, open and close the trusted UI and the payment confirmation screen.<br />
<br />
This code lives in the Gaia system app, specifically [https://github.com/mozilla-b2g/gaia/blob/master/apps/system/js/payment.js apps/system/js/payment.js] and [https://github.com/mozilla-b2g/gaia/blob/master/apps/system/js/popup_manager.js apps/system/js/popup_manager.js]<br />
<br />
== Communication ==<br />
The communication between Gecko and Gaia is done via <code>mozChromeEvent</code> and <code>mozContentEvent</code>, which is a communication mechanism between chrome and the Gaia system app. <code>mozChromeEvent</code> are sent from chrome to content and <code>mozContentEvent</code> are sent from content to crhome. Where "sent" is used loosely here, since "broascast" is probably a better term. This communication is required to control the creation and closure of the trusted UI and to inject the required functions to notify the success or failure of the payment flow within the payment provider content.<br />
<br />
= Helper Libraries =<br />
<br />
These are specific <code>navigator.mozPay()</code> libraries:<br />
* [http://mozpay.readthedocs.org/en/latest/ mozpay-py], a Python library<br />
* [https://github.com/mozilla/mozpay-js mozpay-js], a NodeJS library<br />
<br />
These are generic JWT libraries that you can use:<br />
* [https://pypi.python.org/pypi/PyJWT-mozilla PyJWT-mozilla]<br />
* [https://github.com/progrium/ruby-jwt ruby-jwt]<br />
* [https://github.com/hokaccha/node-jwt-simple node-jwt-simple]<br />
* [https://github.com/luciferous/jwt PHP luciferous/jwt]<br />
* [http://code.google.com/p/jsontoken/ Java jsontoken]<br />
* [http://json.codeplex.com/ JSON.NET]<br />
<br />
= See also =<br />
* [[WebAPI/WebPaymentProvider|WebPaymentProvider]]<br />
* [http://www.w3.org/community/webpayments/ W3C WebPayments working group]<br />
* [https://docs.google.com/document/d/1NLKbHVPQXa9uvDBC3cfgOD7sIrtIxi0qDoXMQrxcCsI/edit First draft]<br />
* [https://wiki.mozilla.org/Security/Reviews/navigator.pay Security review]<br />
* [https://docs.google.com/document/d/1EBkzFye6DqCQkMEkXkjLjMvaYYCqvCGJrYhyG38R4DU/edit#heading=h.q13jnkaxpfle Threat model]<br />
* [https://developer.mozilla.org/en-US/docs/Apps/Publishing/In-app_payments Firefox Marketplace In-app payments]<br />
* [https://wiki.mozilla.org/B2G/QA/WebAPI_Test_Plan/WebPayment Test Plan]<br />
* [https://github.com/mozilla/apps-payment-server/ Original Mozilla Labs Prototype]<br />
<br />
= Similar APIs =<br />
* [https://developers.google.com/commerce/wallet/digital/ Google Wallet's in-app payment API]<br />
* [https://developer.apple.com/appstore/in-app-purchase/index.html iOS in-app payment API]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=MozPDX&diff=674412MozPDX2013-07-09T22:06:54Z<p>Wraithan: /* Mozilla Community in Portland, Oregon */</p>
<hr />
<div>= Mozilla Community in Portland, Oregon =<br />
<br />
* Mailing list: Join the [http://www.red-bean.com/mailman/listinfo/mozilla-pdx mailing list] for notifications for get-togethers, etc.<br />
* IRC: We hang out in [irc://irc.mozilla.org/#mozpdx #mozpdx on irc.mozilla.org].<br />
* Co-working: Mozilla has a collection of accounts at [http://collectiveagency.co/ Collective Agency]. Contact the mailing list or chat room above to ask about meeting up with other Mozillians there and using the space.<br />
* [https://mozillians.org/en-US/group/400-portland Mozillians group]<br />
* [http://pdx.mozillausa.org/ Mozilla Portland Website]<br />
<br />
== Office ==<br />
<br />
Currently we are in above mentioned co-working space, but as of the 22nd of July, 2013 we should be moved into our space at 1120 NW Couch St, Suite 320.<br />
<br />
== People ==<br />
<br />
* Dietrich Ayala ([http://autonome.wordpress.com blog], [http://twitter.com/dietrich twitter]) - works on: Firefox front-end, Jetpack, perf<br />
* Jim Blandy ([http://www.red-bean.com/jimb www]) - works on: ActionMonkey<br />
* Dave Camp - works on: Firefox Developer Tools<br />
* Crystal Beasley<br />
* Allen Wirfs-Brock<br />
* Ben Kero<br />
* Taras Glek<br />
* Wil Clouser<br />
* Jeremy Orem<br />
* Christie Koehler ([http://twitter.com/christiekoehler twitter], [http://subfictional.com blog]) - works on moving various webdev projects through the queue<br />
* Tim Abraldes - works on: Windows Platform Integration<br />
* Benjamin Sternthal [http://twitter.com/bensternthal twitter] - works on WebDev (Project Manager)<br />
* Justin Dow (jabba) - IT/Infrastructure manager<br />
* Matt Grimes - SUMO Analyst<br />
* Bill Selman - Mozilla User Experience Research<br />
* Benjamin Kerensa ([http://twitter.com/bkerensa twitter], [http://benjaminkerensa.com blog]) - Mozilla Reps and [https://webfwd.org/about/team/ WebFWD]<br />
* David Keeler - Security Engineering<br />
* Selena Deckelmann - ([http://chesnok.com/ blog] [http://twitter.com/selenamarie twitter]) WebTools, specifically Socorro and [http://crash-stats.mozilla.org]<br />
* Jonathan "Duke" Leto - WebFWD fellow alumni, Labs Coach, Firefox contributor, etc... [http://duke.leto.net www] [https://twitter.com/dukeleto @dukeleto] [https://github.com/leto github] [http://linkedin.leto.net linkedin] duke@leto.net<br />
* Fred Wenzel - works on: [https://marketplace.firefox.com/developers/ Goodies] for Firefox OS apps developers<br />
* Ed Lim (limed) - IT/System Administrator<br />
* Wraithan (Chris McDonald) - Developer on Firefox Marketplace<br />
<br />
== Places to eat/drink/meet in Portland ==<br />
<br />
* from bkero: http://goo.gl/maps/rrCSi<br />
<br />
<br />
== Lunch ==<br />
<br />
We meet up occasionally for lunch, coworking, etc. Join the list to get notified.<br />
<br />
== See Also ==<br />
* [[SF]]<br />
* [[MV]]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=MozPDX&diff=674409MozPDX2013-07-09T22:06:00Z<p>Wraithan: /* Mozilla Community in Portland, Oregon */</p>
<hr />
<div>= Mozilla Community in Portland, Oregon =<br />
<br />
* Mailing list: Join the [http://www.red-bean.com/mailman/listinfo/mozilla-pdx mailing list] for notifications for get-togethers, etc.<br />
* IRC: We hang out in [irc://irc.mozilla.org/#mozpdx #mozpdx on irc.mozilla.org].<br />
* Co-working: Mozilla has a collection of accounts at [http://collectiveagency.co/ Collective Agency]. Contact the mailing list or chat room above to ask about meeting up with other Mozillians there and using the space.<br />
* Office: Sometime mid 2013-07 (mid July, 2013) the official Mozilla Portland office opens.<br />
* [https://mozillians.org/en-US/group/400-portland Mozillians group]<br />
* [http://pdx.mozillausa.org/ Mozilla Portland Website]<br />
<br />
== Office ==<br />
<br />
Currently we are in above mentioned co-working space, but as of the 22nd of July, 2013 we should be moved into our space at 1120 NW Couch St, Suite 320.<br />
<br />
== People ==<br />
<br />
* Dietrich Ayala ([http://autonome.wordpress.com blog], [http://twitter.com/dietrich twitter]) - works on: Firefox front-end, Jetpack, perf<br />
* Jim Blandy ([http://www.red-bean.com/jimb www]) - works on: ActionMonkey<br />
* Dave Camp - works on: Firefox Developer Tools<br />
* Crystal Beasley<br />
* Allen Wirfs-Brock<br />
* Ben Kero<br />
* Taras Glek<br />
* Wil Clouser<br />
* Jeremy Orem<br />
* Christie Koehler ([http://twitter.com/christiekoehler twitter], [http://subfictional.com blog]) - works on moving various webdev projects through the queue<br />
* Tim Abraldes - works on: Windows Platform Integration<br />
* Benjamin Sternthal [http://twitter.com/bensternthal twitter] - works on WebDev (Project Manager)<br />
* Justin Dow (jabba) - IT/Infrastructure manager<br />
* Matt Grimes - SUMO Analyst<br />
* Bill Selman - Mozilla User Experience Research<br />
* Benjamin Kerensa ([http://twitter.com/bkerensa twitter], [http://benjaminkerensa.com blog]) - Mozilla Reps and [https://webfwd.org/about/team/ WebFWD]<br />
* David Keeler - Security Engineering<br />
* Selena Deckelmann - WebTools, specifically Socorro and [http://crash-stats.mozilla.org]<br />
* Jonathan "Duke" Leto - WebFWD fellow alumni, Labs Coach, Firefox contributor, etc... [http://duke.leto.net www] [https://twitter.com/dukeleto @dukeleto] [https://github.com/leto github] [http://linkedin.leto.net linkedin] duke@leto.net<br />
* Fred Wenzel - works on: [https://marketplace.firefox.com/developers/ Goodies] for Firefox OS apps developers<br />
* Ed Lim (limed) - IT/System Administrator<br />
* Wraithan (Chris McDonald) - Developer on Firefox Marketplace<br />
<br />
== Places to eat/drink/meet in Portland ==<br />
<br />
* from bkero: http://goo.gl/maps/rrCSi<br />
<br />
<br />
== Lunch ==<br />
<br />
We meet up occasionally for lunch, coworking, etc. Join the list to get notified.<br />
<br />
== See Also ==<br />
* [[SF]]<br />
* [[MV]]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2013-05-07&diff=652973Webdev:Meetings:2013-05-072013-05-07T16:59:31Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''9 798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''3A - All Your Base'''<br />
<br />
= Meeting notes =<br />
* Note-taker: mkelly<br />
* Meeting notes: https://etherpad.mozilla.org/webdev-2013-05-07<br />
<br />
= Open Items =<br />
* Intern update<br />
* MDN page-watching-by-email - call for testers<br />
* Scrumbu.gs and Kanban and Github and stuff<br />
* Offsite: functional or product?<br />
<br />
= Roundtable =<br />
== adrian ==<br />
* Socorro<br />
** working on search with elasticsearch (it's in production! but it doesn't work! )<br />
** new search UI on its way<br />
* I made a <small>Flash</small> game with some friends for the Ludum Dare #26. <small>Shame on me. I will punish myself.</small> Please play? http://www.ludumdare.com/compo/ludum-dare-26/?action=preview&uid=20592<br />
<br />
== andy ==<br />
== arron ==<br />
== ashort ==<br />
== basta ==<br />
== bsavage ==<br />
== bensternthal ==<br />
== chuck ==<br />
<br />
== craigcook ==<br />
== cmore ==<br />
<br />
* The [https://wiki.mozilla.org/Webdev/Web_Production Web Productions team] is looking for a [https://careers.mozilla.org/en-US/position/o66qXfwj Senior back-end Python/Django developer]. If you know of anyone good please have them apply. Thanks!<br />
<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== ErikRose ==<br />
== jlongster ==<br />
== jsocol ==<br />
== kumar ==<br />
== lars ==<br />
== laura ==<br />
== lcrouch ==<br />
* Watch-article-by-email<br />
* Elastic Search<br />
<br />
== lonnen ==<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
* Working on a handful of small Flicks bugs<br />
* Started to work on the new Snippets service. Created a repo, failed at setting it up on jenkins. Currently prototyping a custom l10n thing for it.<br />
* Hosted a Python User Group on Monday. Showed off ErikRose's blessings, met a lot of smart people. Will probably start a learning series about Python soon.<br />
<br />
Favorite Cinco de Mayo Food (defined as my favorite food that I consumed on Cinco de Mayo): Cake Batter Ice Cream<br />
<br />
== morgamic ==<br />
== peterbe ==<br />
== piotr ==<br />
== pmac ==<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
== schalk ==<br />
== selena ==<br />
== stuart ==<br />
<br />
== ubernostrum ==<br />
== tofumatt ==<br />
== wenzel ==<br />
== wil ==<br />
== willkg ==<br />
<br />
* did a ton of work on elasticutils 0.7 (not yet released, but soon!)<br />
* continued overhauling search for Kitsune to use the new stuff which unblocks a lot of future development (mostly done?)<br />
* joined the secchamps group<br />
* watched my manager pack his bags, get in his car and drive away<br />
* watched my new manager put his new manager hat on--long live the reign of Ricky!<br />
<br />
== wraithan ==<br />
* Wrote a blog post on consistency: http://tech.wraithan.net/consistency.html<br />
* Got some payment PIN bugs done.<br />
* Reordered geolocation.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=MozPDX&diff=649647MozPDX2013-04-25T22:23:25Z<p>Wraithan: /* People */</p>
<hr />
<div>= Mozilla Community in Portland, Oregon =<br />
<br />
* Mailing list: Join the [http://www.red-bean.com/mailman/listinfo/mozilla-pdx mailing list] for notifications for get-togethers, etc.<br />
* IRC: We hang out in [irc://irc.mozilla.org/#mozpdx #mozpdx on irc.mozilla.org].<br />
* Co-working: Mozilla has a collection of accounts at [http://collectiveagency.co/ Collective Agency]. Contact the mailing list or chat room above to ask about meeting up with other Mozillians there and using the space.<br />
* [https://mozillians.org/en-US/group/400-portland Mozillians group]<br />
* [http://pdx.mozillausa.org/ Mozilla Portland Website]<br />
<br />
== People ==<br />
<br />
* Dietrich Ayala ([http://autonome.wordpress.com blog], [http://twitter.com/dietrich twitter]) - works on: Firefox front-end, Jetpack, perf<br />
* Jim Blandy ([http://www.red-bean.com/jimb www]) - works on: ActionMonkey<br />
* Dave Camp - works on: Firefox Developer Tools<br />
* Crystal Beasley<br />
* Allen Wirfs-Brock<br />
* Ben Kero<br />
* Taras Glek<br />
* Wil Clouser<br />
* Jeremy Orem<br />
* Christie Koehler ([http://twitter.com/christiekoehler twitter], [http://subfictional.com blog]) - works on moving various webdev projects through the queue<br />
* Tim Abraldes - works on: Windows Platform Integration<br />
* Benjamin Sternthal [http://twitter.com/bensternthal twitter] - works on WebDev (Project Manager)<br />
* Justin Dow (jabba) - IT/Infrastructure manager<br />
* Matt Grimes - SUMO Analyst<br />
* Bill Selman - Mozilla User Experience Research<br />
* Benjamin Kerensa ([http://twitter.com/bkerensa twitter], [http://benjaminkerensa.com blog]) - Mozilla Reps and [https://webfwd.org/about/team/ WebFWD]<br />
* David Keeler - Security Engineering<br />
* Selena Deckelmann - WebTools, specifically Socorro and [http://crash-stats.mozilla.org]<br />
* Jonathan "Duke" Leto - WebFWD fellow alumni, Labs Coach, Firefox contributor, etc... [http://duke.leto.net www] [https://twitter.com/dukeleto @dukeleto] [https://github.com/leto github] [http://linkedin.leto.net linkedin] duke@leto.net<br />
* Fred Wenzel - works on: [https://marketplace.firefox.com/developers/ Goodies] for Firefox OS apps developers<br />
* Ed Lim (limed) - IT/System Administrator<br />
* Wraithan (Chris McDonald) - Developer on Firefox Marketplace<br />
<br />
== Lunch ==<br />
<br />
We meet up occasionally for lunch, coworking, etc. Join the list to get notified.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2013-03-26&diff=641559Webdev:Meetings:2013-03-262013-03-26T17:01:11Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''9 798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''3A - All Your Base'''<br />
<br />
= Meeting notes =<br />
* Note-taker: mkelly<br />
* Meeting notes: https://etherpad.mozilla.org/webdev-2013-03-26<br />
<br />
= Open Items =<br />
* Q1 wrapping up, think about Q2 goals<br />
* Time for peer feedback!<br />
** What is effective feedback<br />
** Why the *))(&!@# do we do this all the time?<br />
** How should I interpret feedback?<br />
* LEAD summary - where morgamic was last week<br />
** [http://coachforabetterlife.files.wordpress.com/2010/08/presentation11.jpg Hero's journey], or the importance of faith and allies<br />
** some commentary on how 80s action films totally butcher this formula but somehow still work<br />
* Maybe some Kanban stuff from Luke<br />
<br />
= Roundtable =<br />
== adrian ==<br />
<br />
* Socorro<br />
** Automatic emails are being sent to Firefox user that crash<br />
** elasticsearch is coming, currently testing on stage<br />
** Preparing a new search UI that will be super! <br />
* Participated and helped organize another Game Dev Party in Lyon this weekend, I'll share more about the game we made soon (protip: game jams are awesome! )<br />
<br />
Favourite science thing: http://hehpic.com/eD.jpg<br />
<br />
== andy ==<br />
* payments for marketplace<br />
* api for marketplace<br />
* trying not to hate on tastypie<br />
* writing stupid little packaged apps for the marketplace on car journeys<br />
<br />
== arron ==<br />
== ashort ==<br />
== basta ==<br />
== bsavage ==<br />
== bensternthal ==<br />
== chuck ==<br />
== craigcook ==<br />
== cmore ==<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== ErikRose ==<br />
== jlongster ==<br />
== jsocol ==<br />
<br />
* Input v2 (fjord) is going out this week!<br />
* onGameStart was a great one-day conference.<br />
* Pushed new versions of waffle, statsd.<br />
* Apps leads this month was productive.<br />
* Favorite science thing: it's just a show, you should really just relax.<br />
* UP dev servers should be going up this week.<br />
* Actual favorite science thing: everything and everyone you know is literally made up of the dust of past exploded stars. We are all stardust. Including the band Stardust.<br />
<br />
== kumar ==<br />
== lars ==<br />
== laura ==<br />
* Working out [https://etherpad.mozilla.org/webtools-q22013 Q2 goals]<br />
* Slaving over a hot [https://fhr-dev.allizom.org/en-US/ Firefox Health Report] [https://github.com/mozilla/fhr-jelly repo]<br />
** You can see the prod placeholder in nightly. Try about:healthreport<br />
* Up all night Saturday for an [https://bugzilla.mozilla.org/show_bug.cgi?id=852171 HBase maintenance window]<br />
* Scheming over a [https://etherpad.mozilla.org/telemetry-v1-postmortem postmortem] and [https://etherpad.mozilla.org/telemetry-reboot telemetry reboot] with taras<br />
* Hired a [https://github.com/jezdez new dev]! Starting sometime in q2.<br />
* Going to Boston (the NERD Center!) Thursday to give a talk on [http://monitorama.com/ monitoring Socorro]<br />
<br />
== lcrouch ==<br />
== lonnen ==<br />
* Socorro<br />
** Cron systems visualization and general scheduling improvements<br />
** Ushering components into production<br />
** Wrapping up with Tony (internship ending)<br />
*** Starting up with Tony + gang (senior year project to improve socorro)<br />
* CISPA Action Week<br />
** FF Snippet<br />
** Moz.org frontpage link<br />
* [https://gs1.wac.edgecastcdn.net/8019B6/data.tumblr.com/tumblr_lw28hbKYgC1qb2ysbo1_1280.png The sea is a nightmare without end]<br />
<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
== morgamic ==<br />
== peterbe ==<br />
* Built the prototype for Mozilla office sign-in sheet<br />
** to be run on tablets as a web app<br />
** code name Peekaboo https://github.com/mozilla/peekaboo<br />
** almost ready<br />
* Added a new event suggestion wizard for logged in users of Air Mozilla<br />
** so you don't need file a bug to suggest an event<br />
** landed but not launched yet as we're tuning the tooltips<br />
* Managed to get Pootle 2.5 (master actually) running in parallel on the Verbatim production server<br />
** awaits Milos to set up dev SVN and GIT repos<br />
** awaits some more testing<br />
** done using similar vendor tricks as playdoh https://github.com/peterbe/verbatim/tree/development<br />
* landed quick re-tries for crontabber<br />
** so failing jobs are re-tried every 5 minutes until they work again<br />
<br />
== piotr ==<br />
== pmac ==<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
== schalk ==<br />
== selena ==<br />
== stuart ==<br />
== ubernostrum ==<br />
== tofumatt ==<br />
== wenzel ==<br />
== wil ==<br />
== willkg ==<br />
<br />
Good things:<br />
<br />
* attended PyCon and talked django-browserid and elasticutils with other folks -- there's interest in django-browserid especially after Dan's talk<br />
* worked on elasticutils: robhudson landed a middleware, hanno fixed some testing issues, I fixed the ElasticSearchTestCase (though I think I'm going to change how that works), I fixed the django tasks code, I thought about extending the query API, ...<br />
* worked on updating kitsune search to the latest elasticutils<br />
* helped MDN get elasticsearch working<br />
* finished up a bunch of last-minute fjord fixes for the production rollout for Input (tomorrow!)<br />
<br />
Bad things:<br />
<br />
* made many promises about working on jingo-minify, django-browserid, tower, django-tidings, and other things, but have yet to do the work<br />
<br />
== wraithan ==<br />
* PyCon was wonderfully amazing<br />
* Discovered mkelly's geodude and am excited to use that.<br />
* Feynman talking about rubber bands: http://www.youtube.com/watch?v=baXv_5z7HVY</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev/Beer_And_Tell/March2013&diff=637296Webdev/Beer And Tell/March20132013-03-15T21:27:39Z<p>Wraithan: /* Speakers */</p>
<hr />
<div>= Date, Time, Location =<br />
<br />
2PM Pacific, Friday March 15th<br />
<br />
Webdev Vidyo channel (798).<br />
<br />
If you need to call in:<br />
+1 650 903 0800, x92 or +1 800 707 2533 (password on intranet)<br />
Then enter 9798# <br />
<br />
* Public join link: https://v.mozilla.com/flex.html?roomdirect.html&key=HK3hFFg9X5pw<br />
* Recording: None, recording was down at the time. :(<br />
* Blog post: <br />
<br />
= Speakers =<br />
<p>The limit is 5 minutes per speaker. It's like a lightning talk, but don't feel that you have to have slides in order to make a presentation. <br />
</p><br />
<table class="fullwidth-table"><br />
<tr><br />
<th> Presenter<br />
</th><br />
<th> Topic<br />
</th><br />
<th> Media (links)<br />
</th><br />
<th> More Details<br />
</th><br />
<th> Beer<br />
</th></tr><br />
<br />
<tr><br />
<td>Ian Bicking</td><br />
<td>TowTruck</td><br />
<td>[https://towtruck.mozillalabs.com towtruck.mozillalabs.com], [https://github.com/mozilla/towtruck github]</td><br />
<td>A real-time website collaboration tool</td><br />
<td>Is it too early for scotch? Yeah, it's too early.</td><br />
</tr><br />
<br />
<tr><br />
<td>ednapiranha</td><br />
<td>NoodleConf 2013!!!!1111</td><br />
<td>[http://nooodle.github.com/noodleconf nooodle.github.com/noodleconf]</td><br />
<td>A fake conference but not really fake. Twitter account @noodleconf</td><br />
<td>I'm going to a dubstep, 2-step party tonight. Might drink then.</td><br />
</tr><br />
<br />
<tr><br />
<td>lonnen</td><br />
<td>Panic!</td><br />
<td></td><br />
<td>An industrial killswitch</td><br />
<td>Soda</td><br />
</tr><br />
<br />
<tr><br />
<td>basta</td><br />
<td>Better MDN</td><br />
<td></td><br />
<td>A browser extension making MDN approximately 13 degrees hotter</td><br />
<td>nutt'n</td><br />
</tr><br />
<br />
<tr><br />
<td>Wraithan</td><br />
<td>pytmux</td><br />
<td>https://github.com/wraithan/pytmux</td><br />
<td>Light wrapper around tmux</td><br />
<td>Water (at conf currently)</td><br />
</tr><br />
<br />
</table></div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev/Beer_And_Tell/February2013&diff=520809Webdev/Beer And Tell/February20132013-02-15T21:58:09Z<p>Wraithan: /* Speakers */</p>
<hr />
<div>= Date, Time, Location =<br />
<br />
2PM Pacific, Friday February 15th<br />
<br />
Webdev Vidyo channel (798).<br />
<br />
If you need to call in:<br />
+1 650 903 0800, x92 or +1 800 707 2533 (password on intranet)<br />
Then enter 9798# <br />
<br />
* Public join link: https://v.mozilla.com/flex.html?roomdirect.html&key=HK3hFFg9X5pw<br />
* Recording: <br />
* Blog post: <br />
<br />
= Speakers =<br />
<p>The limit is 5 minutes per speaker. It's like a lightning talk, but don't feel that you have to have slides in order to make a presentation. <br />
</p><br />
<table class="fullwidth-table"><br />
<tr><br />
<th> Presenter<br />
</th><br />
<th> Topic<br />
</th><br />
<th> Media (links)<br />
</th><br />
<th> More Details<br />
</th><br />
<th> Beer<br />
</th></tr><br />
<br />
<tr><br />
<td>mkelly</td><br />
<td>Noodleamp Reborn</td><br />
<td>https://github.com/Osmose/noodleamp</td><br />
<td>It plays the musaks!</td><br />
<td>Dihydrogen Monoxide</td><br />
</tr><br />
<tr><br />
<td>ednapiranha</td><br />
<td>DetourApp</td><br />
<td>https://detourapp.com</td><br />
<td>Ephemeral messaging</td><br />
<td>Some kind of IPA?</td><br />
</tr><br />
<br />
<tr><br />
<td>peterbe</td><br />
<td>django-fancy-cache</td><br />
<td>https://github.com/peterbe/django-fancy-cache</td><br />
<td>https://django-fancy-cache.readthedocs.org/</td><br />
<td>What is a bubbly malt drink?</td><br />
</tr><br />
<br />
<tr><br />
<td>wraithan</td><br />
<td>Leech Tracker</td><br />
<td>http://leechtracker.net</td><br />
<td>http://leechtracker.net/about/</td><br />
<td>A mocha (no beer at this coffee shop)</td><br />
</tr><br />
<br />
</table></div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2013-01-29&diff=508057Webdev:Meetings:2013-01-292013-01-29T17:59:02Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''PB&J'''<br />
<br />
= Meeting notes =<br />
* Note-taker: WILL CAGE and anyone else who wants to participate<br />
* Meeting notes: https://etherpad.mozilla.org/webdev-2013-01-29<br />
<br />
= Open Items =<br />
<br />
= Roundtable =<br />
== adrian ==<br />
== andy ==<br />
== arron ==<br />
== ashort ==<br />
== basta ==<br />
== bsavage ==<br />
== bensternthal ==<br />
== craigcook ==<br />
== cmore ==<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== ErikRose ==<br />
== jlongster ==<br />
== jsocol ==<br />
== kumar ==<br />
== lars ==<br />
== laura ==<br />
== lcrouch ==<br />
== lonnen ==<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
== morgamic ==<br />
== peterbe ==<br />
== piotr ==<br />
== pmac ==<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
== schalk ==<br />
== selena ==<br />
== ubernostrum ==<br />
== tofumatt ==<br />
== wenzel ==<br />
== wil ==<br />
== willkg ==<br />
<br />
* rolled off Gaia and back onto SUMO/Input/elasticutils/etc<br />
* finished up elasticutils pyelasticsearch overhaul<br />
* updated fjord to use elasticutils master tip (with new kung-fu pyelasticsearch magic)<br />
* fixed bulk indexing in pyelasticsearch<br />
* wrote pirate test translation awesomeness (blog post to come soon)<br />
<br />
== wraithan ==<br />
* Fought the plague<br />
* Got several payment blockers done. Including reset flows.<br />
* Helped friends file bugs<br />
* Discussed/filed devtools bugs to make things better.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Conferences&diff=501321Webdev:Conferences2013-01-16T22:25:29Z<p>Wraithan: /* Q2 */</p>
<hr />
<div>Feel free to add also add events to:<br />
* [[Events|Mozilla Events]] (supports iCal and Zimbra subscribing/updates)<br />
<br />
= 2013 =<br />
== Q1 ==<br />
* Feb 2-3 [https://fosdem.org/2013/ Fosdem] Brussels<br />
** r1cky<br />
* Feb 25-Mar 1 [http://confoo.ca/en ConFoo] Montreal, Canada<br />
** andym<br />
** ErikRose (speaking)<br />
** tofumatt<br />
* Feb 26-28 [http://na.apachecon.com/ ApacheCon] Portland, OR<br />
** laura (speaking)<br />
* Mar 15-17 [http://us.pycon.org/ PyCon] Santa Clara, USA<br />
** ashort<br />
** jsocol<br />
** andym<br />
** robhudson<br />
** kumar<br />
** Wraithan<br />
** selenamarie (speaking)<br />
** ErikRose (speaking)<br />
<br />
== Q2 ==<br />
* May [http://2013.djangocon.eu/ DjangoCon] Warsaw, Poland<br />
** andym (talk proposed)<br />
* June 18-21 [http://osbridge.org/ Open Source Bridge] Portland, OR<br />
** Wraithan (proposing multiple talks when proposals open)<br />
<br />
= 2012 =<br />
== Q1 ==<br />
* Jan 11 [http://waza.heroku.com/ Heroku's Waza] San Francisco, USA<br />
** tofumatt may attend<br />
** mkelly<br />
* Jan 16-20 [http://linux.conf.au linux.conf.au] Ballarat, Australia<br />
** laura (speaking)<br />
* Jan 18-20 [http://webvisionsevent.com Webvisions], NYC<br />
** skinny (speaking)<br />
* Feb 4-5 [http://fosdem.org/2012/ FOSDEM 2012], Brussels, Belgium<br />
* Feb 29-Mar 2 [http://confoo.ca/en Confoo] Montréal<br />
** andym (speaking) [http://confoo.ca/en/2012/session/real-time-web-apps-using-python gevent] and [http://confoo.ca/en/2012/session/unit-testing-with-python Unit testing]<br />
* March 7-15 [http://us.pycon.org/2012 pycon] Santa Clara<br />
** Erik (talks)<br />
** james bennett (tutorials)<br />
** kumar<br />
** Rob Hudson<br />
** ashort<br />
** willkg<br />
** mkelly<br />
** ckoehler<br />
** lars<br />
** dd<br />
** timw<br />
** cmore (Django tutorial only [https://us.pycon.org/2012/schedule/presentation/327/ 1] [https://us.pycon.org/2012/schedule/presentation/458/ 2] -- no conf.)<br />
* March 24-25 [http://libreplanet.org/wiki/LibrePlanet2012 LibrePlanet 2012] Cambridge, MA<br />
** willkg<br />
<br />
== Q2 ==<br />
* April 2-3 [http://2012.jsconf.us/ JSConf] Scottsdale, Arizona<br />
** potch<br />
** jlongster (hoping to speak)<br />
** espressive<br />
* April 4-6 [http://web-5.org/ Web-5] Béziers(34), France<br />
** sfoster (speaking)<br />
** robert nyman (speaking)<br />
* April 14-15 [http://rencontres.django-fr.org/2012/ Djangocong] Carnon-Montpellier, France [sponsoring]<br />
** Rik<br />
* May 23-24 [http://gluecon.com/2012/] GLUE Con<br />
** lorchard (?)<br />
* May 25-26 [http://sudweb.fr/2012/schedule/conferences/ SudWeb] Toulouse, France [sponsoring]<br />
** Rik (speaking)<br />
* June 4-8 [http://2012.djangocon.eu/ DjangoCon EU] Zurich, Switzerland<br />
** Rik<br />
* June 26-29 [http://opensourcebridge.org Open Source Bridge] Portland, OR<br />
** ckoehler<br />
** skinny<br />
** lorchard<br />
** laura (speaking)<br />
** espressive (speaking)<br />
** Wraithan (speaking)<br />
** [[tantek]] (speaking)<br />
<br />
== Q3 ==<br />
<br />
* July 2-3 nodeconf [http://www.nodeconf.com/], Portland, OR<br />
* July 5-7 [http://webvisionsevent.com Webvisions], Barcelona<br />
** skinny (speaking)<br />
* July 16-20 [http://www.oscon.com/oscon2012 OSCON], Portland<br />
** andym (speaking)<br />
** laura (speaking)<br />
** fwenzel<br />
* July 20-22, [http://throneofjs.com/ Throne of JS], Toronto, ON<br />
** ednapiranha (local)<br />
** tofumatt<br />
* July 25-26, [https://www.blackhat.com/html/bh-us-12/bh-us-12-home.html BlackHat], Las Vegas, NV<br />
* July 26-29, [http://lanyrd.com/2012/defcon/ Defcon 20], Las Vegas, NV<br />
* Sept 1-2 [http://nz.pycon.org Kiwi Pycon 2012], Dunedin, NZ<br />
** nigelb<br />
** francois<br />
* Sept 3-8 DjangoCon, Washington DC<br />
** jsocol (I've had good luck recruiting/promoting for Moz here) (submitted talks, already got a ticket)<br />
** groovecoder<br />
** pmclanahan<br />
** laura (local)<br />
** wraithan<br />
** lars<br />
** peterbe<br />
** ubernostrum (does not need a Moz-sponsored ticket)<br />
** lonnen<br />
** sneethling<br />
** rhelmer?<br />
** brandonsavage (local)<br />
** mkelly?<br />
* Sept 23-25 [https://thestrangeloop.com/ Strange Loop]<br />
** jlongster<br />
* MozCamp EU Sept 7-8<br />
<br />
== Q4 ==<br />
* Oct 12 [http://tulsatechfest.com Tulsa Tech Fest]<br />
** groovecoder<br />
* Oct 13 Beaver Bar Camp<br />
** Mythmon<br />
* Oct 20-21, NYC, [Tenconf http://tenconf.com/]<br />
** jsocol<br />
** brianloveswords<br />
* Oct 22, NYC, [EmpireJS http://empirejs.org/]<br />
** jsocol<br />
** brianloveswords<br />
** atul<br />
* Oct 30 - Nov 2 [http://www.buildwindows.com/ Microsoft Build 2012]<br />
* ?<br />
* Nov 8-9 CodeConnexx, Indy<br />
** laura (and sheeri!)<br />
* Nov 9-11 Mozilla Festival<br />
** Lonnen<br />
** rdalal<br />
* MozCamp Asia Nov 17-18 (write your name down if you are interested)<br />
** r1cky<br />
* Dec (last week) Chaos Computer Congress (29C3), Berlin<br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2011</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2011 =<br />
== Q1 ==<br />
* Feb 5-6 - [http://fosdem.org/2011/ fosdem] <br />
* Feb 19 - [http://superhappydevhouse.org SuperHappyDevHouse] @ Tech Museum of Innovation in San Jose<br />
** lorchard?<br />
* March 9-11 - [http://confoo.ca/en ConFoo.ca] <br />
** andym (speaking)<br />
* March 11-13 - [http://us.pycon.org/2011/ PyCon US] <br />
** wenzel<br />
** kumar (speaking)<br />
* March 11-15 - [http://sxsw.com/interactive/talks/sessions SXSWinteractive]<br />
** laura (speaking)<br />
<br />
== Q2 ==<br />
* April 9-10 - [http://codeconf.com/ CodeConf]<br />
** jbalogh<br />
* May 10-11 - [http://www.google.com/events/io/2010/ Google I/O] <br />
** lorchard?<br />
* May 25-26, [http://www.gluecon.com/ GlueCon]<br />
** paulc?<br />
* May 27, [http://schoolofdev.com/Tulsa/2011/default.aspx Tulsa School of Dev]<br />
** groovecoder<br />
* June 6-9, [http://djangocon.eu DjangoCon EU]<br />
** andym (speaking)<br />
* June 21-24, [http://opensourcebridge.org Open Source Bridge], Portland OR<br />
** All of us!<br />
** ryansnyder (speaking)<br />
** wenzel (speaking)<br />
* June 27-29, [http://futureofwebapps.com/las-vegas-2011/ The Future of Web Apps], Las Vegas, NV<br />
<br />
== Q3 ==<br />
<br />
* July 25-29, [http://www.oscon.com/oscon2011 OSCON], Portland OR<br />
** kumar?<br />
** laura (speaking)<br />
** (various IT people)<br />
* July 30 - Aug 4, [http://www.blackhat.com/ Blackhat], Las Vegas, NV<br />
** clouserw<br />
* Sept 6-10 - DjangoCon<br />
** davedash (speaking)<br />
** brandonsavage<br />
** tofumatt would like to be put in the raffle<br />
* Sept 16-17 [http://pygotham.org/ PyGotham], New York, NY<br />
** jsocol<br />
* Sept 28-30 [http://omniti.com/surge/2011 Surge], Baltimore MD<br />
<br />
== Q4 ==<br />
* Oct 6-7 - [http://py.codeconf.com/ PyCodeConf 2011 (Miami, Florida, US)] -- "Future of Python" conf put on by the folks from GitHub<br />
** ricky<br />
** laura (speaking)<br />
** wenzel<br />
** erikrose<br />
** jlongster<br />
** timw<br />
** peterbe<br />
* Oct 13-15 - [http://www.paris-web.fr/ ParisWeb 2011] Paris<br />
** Rik - How browsers work<br />
* Oct 20 - [http://www.contactcon.com/ Contact Summit 2011]<br />
** lorchard?<br />
** Contact will explore how to realize the greater promise of social media to promote new forms of culture, commerce, collective action and creativity.<br />
* Oct 22-27 - [http://splashcon.org/2011/ SPLASH (formerly OOPSLA)]. OOPSLA is a >1000-person conference on everything from Haskell to Java to Smalltalk to software engineering in general—always an amazing collection of people. It's in Portland this year.<br />
** erikrose<br />
* Nov 1-2 - [http://www.newgameconf.com/ New Game Conference]<br />
** "The Conference for HTML5 Game Developers" Google and Bocoup are putting this on- we should have a Mozilla presence to keep the debate lively :)<br />
** potch<br />
* Nov 7-11 - [http://na11.apachecon.com/ ApacheCon] Vancouver, BC<br />
* Nov 8-9 - [http://www.hadoopworld.com Hadoop World] NYC<br />
* Nov 8-9 - [http://velocityconf.com/velocityeu/ Velocity Conference EU] Berlin<br />
** Rik<br />
* Nov 9-10 - [http://www.defragcon.com/ Defrag]<br />
* Nov 9-12 - [http://gracehopper.org/2011/ Grace Hopper Celebration of Women in Computing]. PDX Has an Open Source day, Lukas and Stormy are on a panel<br />
** laura?<br />
* Nov 12-13 - [http://somethin-else.org/index.php?post/2011/08/16/Save-the-date%21-Mozilla-Camp-Europe-2011-Berlin-%28Nov-12-13%29 MozCamp Europe 2011] Berlin<br />
** Rik<br />
* Dec 5-7 - [http://www.pmi.org/en/Professional-Development/SeminarsWorld/CourseScheduleDetails.aspx?CourseScheduleID={9CAF9A7C-FFD1-4754-9213-3BF0292E35B5} Project Management Institute's - Learning Simulation]<br />
** cmore<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2010</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2010 =<br />
== Q1 ==<br />
* [http://fosdem.org/2010/ fosdem] Feb 6--7<br />
** wenzel<br />
* [http://sxsw.com/interactive SXSW] March 12-16<br />
** ozten<br />
** jsocol (bump for other folks)<br />
* [http://www.larpcon.com/ LARPcon]<br />
** wclouser<br />
** mccammos<br />
** lorchard (totally have my own boffers)<br />
<br />
== Q2 ==<br />
* [http://aneventapart.com/2010/seattle/ An Event Apart (Seattle)] April 5--7<br />
** jsocol<br />
** rdoherty<br />
* [http://en.oreilly.com/mysql2010/ MySQLConf] April 12--15<br />
** jsocol<br />
* [http://events.jquery.org/2010/sf-bay-area JQuery SF Bay Area Conference] April 24--25<br />
* [http://djangocon.eu/ djangocon.eu] Berlin, May 24--26/28<br />
* [http://www.gluecon.com/2010/ GlueCon] and CloudCamp, Denver, CO May 25--28<br />
** lorchard<br />
* [http://opensourcebridge.org/ Open Source Bridge] Portland, June 1--4<br />
** skeen<br />
* [http://en.oreilly.com/velocity2010 Velocity] June 22--24<br />
* [http://java.sun.com/javaone/ JavaOne] June 22--25<br />
** jbalogh<br />
<br />
== Q3 ==<br />
* [http://en.oreilly.com/oscon2010 OSCON] July 19--23<br />
** lorchard<br />
** lars<br />
** laura (committee, maybe speaking)<br />
** skeen<br />
* [http://www.blackhat.com/ Blackhat] July 24--29<br />
** abuchanan<br />
** paulc<br />
* [http://www.uxweek.com/ UX Week] August 24--27<br />
* [http://djangocon.us/ DjangoCon] September 7--9<br />
** dd - went last year, but I felt it was helpful<br />
** jbalogh - as long as it doesn't conflict with CakeFest, I'm gonna talk about zamboni. In front of people.<br />
** clouserw<br />
** jsocol<br />
** paulc?<br />
** wenzel<br />
** ricky<br />
* [http://ideaconference.org/ IDEA] Sept 14--16<br />
** rdoherty<br />
* [http://www.aneventapart.com/2010/dc/ An Event Apart (DC)] September 16-18<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
* [http://cakefest.org/ CakeFest]<br />
** jbalogh<br />
* [http://www.twicon.org/ TwiCon]<br />
** morgamic - I will be presenting on why Jake is better than Edward.<br />
** fligtarsmom<br />
* [http://omniti.com/surge/2010 Surge] Sept 30 - Oct 1<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://www.uist2010.org/ UIST (NYC)] Oct 3-6<br />
* [http://futureofwebapps.com/london-2010/ Future of Web Apps (London)] Oct 4-6<br />
* [http://fronteers.nl/congres Fronteers], Oct 4-8<br />
* [http://www.cloudera.com/company/events/hadoop-world-2010 Hadoop World] Oct 12<br />
* [http://ar.pycon.org/2010/about/ PyCon Argentina], Oct 15-16<br />
** Ian: I'll be giving a keynote<br />
* [http://www.pythonbrasil.org.br/2010 Python Brasil], Oct 21-23<br />
** Ian: I'll be giving a keynote here too<br />
* [http://www.aneventapart.com/2010/sandiego/ An Event Apart (San Diego)] Nov 1-2<br />
<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2009</div><br />
<div class="NavContent" style="text-align:left"><br />
= 2009 =<br />
== Q2 ==<br />
* [http://java.sun.com/javaone/ JavaOne]<br />
* Velocity<br />
** rdoherty<br />
** jbalogh (if anyone else wants to bump me out and come down, that's cool)<br />
<br />
== Q3 ==<br />
* Blackhat<br />
** clouserw<br />
* OSCON<br />
** ozten<br />
** lars<br />
** laura<br />
* [http://djangocon09.eventbrite.com/ DjangoCon]<br />
** ddash<br />
** jbalogh<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://ideaconference.org/ IDEA] Sept 14-16<br />
** Neil (?)<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
** might be interesting?<br />
</div><br />
</div><br />
<br />
== Related ==<br />
* [[Events]]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Conferences&diff=498547Webdev:Conferences2013-01-10T19:12:07Z<p>Wraithan: /* Q1 */</p>
<hr />
<div>Feel free to add also add events to:<br />
* [[Events|Mozilla Events]] (supports iCal and Zimbra subscribing/updates)<br />
<br />
= 2013 =<br />
== Q1 ==<br />
* Feb 25-Mar 1 [http://confoo.ca/en ConFoo] Montreal, Canada<br />
** andym<br />
** ErikRose<br />
** tofumatt<br />
* Feb 26-28 [http://na.apachecon.com/ ApacheCon] Portland, OR<br />
** laura (speaking)<br />
* Mar 15-17 [http://us.pycon.org/ PyCon] Santa Clara, USA<br />
** ashort<br />
** jsocol<br />
** andym<br />
** robhudson<br />
** kumar<br />
** Wraithan<br />
<br />
== Q2 ==<br />
* May [http://2013.djangocon.eu/ DjangoCon] Warsaw, Poland<br />
** andym (talk proposed)<br />
<br />
= 2012 =<br />
== Q1 ==<br />
* Jan 11 [http://waza.heroku.com/ Heroku's Waza] San Francisco, USA<br />
** tofumatt may attend<br />
** mkelly<br />
* Jan 16-20 [http://linux.conf.au linux.conf.au] Ballarat, Australia<br />
** laura (speaking)<br />
* Jan 18-20 [http://webvisionsevent.com Webvisions], NYC<br />
** skinny (speaking)<br />
* Feb 4-5 [http://fosdem.org/2012/ FOSDEM 2012], Brussels, Belgium<br />
* Feb 29-Mar 2 [http://confoo.ca/en Confoo] Montréal<br />
** andym (speaking) [http://confoo.ca/en/2012/session/real-time-web-apps-using-python gevent] and [http://confoo.ca/en/2012/session/unit-testing-with-python Unit testing]<br />
* March 7-15 [http://us.pycon.org/2012 pycon] Santa Clara<br />
** Erik (talks)<br />
** james bennett (tutorials)<br />
** kumar<br />
** Rob Hudson<br />
** ashort<br />
** willkg<br />
** mkelly<br />
** ckoehler<br />
** lars<br />
** dd<br />
** timw<br />
** cmore (Django tutorial only [https://us.pycon.org/2012/schedule/presentation/327/ 1] [https://us.pycon.org/2012/schedule/presentation/458/ 2] -- no conf.)<br />
* March 24-25 [http://libreplanet.org/wiki/LibrePlanet2012 LibrePlanet 2012] Cambridge, MA<br />
** willkg<br />
<br />
== Q2 ==<br />
* April 2-3 [http://2012.jsconf.us/ JSConf] Scottsdale, Arizona<br />
** potch<br />
** jlongster (hoping to speak)<br />
** espressive<br />
* April 4-6 [http://web-5.org/ Web-5] Béziers(34), France<br />
** sfoster (speaking)<br />
** robert nyman (speaking)<br />
* April 14-15 [http://rencontres.django-fr.org/2012/ Djangocong] Carnon-Montpellier, France [sponsoring]<br />
** Rik<br />
* May 23-24 [http://gluecon.com/2012/] GLUE Con<br />
** lorchard (?)<br />
* May 25-26 [http://sudweb.fr/2012/schedule/conferences/ SudWeb] Toulouse, France [sponsoring]<br />
** Rik (speaking)<br />
* June 4-8 [http://2012.djangocon.eu/ DjangoCon EU] Zurich, Switzerland<br />
** Rik<br />
* June 26-29 [http://opensourcebridge.org Open Source Bridge] Portland, OR<br />
** ckoehler<br />
** skinny<br />
** lorchard<br />
** laura (speaking)<br />
** espressive (speaking)<br />
** Wraithan (speaking)<br />
** [[tantek]] (speaking)<br />
<br />
== Q3 ==<br />
<br />
* July 2-3 nodeconf [http://www.nodeconf.com/], Portland, OR<br />
* July 5-7 [http://webvisionsevent.com Webvisions], Barcelona<br />
** skinny (speaking)<br />
* July 16-20 [http://www.oscon.com/oscon2012 OSCON], Portland<br />
** andym (speaking)<br />
** laura (speaking)<br />
** fwenzel<br />
* July 20-22, [http://throneofjs.com/ Throne of JS], Toronto, ON<br />
** ednapiranha (local)<br />
** tofumatt<br />
* July 25-26, [https://www.blackhat.com/html/bh-us-12/bh-us-12-home.html BlackHat], Las Vegas, NV<br />
* July 26-29, [http://lanyrd.com/2012/defcon/ Defcon 20], Las Vegas, NV<br />
* Sept 1-2 [http://nz.pycon.org Kiwi Pycon 2012], Dunedin, NZ<br />
** nigelb<br />
** francois<br />
* Sept 3-8 DjangoCon, Washington DC<br />
** jsocol (I've had good luck recruiting/promoting for Moz here) (submitted talks, already got a ticket)<br />
** groovecoder<br />
** pmclanahan<br />
** laura (local)<br />
** wraithan<br />
** lars<br />
** peterbe<br />
** ubernostrum (does not need a Moz-sponsored ticket)<br />
** lonnen<br />
** sneethling<br />
** rhelmer?<br />
** brandonsavage (local)<br />
** mkelly?<br />
* Sept 23-25 [https://thestrangeloop.com/ Strange Loop]<br />
** jlongster<br />
* MozCamp EU Sept 7-8<br />
<br />
== Q4 ==<br />
* Oct 12 [http://tulsatechfest.com Tulsa Tech Fest]<br />
** groovecoder<br />
* Oct 13 Beaver Bar Camp<br />
** Mythmon<br />
* Oct 20-21, NYC, [Tenconf http://tenconf.com/]<br />
** jsocol<br />
** brianloveswords<br />
* Oct 22, NYC, [EmpireJS http://empirejs.org/]<br />
** jsocol<br />
** brianloveswords<br />
** atul<br />
* Oct 30 - Nov 2 [http://www.buildwindows.com/ Microsoft Build 2012]<br />
* ?<br />
* Nov 8-9 CodeConnexx, Indy<br />
** laura (and sheeri!)<br />
* Nov 9-11 Mozilla Festival<br />
** Lonnen<br />
** rdalal<br />
* MozCamp Asia Nov 17-18 (write your name down if you are interested)<br />
** r1cky<br />
* Dec (last week) Chaos Computer Congress (29C3), Berlin<br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2011</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2011 =<br />
== Q1 ==<br />
* Feb 5-6 - [http://fosdem.org/2011/ fosdem] <br />
* Feb 19 - [http://superhappydevhouse.org SuperHappyDevHouse] @ Tech Museum of Innovation in San Jose<br />
** lorchard?<br />
* March 9-11 - [http://confoo.ca/en ConFoo.ca] <br />
** andym (speaking)<br />
* March 11-13 - [http://us.pycon.org/2011/ PyCon US] <br />
** wenzel<br />
** kumar (speaking)<br />
* March 11-15 - [http://sxsw.com/interactive/talks/sessions SXSWinteractive]<br />
** laura (speaking)<br />
<br />
== Q2 ==<br />
* April 9-10 - [http://codeconf.com/ CodeConf]<br />
** jbalogh<br />
* May 10-11 - [http://www.google.com/events/io/2010/ Google I/O] <br />
** lorchard?<br />
* May 25-26, [http://www.gluecon.com/ GlueCon]<br />
** paulc?<br />
* May 27, [http://schoolofdev.com/Tulsa/2011/default.aspx Tulsa School of Dev]<br />
** groovecoder<br />
* June 6-9, [http://djangocon.eu DjangoCon EU]<br />
** andym (speaking)<br />
* June 21-24, [http://opensourcebridge.org Open Source Bridge], Portland OR<br />
** All of us!<br />
** ryansnyder (speaking)<br />
** wenzel (speaking)<br />
* June 27-29, [http://futureofwebapps.com/las-vegas-2011/ The Future of Web Apps], Las Vegas, NV<br />
<br />
== Q3 ==<br />
<br />
* July 25-29, [http://www.oscon.com/oscon2011 OSCON], Portland OR<br />
** kumar?<br />
** laura (speaking)<br />
** (various IT people)<br />
* July 30 - Aug 4, [http://www.blackhat.com/ Blackhat], Las Vegas, NV<br />
** clouserw<br />
* Sept 6-10 - DjangoCon<br />
** davedash (speaking)<br />
** brandonsavage<br />
** tofumatt would like to be put in the raffle<br />
* Sept 16-17 [http://pygotham.org/ PyGotham], New York, NY<br />
** jsocol<br />
* Sept 28-30 [http://omniti.com/surge/2011 Surge], Baltimore MD<br />
<br />
== Q4 ==<br />
* Oct 6-7 - [http://py.codeconf.com/ PyCodeConf 2011 (Miami, Florida, US)] -- "Future of Python" conf put on by the folks from GitHub<br />
** ricky<br />
** laura (speaking)<br />
** wenzel<br />
** erikrose<br />
** jlongster<br />
** timw<br />
** peterbe<br />
* Oct 13-15 - [http://www.paris-web.fr/ ParisWeb 2011] Paris<br />
** Rik - How browsers work<br />
* Oct 20 - [http://www.contactcon.com/ Contact Summit 2011]<br />
** lorchard?<br />
** Contact will explore how to realize the greater promise of social media to promote new forms of culture, commerce, collective action and creativity.<br />
* Oct 22-27 - [http://splashcon.org/2011/ SPLASH (formerly OOPSLA)]. OOPSLA is a >1000-person conference on everything from Haskell to Java to Smalltalk to software engineering in general—always an amazing collection of people. It's in Portland this year.<br />
** erikrose<br />
* Nov 1-2 - [http://www.newgameconf.com/ New Game Conference]<br />
** "The Conference for HTML5 Game Developers" Google and Bocoup are putting this on- we should have a Mozilla presence to keep the debate lively :)<br />
** potch<br />
* Nov 7-11 - [http://na11.apachecon.com/ ApacheCon] Vancouver, BC<br />
* Nov 8-9 - [http://www.hadoopworld.com Hadoop World] NYC<br />
* Nov 8-9 - [http://velocityconf.com/velocityeu/ Velocity Conference EU] Berlin<br />
** Rik<br />
* Nov 9-10 - [http://www.defragcon.com/ Defrag]<br />
* Nov 9-12 - [http://gracehopper.org/2011/ Grace Hopper Celebration of Women in Computing]. PDX Has an Open Source day, Lukas and Stormy are on a panel<br />
** laura?<br />
* Nov 12-13 - [http://somethin-else.org/index.php?post/2011/08/16/Save-the-date%21-Mozilla-Camp-Europe-2011-Berlin-%28Nov-12-13%29 MozCamp Europe 2011] Berlin<br />
** Rik<br />
* Dec 5-7 - [http://www.pmi.org/en/Professional-Development/SeminarsWorld/CourseScheduleDetails.aspx?CourseScheduleID={9CAF9A7C-FFD1-4754-9213-3BF0292E35B5} Project Management Institute's - Learning Simulation]<br />
** cmore<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2010</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2010 =<br />
== Q1 ==<br />
* [http://fosdem.org/2010/ fosdem] Feb 6--7<br />
** wenzel<br />
* [http://sxsw.com/interactive SXSW] March 12-16<br />
** ozten<br />
** jsocol (bump for other folks)<br />
* [http://www.larpcon.com/ LARPcon]<br />
** wclouser<br />
** mccammos<br />
** lorchard (totally have my own boffers)<br />
<br />
== Q2 ==<br />
* [http://aneventapart.com/2010/seattle/ An Event Apart (Seattle)] April 5--7<br />
** jsocol<br />
** rdoherty<br />
* [http://en.oreilly.com/mysql2010/ MySQLConf] April 12--15<br />
** jsocol<br />
* [http://events.jquery.org/2010/sf-bay-area JQuery SF Bay Area Conference] April 24--25<br />
* [http://djangocon.eu/ djangocon.eu] Berlin, May 24--26/28<br />
* [http://www.gluecon.com/2010/ GlueCon] and CloudCamp, Denver, CO May 25--28<br />
** lorchard<br />
* [http://opensourcebridge.org/ Open Source Bridge] Portland, June 1--4<br />
** skeen<br />
* [http://en.oreilly.com/velocity2010 Velocity] June 22--24<br />
* [http://java.sun.com/javaone/ JavaOne] June 22--25<br />
** jbalogh<br />
<br />
== Q3 ==<br />
* [http://en.oreilly.com/oscon2010 OSCON] July 19--23<br />
** lorchard<br />
** lars<br />
** laura (committee, maybe speaking)<br />
** skeen<br />
* [http://www.blackhat.com/ Blackhat] July 24--29<br />
** abuchanan<br />
** paulc<br />
* [http://www.uxweek.com/ UX Week] August 24--27<br />
* [http://djangocon.us/ DjangoCon] September 7--9<br />
** dd - went last year, but I felt it was helpful<br />
** jbalogh - as long as it doesn't conflict with CakeFest, I'm gonna talk about zamboni. In front of people.<br />
** clouserw<br />
** jsocol<br />
** paulc?<br />
** wenzel<br />
** ricky<br />
* [http://ideaconference.org/ IDEA] Sept 14--16<br />
** rdoherty<br />
* [http://www.aneventapart.com/2010/dc/ An Event Apart (DC)] September 16-18<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
* [http://cakefest.org/ CakeFest]<br />
** jbalogh<br />
* [http://www.twicon.org/ TwiCon]<br />
** morgamic - I will be presenting on why Jake is better than Edward.<br />
** fligtarsmom<br />
* [http://omniti.com/surge/2010 Surge] Sept 30 - Oct 1<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://www.uist2010.org/ UIST (NYC)] Oct 3-6<br />
* [http://futureofwebapps.com/london-2010/ Future of Web Apps (London)] Oct 4-6<br />
* [http://fronteers.nl/congres Fronteers], Oct 4-8<br />
* [http://www.cloudera.com/company/events/hadoop-world-2010 Hadoop World] Oct 12<br />
* [http://ar.pycon.org/2010/about/ PyCon Argentina], Oct 15-16<br />
** Ian: I'll be giving a keynote<br />
* [http://www.pythonbrasil.org.br/2010 Python Brasil], Oct 21-23<br />
** Ian: I'll be giving a keynote here too<br />
* [http://www.aneventapart.com/2010/sandiego/ An Event Apart (San Diego)] Nov 1-2<br />
<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2009</div><br />
<div class="NavContent" style="text-align:left"><br />
= 2009 =<br />
== Q2 ==<br />
* [http://java.sun.com/javaone/ JavaOne]<br />
* Velocity<br />
** rdoherty<br />
** jbalogh (if anyone else wants to bump me out and come down, that's cool)<br />
<br />
== Q3 ==<br />
* Blackhat<br />
** clouserw<br />
* OSCON<br />
** ozten<br />
** lars<br />
** laura<br />
* [http://djangocon09.eventbrite.com/ DjangoCon]<br />
** ddash<br />
** jbalogh<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://ideaconference.org/ IDEA] Sept 14-16<br />
** Neil (?)<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
** might be interesting?<br />
</div><br />
</div><br />
<br />
== Related ==<br />
* [[Events]]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2012-10-23&diff=482122Webdev:Meetings:2012-10-232012-10-23T17:05:56Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''PB&J'''<br />
<br />
= Meeting notes =<br />
* Note-taker: <who><br />
* Meeting notes: <etherpad link><br />
<br />
= Open Items =<br />
* Security - yvan!<br />
* Goals [https://etherpad.mozilla.org/webdev-q4-2012 etherpad] | [https://intranet.mozilla.org/2012Q4Goals#Web_Development intranet]<br />
* Gaia update - James<br />
* LCD screens?!<br />
* Swag rep<br />
<br />
= Roundtable =<br />
== adrian ==<br />
== andy ==<br />
<br />
* marketplace submission flow, payments, breaking things<br />
* hopefully spend some time looking at Django proxy models, ugh<br />
<br />
== arron ==<br />
== ashort ==<br />
== aricaud ==<br />
== basta ==<br />
== bsavage ==<br />
== bensternthal ==<br />
== craigcook ==<br />
== ckoehler ==<br />
== cmore ==<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== jlongster ==<br />
== jsocol ==<br />
== kumar ==<br />
== lars ==<br />
* Socorro<br />
** attempting to rationalize Socorro install<br />
* Life<br />
** kicking the dirt beneath my feet<br />
<br />
== laura ==<br />
* To respond to morgamic's point: [http://www.youtube.com/watch?v=R_5XyMUwDMc http://www.youtube.com/watch?v=R_5XyMUwDMc]<br />
<br />
== lcrouch ==<br />
== lonnen ==<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
== morgamic ==<br />
* Hiring interns!<br />
* Picking up interviews, thanks to recruiting for speeding things up (yay!)<br />
* Went to [http://www.flickr.com/photos/morgamic/sets/72157631814094423/ beaver bar camp] last weekend<br />
<br />
== peterbe ==<br />
== piotr ==<br />
== pmac ==<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
== schalk ==<br />
== selena ==<br />
== ubernostrum ==<br />
== tofumatt ==<br />
<br />
* Proposed a talk with r1cky for MozCamp<br />
* Working on cool apps for examples/showcases and just because we need them<br />
* working on app templates from the previous point<br />
* r2d2b2g!<br />
* interviews too<br />
<br />
I'll be in the Bay Area in a few weeks (Nov 3-10). Yay!<br />
<br />
== wenzel ==<br />
* The devhub is ever evolving. More goodness (videos, screencasts, etc.) coming!<br />
* interviewing a bunch of webdev candidates lately<br />
* strategizing over quality apps, apps editors and such.<br />
<br />
== wil ==<br />
== willkg ==<br />
== wraithan ==<br />
* Work<br />
** Backend for PIN stuff is done<br />
** Critical blocklist feature nearly complete<br />
* Life<br />
** Have only slept 4 hours since waking up at Noon on Sunday.<br />
** Got more work done on my python tattoo, super stoked about that.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2012-10-23&diff=482116Webdev:Meetings:2012-10-232012-10-23T17:00:58Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''PB&J'''<br />
<br />
= Meeting notes =<br />
* Note-taker: <who><br />
* Meeting notes: <etherpad link><br />
<br />
= Open Items =<br />
* Security - yvan!<br />
* Goals [https://etherpad.mozilla.org/webdev-q4-2012 etherpad] | [https://intranet.mozilla.org/2012Q4Goals#Web_Development intranet]<br />
* Gaia update - James<br />
* LCD screens?!<br />
* Swag rep<br />
<br />
= Roundtable =<br />
== adrian ==<br />
== andy ==<br />
== arron ==<br />
== ashort ==<br />
== aricaud ==<br />
== basta ==<br />
== bsavage ==<br />
== bensternthal ==<br />
== craigcook ==<br />
== ckoehler ==<br />
== cmore ==<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== jlongster ==<br />
== jsocol ==<br />
== kumar ==<br />
== lars ==<br />
* Socorro<br />
** attempting to rationalize Socorro install<br />
* Life<br />
** kicking the dirt beneath my feet<br />
<br />
== laura ==<br />
== lcrouch ==<br />
== lonnen ==<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
== morgamic ==<br />
* Hiring interns!<br />
* Picking up interviews, thanks to recruiting for speeding things up (yay!)<br />
* Went to [http://www.flickr.com/photos/morgamic/sets/72157631814094423/ beaver bar camp] last weekend<br />
<br />
== peterbe ==<br />
== piotr ==<br />
== pmac ==<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
== schalk ==<br />
== selena ==<br />
== ubernostrum ==<br />
== tofumatt ==<br />
== wenzel ==<br />
* The devhub is ever evolving. More goodness (videos, screencasts, etc.) coming!<br />
* interviewing a bunch of webdev candidates lately<br />
* strategizing over quality apps, apps editors and such.<br />
<br />
== wil ==<br />
== willkg ==<br />
== wraithan ==<br />
* Work<br />
** Backend for PIN stuff is done<br />
** Critical blocklist feature nearly complete<br />
* Life<br />
** Have only slept 4 hours since waking up at Noon on Sunday.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2012-10-23&diff=482115Webdev:Meetings:2012-10-232012-10-23T16:59:49Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''PB&J'''<br />
<br />
= Meeting notes =<br />
* Note-taker: <who><br />
* Meeting notes: <etherpad link><br />
<br />
= Open Items =<br />
* Security - yvan!<br />
* Goals [https://etherpad.mozilla.org/webdev-q4-2012 etherpad] | [https://intranet.mozilla.org/2012Q4Goals#Web_Development intranet]<br />
* Gaia update - James<br />
* LCD screens?!<br />
* Swag rep<br />
<br />
= Roundtable =<br />
== adrian ==<br />
== andy ==<br />
== arron ==<br />
== ashort ==<br />
== aricaud ==<br />
== basta ==<br />
== bsavage ==<br />
== bensternthal ==<br />
== craigcook ==<br />
== ckoehler ==<br />
== cmore ==<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== jlongster ==<br />
== jsocol ==<br />
== kumar ==<br />
== lars ==<br />
* Socorro<br />
** attempting to rationalize Socorro install<br />
* Life<br />
** kicking the dirt beneath my feet<br />
<br />
== laura ==<br />
== lcrouch ==<br />
== lonnen ==<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
== morgamic ==<br />
* Hiring interns!<br />
* Picking up interviews, thanks to recruiting for speeding things up (yay!)<br />
* Went to [http://www.flickr.com/photos/morgamic/sets/72157631814094423/ beaver bar camp] last weekend<br />
<br />
== peterbe ==<br />
== piotr ==<br />
== pmac ==<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
== schalk ==<br />
== selena ==<br />
== ubernostrum ==<br />
== tofumatt ==<br />
== wenzel ==<br />
* The devhub is ever evolving. More goodness (videos, screencasts, etc.) coming!<br />
* interviewing a bunch of webdev candidates lately<br />
* strategizing over quality apps, apps editors and such.<br />
<br />
== wil ==<br />
== willkg ==<br />
== wraithan ==<br />
Work<br />
* Backend for PIN stuff is done<br />
* Critical blocklist feature nearly complete<br />
Life<br />
* Have only slept 4 hours since waking up at Noon on Sunday.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Marketplace/PaymentServer&diff=481410Marketplace/PaymentServer2012-10-19T23:49:26Z<p>Wraithan: /* Payment Server */</p>
<hr />
<div>==Motivation==<br />
<br />
Marketplace and AMO has an integrated payments system. This does the interaction with our payments system in the same process as the rest of the Marketplace and stores the data in the same database for several reasons this is undesirable.<br />
<br />
This server will act as an independent server that will have it's own code base, servers and so on. Initially this will support Paypal, but if we support multiple sources, it will do that. If we ever move to PCI compliance, hopefully this will be the only piece that will need to be PCI compliant, sheltering the rest of Marketplace.<br />
<br />
<b>Update October 2012</b>: Paypal support is still there in solitude, but not in the marketplace. Bango support is now being added. We'll use the word payment provider to refer to the provider, Paypal or Bango.<br />
<br />
==Overview==<br />
<br />
The app will be a playdoh Django app. It won't have any admin interface, it will just have an API, possibly using django-tastypie. This will allow us to rapidly move over data and code over from the existing marketplace.<br />
<br />
The payment server code is called solitude: https://github.com/mozilla/solitude<br />
<br />
===Netops===<br />
<br />
The server should only be accessible from the webheads. The server should be able to make requests out to payment providers and receive responses.<br />
<br />
===IPNs===<br />
<br />
Paypal (only) sends a response to every transaction called an IPN. We need to handle the IPN and process that in both the marketplace and the payment server. For example on a refund, we need to process that in the payment server and if its all correct, process the refund and make sure that the receipt is invalidated (for example).<br />
<br />
===Marketplace===<br />
<br />
Marketplace will talk to the Payment Server using a REST HTTPS interface. Requests will be signed using JWT to validate it came from a trusted source. A common secret for signing will be put on the webheads/payment server.<br />
<br />
===Logging===<br />
<br />
We'll log to the CEF log and to syslog in a similar fashion to the marketplace, however they'll be separate logs. All logging should obfuscate or truncate sensitive values so that we don't leak any confidential data into our logs. <br />
<br />
We will need to log specific IDs for support questions. For Paypal, that is the correlation ID.<br />
<br />
===statsd, nagios etc===<br />
<br />
Yeah let's do that so we can see how the server is running.<br />
<br />
==APIs==<br />
<br />
I'll spec out the first example and we'll fill out the rest as we go along. There will probably be more API's than this.<br />
<br />
===Paypal example: get Paykey===<br />
<br />
Gets the paykey from paypal:<br />
<br />
POST /paypal/pay<br />
<br />
JSON body will contain:<br />
<br />
{'user_id': 123, 'app_id': '456', 'amount': 1.00, 'currency': 'USD', 'use_preapproval': true}<br />
<br />
This will do lookups of the user and the app. If the user doesn't exist, it will create all the data. For an app to be sold, the paypal_id of the app must be registered with the server already<br />
<br />
If use_preapproval is true, we'll try to use the preapproval token for that user if present.<br />
<br />
Example with pre-approval that worked:<br />
<br />
{'user_id': 123, 'app_id': 456, 'amount': 1.00, 'currency': 'USD', 'use_preapproval': true,<br />
'status': 'completed'}<br />
<br />
Example without pre-approval that worked, generating a paykey:<br />
<br />
{'user_id': 123, 'app_id': 456, 'amount': 1.00, 'currency': 'USD', 'use_preapproval': false,<br />
'status': 'created', 'paykey': 'xxxx'}<br />
<br />
We are passing back the one time use paykey so that the front end can fire off the Paypal process so the user can approve the process.<br />
<br />
The fact that we are using paypal is implied by the URL namespace.<br />
<br />
===Paypal example: Preapproval===<br />
<br />
This will be where a user creates or removes pre-approval from their account. There is a multi stage step to this process.<br />
<br />
* Marketplace calls the Payment server to get the pre-approval URL. The Payment server will store the temporary pre-approval key created by the Payment server.<br />
<br />
* Marketplace bounces the user to Paypal and waits for the reply.<br />
<br />
* When the reply is positive the Marketplace pings the payment server and the pre-approval key is moved to the permanent storage.<br />
<br />
===Paypal example: Check purchase===<br />
<br />
This will check that a purchase has gone through. The pre-approval will do this automatically but there are stages in the marketplace where we need to do this manually.<br />
<br />
===Paypal example: Refund===<br />
<br />
Refunds the payment.<br />
<br />
===Paypal example: Gets personal data===<br />
<br />
This has multiple steps. First we get the Paypal URL to bounce the user too and return that to the marketplace. Once the permissions are in place we'll call the Paypal API's and store them in the Payment server.<br />
<br />
===Paypal example: Check Paypal id===<br />
<br />
Used to check that a Paypal id is valid.<br />
<br />
===Paypal example: App paypal data===<br />
<br />
Stores or gets the paypal data for an app. This will likely just be the paypal id. This will allow the devhub pages to get and set this value. It will probably be acceptable for the marketplace to cache this temporarily in memcache for the developer pages, but should never be persisted for longer than is needed.<br />
<br />
===Paypal example: Check app===<br />
<br />
For an app, run the checks that check the app is valid to be sold on the marketplace.<br />
<br />
==Data==<br />
<br />
Data will be divided in the following ways.<br />
<br />
For a list of Bango data see: https://wiki.mozilla.org/Marketplace/BangoData<br />
<br />
===Marketplace===<br />
<br />
The marketplace will know:<br />
<br />
* what an app costs or what recommended donations<br />
* what app a user has installed<br />
* what app a user has purchased and how much it cost<br />
* what refunds have been processed for which user and app<br />
* what inapp payments have been made for user and app<br />
* the notifications that the marketplace has made with an app supporting in-app payments<br />
<br />
The marketplace will not know how to communicate with the payment provider at all. It will know how to communicate with the payment server, so each web head will have the appropriate keys, stored on the file system, to access the payment server.<br />
<br />
===Payment Server===<br />
<br />
The payment server will know:<br />
<br />
* the specific payment provider data of sellers<br />
* any personal payment provider specific data of sellers or buyers<br />
* the permissions tokens of sellers (for paypal)<br />
* the pre-approval keys of buyers (for paypal)<br />
* the detailed payment provider transaction log of each purchase or each inapp purchase<br />
* a buyer provided PIN required for purchasing apps<br />
<br />
The payment server will know how to communicate with the payment provider. It won't send any messages to the marketplace at all, it will be marketplaces responsibility to query the server and find out what's going on.<br />
<br />
===Retention===<br />
<br />
We need to see how long we can retain data for.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Marketplace/PaymentServer&diff=481408Marketplace/PaymentServer2012-10-19T23:45:13Z<p>Wraithan: /* Marketplace */</p>
<hr />
<div>==Motivation==<br />
<br />
Marketplace and AMO has an integrated payments system. This does the interaction with our payments system in the same process as the rest of the Marketplace and stores the data in the same database for several reasons this is undesirable.<br />
<br />
This server will act as an independent server that will have it's own code base, servers and so on. Initially this will support Paypal, but if we support multiple sources, it will do that. If we ever move to PCI compliance, hopefully this will be the only piece that will need to be PCI compliant, sheltering the rest of Marketplace.<br />
<br />
<b>Update October 2012</b>: Paypal support is still there in solitude, but not in the marketplace. Bango support is now being added. We'll use the word payment provider to refer to the provider, Paypal or Bango.<br />
<br />
==Overview==<br />
<br />
The app will be a playdoh Django app. It won't have any admin interface, it will just have an API, possibly using django-tastypie. This will allow us to rapidly move over data and code over from the existing marketplace.<br />
<br />
The payment server code is called solitude: https://github.com/mozilla/solitude<br />
<br />
===Netops===<br />
<br />
The server should only be accessible from the webheads. The server should be able to make requests out to payment providers and receive responses.<br />
<br />
===IPNs===<br />
<br />
Paypal (only) sends a response to every transaction called an IPN. We need to handle the IPN and process that in both the marketplace and the payment server. For example on a refund, we need to process that in the payment server and if its all correct, process the refund and make sure that the receipt is invalidated (for example).<br />
<br />
===Marketplace===<br />
<br />
Marketplace will talk to the Payment Server using a REST HTTPS interface. Requests will be signed using JWT to validate it came from a trusted source. A common secret for signing will be put on the webheads/payment server.<br />
<br />
===Logging===<br />
<br />
We'll log to the CEF log and to syslog in a similar fashion to the marketplace, however they'll be separate logs. All logging should obfuscate or truncate sensitive values so that we don't leak any confidential data into our logs. <br />
<br />
We will need to log specific IDs for support questions. For Paypal, that is the correlation ID.<br />
<br />
===statsd, nagios etc===<br />
<br />
Yeah let's do that so we can see how the server is running.<br />
<br />
==APIs==<br />
<br />
I'll spec out the first example and we'll fill out the rest as we go along. There will probably be more API's than this.<br />
<br />
===Paypal example: get Paykey===<br />
<br />
Gets the paykey from paypal:<br />
<br />
POST /paypal/pay<br />
<br />
JSON body will contain:<br />
<br />
{'user_id': 123, 'app_id': '456', 'amount': 1.00, 'currency': 'USD', 'use_preapproval': true}<br />
<br />
This will do lookups of the user and the app. If the user doesn't exist, it will create all the data. For an app to be sold, the paypal_id of the app must be registered with the server already<br />
<br />
If use_preapproval is true, we'll try to use the preapproval token for that user if present.<br />
<br />
Example with pre-approval that worked:<br />
<br />
{'user_id': 123, 'app_id': 456, 'amount': 1.00, 'currency': 'USD', 'use_preapproval': true,<br />
'status': 'completed'}<br />
<br />
Example without pre-approval that worked, generating a paykey:<br />
<br />
{'user_id': 123, 'app_id': 456, 'amount': 1.00, 'currency': 'USD', 'use_preapproval': false,<br />
'status': 'created', 'paykey': 'xxxx'}<br />
<br />
We are passing back the one time use paykey so that the front end can fire off the Paypal process so the user can approve the process.<br />
<br />
The fact that we are using paypal is implied by the URL namespace.<br />
<br />
===Paypal example: Preapproval===<br />
<br />
This will be where a user creates or removes pre-approval from their account. There is a multi stage step to this process.<br />
<br />
* Marketplace calls the Payment server to get the pre-approval URL. The Payment server will store the temporary pre-approval key created by the Payment server.<br />
<br />
* Marketplace bounces the user to Paypal and waits for the reply.<br />
<br />
* When the reply is positive the Marketplace pings the payment server and the pre-approval key is moved to the permanent storage.<br />
<br />
===Paypal example: Check purchase===<br />
<br />
This will check that a purchase has gone through. The pre-approval will do this automatically but there are stages in the marketplace where we need to do this manually.<br />
<br />
===Paypal example: Refund===<br />
<br />
Refunds the payment.<br />
<br />
===Paypal example: Gets personal data===<br />
<br />
This has multiple steps. First we get the Paypal URL to bounce the user too and return that to the marketplace. Once the permissions are in place we'll call the Paypal API's and store them in the Payment server.<br />
<br />
===Paypal example: Check Paypal id===<br />
<br />
Used to check that a Paypal id is valid.<br />
<br />
===Paypal example: App paypal data===<br />
<br />
Stores or gets the paypal data for an app. This will likely just be the paypal id. This will allow the devhub pages to get and set this value. It will probably be acceptable for the marketplace to cache this temporarily in memcache for the developer pages, but should never be persisted for longer than is needed.<br />
<br />
===Paypal example: Check app===<br />
<br />
For an app, run the checks that check the app is valid to be sold on the marketplace.<br />
<br />
==Data==<br />
<br />
Data will be divided in the following ways.<br />
<br />
For a list of Bango data see: https://wiki.mozilla.org/Marketplace/BangoData<br />
<br />
===Marketplace===<br />
<br />
The marketplace will know:<br />
<br />
* what an app costs or what recommended donations<br />
* what app a user has installed<br />
* what app a user has purchased and how much it cost<br />
* what refunds have been processed for which user and app<br />
* what inapp payments have been made for user and app<br />
* the notifications that the marketplace has made with an app supporting in-app payments<br />
<br />
The marketplace will not know how to communicate with the payment provider at all. It will know how to communicate with the payment server, so each web head will have the appropriate keys, stored on the file system, to access the payment server.<br />
<br />
===Payment Server===<br />
<br />
The payment server will know:<br />
<br />
* the specific payment provider data of sellers<br />
* any personal payment provider specific data of sellers or buyers<br />
* the permissions tokens of sellers (for paypal)<br />
* the pre-approval keys of buyers (for paypal)<br />
* the detailed payment provider transaction log of each purchase or each inapp purchase<br />
<br />
The payment server will know how to communicate with the payment provider. It won't send any messages to the marketplace at all, it will be marketplaces responsibility to query the server and find out what's going on.<br />
<br />
===Retention===<br />
<br />
We need to see how long we can retain data for.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=WebDev/Deployments&diff=476386WebDev/Deployments2012-10-03T22:34:18Z<p>Wraithan: /* Using requirements */</p>
<hr />
<div>This covers deploying of production systems using pip and PyPI. <br />
<br />
==Goals==<br />
<br />
* to use [http://www.pip-installer.org/en/latest/index.html pip] and Python Package Index ([http://pypi.python.org/pypi PyPI]) whenever possible<br />
* to allow any contributor to easily install and contribute WebDev projects<br />
* to have them deployed quickly and securely internally<br />
<br />
==Using requirements==<br />
<br />
Specify packages in the requirements file. We recommend splitting the packages down into separate file for seperate roles, for example: dev.text, prod.txt, test.txt.<br />
<br />
All requirements should be pinned, eg:<br />
<br />
foo==0.3<br />
<br />
Use of <code>>=</code> or not pinning to a version is not recommended. This can mean broken untested versions of packages being installed.<br />
<br />
When running pip use the flag: <code>--no-deps</code>. This ensures that packages will not pull in more untested versions of packages. It also means that the requirements files are a definitive source of packages used. This allows security faster audits of who is using what package.<br />
<br />
{{note|Packages on PyPI can be removed then replaced so even pinning a version does not mean it can be trusted if you are not using the internal mirror.}}<br />
<br />
==Internal package server==<br />
<br />
When a package is to be used, it will be uploaded to the internal package server.<br />
<br />
Existing servers: <br />
* For add-ons and marketplace [https://mana.mozilla.org/wiki/display/WebDev/pyrepo pyrepo1].<br />
<br />
The trusted users who can upload apps to the server are responsible for validating the packages before uploading them. It's up to the uploading user to validate that the package meets security needs.<br />
<br />
''TODO'' add in notes about how to upload.<br />
<br />
Contributors and external users will continue to use PyPI as normal. Internal production deployments will use this mirror by using the --no-index and --find-links. For example in Marketplace:<br />
<br />
./venv/bin/pip install --exists-action=w --no-deps --no-index <br />
-f http://pyrepo1.addons.phx1.mozilla.com/ -r requirements/prod.txt<br />
<br />
==Future goals==<br />
<br />
If we can build RPMs prior to deploying, this will allow security to more easily audit the source of files. Currently services and socorro do this.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=WebDev/Deployments&diff=476381WebDev/Deployments2012-10-03T22:21:28Z<p>Wraithan: /* Using requirements */</p>
<hr />
<div>This covers deploying of production systems using pip and PyPI. <br />
<br />
==Goals==<br />
<br />
* to use [http://www.pip-installer.org/en/latest/index.html pip] and Python Package Index ([http://pypi.python.org/pypi PyPI]) whenever possible<br />
* to allow any contributor to easily install and contribute WebDev projects<br />
* to have them deployed quickly and securely internally<br />
<br />
==Using requirements==<br />
<br />
Specify packages in the requirements file. We recommend splitting the packages down into separate file for seperate roles, for example: dev.text, prod.txt, test.txt.<br />
<br />
All requirements should be pinned, eg:<br />
<br />
foo==0.3<br />
<br />
Use of <code>>=</code> or not pinning to a version is not recommended. This can mean broken untested versions of packages being installed.<br />
<br />
When running pip use the flag: <code>--no-deps</code>. This ensures that packages will not pull in more untested versions of packages. It also means that the requirements files are a definitive source of packages used. This allows security faster audits of who is using what package.<br />
<br />
==Internal package server==<br />
<br />
When a package is to be used, it will be uploaded to the internal package server.<br />
<br />
Existing servers: <br />
* For add-ons and marketplace [https://mana.mozilla.org/wiki/display/WebDev/pyrepo pyrepo1].<br />
<br />
The trusted users who can upload apps to the server are responsible for validating the packages before uploading them. It's up to the uploading user to validate that the package meets security needs.<br />
<br />
''TODO'' add in notes about how to upload.<br />
<br />
Contributors and external users will continue to use PyPI as normal. Internal production deployments will use this mirror by using the --no-index and --find-links. For example in Marketplace:<br />
<br />
./venv/bin/pip install --exists-action=w --no-deps --no-index <br />
-f http://pyrepo1.addons.phx1.mozilla.com/ -r requirements/prod.txt<br />
<br />
==Future goals==<br />
<br />
If we can build RPMs prior to deploying, this will allow security to more easily audit the source of files. Currently services and socorro do this.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2012-08-07&diff=458685Webdev:Meetings:2012-08-072012-08-07T16:56:44Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''PB&J'''<br />
<br />
= Meeting notes =<br />
* Note-taker: <who><br />
* Meeting notes: <etherpad link><br />
<br />
= Open Items =<br />
* performance feedback and compensation: schedule and updates<br />
* positivity exercise - yeah, really<br />
* open floor<br />
<br />
= Roundtable =<br />
== adrian ==<br />
* Socorro<br />
** Rapid betas in Socorro are going well, should merge into our master branch soon<br />
* Trying to spend more time working on our game initiative<br />
* Got almost drunk with excellent wkisky in a distillery in Scotland this weekend<br />
<br />
== andy ==<br />
== arron ==<br />
<br />
* Been working on x-tags<br />
* Checkout x-tags.org and registry.x-tags.org to see the website and control registry.<br />
* Awesomeness: Went to Moffett Field and watched the Mars Rover landing.<br />
<br />
== ashort ==<br />
== aricaud ==<br />
* Bedrock bugs<br />
* Bedrock infra<br />
<br />
Nice stuff:<br />
* Got 3 or 4 contributors showing up lately and I don't have many mentor bugs left to give to new ones!<br />
<br />
== basta ==<br />
== bsavage ==<br />
<br />
* Mediawiki-Bugzilla<br />
* Dragnet<br />
* Webtools on intranet<br />
* Cool thing: I have an outside contributor to mediawiki-bugzilla who has no connection to Mozilla but found the project on Github<br />
<br />
== bensternthal ==<br />
== craigcook ==<br />
== ckoehler ==<br />
== cmore ==<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== jlongster ==<br />
== jsocol ==<br />
== karthikv ==<br />
== kumar ==<br />
== lars ==<br />
* Socorro<br />
** investigated our broken staging environment<br />
** prototyped several ways of refactoring middleware<br />
* Awesomeness<br />
** http://bit.ly/OKRVrE<br />
*** outfitted as a mobile office<br />
<br />
== laura ==<br />
== lcrouch ==<br />
== lonnen ==<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
== morgamic ==<br />
* hiring<br />
* goals<br />
* went through leadership training week before last<br />
* apps work week last week<br />
* positive thing: the interns -- they never cease to amaze me<br />
<br />
== ngoke ==<br />
== peterbe ==<br />
== piotr ==<br />
== pmac ==<br />
<br />
* Scrumbugs<br />
* Bedrock l10n stuff<br />
<br />
Saw NASA land a nuclear-powered car-sized rolling lab on a rock 350 million miles from here via a rocket-powered sky crane in exactly the spot they wanted, while being photographed by a satellite already orbiting said rock.<br />
<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
<br />
* Finished up the bulk of the work on the reviewer tools for marketplace.<br />
* Had an awesome vacation with family at Sunriver, OR.<br />
* Ramping up to work on the marketplace side of packaged apps.<br />
<br />
Positively awesome? Seeing Mozilla prioritize and organize around Firefox OS and web apps. The focus, determination, and skills being applied is amazing to watch unfold.<br />
<br />
== schalk ==<br />
== seanmonstar ==<br />
== ubernostrum ==<br />
== timw ==<br />
== tofumatt ==<br />
<br />
* Working on web apps server component<br />
* Prepping for BrazilJS<br />
* Met about privacy ad stuff<br />
<br />
Coolest thing I saw AND worked on these past few weeks? Probably my [http://twitpic.com/afhnor/full new-to-me 1976 Honda CB400f].<br />
<br />
== wenzel ==<br />
== wil ==<br />
* Was in MV for the apps work week, trying to get answers about packages and payments<br />
* Plodding towards the Aug milestone, marketplace is looking great<br />
* Doing the performance review stuff<br />
* Awesome thing: Mars landing, I reckon. I mean, the apps team being all in the same place at once and aligning on goals and getting stuff done. :)<br />
<br />
== willkg ==<br />
== wraithan ==<br />
* My first work week<br />
* Had the first meeting of the Marketplace High Availability team that wasn't just an introduction.<br />
* Worked on small bugs for Solitude.<br />
* Everyone else has already said it, but the Mars landing is among the most amazing things humans have ever done.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Conferences&diff=448015Webdev:Conferences2012-07-05T22:36:38Z<p>Wraithan: /* Q3 */</p>
<hr />
<div>Feel free to add also add events to:<br />
* [[Events|Mozilla Events]] (supports iCal and Zimbra subscribing/updates)<br />
<br />
= 2012 =<br />
== Q1 ==<br />
* Jan 11 [http://waza.heroku.com/ Heroku's Waza] San Francisco, USA<br />
** tofumatt may attend<br />
** mkelly<br />
* Jan 16-20 [http://linux.conf.au linux.conf.au] Ballarat, Australia<br />
** laura (speaking)<br />
* Jan 18-20 [http://webvisionsevent.com Webvisions], NYC<br />
** skinny (speaking)<br />
* Feb 4-5 [http://fosdem.org/2012/ FOSDEM 2012], Brussels, Belgium<br />
* Feb 29-Mar 2 [http://confoo.ca/en Confoo] Montréal<br />
** andym (speaking) [http://confoo.ca/en/2012/session/real-time-web-apps-using-python gevent] and [http://confoo.ca/en/2012/session/unit-testing-with-python Unit testing]<br />
* March 7-15 [http://us.pycon.org/2012 pycon] Santa Clara<br />
** Erik (talks)<br />
** james bennett (tutorials)<br />
** kumar<br />
** Rob Hudson<br />
** ashort<br />
** willkg<br />
** mkelly<br />
** ckoehler<br />
** lars<br />
** dd<br />
** timw<br />
** cmore (Django tutorial only [https://us.pycon.org/2012/schedule/presentation/327/ 1] [https://us.pycon.org/2012/schedule/presentation/458/ 2] -- no conf.)<br />
* March 24-25 [http://libreplanet.org/wiki/LibrePlanet2012 LibrePlanet 2012] Cambridge, MA<br />
** willkg<br />
<br />
== Q2 ==<br />
* April 2-3 [http://2012.jsconf.us/ JSConf] Scottsdale, Arizona<br />
** potch<br />
** jlongster (hoping to speak)<br />
** espressive<br />
* April 4-6 [http://web-5.org/ Web-5] Béziers(34), France<br />
** sfoster (speaking)<br />
** robert nyman (speaking)<br />
* April 14-15 [http://rencontres.django-fr.org/2012/ Djangocong] Carnon-Montpellier, France [sponsoring]<br />
** Rik<br />
* May 23-24 [http://gluecon.com/2012/] GLUE Con<br />
** lorchard (?)<br />
* May 25-26 [http://sudweb.fr/2012/schedule/conferences/ SudWeb] Toulouse, France [sponsoring]<br />
** Rik (speaking)<br />
* June 4-8 [http://2012.djangocon.eu/ DjangoCon EU] Zurich, Switzerland<br />
** Rik<br />
* June 26-29 [http://opensourcebridge.org Open Source Bridge] Portland, OR<br />
** ckoehler<br />
** wenzel?<br />
** skinny<br />
** lorchard<br />
** laura (speaking)<br />
** espressive (speaking)<br />
** Wraithan (speaking)<br />
** [[tantek]] (speaking)<br />
<br />
== Q3 ==<br />
<br />
* July 2-3 nodeconf [http://www.nodeconf.com/], Portland, OR<br />
* July 5-7 [http://webvisionsevent.com Webvisions], Barcelona<br />
** skinny (speaking)<br />
* July 16-20 [http://www.oscon.com/oscon2012 OSCON], Portland<br />
** andym (speaking)<br />
** laura (speaking)<br />
* July 20-22, [http://throneofjs.com/ Throne of JS], Toronto, ON<br />
** ednapiranha (local)<br />
** tofumatt? (local-ish, could drive -- Montréal)<br />
* July 25-26, [https://www.blackhat.com/html/bh-us-12/bh-us-12-home.html BlackHat], Las Vegas, NV<br />
* July 26-29, [http://lanyrd.com/2012/defcon/ Defcon 20], Las Vegas, NV<br />
* Sept 1-2 [http://nz.pycon.org Kiwi Pycon 2012], Dunedin, NZ<br />
** nigelb<br />
** francois<br />
* Sept 3-8 DjangoCon, Washington DC<br />
** jsocol (I've had good luck recruiting/promoting for Moz here)<br />
** groovecoder<br />
** pmclanahan<br />
** laura? local!<br />
** wraithan<br />
<br />
== Q4 ==<br />
* Dec (last week) Chaos Computer Congress (29C3), Berlin<br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2011</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2011 =<br />
== Q1 ==<br />
* Feb 5-6 - [http://fosdem.org/2011/ fosdem] <br />
* Feb 19 - [http://superhappydevhouse.org SuperHappyDevHouse] @ Tech Museum of Innovation in San Jose<br />
** lorchard?<br />
* March 9-11 - [http://confoo.ca/en ConFoo.ca] <br />
** andym (speaking)<br />
* March 11-13 - [http://us.pycon.org/2011/ PyCon US] <br />
** wenzel<br />
** kumar (speaking)<br />
* March 11-15 - [http://sxsw.com/interactive/talks/sessions SXSWinteractive]<br />
** laura (speaking)<br />
<br />
== Q2 ==<br />
* April 9-10 - [http://codeconf.com/ CodeConf]<br />
** jbalogh<br />
* May 10-11 - [http://www.google.com/events/io/2010/ Google I/O] <br />
** lorchard?<br />
* May 25-26, [http://www.gluecon.com/ GlueCon]<br />
** paulc?<br />
* May 27, [http://schoolofdev.com/Tulsa/2011/default.aspx Tulsa School of Dev]<br />
** groovecoder<br />
* June 6-9, [http://djangocon.eu DjangoCon EU]<br />
** andym (speaking)<br />
* June 21-24, [http://opensourcebridge.org Open Source Bridge], Portland OR<br />
** All of us!<br />
** ryansnyder (speaking)<br />
** wenzel (speaking)<br />
* June 27-29, [http://futureofwebapps.com/las-vegas-2011/ The Future of Web Apps], Las Vegas, NV<br />
<br />
== Q3 ==<br />
<br />
* July 25-29, [http://www.oscon.com/oscon2011 OSCON], Portland OR<br />
** kumar?<br />
** laura (speaking)<br />
** (various IT people)<br />
* July 30 - Aug 4, [http://www.blackhat.com/ Blackhat], Las Vegas, NV<br />
** clouserw<br />
* Sept 6-10 - DjangoCon<br />
** davedash (speaking)<br />
** brandonsavage<br />
** tofumatt would like to be put in the raffle<br />
* Sept 16-17 [http://pygotham.org/ PyGotham], New York, NY<br />
** jsocol<br />
* Sept 28-30 [http://omniti.com/surge/2011 Surge], Baltimore MD<br />
<br />
== Q4 ==<br />
* Oct 6-7 - [http://py.codeconf.com/ PyCodeConf 2011 (Miami, Florida, US)] -- "Future of Python" conf put on by the folks from GitHub<br />
** ricky<br />
** laura (speaking)<br />
** wenzel<br />
** erikrose<br />
** jlongster<br />
** timw<br />
** peterbe<br />
* Oct 13-15 - [http://www.paris-web.fr/ ParisWeb 2011] Paris<br />
** Rik - How browsers work<br />
* Oct 20 - [http://www.contactcon.com/ Contact Summit 2011]<br />
** lorchard?<br />
** Contact will explore how to realize the greater promise of social media to promote new forms of culture, commerce, collective action and creativity.<br />
* Oct 22-27 - [http://splashcon.org/2011/ SPLASH (formerly OOPSLA)]. OOPSLA is a >1000-person conference on everything from Haskell to Java to Smalltalk to software engineering in general—always an amazing collection of people. It's in Portland this year.<br />
** erikrose<br />
* Nov 1-2 - [http://www.newgameconf.com/ New Game Conference]<br />
** "The Conference for HTML5 Game Developers" Google and Bocoup are putting this on- we should have a Mozilla presence to keep the debate lively :)<br />
** potch<br />
* Nov 7-11 - [http://na11.apachecon.com/ ApacheCon] Vancouver, BC<br />
* Nov 8-9 - [http://www.hadoopworld.com Hadoop World] NYC<br />
* Nov 8-9 - [http://velocityconf.com/velocityeu/ Velocity Conference EU] Berlin<br />
** Rik<br />
* Nov 9-10 - [http://www.defragcon.com/ Defrag]<br />
* Nov 9-12 - [http://gracehopper.org/2011/ Grace Hopper Celebration of Women in Computing]. PDX Has an Open Source day, Lukas and Stormy are on a panel<br />
** laura?<br />
* Nov 12-13 - [http://somethin-else.org/index.php?post/2011/08/16/Save-the-date%21-Mozilla-Camp-Europe-2011-Berlin-%28Nov-12-13%29 MozCamp Europe 2011] Berlin<br />
** Rik<br />
* Dec 5-7 - [http://www.pmi.org/en/Professional-Development/SeminarsWorld/CourseScheduleDetails.aspx?CourseScheduleID={9CAF9A7C-FFD1-4754-9213-3BF0292E35B5} Project Management Institute's - Learning Simulation]<br />
** cmore<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2010</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2010 =<br />
== Q1 ==<br />
* [http://fosdem.org/2010/ fosdem] Feb 6--7<br />
** wenzel<br />
* [http://sxsw.com/interactive SXSW] March 12-16<br />
** ozten<br />
** jsocol (bump for other folks)<br />
* [http://www.larpcon.com/ LARPcon]<br />
** wclouser<br />
** mccammos<br />
** lorchard (totally have my own boffers)<br />
<br />
== Q2 ==<br />
* [http://aneventapart.com/2010/seattle/ An Event Apart (Seattle)] April 5--7<br />
** jsocol<br />
** rdoherty<br />
* [http://en.oreilly.com/mysql2010/ MySQLConf] April 12--15<br />
** jsocol<br />
* [http://events.jquery.org/2010/sf-bay-area JQuery SF Bay Area Conference] April 24--25<br />
* [http://djangocon.eu/ djangocon.eu] Berlin, May 24--26/28<br />
* [http://www.gluecon.com/2010/ GlueCon] and CloudCamp, Denver, CO May 25--28<br />
** lorchard<br />
* [http://opensourcebridge.org/ Open Source Bridge] Portland, June 1--4<br />
** skeen<br />
* [http://en.oreilly.com/velocity2010 Velocity] June 22--24<br />
* [http://java.sun.com/javaone/ JavaOne] June 22--25<br />
** jbalogh<br />
<br />
== Q3 ==<br />
* [http://en.oreilly.com/oscon2010 OSCON] July 19--23<br />
** lorchard<br />
** lars<br />
** laura (committee, maybe speaking)<br />
** skeen<br />
* [http://www.blackhat.com/ Blackhat] July 24--29<br />
** abuchanan<br />
** paulc<br />
* [http://www.uxweek.com/ UX Week] August 24--27<br />
* [http://djangocon.us/ DjangoCon] September 7--9<br />
** dd - went last year, but I felt it was helpful<br />
** jbalogh - as long as it doesn't conflict with CakeFest, I'm gonna talk about zamboni. In front of people.<br />
** clouserw<br />
** jsocol<br />
** paulc?<br />
** wenzel<br />
** ricky<br />
* [http://ideaconference.org/ IDEA] Sept 14--16<br />
** rdoherty<br />
* [http://www.aneventapart.com/2010/dc/ An Event Apart (DC)] September 16-18<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
* [http://cakefest.org/ CakeFest]<br />
** jbalogh<br />
* [http://www.twicon.org/ TwiCon]<br />
** morgamic - I will be presenting on why Jake is better than Edward.<br />
** fligtarsmom<br />
* [http://omniti.com/surge/2010 Surge] Sept 30 - Oct 1<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://www.uist2010.org/ UIST (NYC)] Oct 3-6<br />
* [http://futureofwebapps.com/london-2010/ Future of Web Apps (London)] Oct 4-6<br />
* [http://fronteers.nl/congres Fronteers], Oct 4-8<br />
* [http://www.cloudera.com/company/events/hadoop-world-2010 Hadoop World] Oct 12<br />
* [http://ar.pycon.org/2010/about/ PyCon Argentina], Oct 15-16<br />
** Ian: I'll be giving a keynote<br />
* [http://www.pythonbrasil.org.br/2010 Python Brasil], Oct 21-23<br />
** Ian: I'll be giving a keynote here too<br />
* [http://www.aneventapart.com/2010/sandiego/ An Event Apart (San Diego)] Nov 1-2<br />
<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2009</div><br />
<div class="NavContent" style="text-align:left"><br />
= 2009 =<br />
== Q2 ==<br />
* [http://java.sun.com/javaone/ JavaOne]<br />
* Velocity<br />
** rdoherty<br />
** jbalogh (if anyone else wants to bump me out and come down, that's cool)<br />
<br />
== Q3 ==<br />
* Blackhat<br />
** clouserw<br />
* OSCON<br />
** ozten<br />
** lars<br />
** laura<br />
* [http://djangocon09.eventbrite.com/ DjangoCon]<br />
** ddash<br />
** jbalogh<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://ideaconference.org/ IDEA] Sept 14-16<br />
** Neil (?)<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
** might be interesting?<br />
</div><br />
</div><br />
<br />
== Related ==<br />
* [[Events]]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Meetings:2012-06-19&diff=443039Webdev:Meetings:2012-06-192012-06-19T17:10:38Z<p>Wraithan: /* wraithan */</p>
<hr />
<div>= Meeting Info =<br />
* Room '''webdev''' via [https://intranet.mozilla.org/Webdev:Vidyo Vidyo]<br />
* Room '''798''' via [[Teleconferencing]]<br />
* Mountain View office in room '''PB&J'''<br />
<br />
= Meeting notes =<br />
* Note-taker: <who><br />
* Meeting notes: <etherpad link><br />
<br />
= Open Items =<br />
* meet [https://phonebook.mozilla.org/#search/rick%20fant Rick Fant]<br />
* Horizons and other stuff<br />
* New hires<br />
* Rypple<br />
* Q2 goals: an abridged walk-through<br />
<br />
= Roundtable =<br />
== adrian ==<br />
<br />
* Socorro<br />
** Good work with the Stability team last week<br />
** Preparing a new UI for our search page<br />
** ElasticSearch is not on prod yet, but we make progress<br />
* Graduation<br />
** Best moment was the free food and drinks<br />
<br />
== andy ==<br />
== arron ==<br />
== ashort ==<br />
== aricaud ==<br />
== bsavage ==<br />
== bensternthal ==<br />
== craigcook ==<br />
== ckoehler ==<br />
== cmore ==<br />
== davidwalsh ==<br />
== ednapiranha ==<br />
== jlongster ==<br />
== jsocol ==<br />
* So much Mozillians.<br />
** Catching up.<br />
** Getting us back on a release track.<br />
** Spring cleaning.<br />
* Dealing with Input.<br />
* Brand evangelism.<br />
** Been talking a lot about B2G and OWA to app devs in New York.<br />
<br />
== karthik ==<br />
<br />
== kumar ==<br />
* [https://developer.mozilla.org/en/Apps/In-app_payments in-app payments]<br />
* [https://marketplace.mozilla.org/ marketplace] admin tools<br />
<br />
== lars ==<br />
* Socorro<br />
** stability work week<br />
** lots of meetings about meetings<br />
* Graduation 1982:<br />
** hacked graduation cap<br />
** replaced mortarboard with 8" floppy disk<br />
** got charged $25 for returning "damaged" rental cap<br />
<br />
== laura ==<br />
* Stability work week last week<br />
* Graduation moments: Graduating from two degrees -- a lot of work -- and discovering I got first class honours. Throwing my hat in the air in a giant football stadium, e.g. [http://www.zimbio.com/pictures/BQiwIiGsAk6/RMIT+Graduates+Celebrate+Melbourne pic of not my actual graduation]<br />
<br />
== lcrouch ==<br />
== lonnen ==<br />
== lorchard ==<br />
== malexis ==<br />
== mkelly ==<br />
* Affiliates social integration<br />
* Affiliates stats dashboard<br />
* Affiliates stuff<br />
* Maybe a Flicks release?<br />
<br />
That part where I didn't have to take classes anymore.<br />
<br />
== morgamic ==<br />
* getting back in the swing of things<br />
* hiring and recruiting<br />
* goals<br />
* evals, evals, evals<br />
* [http://www.flickr.com/photos/morgamic/4392967800/in/photostream/ me w/ grandpa]<br />
<br />
== ngoke ==<br />
== peterbe ==<br />
* Stability Workweek<br />
* Landed django-compressor in playdoh<br />
** but up against some concerning challenges. aka. offline compression<br />
** Need jingo/jinja2 expert help!<br />
* cracking the whip on the PTO migration stuff<br />
* going to experiment with HR to streamline phone screening via on-the-spot code submission<br />
** might write a tool that automates it<br />
<br />
== piotr ==<br />
== pmclanahan ==<br />
<br />
* Scrumbugz<br />
<br />
== potch ==<br />
== rhelmer ==<br />
== ricky ==<br />
== robhudson ==<br />
<br />
* marketplace reviewer tools<br />
<br />
== schalk ==<br />
== seanmonstar ==<br />
== ubernostrum ==<br />
== timw ==<br />
== tofumatt ==<br />
== wenzel ==<br />
== wil ==<br />
== willkg ==<br />
== wraithan ==<br />
* Work<br />
** Removing redis from zamboni<br />
** Solitude<br />
* Graduation<br />
** At the very end they called the name of someone we all assumed flunked out and we all looked around very confused.</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Webdev:Conferences&diff=437593Webdev:Conferences2012-06-05T01:02:08Z<p>Wraithan: /* Q2 */</p>
<hr />
<div>Feel free to add also add events to:<br />
* [[Events|Mozilla Events]] (supports iCal and Zimbra subscribing/updates)<br />
<br />
= 2012 =<br />
== Q1 ==<br />
* Jan 11 [http://waza.heroku.com/ Heroku's Waza] San Francisco, USA<br />
** tofumatt may attend<br />
** mkelly<br />
* Jan 16-20 [http://linux.conf.au linux.conf.au] Ballarat, Australia<br />
** laura (speaking)<br />
* Jan 18-20 [http://webvisionsevent.com Webvisions], NYC<br />
** skinny (speaking)<br />
* Feb 4-5 [http://fosdem.org/2012/ FOSDEM 2012], Brussels, Belgium<br />
* Feb 29-Mar 2 [http://confoo.ca/en Confoo] Montréal<br />
** andym (speaking) [http://confoo.ca/en/2012/session/real-time-web-apps-using-python gevent] and [http://confoo.ca/en/2012/session/unit-testing-with-python Unit testing]<br />
* March 7-15 [http://us.pycon.org/2012 pycon] Santa Clara<br />
** Erik (talks)<br />
** james bennett (tutorials)<br />
** kumar<br />
** Rob Hudson<br />
** ashort<br />
** willkg<br />
** mkelly<br />
** ckoehler<br />
** lars<br />
** dd<br />
** timw<br />
** cmore (Django tutorial only [https://us.pycon.org/2012/schedule/presentation/327/ 1] [https://us.pycon.org/2012/schedule/presentation/458/ 2] -- no conf.)<br />
* March 24-25 [http://libreplanet.org/wiki/LibrePlanet2012 LibrePlanet 2012] Cambridge, MA<br />
** willkg<br />
<br />
== Q2 ==<br />
* April 2-3 [http://2012.jsconf.us/ JSConf] Scottsdale, Arizona<br />
** potch<br />
** jlongster (hoping to speak)<br />
** espressive<br />
* April 4-6 [http://web-5.org/ Web-5] Béziers(34), France<br />
** sfoster (speaking)<br />
** robert nyman (speaking)<br />
* April 14-15 [http://rencontres.django-fr.org/2012/ Djangocong] Carnon-Montpellier, France [sponsoring]<br />
** Rik<br />
* May 23-24 [http://gluecon.com/2012/] GLUE Con<br />
** lorchard (?)<br />
* May 25-26 [http://sudweb.fr/2012/schedule/conferences/ SudWeb] Toulouse, France [sponsoring]<br />
** Rik (speaking)<br />
* June 4-8 [http://2012.djangocon.eu/ DjangoCon EU] Zurich, Switzerland<br />
** Rik<br />
* June 26-29 [http://opensourcebridge.org Open Source Bridge] Portland, OR<br />
** ckoehler<br />
** wenzel?<br />
** skinny<br />
** lorchard<br />
** laura (speaking)<br />
** espressive (speaking)<br />
** Wraithan (speaking)<br />
<br />
== Q3 ==<br />
<br />
* July 2-3 nodeconf [http://www.nodeconf.com/], Portland, OR<br />
* July 5-7 [http://webvisionsevent.com Webvisions], Barcelona<br />
** skinny (speaking)<br />
* July 16-20 [http://www.oscon.com/oscon2012 OSCON], Portland<br />
** andym (speaking)<br />
** laura (speaking)<br />
* July 20-22, [http://throneofjs.com/ Throne of JS], Toronto, ON<br />
** ednapiranha (local)<br />
** tofumatt? (local-ish, could drive -- Montréal)<br />
* July 25-26, [https://www.blackhat.com/html/bh-us-12/bh-us-12-home.html BlackHat], Las Vegas, NV<br />
* July 26-29, [http://lanyrd.com/2012/defcon/ Defcon 20], Las Vegas, NV<br />
* Sept 1-2 [http://nz.pycon.org Kiwi Pycon 2012], Dunedin, NZ<br />
** nigelb<br />
** francois<br />
* Sept 3-8 DjangoCon, Washington DC<br />
** jsocol (I've had good luck recruiting/promoting for Moz here)<br />
** groovecoder<br />
** pmclanahan<br />
** laura? local!<br />
<br />
== Q4 ==<br />
* Dec (last week) Chaos Computer Congress (29C3), Berlin<br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2011</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2011 =<br />
== Q1 ==<br />
* Feb 5-6 - [http://fosdem.org/2011/ fosdem] <br />
* Feb 19 - [http://superhappydevhouse.org SuperHappyDevHouse] @ Tech Museum of Innovation in San Jose<br />
** lorchard?<br />
* March 9-11 - [http://confoo.ca/en ConFoo.ca] <br />
** andym (speaking)<br />
* March 11-13 - [http://us.pycon.org/2011/ PyCon US] <br />
** wenzel<br />
** kumar (speaking)<br />
* March 11-15 - [http://sxsw.com/interactive/talks/sessions SXSWinteractive]<br />
** laura (speaking)<br />
<br />
== Q2 ==<br />
* April 9-10 - [http://codeconf.com/ CodeConf]<br />
** jbalogh<br />
* May 10-11 - [http://www.google.com/events/io/2010/ Google I/O] <br />
** lorchard?<br />
* May 25-26, [http://www.gluecon.com/ GlueCon]<br />
** paulc?<br />
* May 27, [http://schoolofdev.com/Tulsa/2011/default.aspx Tulsa School of Dev]<br />
** groovecoder<br />
* June 6-9, [http://djangocon.eu DjangoCon EU]<br />
** andym (speaking)<br />
* June 21-24, [http://opensourcebridge.org Open Source Bridge], Portland OR<br />
** All of us!<br />
** ryansnyder (speaking)<br />
** wenzel (speaking)<br />
* June 27-29, [http://futureofwebapps.com/las-vegas-2011/ The Future of Web Apps], Las Vegas, NV<br />
<br />
== Q3 ==<br />
<br />
* July 25-29, [http://www.oscon.com/oscon2011 OSCON], Portland OR<br />
** kumar?<br />
** laura (speaking)<br />
** (various IT people)<br />
* July 30 - Aug 4, [http://www.blackhat.com/ Blackhat], Las Vegas, NV<br />
** clouserw<br />
* Sept 6-10 - DjangoCon<br />
** davedash (speaking)<br />
** brandonsavage<br />
** tofumatt would like to be put in the raffle<br />
* Sept 16-17 [http://pygotham.org/ PyGotham], New York, NY<br />
** jsocol<br />
* Sept 28-30 [http://omniti.com/surge/2011 Surge], Baltimore MD<br />
<br />
== Q4 ==<br />
* Oct 6-7 - [http://py.codeconf.com/ PyCodeConf 2011 (Miami, Florida, US)] -- "Future of Python" conf put on by the folks from GitHub<br />
** ricky<br />
** laura (speaking)<br />
** wenzel<br />
** erikrose<br />
** jlongster<br />
** timw<br />
** peterbe<br />
* Oct 13-15 - [http://www.paris-web.fr/ ParisWeb 2011] Paris<br />
** Rik - How browsers work<br />
* Oct 20 - [http://www.contactcon.com/ Contact Summit 2011]<br />
** lorchard?<br />
** Contact will explore how to realize the greater promise of social media to promote new forms of culture, commerce, collective action and creativity.<br />
* Oct 22-27 - [http://splashcon.org/2011/ SPLASH (formerly OOPSLA)]. OOPSLA is a >1000-person conference on everything from Haskell to Java to Smalltalk to software engineering in general—always an amazing collection of people. It's in Portland this year.<br />
** erikrose<br />
* Nov 1-2 - [http://www.newgameconf.com/ New Game Conference]<br />
** "The Conference for HTML5 Game Developers" Google and Bocoup are putting this on- we should have a Mozilla presence to keep the debate lively :)<br />
** potch<br />
* Nov 7-11 - [http://na11.apachecon.com/ ApacheCon] Vancouver, BC<br />
* Nov 8-9 - [http://www.hadoopworld.com Hadoop World] NYC<br />
* Nov 8-9 - [http://velocityconf.com/velocityeu/ Velocity Conference EU] Berlin<br />
** Rik<br />
* Nov 9-10 - [http://www.defragcon.com/ Defrag]<br />
* Nov 9-12 - [http://gracehopper.org/2011/ Grace Hopper Celebration of Women in Computing]. PDX Has an Open Source day, Lukas and Stormy are on a panel<br />
** laura?<br />
* Nov 12-13 - [http://somethin-else.org/index.php?post/2011/08/16/Save-the-date%21-Mozilla-Camp-Europe-2011-Berlin-%28Nov-12-13%29 MozCamp Europe 2011] Berlin<br />
** Rik<br />
* Dec 5-7 - [http://www.pmi.org/en/Professional-Development/SeminarsWorld/CourseScheduleDetails.aspx?CourseScheduleID={9CAF9A7C-FFD1-4754-9213-3BF0292E35B5} Project Management Institute's - Learning Simulation]<br />
** cmore<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2010</div><br />
<div class="NavContent" style="text-align:left"><br />
<br />
= 2010 =<br />
== Q1 ==<br />
* [http://fosdem.org/2010/ fosdem] Feb 6--7<br />
** wenzel<br />
* [http://sxsw.com/interactive SXSW] March 12-16<br />
** ozten<br />
** jsocol (bump for other folks)<br />
* [http://www.larpcon.com/ LARPcon]<br />
** wclouser<br />
** mccammos<br />
** lorchard (totally have my own boffers)<br />
<br />
== Q2 ==<br />
* [http://aneventapart.com/2010/seattle/ An Event Apart (Seattle)] April 5--7<br />
** jsocol<br />
** rdoherty<br />
* [http://en.oreilly.com/mysql2010/ MySQLConf] April 12--15<br />
** jsocol<br />
* [http://events.jquery.org/2010/sf-bay-area JQuery SF Bay Area Conference] April 24--25<br />
* [http://djangocon.eu/ djangocon.eu] Berlin, May 24--26/28<br />
* [http://www.gluecon.com/2010/ GlueCon] and CloudCamp, Denver, CO May 25--28<br />
** lorchard<br />
* [http://opensourcebridge.org/ Open Source Bridge] Portland, June 1--4<br />
** skeen<br />
* [http://en.oreilly.com/velocity2010 Velocity] June 22--24<br />
* [http://java.sun.com/javaone/ JavaOne] June 22--25<br />
** jbalogh<br />
<br />
== Q3 ==<br />
* [http://en.oreilly.com/oscon2010 OSCON] July 19--23<br />
** lorchard<br />
** lars<br />
** laura (committee, maybe speaking)<br />
** skeen<br />
* [http://www.blackhat.com/ Blackhat] July 24--29<br />
** abuchanan<br />
** paulc<br />
* [http://www.uxweek.com/ UX Week] August 24--27<br />
* [http://djangocon.us/ DjangoCon] September 7--9<br />
** dd - went last year, but I felt it was helpful<br />
** jbalogh - as long as it doesn't conflict with CakeFest, I'm gonna talk about zamboni. In front of people.<br />
** clouserw<br />
** jsocol<br />
** paulc?<br />
** wenzel<br />
** ricky<br />
* [http://ideaconference.org/ IDEA] Sept 14--16<br />
** rdoherty<br />
* [http://www.aneventapart.com/2010/dc/ An Event Apart (DC)] September 16-18<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
* [http://cakefest.org/ CakeFest]<br />
** jbalogh<br />
* [http://www.twicon.org/ TwiCon]<br />
** morgamic - I will be presenting on why Jake is better than Edward.<br />
** fligtarsmom<br />
* [http://omniti.com/surge/2010 Surge] Sept 30 - Oct 1<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://www.uist2010.org/ UIST (NYC)] Oct 3-6<br />
* [http://futureofwebapps.com/london-2010/ Future of Web Apps (London)] Oct 4-6<br />
* [http://fronteers.nl/congres Fronteers], Oct 4-8<br />
* [http://www.cloudera.com/company/events/hadoop-world-2010 Hadoop World] Oct 12<br />
* [http://ar.pycon.org/2010/about/ PyCon Argentina], Oct 15-16<br />
** Ian: I'll be giving a keynote<br />
* [http://www.pythonbrasil.org.br/2010 Python Brasil], Oct 21-23<br />
** Ian: I'll be giving a keynote here too<br />
* [http://www.aneventapart.com/2010/sandiego/ An Event Apart (San Diego)] Nov 1-2<br />
<br />
</div><br />
</div><br />
<br />
<div class="NavFrame collapsed"><br />
<div class="NavHead">2009</div><br />
<div class="NavContent" style="text-align:left"><br />
= 2009 =<br />
== Q2 ==<br />
* [http://java.sun.com/javaone/ JavaOne]<br />
* Velocity<br />
** rdoherty<br />
** jbalogh (if anyone else wants to bump me out and come down, that's cool)<br />
<br />
== Q3 ==<br />
* Blackhat<br />
** clouserw<br />
* OSCON<br />
** ozten<br />
** lars<br />
** laura<br />
* [http://djangocon09.eventbrite.com/ DjangoCon]<br />
** ddash<br />
** jbalogh<br />
<br />
== Q4 ==<br />
* [http://www.svgopen.org/2009/ SVG Open 2009], Oct 2-4<br />
* [http://ideaconference.org/ IDEA] Sept 14-16<br />
** Neil (?)<br />
* [http://handcraftedcss.com/ Handcrafted CSS] Sept 14<br />
** might be interesting?<br />
</div><br />
</div><br />
<br />
== Related ==<br />
* [[Events]]</div>Wraithanhttps://wiki.mozilla.org/index.php?title=Events&diff=437589Events2012-06-05T00:59:57Z<p>Wraithan: /* June 2012 */</p>
<hr />
<div>= Mozilla Events =<br />
<br />
Events that Mozillians are speaking at, participating in, attending, or just recommend.<br />
<br />
Feel free to add events you think are of interest to Mozillians and create separate pages for specific events if necessary.<br />
<br />
Please at a minimum document:<br />
* dates/times of the event <br />
* location (e.g. city)<br />
* link to the primary page about the event.<br />
<br />
<div style="float:right"><br />
__TOC__<br />
</div><br />
<br />
== add events to your calendar ==<br />
iCal, Evolution:<br />
* Subscribe events: http://h2vx.com/ics/sub/wiki.mozilla.org/Events<br />
* Clicking that link will open your local calendar program (e.g. MacOSX iCal, Evolution, etc.)<br />
* Set it to update (i.e. "<nowiki>[x]</nowiki> Refresh" or "Auto-refresh: Every day") and new events will appear automatically.<br />
<br />
Zimbra:<br />
* Choose the "'''Calendar'''" tab<br />
* in the far left column, click the new calendar icon (little mini green calendar with a plus sign, top right corner of the column header)<br />
* a "'''Create New Calendar'''" dialog box appears<br />
* enter something like "MozWiki Events" into the '''Name''' field<br />
* check the 2nd checkbox: '''<nowiki>[x]</nowiki> Synchronize appointments from remote calendar'''<br />
* copy this URL: '''<code><nowiki>http://h2vx.com/ics/wiki.mozilla.org/Events</nowiki></code>''' <br />
* paste it into the '''URL''' field<br />
* click '''<nowiki>[ OK ]</nowiki>''' <br />
<br />
You may also download [http://h2vx.com/ics/wiki.mozilla.org/Events events on this page as an iCalendar file].<br />
<br />
== upcoming ==<br />
Add new and upcoming events here. <br />
<br />
=== June 2012 ===<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-06-11</span>...<span class="dt-end dtend">2012-06-12</span> <span class="p-summary summary">[http://personaldemocracy.com/conferences/nyc/2012/ Personal Democracy Forum 2012]</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span> - <span class="role">speaker</span> on Rise of the Indie Web</span><br />
** ...<br />
</div><br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-06-26</span>...<span class="dt-end dtend">2012-06-29</span> <span class="p-summary summary">[http://opensourcebridge.org/ Open Source Bridge conference]</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Mixedpuppy|Shane Caraveo]]</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/sessions/835 Getting a Handle on Privacy and Security]</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/events/2012/sessions/915 Web Actions: A New Building Block For The Web] and [http://opensourcebridge.org/events/2012/sessions/916 Rise of the Indie Web]</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[https://twitter.com/#!/canuckistani/ Jeff Griffiths]</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/sessions/750 "Sorry for Browser Hacking"]</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">Eitan Isaacson</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/sessions/849 Accessibility In Mobile Platforms : Bridging Divides]</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">Ben Kero</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/sessions/892 The art of open source DJing]</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">Schalk Neethling</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/sessions/779 Continous Integration for the UI]</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Lauraxt|Laura Thomson]]</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/sessions/922 Firefox Crash Reporting: Using Big Data In Your Open Source Project] and [http://opensourcebridge.org/sessions/923 How Not to Release Software]</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User: Wraithan|Wraithan (Chris McDonald)]]</span> - <span class="role">speaker</span> on [http://opensourcebridge.org/sessions/763 ZenIRCBot and the Art of Pub/Sub]</span><br />
** ... add yourself if you're speaking or attending!<br />
</div><br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-06-30</span>...<span class="dt-end dtend">2012-07-01</span> <span class="p-summary summary">[http://indiewebcamp.org/ IndieWebCamp]</span>. Participants:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span></span><br />
** ...<br />
</div><br />
<br />
=== July 2012 ===<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2011-07-14</span> <span class="p-summary summary">[http://openwebcamp.org/ Open Web Camp IV]</span> at <span class="p-location location h-adr adr"><span class="p-locality locality">San Jose</span>, <span class="p-region region">California</span>, <span class="p-country-name country-name">United States</span></span>. Attendees:<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">[[User:Tantek|Tantek Çelik]]</span> (<span class="p-role role">speaker</span>)</span><br />
** ...<br />
</div><br />
<br />
=== ... ===<br />
<br />
<br />
=== October 2012 ===<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-10-29</span>...<span class="dt-end dtend">2012-11-02</span> <span class="p-summary summary">[http://www.w3.org/2012/10/TPAC/ W3C TPAC 2012]</span> at <span class="p-location location h-card vcard"><span class="p-name fn p-org org">Cité Centre de Congrès de Lyon</span>, <span class="h-adr adr"><span class="p-street-address street-address">50, quai Charles de Gaulle</span>, <span class="p-postal-code postal-code">69463</span> <span class="p-locality locality">Lyon</span>, <span class="p-region region">Cedex 06</span>, <span class="p-country-name country-name">France</span></span></span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Dbaron|David Baron]]</span></span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span></span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Fantasai|fantasai]]</span></span><br />
</div><br />
<br />
== past ==<br />
Past months'/years' events.<br />
<br />
At the start of a new month, move the previous month's events subsection below this paragraph, most recent first.<br />
At the start of a new year, move the previous year's events to its own archive page for that year similar to other previous years.<br />
<br />
=== May 2012 ===<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-05-01</span>...<span class="dt-end dtend">2012-05-02</span> <span class="p-summary summary">[http://www.w3.org/2008/webapps/wiki/May2012F2FMeeting Web Applications WG (WebApps) f2f meeting]</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span></span><br />
** <span class="attendee h-card">[[User:Sicking|Jonas Sicking]]</span><br />
</div><br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-05-03</span>...<span class="dt-end dtend">2012-05-04</span> <span class="p-summary summary">[http://www.w3.org/html/wg/wiki/2012-05-f2f HTML WG f2f meeting]</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span></span><br />
** ...<br />
</div><br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-05-09</span>...<span class="dt-end dtend">2012-05-11</span> <span class="p-summary summary">[http://wiki.csswg.org/planning/hamburg-2012 CSS WG F2F]</span> in <span class="p-location location h-adr adr"><span class="p-locality locality">Hamburg</span></span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Dbaron|David Baron]]</span></span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Fantasai|fantasai]]</span></span><br />
** <span class="h-card">[[User:Jetvillegas|Jet Villegas]]</span><br />
** <span class="h-card">[[User:Jdaggett|John Daggett]]</span><br />
** ...<br />
</div><br />
<br />
=== April 2012 ===<br />
* [http://www2012.wwwconference.org/ WWW2012] - Lyon, France<br />
** ... did anyone from Mozilla go?<br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-04-24</span> <span class="p-name summary">[http://microformats.org/wiki/events/2012-04-24-meetup microformats meetup]</span> in <span class="p-location location h-adr adr"><span class="p-locality locality">San Francisco</span></span>. Attendees:<br />
** <span class="p-attendee attendee h-card vcard"><span class="fn">[[User:Tantek|Tantek Çelik]]</span></span><br />
** [http://microformats.org/wiki/events/2012-04-24-meetup#Attendees ... and community members]<br />
</div><br />
<br />
=== March 2012 ===<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-03-05</span>...<span class="dt-end dtend">2012-03-09</span> <span class="p-summary summary">[http://qconlondon.com/london-2012/ QCon London]</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">Allen Wirfs-Brock</span> - <span class="role">speaker</span></span> on [http://qconlondon.com/london-2012/presentation/JavaScript%20Today%20and%20Tomorrow:%20Evolving%20the%20Ambient%20Language%20of%20the%20Ambient%20Computing%20Era JavaScript Today and Tomorrow: Evolving the Ambient Language of the Ambient Computing Era] <br />
</div><br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-03-09</span>...<span class="dt-end dtend">2012-03-18</span> <span class="p-summary summary">[https://wiki.mozilla.org/2012/SXSW SXSW]</span> at <span class="p-location location h-adr adr"><span class="p-locality locality">Austin</span> <abbr class="p-region region" title="Texas">TX</abbr></span>. <span class="u-url url">https://wiki.mozilla.org/2012/SXSW</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span> - Interactive Advisory Board member, and <span class="role">speaker</span> on [http://schedule.sxsw.com/2012/events/event_IAP12752 Rise of The Indie Web] ([http://sxsw.com/node/9774 2011-12-12 announced as on the schedule])</span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Dbaron|David Baron]]</span> - <span class="role">speaker</span></span> on [http://schedule.sxsw.com/2012/events/event_IAP12909 Fast CSS: How Browsers Lay out Web Pages] ([http://sxsw.com/node/9580 2011-10-24 announced as on the schedule])<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">Dan Sinker</span> - <span class="role">speaker</span></span> on [http://schedule.sxsw.com/2012/events/event_IAP11939 Open Web, Open News: Reporters & Developers Remix] ([http://sxsw.com/node/9580 2011-10-24 announced as on the schedule])<br />
</div><br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-03-23</span>...<span class="dt-end dtend">2012-03-25</span> <span class="p-summary summary">[http://2012.iasummit.org/ IA Summit 2012]</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span></span><br />
** ...<br />
</div><br />
<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-03-30</span>...<span class="dt-end dtend">2012-03-31</span> <span class="p-summary summary">[http://barcampportland6.eventbrite.com/ BarCamp Portland 6]</span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span></span><br />
** ...<br />
</div><br />
<br />
=== February 2012 ===<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-02-06</span>...<span class="dt-end dtend">2012-02-08</span> <span class="p-summary summary">[http://wiki.csswg.org/planning/paris-2012 CSS WG F2F]</span> in <span class="p-location location h-adr adr"><span class="p-locality locality">Paris</span></span>. Attendees:<br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Dbaron|David Baron]]</span></span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Tantek|Tantek Çelik]]</span></span><br />
** <span class="attendee vcard"><span class="fn p-attendee h-card">[[User:Fantasai|fantasai]]</span></span><br />
</div><br />
<br />
=== January 2012 ===<br />
<div class="h-event vevent"><br />
* <span class="dt-start dtstart">2012-01-21</span>...<span class="dt-end dtend">2012-01-22</span> <span class="p-summary summary">[http://lanyrd.com/2012/mozilla-vision Mozilla Vision 2012]</span> in <span class="p-location location h-adr adr"><span class="p-locality locality">Tokyo</span>, <span class="p-country-name country-name">Japan</span></span>. Photos: <span class="attachment u-attachment">http://getfirefox.jp/temp/je9ighia8iuhuo0engamohz0eu5Iesee/Photo%20on%20Conference%20Day.zip</span>, <span class="attachment u-attachment">http://getfirefox.jp/temp/je9ighia8iuhuo0engamohz0eu5Iesee/Photo%20on%20Workshop%20Day.zip</span>. URLs: <span class="url u-url">https://wiki.mozilla.org/Japan/Events/MozillaVision2012</span>, <span class="url u-url" lang="ja">http://mozilla.jp/events/vision/2012/</span>. Attendees:<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">Tomoya Asai</span> (<span class="p-role role">speaker</span>)</span>.<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">[[User:Tantek|Tantek Çelik]]</span> (<span class="p-role role">speaker</span>)</span> on "Web 標準の今、そして未来" (approximate translation: "Now the standard Web, and future").<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">Mark Finkle</span> (<span class="p-role role">speaker</span>)</span>.<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">Andreas Gal</span> (<span class="p-role role">speaker</span>)</span>.<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">Chris Heilmann</span> (<span class="p-role role">speaker</span>)</span>.<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">Chris Jones</span> (<span class="p-role role">speaker</span>)</span>.<br />
** <span class="p-attendee attendee h-card vcard"><span class="p-name fn">Mark Surman</span> (<span class="p-role role">speaker</span>)</span>.<br />
<br />
=== previous years ===<br />
* [[2011/Events]]<br />
* [[2010/Events]]<br />
* 2004 and earlier Mozilla events, see:<br />
** http://www-archive.mozilla.org/events/<br />
<br />
== related ==<br />
* 2012-156 [https://www.yammer.com/mozilla.com/#/Threads/show?threadId=180093403 Yammer post encourage use of wiki.mozilla.org/Events]<br />
<br />
== sponsorships ==<br />
Want Mozilla to sponsor a conference (or sponsor you to attend a conference)?<br />
<br />
See http://nx3.go.ly/events/checklist<br />
<br />
If you have questions about sponsorship, send them to [dev-events at mozilla dot com].</div>Wraithan