state-of-the-goblin-september-2015.html 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. <html>
  2. <head>
  3. <title>State of the Goblin: September 2015</title>
  4. <meta name="date" contents="2015-09-25 11:10" />
  5. <meta name="author" contents="Christopher Allan Webber" />
  6. <meta name="tags" contents="mediagoblin, updates" />
  7. </head>
  8. <body>
  9. <blockquote>
  10. <i>
  11. Quick announcement: I'm going to be making two appearances over
  12. the next week! First I'll be
  13. <a href="https://chicagolug.org/meetings/2015-09-30.html">giving
  14. two talks on September 30th at Red Hat's Chicago office for the
  15. Chicago GNU/Linux User Group</a> on Guix and Federation (both
  16. mentioned in this post)! Second I'll be attending the
  17. <a href="https://fsf.org/fsf30/celebration">FSF 30th Birthday Party</a>
  18. in Boston on October 3rd. If you're able to make it to either,
  19. do stop by and say hello... I'm expecting both to be a lot of fun!
  20. </i>
  21. </blockquote>
  22. <p>
  23. Hello everyone! It's been a while since a comprehensive update of
  24. what's happening in MediaGoblin land. Despite the quiet, there is a
  25. lot to report, so let's get down to business and start reporting!
  26. </p>
  27. <h2>O'Reilly Award (again!)</h2>
  28. <p class="centered">
  29. <img src="/blog_images/receiving_oreilly_award.jpg"
  30. alt="receiving the award" />
  31. <br />
  32. <i>
  33. Photo taken by Brandin Grams,
  34. <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>,
  35. originally microblogged by
  36. <a href="https://twitter.com/o0karen0o/status/624660833805533184">Karen Sandler</a>
  37. </i>
  38. </p>
  39. <p>
  40. First of all, something fun: I was fortunate enough to receive the
  41. O'Reilly Open Source Award! (Yes, I know about the terminology
  42. mismatch, we're free software people, but it's still a great honor,
  43. and I was presented the award under the description of my free
  44. software advocacy and GNU MediaGoblin work.) The
  45. <a href="https://en.wikipedia.org/wiki/O%27Reilly_Open_Source_Award#Award_winners">other recipients of the award</a>
  46. is quite the incredible group of people, and I'm honored to be listed
  47. among them. But here's what's really cool: you may remember that
  48. <a href="/news/deb-nicholson-oscon-award.html">MediaGoblin co-founder Deb Nicholson won the O'Reilly Award last year</a>.
  49. How's that as a vote of confidence in the things we're working on?
  50. </p>
  51. <p class="centered">
  52. <a href="http://dustycloud.org/blog/oreilly-award/">
  53. <img src="/blog_images/oreilly_award-scaled.jpg"
  54. alt="O'Reilly award, on display" /></a>
  55. </p>
  56. <p>
  57. Anyway, if you want a more personal reflection, I
  58. <a href="http://dustycloud.org/blog/oreilly-award/">wrote
  59. more on my personal blog</a>!
  60. </p>
  61. <h2>Releases</h2>
  62. <p class="centered">
  63. <a href="/news/mediagoblin-0.7.0-time-travelers-delight.html">
  64. <img src="/blog_images/0.7.0/time_travelers_delight-scaled.jpg"
  65. alt="MediaGoblin 0.7.0: Time Traveler's Delight banner" />
  66. </a>
  67. </p>
  68. <p>
  69. So right, what about shipping software out the door? Well...
  70. </p>
  71. <p class="centered">
  72. <a href="/news/mediagoblin-0.8.0-gallery-of-fine-creatures.html">
  73. <img src="/blog_images/0.8.0/gallery_of_fine_creatures_banner-scaled.png"
  74. alt="MediaGoblin 0.8.0: A Gallery of Fine Creatures banner" />
  75. </a>
  76. </p>
  77. <p>
  78. Since the crowdfunding campaign, we've gotten out two major releases,
  79. <a href="/news/mediagoblin-0.7.0-time-travelers-delight.html">0.7.0: Time Traveler's Delight</a>
  80. and
  81. <a href="/news/mediagoblin-0.8.0-gallery-of-fine-creatures.html">0.8.0: A Gallery of Fine Creatures</a>.
  82. I'm extremely proud of both of these releases! We have a lot more to
  83. do though on the road to 1.0, and we've been directly been putting the
  84. funds from the campaign to work to achieve that goal, so let's talk
  85. about that.
  86. </p>
  87. <h2>Putting your money to good work: Jessica and Federation</h2>
  88. <!-- What Jessica's doing, how we're spending the funds from the campaign -->
  89. <p class="blog_image">
  90. <a href="/news/welcome-jessica-tallon.html">
  91. <img src="/blog_images/jessica_tallon_screenshot-scaled.jpg"
  92. alt="Dropdown menu for administrative features" />
  93. </a>
  94. </p>
  95. <p>
  96. You may recall that
  97. <a href="/news/welcome-jessica-tallon.html">we hired on the talented Jessica Tallon</a>
  98. to get federation working in MediaGoblin. Jessica recently
  99. <a href="/news/state-of-federation.html">gave an update on the state of federation</a>.
  100. Jessica is doing great work, though as expected, converting
  101. MediaGoblin to be a federated project has been no small task (knowing
  102. what a big task it was, hope that we could hire Jessica on to do this
  103. work was my #1 goal in the last campaign, in fact!). This decision
  104. has turned out to be absolutely the right one. Some of the best parts
  105. of the last two releases have been adopting the client to server Pump
  106. API. Federation has been MediaGoblin's goal since day 0, and Jessica
  107. is helping us to actually get there.
  108. </p>
  109. <p>
  110. However (and now I'm going to do a pretty technical deep dive, so you
  111. can skip this paragraph if that isn't your thing), the most
  112. complicated aspect to making MediaGoblin into a federated project has
  113. had to do with updating the database to handle things while preserving
  114. data correctly for existing users. Why is this so complicated? A
  115. number of years ago
  116. <a href="/news/mediagoblin-0.2.1-gearing-up.html">we switched MediaGoblin over from using MongoDB to using either PostgreSQL or SQLite</a>
  117. and while I believe this was absolutely the right decision,
  118. adding federation made the relational database system we had in place
  119. substantially trickier. For the more database-technically inclined,
  120. you can see that the
  121. <a href="http://w3c-social.github.io/activitypump/">ActivityPump API</a> /
  122. <a href="https://github.com/e14n/pump.io/blob/master/API.md">Pump API</a>
  123. require that any ActivityStream type object (in our case, that can be
  124. media or comments or even users) be referenceable by any type of
  125. activity. Furthermore, our existing comment system simply held that
  126. comments referenced media entries, whereas now comments can reference
  127. simply <i>anything</i> that is an ActivityStreams object. This means a
  128. large portion of our relations in our relational database needed an
  129. overhaul, and we needed a way to handle generic relations between
  130. tables. (The solution used is not unlike the "generic foreign key"
  131. implementation in Django.) There are more technical details on what
  132. has been done, but Jessica has been neck deep in this for months, but
  133. we believe we're finally on the home stretch, in which case Jessica
  134. can finally knock out server to server federation.
  135. </p>
  136. <p>
  137. (I've thought that a whole post on database structure lessons learned
  138. may be a good blogpost of its own. One thing I'd note is that if
  139. <a href="http://www.postgresql.org/docs/current/static/datatype-json.html">jsonb</a>
  140. had been an option when our current database design was put together,
  141. adopting that would have simplified things greatly, though it would
  142. require being PostgreSQL-only. But moving to that now would require a
  143. massive overhaul. If you're starting a new federated project from day 1,
  144. maybe keep that in mind!)
  145. </p>
  146. <p>
  147. So the summary of all the federation stuff is: it's complex, but we're
  148. making good progress through Jessica's hard work. Expect more on this
  149. soon, and huge strides in the next release!
  150. </p>
  151. <h2>Federation and the W3C Social Working Group</h2>
  152. <p>
  153. So something Jessica and I have both been involved in over the last
  154. year is the
  155. <a href="http://www.w3.org/Social/WG">W3C Social Working Group</a>
  156. working towards official standards for federated web applications.
  157. </p>
  158. <p class="centered">
  159. <img src="/blog_images/w3c-f2f-2015-03-18-scaled.jpg"
  160. alt="W3C Social WG, first GMG represented meeting" />
  161. <br />
  162. <i>
  163. W3C Social Working Group
  164. <a href="http://www.w3.org/wiki/Socialwg/2015-03-17">March
  165. 2015 face to face meeting</a> attendees. Jessica's holding the laptop
  166. on the left, and I'm right behind her.
  167. <br />
  168. Photo taken by <a href="http://aaronparecki.com/">Aaron Parecki</a>,
  169. <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0</a>,
  170. originally
  171. <a href="http://www.w3.org/wiki/File:2015-03-18-w3c-f2f.jpg">posted to the W3C wiki</a>.
  172. </i>
  173. </p>
  174. <!-- Give a caption about Jessica and I attending the second face to face -->
  175. <p>
  176. The federation protocol that MediaGoblin has been working towards
  177. until this point is primarily based on the
  178. <a href="https://github.com/e14n/pump.io/blob/master/API.md">Pump API</a>, but
  179. this is really just a semi-formalization of the interface for the
  180. <a href="http://pump.io/">pump.io</a> API. In the Social Working Group we are
  181. working towards defining a new standard,
  182. <a href="http://w3c-social.github.io/activitypump/">ActivityPump</a>, which is
  183. based off of the
  184. <a href="http://www.w3.org/TR/activitystreams-core/">ActivityStreams 2.0</a>
  185. standard. We're very excited with where this standard is going and
  186. feel it's a clean refinement over the Pump API we're already working
  187. with, while still keeping many of those same conventions.
  188. </p>
  189. <!-- Joining the W3C Group, showing picture of Jessica and I as part of it
  190. Give a caption about Jessica attending the third F2F... I was just remote
  191. on this one! -->
  192. <p class="centered">
  193. <img src="/blog_images/w3c-f2f-2015-05-04-scaled.jpg"
  194. alt="W3C Social WG, second GMG represented meeting" />
  195. <br />
  196. <i>
  197. W3C Social Working Group
  198. <a href="http://www.w3.org/wiki/Socialwg/2015-05-04">May
  199. 2015 face to face meeting</a> attendees. I didn't make it to this
  200. one, but Jessica did, and did a stellar job representing MediaGoblin
  201. and ActivityPump!
  202. <br />
  203. Photo taken by <a href="http://aaronparecki.com/">Aaron Parecki</a>,
  204. <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0</a>,
  205. originally
  206. <a href="http://www.w3.org/wiki/File:2015-05-04-w3c-f2f.jpg">posted to the W3C wiki</a>.
  207. </i>
  208. </p>
  209. <p>
  210. This has taken a lot of our time, but I believe it the results are
  211. worth it. Jessica and I have been attending weekly calls related to
  212. this standardization, and have thus far attended two face to face
  213. meetings at well. (More accurately, Jessica attended the second
  214. MediaGoblin-represented one without me, giving a kick-ass presentation
  215. on how ActivityPump works to the group! Go Jessica!)
  216. </p>
  217. <p>
  218. As for my own personal work advancing this, I'll go into this a bit
  219. further on in this post!
  220. </p>
  221. <h2>Google Summer of Code result: Goblinoid!</h2>
  222. <p class="centered">
  223. <img src="/blog_images/goblinoid_current.png"
  224. alt="Current screenshot of Goblinoid" /><br />
  225. <i>Screenshot of Goblinoid, as it looks now!</i>
  226. </p>
  227. <p>
  228. Dylan Jeffers joined us for Google Summer of Code student this year
  229. work on a pretty cool project: a MediaGoblin client for Android
  230. or... really nearly anything... called
  231. <a href="https://notabug.org/SapienTech/MediaGoblinApp/">Goblinoid</a>!
  232. There's two really interesting features about Goblinoid: one, it's
  233. written in <a href="http://kivy.org/">Kivy</a>, a GUI toolkit which emulates
  234. the Android look and feel, but is actually can run nearly anywhere
  235. Python can run... making it quite portable, yet ideal for mobile
  236. computers!
  237. </p>
  238. <p class="centered">
  239. <img src="/blog_images/goblinoid_mockup.png"
  240. alt="Mockup of Goblinoid future UI" /><br />
  241. <i>
  242. Mockup of what Dylan would like Goblinoid to look like in
  243. the future!
  244. </i>
  245. </p>
  246. <p>
  247. So Goblinoid works... it could use more user testing and packaging, if
  248. you're interested in helping with that! But you can already upload
  249. images on the go via Goblinoid, and we expect more to come.
  250. <a href="https://notabug.org/SapienTech/MediaGoblinApp/">Give it a go!</a>
  251. </p>
  252. <p>
  253. We've long been interested in having a client for MediaGoblin which
  254. makes use of the Pump API implementation we've been working on.
  255. Thank you Dylan for making that happen!
  256. </p>
  257. <h2>Infrastructure challenges</h2>
  258. <p>
  259. This has been a challenging year as in terms of supporting
  260. MediaGoblin's infrastructure. Spammers attacked both our
  261. <a href="https://wiki.mediagoblin.org/Main_Page">wiki</a> and
  262. <a href="https://issues.mediagoblin.org/">bugtracker</a> hard, at one point
  263. leaving me to take several weeks to fight issues and to try to find
  264. solutions. (Unfortunately, for the bugtracker, no great solutions
  265. have been found, and we are on a request-an-account basis... not a
  266. great situation to be in.)
  267. </p>
  268. <p>
  269. Additionally, the primary <a href="http://gitorious.org/">Gitorious instance</a>
  270. went down, where MediaGoblin's code was hosted along with many, many
  271. feature branches from contributors. The MediaGoblin community spent
  272. a while debating what we were going to do. A move to GitHub was
  273. tempting but is not an option; that's exactly the opposite of the type
  274. of world we want to build. Not everyone in MediaGoblin's community is
  275. comfortable with GitLab, and their primary instance is running a
  276. proprietary version. There are some other communities hosting things
  277. like <a href="http://notabug.org/">Notabug</a> who seem to be run by great
  278. people, but we run the risk of running into these same problems all
  279. over again... though so we did with most of these other solutions.
  280. We could self-host, but there is very little time for extra server
  281. maintenance burdens right now. So we
  282. <a href="http://savannah.gnu.org/projects/mediagoblin">moved our git repository over to Savannah</a>
  283. and I'm glad to have hosting there by people I trust, though I do also
  284. feel that contributors may expect more modern hosting facilities, but
  285. we don't have time to run them ourselves.
  286. </p>
  287. <p>
  288. The Gitorious shutdown came around the time of great exhaustion of
  289. already dealing with issues related to the bugtracker and left me
  290. feeling very burnt out. But it also lead to a great amount of
  291. reflection... who am I to feel frustrated with? The Gitorious people
  292. graciously hosted our software repositories for some time, and I was
  293. not willing to run an instance of my own. Why not? Well, one problem
  294. is that if you run your own instance of a free software web
  295. application that isn't federated, you're working in Yet Another
  296. Semi-Free Micro-Silo (TM). But let's face it, that's not the real
  297. major problem... looking at the frustrations we've had with Trac, the
  298. answer is obvious: running free network services is a huge
  299. maintenance burden.
  300. </p>
  301. <p>
  302. But wait... yes, you may be catching a whiff of irony here... if I'm
  303. not willing to run a free software web application because I don't
  304. want to take on the maintenance burden of <i>someone else's</i> software,
  305. how can I ever expect MediaGoblin to gain adoption?
  306. </p>
  307. <p>
  308. And here's where I come to a tough, but I think necessary, conclusion:
  309. there's simply no way for MediaGoblin to succeed if the world of
  310. deployment stays where it's at. Something must be done. But what?
  311. </p>
  312. <h2>Research into deployment and federation</h2>
  313. <p>
  314. Partly affected by the above, summer came around, and I had a talk
  315. with MediaGoblin contributors in our monthly meetings. I wanted to
  316. take a sabbatical... a sabbatical where I was on break from "direct"
  317. MediaGoblin things, so I can advance things that affect MediaGoblin
  318. greatly indirectly. (My spouse and I were also going through a big
  319. move so this was a good time to do it, I figured.) I wanted to do
  320. research into two things: deployment and federation.
  321. </p>
  322. <p>
  323. Framing the deployment side of things, Deb Nicholson and I gave a talk
  324. that kicked off <a href="http://mediagoblin.org/news/userops.html">"userops"</a>,
  325. a term that I still feel accurately captures what we're trying to do
  326. (and a talk which I still believe accurately summarizes the challenges
  327. we're facing). Within this context I began exploring options of what
  328. can be done to improve deployability.
  329. </p>
  330. <p>
  331. The directions I've explored, and why I've come to the conclusions I
  332. have, are a series of blogposts of their own (if you're interested, I
  333. suggest subscribing to the
  334. <a href="http://lists.mediagoblin.org/listinfo/userops">userops mailing list</a>,
  335. where I will be posting more as I go). The short of it is that I laid
  336. out a set of requirements to achieve easy and <i>maintainable</i>
  337. deployments, attempted to explore them with the most popular current
  338. tools (Ansible, Puppet, Salt, Docker, etc), and found that it is not
  339. possible to build both easy and maintainable systems on top of them
  340. based on what I believe users need. This lead me eventually down the
  341. path towards <a href="https://www.gnu.org/software/guix/">Guix</a>, a package
  342. manager (and with GuixSD, also a distro) and soon to be deployment
  343. system which I am very confident has the potential to solve many of
  344. the challenges which make deploying and maintaining systems too
  345. exhausting a task for the average user. The software is nowhere near
  346. being "easy" at present (I think it's very telling to say that it's
  347. "the Emacs of package managers / distributions"... one can extrapolate
  348. on that in many ways, most of which are correct, except for the
  349. Emacs-haters kind... lay off, Emacs haters!) but I think has the
  350. potential to become so. An easy to use web user interface has already
  351. been demonstrated, and I believe the foundations are good for building
  352. a complete and easy to use system for everyday users. But again, to
  353. go into detail beyond what has already been said is something that
  354. will be explored elsewhere.
  355. </p>
  356. <p>
  357. There is a more pressing need for me to have explored deployment at
  358. present as well... though I want to explore deployability for the sake
  359. of other users, I also need to explore deployability for <i>my own</i>
  360. sake... particularly because we promised that we will provide premium
  361. hosting in the last campaign we ran! Yes, in case you have been
  362. wondering about it, I have not forgotten about this promise. How to
  363. fulfill this promise without being crushed by the maintenance burden
  364. of hosting? I came to realize that there was every risk that I would
  365. spend all my time supporting and maintaining servers that were running
  366. MediaGoblin and I would not have the opportunity to any longer be a
  367. steward of MediaGoblin itself... which could lead to failure. So
  368. figuring out a better path forward on hosting has become a necessity.
  369. I'll explore what this means further in the next section, but first, I
  370. should say a word on federation and what my sabbatical lead to on this
  371. front.
  372. </p>
  373. <p>
  374. As I have said, Jessica and I have been involved in the
  375. <a href="http://www.w3.org/Social/WG">W3C Social Working Group</a>.
  376. Part of the activities of the group have been the definition of
  377. the <a href="http://www.w3.org/TR/activitystreams-core/">ActivityStreams 2.0</a>
  378. and <a href="https://github.com/e14n/pump.io/blob/master/API.md">Pump API</a>
  379. standards.
  380. </p>
  381. <!--
  382. Cut text, but hey, if you're reading the html, you can still see this!
  383. Well, one of the funny things about MediaGoblin's goals and history is
  384. that when I sat out to start MediaGoblin, I knew from day 0 I wanted
  385. it to support federation. At the time, I had no idea *how* I was
  386. going to support federation, I just knew that StatusNet was doing it,
  387. that it seemed a critical part of making this decentralized web thing
  388. work, and that therefore I wanted MediaGoblin to do it. But how to
  389. actually do federation I've had to learn along the way. Just as I
  390. started to wrap my head around the pile of documents that constituted
  391. OStatus federation, the Pump API came out, and while it was clear to
  392. me that it was a much better way forward, I lacked the experience to
  393. know how to do it. Thus I consider myself very fortunate that we
  394. managed to land pulling Jessica Tallon into the project, who has been
  395. able to actually convert MediaGoblin towards being a federated
  396. application, partly building on her experience of having built PyPump.
  397. So I wanted to gain a deeper understanding of how things were pieced
  398. together, and well, ActivityPump needed someone to actually start an
  399. implementation, so I decided to start an experimental repository where
  400. I can play around with these ideas.
  401. -->
  402. <p>
  403. I set out to explore this a bit more deeply under a repository
  404. with the joking and interim name of
  405. <a href="https://github.com/cwebber/activitystuff">activitystuff</a>
  406. (the Social Working Group is using GitHub for its work, so I'm making
  407. an exception there). Along with some other projects, this has
  408. contributed to a deeper understanding of how federation should work,
  409. which is something useful to take back to MediaGoblin. There are some
  410. potentially useful things in that repository (including a partially
  411. complete implementation of the
  412. <a href="http://json-ld.org/">JSON-LD</a>
  413. <a href="http://www.w3.org/TR/json-ld-api/">API</a>),
  414. and it may turn into a full implementation of ActivityPump, though its
  415. original and primary goal was for exploration, a purpose it has served
  416. well.
  417. </p>
  418. <p>
  419. One major event relating to federation has just occurred over the last
  420. week and bears note here: a number of <a href="http://pump.io/">Pump.IO</a>
  421. community members and myself are now working with Evan Prodromou (who
  422. has near-certainly contributed more to the federated web space than
  423. anyone else alive) to transition the project from being a project of
  424. primarily stewardship under Evan to one of community stewardship and
  425. governance. I posted a
  426. <a href="https://identi.ca/cwebber/note/1YADzufsQ_29LCJWTA-K_g">summary of a recent meeting</a>,
  427. and (MediaGoblin contributor!) Laura Arjona put together a
  428. <a href="https://github.com/e14n/pump.io/wiki/Community">community document</a>.
  429. In sum, Pump.IO could use your help if you're interested.
  430. </p>
  431. <p>
  432. So anyway, it's been a busy last couple of months! But it's time to
  433. return to MediaGoblin-ville, so...
  434. </p>
  435. <h2>What's next?</h2>
  436. <p>
  437. Well, that's a whole lot of text above, so how about a bulleted list
  438. next? I hear those are easier on the eyes.
  439. </p>
  440. <ul>
  441. <li>
  442. I'm swooping back into MediaGoblin territory starting next month.
  443. However, my initial focus will be on getting MediaGoblin to a
  444. deployable point for myself, particularly forward-looking towards
  445. making premium hosting feasible. Expect more soon!
  446. </li>
  447. <li>
  448. Jessica is working on MediaGoblin federation. We expect the massive
  449. database changes she has been working on to tidy up in the next few
  450. weeks, and if all is well, we'll have server to server federation
  451. basics in place by the end of the year.
  452. </li>
  453. <li>
  454. Work towards 0.9.0 will proceed, unless 1.0 lands first!
  455. Expect major infrastructure improvements in 0.9.0,
  456. and federation to land in 1.0.
  457. </li>
  458. </ul>
  459. <p>
  460. Those are all great things, and I think we are indeed on track towards
  461. our goals, slowly but surely.
  462. </p>
  463. <p>
  464. There is a more rough side to this: we've allocated nearly all of the
  465. funds from the last campaign towards paying for Jessica's work on
  466. MediaGoblin, and she's devoted enough to the project that she's been
  467. working well, well below market rate. (And aside from some travel
  468. reimbursements, I have not taken money personally from the last
  469. campaign.) I'll post a financial transparency report soon, but the
  470. short of it is: the MediaGoblin funds are running low. Even with
  471. Jessica generously working for such a relatively low amount of money,
  472. we won't be able to pay Jessica to work on MediaGoblin much longer,
  473. given our present finances.
  474. </p>
  475. <p>
  476. But we aren't giving up! The goals of MediaGoblin and of federating
  477. the web are just too important, and so onward we press, into the
  478. future! Though MediaGoblin is an ambitious project, I am confident we
  479. can achieve the things we have set out to do, but we are constrained
  480. by limited resources and time.
  481. </p>
  482. <p>
  483. Appreciate what we are doing? Want to help us in our quest to bring
  484. network freedoms to everyone? You can help!
  485. </p>
  486. <p class="centered">
  487. <a href="https://my.fsf.org/civicrm/contribute/transact?reset=1&id=36" class="campaign_donate"><img src="/images/campaign/heart.png" alt="<3" />Donate...</a>
  488. </p>
  489. <ul>
  490. <li>
  491. The simplest way to help?
  492. <a href="https://my.fsf.org/civicrm/contribute/transact?reset=1&id=36">Donate!</a>
  493. Though the official <a href="http://mediagoblin.org/pages/campaign.html">campaign</a>
  494. is over, you can still
  495. <a href="https://my.fsf.org/civicrm/contribute/transact?reset=1&id=36">donate to MediaGoblin through the FSF</a>!
  496. </li>
  497. <li>
  498. Jessica and I have been contracting so we can pay the bills (doing
  499. this allowed us to "stretch out" the amount of time Jessica could
  500. spend on the project... useful with all that W3C stuff in
  501. progress!). Unfortunately, while the people we have been working
  502. with are great, the contract we've been working on is coming to an
  503. end. Are you looking for contractors or part time workers who are
  504. capable of developing high quality free software and providing
  505. community leadership? Jessica and I are both interested in working
  506. in such cases... feel free to email me at:
  507. cwebber AT dustycloud DOT org
  508. </li>
  509. </ul>
  510. <p>
  511. We're committed to making a better, decentralized web. I hope this
  512. piece cleared up where we're at and where we're going. I believe
  513. we've got exciting times ahead... till next time, goblins!
  514. </p>
  515. </body>
  516. </html>