Developers
developers

[Public Lab software](#Projects), including this website, is written collaboratively by a community of contributors. _Above: a diagram of the various [Public Lab software projects](https://publiclab.org/notes/warren/05-22-2019/draft-of-a-public-lab-software-roadmap-comments-welcome)_ **We're so happy to meet you! This page is to welcome new contributors.** We especially welcome contributions from people from **groups under-represented** in free and open source software! Our community aspires to be a respectful place. Please read and abide by our [Code of Conduct](/conduct). ## How to contribute **We are actively seeking contributors**, so please **[visit our welcome page](https://code.publiclab.org#r=all)** and ask about how you can help keep these free and open source software projects working (and improving) for our thousands of community members! ### First-timers only If this is your first time, **welcome**! We're so happy to meet you! This page is to welcome new contributors looking to get involved in coding with Public Lab. We especially welcome contributions from people from groups *underrepresented in free and open source software!* Please see [our welcome page](https://code.publiclab.org). If you'd like to quickly jump into an issue, see the following list for any available [first-timers-only issues](https://code.publiclab.org#r=all): Read more about our [software outreach work here](/software-outreach)! **** ## Activities [activities:software] **** ## Questions [questions:software] **** ## Projects For an in-depth overview of all PL software projects, see https://publiclab.org/software-overview Project Description Source Code PublicLab.org Ruby on Rails This very website!PublicLab.org - a collaborative knowledge-exchange platform. github:publiclab/plots2 MapKnitter Ruby on Rails Assemble aerial images into maps. github:publiclab/mapknitter Spectral Workbench Ruby on Rails Material analysis using DIY spectrometry. JavaScript core on GitHub github:spectral-workbench PublicLab.Editor JavaScript A general purpose, JS/Bootstrap UI framework for rich text posting, with an author-friendly, minimal, mobile/desktop interface. github:publiclab/PublicLab.Editor Leaflet.DistortableImage JavaScript Leaflet plugin built for MapKnitter. Enables images to be distorted. github:publiclab/Leaflet.DistortableImage Leaflet.BlurredLocation JavaScript A Leaflet-based interface for selecting a "blurred" or low-resolution location, to preserve privacy github:publiclab/leaflet-blurred-location WebJack JavaScript a JavaScript library that uses an audio software modem to communicate with an Arduino via a headphone jack github:publiclab/webjack ImageSequencer JavaScript/Node.js Prototype sequential image processing system, inspired by storyboards github:publiclab/image-sequencer Infragram JavaScript Analyze plant health with infrared imagery. github:publiclab/infragram Public Lab is on Github at: https://github.com/publiclab ## First time contributors New to open source/free software? Here are some resources to get you started: Our welcome page for newcomers looking to get involved in coding: https://code.publiclab.org#r=all ### Resources #### Getting started * http://www.firsttimersonly.com/ * A very in-depth guide: https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github * https://guides.github.com/activities/contributing-to-open-source/ #### Setup * Lots on Ruby, Rails, databases and more: https://www.theodinproject.com/courses #### Pull requests * https://www.freecodecamp.org/news/how-to-make-your-first-pull-request-on-github-3/ * the basic GitHub Flow workflow: https://guides.github.com/introduction/flow/ #### Git * Rebasing step by step: https://thinkup.readthedocs.io/en/latest/contribute/developers/devfromsource.html#workflow-diagram * guidance on rebasing: https://www.atlassian.com/git/tutorials/merging-vs-rebasing * revert a single file to a specific revision in Git: https://stackoverflow.com/questions/215718/reset-or-revert-a-specific-file-to-a-specific-revision-using-git * @warren: I've found if I get in real trouble rebasing, sometimes I'll try to squash my feature branch commits /without rebasing/ before then rebasing just one commit: https://gist.github.com/n00neimp0rtant/9515611 **** ### Contributing for non-coders Not interested (or not yet interested) in coding, but still want to help out? Have a project you really need to get your work done, and trying to encourage coders to tackle it? You can still help out; in fact, **helping to clearly describe and document problems and new feature proposals is at least as important as writing the code itself**. When creating or editing an issue, try to: 1. Clearly describe the problem, linking to pages where it can be observed, or where a new feature might live. Include screenshots to be very specific! 2. (for bugs) If you don't know the problem, do what you can to help others narrow it down: provide contextual information like your browser, OS, and what you were doing when it happened. Did it used to work? Does it still, but only sometimes? Help them reproduce it! 3. Propose a solution. Whether or not you code, describing what **should** or **could** happen, or even what you expected to happen is always helpful to someone looking to fix it. This can be as simple as "It should show a notification." or "There should be a way to hide it." Once an issue is well documented, we can tag it with `help-wanted` to get the word out that we're looking for someone to try to fix it. If you're not sure if it's ready, ask [on the plots-dev list](#Sign+up) Finally, if your issue is well documented, try to get involved in some outreach to new contributors to match someone with the project! Tell them what it'll help you achieve and why you'd appreciate help. And coordinate with the [plots-dev discussion list](#Sign+up) to get the word out. **** ### Preparing issues for newcomers Related to the above, even if you are a coder, we need help "rolling out the red carpet" (as the [Hoodie project](http://hood.ie) calls it) for new contributors, to grow our contributor base. The steps in [Contributing for non-coders](#Contributing+for+non-coders) are a good starting point, but as a coder, you can also deep-link to the relevant lines of code, with Github links and pointers like: > Then, the keyword `:medium` in JavaScript on this line must be changed to `:large` too: https://github.com/publiclab/plots2/blob/main/app/assets/javascripts/dragdrop.js#L64 -- does that make sense to you? This is especially great for attracting coders who are not only new to our code but new to coding in general! Learn more about [how to make a good `first-timers-only` issue here](/notes/warren/10-31-2016/create-a-welcoming-first-timers-only-issue-to-invite-new-software-contributors). **** ## Reviewers Mentoring for [Summer of Code programs](/gsoc) has a lot in common with being a software "reviewer" with Public Lab throughout the year; to welcome and support our community of coders, we need to: * always be kind and respectful! (remember our [Code of Conduct!](/conduct)) * help people to become better coders and don't make them feel bad * encourage people to open a PR with their work even if it's not finished * go through recent PRs to help people who are stuck * use emojis! Some specific things you can do: * add links to relevant lines of code to help people see where to start, or for an example of a similar feature * suggest writing a test to *protect your work* from future issues * tag things as `break-me-up` if it's possible to do a project in separate simpler parts Here are some guides to different ways to help others contribute: ## Summer of Code Activities [activities:soc] **** ## Summer of Code Lots of development on Public Lab software happens as part of the [Rails Girls Summer of Code and Google Summer of Code programs](/soc), that latter supported generously by Google. Looking at the [GSoC Ideas list](/wiki/gsoc-ideas) is a great place to find projects which our community really needs to get done, whether or not you're in the program. Read more at our [Summer of Code page](/soc)! **** ### Miscellaneous Note that we encourage the use of external libraries -- it's certainly easier and more maintainable than developing our own code -- but we also encourage very clear links to such libraries' documentation, source code, and of course, attribution. ...


Author Comment Last activity Moderation
justinmanley "@btbonval, @warren - thanks both for your comments! @btbonval - I think you're probably right about the distinction between GitHub issues and plot..." | Read more » over 9 years ago
warren "I just wanted to +1 this post -- and although as @btbonval points out, I am the only paid developer on these projects, I can only devote about 10-2..." | Read more » over 9 years ago
stevie "Justin! I am SOO excited about this post! These are great reflections and ideas. Let me know if the community development team can help in anyway @..." | Read more » over 9 years ago
btbonval "Justin, this is a great step you've taken. From my own experience with companies that pay me for open source software, there tends to be this disc..." | Read more » over 9 years ago
lot "Nice to read that is working on Android, actual version of mapknitter don't work on my android 4.4 tablet :( " | Read more » over 9 years ago
warren "@mathew - I don't see any interface at http://107.178.213.64/map/leafletbeta2/autoplace-test -- did you mean to respond to @xvidun's post? " | Read more » over 9 years ago
warren "I saw that, just wanted to confirm. I'll try to pull them in and test today or tomorrow, thanks! " | Read more » over 9 years ago
anishshah101 "Hi Jeff, I had submitted a pull request to publiclab mapknitter repo yesterday. Should I send a pull request to your repo as well? The features wo..." | Read more » over 9 years ago
mathew "all the features seem to work seamlessly here in Firefox 31 on Mac OS zx 10.9: http://107.178.213.64/maps/autoplace-test " | Read more » over 9 years ago
warren "Thanks, Anish. If you think it's ready, I will try it out locally and then push it to the live server so people can try these interfaces out. Than..." | Read more » over 9 years ago
anishshah101 "Hello Bryan, Added the Mapknitter fork link in the research note: https://github.com/anishshah101/mapknitter " | Read more » over 9 years ago
btbonval "Thanks Anish! I'm glad to see the screenshots from MapKnitter! Can you edit this research note to link to the GitHub MapKnitter repository with th..." | Read more » over 9 years ago
anishshah101 "I was unaware of the bug before Jeff mentioned but it is occurring each time after a few distorts. I am not sure why that is happening because the ..." | Read more » almost 10 years ago
btbonval "I look forward to seeing this work with scaling, but it is coming along very nicely. I agree that there should be a way to drag the whole image. I..." | Read more » almost 10 years ago
gonzoearth "Excellent. And I see that it works fairly well in iOS. " | Read more » almost 10 years ago
warren "Looking great! If you add basic image dragging, you have most of the base functions done! I agree with Dave too, the transparency, outline mode, an..." | Read more » almost 10 years ago
stoft "Clever. Not sure where you intend to take this experiment, but grab-n-drag the photo and having a semi-transparent mode (to see the map below the p..." | Read more » almost 10 years ago
warren "Yes. And soon as possible, we should begin using Leaflet for both image instantiation (based on anish's code) as well as xy/latlon conversions. Tha..." | Read more » almost 10 years ago
xvidun "Just to clarify, the four points x1,x2,x3,x4 are the four points of the "aerial image" that is overlay, specifically in cartagen it is the pixel co..." | Read more » almost 10 years ago
anishshah101 "I had tested it on iOS 7.1.1. The webkit prefix is already there in the code. It still isn't working as that on a desktop browser. " | Read more » almost 10 years ago
warren "Anish - just thinking of how you'll integrate with Vidun; those values (or rather lat1,lon1,lat2,lon2) will be part of the constructor, like Distor..." | Read more » almost 10 years ago
anishshah101 "Yes this is done in CSS3. All the latest versions of desktop browsers are supporting it but it is not functioning correctly on Iphone 5 browser so ..." | Read more » almost 10 years ago
warren "Not all devices support WebGL -- my old netbook did not, for example. Are we concerned about that? But this is done in CSS3, right? That's perhaps..." | Read more » almost 10 years ago
mathew "Cool! nice pivot! that's pretty neat that you're extending basic Leaflet functionality. " | Read more » almost 10 years ago