diff --git a/www/conservancy/static/img/projects/microblocks.png b/www/conservancy/static/img/projects/microblocks.png new file mode 100644 index 0000000000000000000000000000000000000000..e15b6c793b1bba226f00351e9bf98548e1ac2310 GIT binary patch literal 14703 zcmXYY2Rzm9`~KUOdF;Ij*$&ww9fT;G>`k&l_DJMVXb{KDu}U^snOUDWNHWWatZc_R z=I`4H7?;T5j@cN0XKX@8KS;63!ECHGp0meSA0YMIrU7(<#AaM_G zPk$!|Ul(zo$8K3$%B&E?4e20mnFMEV=7a<@jN$s)w=u0e(ReY}zGXK(g>H$_AdFux zR0w%%B3_)@){Rd;w3^5(5A1w6miXXjsi{@D1=H^iB0my(hTp8^q|Ea}O>%^{xz*o% z!JM8h4z*%(eyemsLn|SBk^>5ELlpjV3M(qx8mq3v)ST9=35X%cmym|iWtkW{x+A=@ zH1ZO?e&X(`3hM}l`0(5zV(6F)uEtJE2$nEsV{IKNe?LgJaQ(y^bH)a_5v;Du&)g{5 zppJ%r{)5G7Wfg}IM;qfEOQ*@|*WP5Nh@47O{nFTY=DQp4`DtQeVq0mctd@QPu%q7pUi0OzE4CdkkcXdcHtZVDTyMPkf9q>yeSQ6hrY4;CsEou*u3r&H zGk(}XIj7%^eo(Zrfr3C}DIaZuvVEnUt!>+jzQv{)nL%>NF=O-(78G{PAw)q;2I+qRn58=IO?qcl|UO%)a5v$Ox2n-zViXWCx87%zwK+%V+!Y^(FPH@>RpPyE0a`tO79E7&z?HcsI9`rV9Z1^?v$+Hm!| z7M6qrPdo6T4`pR#0%&uGYi*+jN|gR9LxVStA^XFPsolZBo}M1zgLrZ9HIrPi{)LR^ z-=guD-T6OrcB*(|14GKLs(T@B`09ay2M|wp!|n;#{jh1_inmE@a*qQ816x`z_xEdk z{rsjB{&SiBlv#|Uph+T(UQAKryxJ&wfrIycy9+&s!rOWfj4W;|{xh$#*R;&pR#5vu z)3eIfLspG^7!-}n{nmtj@#2LZag9M(piTQzBo$utGip`&f_Z}IBE9rpxk203(1`cz zCk~JSaWptzrU~0HFIx`lI(NhHT5z~6+2$@+=OyDzADNbxMgqs0LibHg7H1 zvQHb17_!e?ek0lg0^a)Z_3|B0PtQ}8va}g;i58es@5^t~lT3EuPw(*4&PB}04Az3h z`_6`}EX_1Yw4eQ$o&9mw+ z8@8R4e>;A8rinqsjKAL0^jvwH7`)N?$19`bgMVY|=8!Jle9eIPZ4fN}4<9Y{rzLpt zP7~UbLL2Ru7es;L%oNi>=R~q#xeIS%Oui1^MzrHQ7PQgbQ-TcA&7F2VZqTqm#Jwr$@7^)~Y&twVJa)AzetZ># zxCM5cFqBLbO+c*-dqzyz-<0nzlbKO0?f(i%OZ>F76udq;Ir-Q%?Ek<14gXny4HwaS zHHban`>hb!pTB>-Lk*>kVB7Vv!gnk z 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�-ut zGW%(DH6p~{EPA%E>7MySk!FSzjG=vB+?@w5T=c^hn4|=U6ef6}F*GfNqA_1~69c;iOOelI|cNJdC0>;36fWGyM(-U(w9AIAGwBv6C{8YfC zCj}je?ihF3DScAT>rm|O9y#$IX%esEZ9@1 literal 0 HcmV?d00001 diff --git a/www/conservancy/static/projects/current/index.html b/www/conservancy/static/projects/current/index.html index fc430c685cd967b48322cfbaa3f9042b178de22d..8442a4ecc5e76c4e48e6d000f7c48204cb695f7f 100644 --- a/www/conservancy/static/projects/current/index.html +++ b/www/conservancy/static/projects/current/index.html @@ -467,6 +467,18 @@ speed, bandwidth distribution, and redundancy of an optimized hybrid mirror/peer-to-peer network, without any questions of legality, integrity, or safety.

+

MicroBlocks

+ + + +
+ + + +
+ +

MicroBlocks is a new programming language that runs right inside microcontroller boards such as the micro:bit, the NodeMCU and many Arduino boards. The MicroBlocks system allows for dynamic, parallel and interactive programming, but with the twist of letting your projects run autonomously inside the board without being tethered to a computer.

+

North Bay Python

diff --git a/www/conservancy/static/views.py b/www/conservancy/static/views.py index a07296ce32c39ae2105404e23decd923b3b745ea..bbf2f56b8008bf267e47eb1c7143e1d120504e5f 100644 --- a/www/conservancy/static/views.py +++ b/www/conservancy/static/views.py @@ -1,8 +1,10 @@ import mimetypes import os.path from django.http import HttpResponse -from django.template import RequestContext, loader -from conservancy.apps.fundgoal.models import FundraisingGoal as FundraisingGoal +from django.template.response import TemplateResponse + +from conservancy.apps.fundgoal.models import FundraisingGoal +from conservancy.local_context_processors import fundgoal_lookup STATIC_ROOT = os.path.abspath(os.path.dirname(__file__)) FILESYSTEM_ENCODING = 'utf-8' @@ -11,10 +13,9 @@ def handler(request, errorcode): path = os.path.join('error', str(errorcode), 'index.html') fullpath = os.path.join(STATIC_ROOT, path) if not os.path.exists(fullpath): - return HttpResponse("Internal error: " + path) - template = loader.get_template(path) - context = RequestContext(request) - return HttpResponse(template.render(context), status=int(errorcode)) + return HttpResponse("Internal error: " + path, status=int(errorcode)) + else: + return TemplateResponse(request, path, status=int(errorcode)) def handler401(request): return handler(request, 401) @@ -28,13 +29,6 @@ def handler404(request): def handler500(request): return handler(request, 500) -def fundgoal_lookup(fundraiser_sought): - try: - return FundraisingGoal.objects.get(fundraiser_code_name=fundraiser_sought) - except FundraisingGoal.DoesNotExist: - # we have no object! do something - return None - def index(request, *args, **kwargs): path = request.path.lstrip(u'/') if path.endswith(u'/'): @@ -49,23 +43,16 @@ def index(request, *args, **kwargs): return handler404(request) content_type, _ = mimetypes.guess_type(path) if content_type != 'text/html': - content = open(fullpath) + return HttpResponse(open(fullpath, 'rb'), content_type) else: - content_type = None # Let Django use its default - template = loader.get_template(path) - - kwargs = kwargs.copy() - if kwargs.has_key('fundraiser_sought'): - kwargs['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought']) - - kwargs['sitefundgoal'] = fundgoal_lookup('supporterrun') - - context = RequestContext(request, kwargs) - content = template.render(context) - return HttpResponse(content, content_type) + context = kwargs.copy() + try: + context['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought']) + except KeyError: + pass + return TemplateResponse(request, path, context) def debug(request): path = request.get_full_path() path = path.lstrip('/') return HttpResponse("Hello, static world: " + path) - diff --git a/www/conservancy/templates/base_conservancy.html b/www/conservancy/templates/base_conservancy.html index 080f458014b64a4b4840505ce5f474588b7a6b0b..1e12166afe32749772eac7d69261df8bb4abd564 100644 --- a/www/conservancy/templates/base_conservancy.html +++ b/www/conservancy/templates/base_conservancy.html @@ -62,7 +62,6 @@ this_match_remaining: this_match_goal - this_match_so_far {% endcomment %} -{% comment %} {% if sitefundgoal %} {% with this_match_goal=sitefundgoal.fundraiser_goal_amount this_match_so_far=sitefundgoal.fundraiser_so_far_amount %} {% with this_match_remaining=this_match_goal|subtract:this_match_so_far %} @@ -96,7 +95,6 @@ this_match_remaining: this_match_goal - this_match_so_far {% endwith %} {% endwith %} {% endif %} -{% endcomment %} {% block outercontent %}
{% block content %}{% endblock %}
{% endblock %}
diff --git a/www/conservancy/templates/supporter/index.html b/www/conservancy/templates/supporter/index.html index c5b16894d70a3d542dcb852cd96a4ca06fed5f6a..50d21093c5856aae48df1f3a0ade90259eed00ae 100644 --- a/www/conservancy/templates/supporter/index.html +++ b/www/conservancy/templates/supporter/index.html @@ -80,27 +80,49 @@
-

Conservancy is currently home to forty-six member projects.

- Photo of Conservancy executive director Karen Sandler and Homebrew maintainer Mike McQuaid talking with a visitor at the Conservancy booth at FOSDEM -

We love when member project participants help out at the Conservancy booth! Here's Homebrew maintainer Mike McQuaid with our executive director Karen Sandler at FOSDEM. Photo by Neil McGovern.

- Photo of linux.conf.au attendees coming to the front stage to contribute money towards Outreachy internships -

Conservancy helps administer Outreachy internships, and we were there at linux.conf.au when they raised money to sponsor three!

+

Conservancy is currently home to almost fifty member projects.

+ +

Molly de Blanc announced her plans to provide a donation match along with other Supporters at LinuxConfAu 2018.

+ +

Representatives from many different Conservancy member projects gathered at the GSoC mentor summit 2018. Photo by Josh Simmons.

-

Software freedom is critical to many of today’s most pressing social issues, but it is only effective when FOSS is for everyone—no matter what their background is, what technology they’re using, or whether or not they’re working with a company. Software Freedom Conservancy makes this possible by helping create more free software, promoting diversity, defending copyleft, and advocating for software freedom. We’re a creative, responsive, and resourceful organization. We work with practical and impactful solutions. We help FOSS projects grow while maintaining independence from a single corporate sponsor. We introduce people to software freedom through the lens of today’s new technology questions, and we raise and address the newest questions facing the FOSS community.

-

This work is too big for any single project to tackle, and we cannot do it without your help. Sign up as a Supporter today and contribute to these important efforts!

+

Software freedom is critical to many of today’s most pressing social issues, but it is only effective when +FOSS is for everyone—no matter what their background is, what technology they’re using, or whether or not a company funds their project. Software Freedom Conservancy makes this possible by helping create more free software, +promoting diversity, defending copyleft, and advocating for software freedom. We’re a creative, responsive, and +resourceful organization. We work with practical and impactful solutions. We help FOSS projects grow while +maintaining independence from corporate sponsors and business trade associations. We introduce people to software freedom through the +lens of today’s new technology questions, and we raise and address the newest questions facing the FOSS +community.

+

This work is too big for any single project to tackle, and we cannot do it without your help. Sign up as a Supporter +today and contribute to these important efforts!

Helping our member projects grow

-

As a fiscal sponsorship organization, some people think all we do is manage a bank account for our member projects. In fact, the services we provide are much more comprehensive than that, and doing this work for all our member projects means we serve as a force multiplier for everyone.

-

We help pay people to work on FOSS. In 2017, six of our member projects paid 93 different people for FOSS contributions. Collectively, Bro, Godot, Outreachy, phpMyAdmin, Selenium, and Sugar paid contributors over $640,000 for everything from project organization to software development to translation. In all these cases, Conservancy handles most of the administration, including contract negotiation, legal compliance, work review, and tax reporting.

-

We help run FOSS conferences. We handled some conference logistics for six of our member projects in 2017: Boost, Bro, Evergreen, North Bay Python, Selenium, and Wine. Our experience working with vendors on venues, catering, AV, and other necessities helps streamline much of the routine work, and we’ve paid vendors more than $360,000 to make each of these conferences a success. We’ve also reimbursed 150 people traveling to these and other events, enabling more valuable face-to-face collaboration.

-

We arrange technical infrastructure for our projects. We work with a variety of providers to help run domains and servers for many of our projects. We take care of all the back-end administration, including handling billing and renewals. We even help some of our projects plan out new infrastructure, like Outreachy’s new web site and mailing lists.

-

Many organizations do work like this occasionally, or for a few specific projects. For us, it’s the core of what we do. That experience helps us do it more efficiently, and do it better for everyone. Lessons we learn working on one project benefit all of our members.

+

As a charitable home for projects, some people think all we do is manage a bank account for our member +projects. In fact, the services we provide are much more comprehensive than that, and doing this work for all our +member projects means we serve as a force multiplier for everyone.

+

We pay people to work on FOSS. In 2018, our member projects paid 104 different people for FOSS contributions. Collectively, our projects, including Buildbot, Godot, LibreHealth Outreachy, phpMyAdmin, Selenium and Sugar, paid contributors over $557,887 for everything from project organization to software development to translation. In all these cases, Conservancy handles most of the administration, including contract negotiation, legal compliance, work review, payments, and tax reporting.

+

We helped Clojars establish the Clojurists Together grant program, pooling together $38,755 from 184 donors. The program has already funded 6 grants totaling $27,000.

+

We help run FOSS conferences. We helped our projects run 7 conferences and 3 hackfests—negotiating and spending thousands of dollars to make each of these conferences a success. Our experience with vendors, hotels and travel visas helps streamline much of the routine work so our projects can get back to doing what they’re good at. We reimbursed $98,803 in travel and other conference expenses to 91 different individuals. Regular face-to-face collaboration remains essential for projects like ours that do nearly all their work remotely; these events and funding make that possible.

+

Many organizations do work like this occasionally, or for a few specific projects. For us, it’s the core of what we do, and we do it for projects of all sizes. That experience helps us do it more efficiently, and do it better for everyone. Lessons we learn working on one project benefit all of our members. We also follow IRS rules and other important policies to ensure that reasonable amounts are spent on these activities.

Supporting new projects

-

We constantly hear from projects that would like to join Conservancy, and 2017 has been a flagship year for new members. Some of the projects that have joined us recently are established software projects you might already use: Clojars, coreboot, Etherpad. Others are newer projects doing cutting-edge work: Harvey OS, Linux XIA, North Bay Python, Teaching Open Source. We’re happy to support them all and help them grow to next level that’s right for each.

-

Bringing on new member projects and helping them with all of the services we offer is the most efficient way for us to advance FOSS. The first thing that stops us from taking on more is making sure we have staff time available to fulfill our promises to all of them. Conservancy Supporters help make that possible, giving us the confidence to welcome more projects.

-

Advocacy for today’s issues

-

If you attended a FOSS conference in 2017, odds are you saw Conservancy there. Over the year we’ve spoken or presented at almost twenty conferences on five different continents. We talk about a range of important issues, including copyleft compliance, outreach to underrepresented people, FOSS in regulated devices like medical devices and automobiles, and the risks of too much corporate control over our projects and communities.

-

We’re not just giving feel-good thinkpiece talks, either. Our conference travel is often a two-way conversation, building awareness and spurring action on issues that might be little-known but are critically important to our communities. We have booths at many of these conferences to give us valuable face time with current member projects and help recruit new ones. We host discussions like our compliance feedback sessions to hear how the community feels about our work and what we can improve in our tactics. Our talks lead to results you can see like our license enforcement principles affirmed by Linux developers and renewed DMCA exemptions for medical devices.

-

Supporting Conservancy is an investment in the future of FOSS. It enables us to bring on more member projects; to provide newly needed services to all of them; and to keep pushing forward on the issues that affect us all. Join as a Supporter today to help us bring that work to even more people!

+

We are constantly talking to free software projects about joining Conservancy, and 2018 has been an exciting year for new members. Some projects that have joined us recently are tools that help developers build more free software: Reproducible Builds, Racket, Xapian and Common Workflow Language. Others are working to share free software with new people and folks who aren’t primarily developers, like Backdrop CMS, Houdini and MicroBlocks. Free software needs all kinds of projects and so we’re happy to help them all grow to the next level that’s right for each.

+

While onboarding our projects we often work with them to overcome obstacles that may hinder the long-term success of the project. We often help core teams design stable governance that maximizes the public good of the software project. Sometimes we do even more: for example, we helped Houdini vet their new name and drafted an additional permission to AGPL that handles some details unique to the project. In 2018, Conservancy received over 100 hours of pro bono legal assistance from a group of excellent lawyers who recognize the importance of Conservancy’s work. We also spent over $50,000 looking after the legal needs of our new and existing projects; negotiating contracts, defending their trademarks and helping them navigate complex legal licensing situations.

+

In order to support more projects, we’ve been building internal infrastructure to help us work more efficiently. We deployed a ticket system that automatically tracks reimbursement requests, payments, and invoices, so no transaction for our projects ever gets lost or forgotten. We also deployed more self-service tools internally, so all of our staff can get more work done themselves without blockers.

+

Bringing on new member projects and helping them with all of the services we offer is the most efficient way for us to advance FOSS. The only thing that delays our ability to take on even more is lack of funding for more staff time to fulfill our promises to all of our projects. Conservancy Supporters help make that possible, giving us the confidence to welcome more projects. The more +our Supporters contribute, the more we can do for the software freedom community.

+

Advocacy for today’s issues

+

If you attended a FOSS conference in 2018, odds are you saw Conservancy there. Over the year we’ve spoken or presented at almost 30 conferences around the world, delivering 8 keynotes. We talk about a range of important issues, including copyleft compliance, outreach to underrepresented people, FOSS in regulated devices like medical devices and automobiles, and the risks of too much corporate control over our projects and communities.

+

We’re not just merely giving talks, either. We often attend conferences to have a two-way conversation, +building awareness and spurring action on issues that might be little-known but are critically important to our +communities. We have booths at many of these conferences to give us valuable discussion time with current member projects and help recruit new ones. Our talks lead to results you can see like +our license enforcement principles which for-profit companies have begun to consider seriously; Tesla taking its first small step towards GPL compliance; and launching a brand new conference dedicated to copyleft, CopyleftConf, that will take place in Brussels in February after FOSDEM.

+

We speak out on the most important current issues in software freedom to make sure that the public’s interests are respresented. From participating in prominent cases as they go through the courts (such as the amicus brief in the Cisco v. Arista case), to publishing analysis about important news items as they occur (like MongoDB’s relicensing and IBM’s acquisition of Red Hat). We also stand strong for the principles we believe in and make sure everyone knows why, as you can see in our CopyleftConf Code of Conduct.

+

Supporting Conservancy is an investment in the future of FOSS. It enables us to bring on more member projects, +to provide newly needed services to all of them and to push forward on the issues that affect us all. Join as a Supporter today to bring that work to even more people!

{% endblock %}