1. 2

    Hello Everyone, OP here, I have read everyone’s comments and I really appreciate everyone’s advice and the experience that you guys have shared when you guys first began to contribute to open source.

    1. 3

      So, for me, it was kind of a process. I would often download source code and, if I found I absolutely needed customizations, I would just poke through the code until I found what I thought was the problem, or how to implement a simple WORKSFORME version of the feature. That really helped me build up confidence. Not to mention experience in spelunking in big codebases.

      The next step was more out of necessity.

      I’ve been the Fedora Maintainer for a python Terminal Emulator called Terminator for years, and when Fedora deprecated python2, I reached out to the maintainers of terminator and found them completely AWOL. There hadn’t been a release in years, and the maintainer was completely unresponsive. At this point I had a choice:

      1. Let Terminator go
      2. Maintain a giant python3 patch.
      3. Fork the project.

      Originally, I decided on option 2, because I hate the idea of forking the project. However, what ended up happening was that there ended up being 4 or 5 (at least) unofficial forks with similar code, but different bugs.

      So, when the Debian Maintainer (Markus Frosch) decided to fork, I jumped on board, and spent the next year coding Terminator while looking after my family during the pandemic.

      I recently found new work, so my contributions have been lower recently, but I still consider myself the head developer on the Terminator project.

      If you’re looking to contribute to an interesting python Open Source project you can ping me on https://gitter.im/gnome-terminator/community or just check out the project https://github.com/gnome-terminator/terminator. It’s come a long way from it’s beginnings as a 300 line python script, but I think the codebase is manage-able, if a little quirky for a python project.

      1. 1

        Hey I’ll definitely check out that project

      1. 10

        The earliest I can find is devel/p5-Config-ApacheFormat from April 2006. While I had worked on some of my own projects before that, I can’t really recall (or find) any contributions to other projects before that.

        I wanted to use this for some Perl program I was writing; I can’t remember what it was but based on a message to the Perl mailing list I think it was something to organize my MP3 files or some such. My stint with Perl was short; I discovered Python not long afterward, found it much more agreeable, and rewrote all the Perl things I had in Python.

        Outside of of some FreeBSD ports, I think the first patch I sent was a trivial PR to GNU GNATS which changed function foo() to foo() for POSIX compatibility. Looks like that didn’t actually make it in to a release until Feb 2015, heh.


        So anyway, to actually answer your question: my contributions always have been (and to a large extent still are) to solve some problem I’m having; either a bug or error I encountered, or some feature I’d like to add.

        A few days ago I worked a bit on a small PostgreSQL patch; if you use auto_explain it will show you the query (select foo from bar where x=$1) but there’s no way to know what the parameter value of $1 is. I never worked with PostgreSQL and I’m a pretty inexperienced C programmer. I usually use grep (or ripgrep, or anything similar) to find the part of the code I want to work on (in this case, auto_explain) which usually works quite well. Searching for a fixed string like a setting name or message often works well.

        After that, it’s just a question of mucking about with it really, which can be rather time-consuming. Setting up proper tooling can help a lot; I spent a few minutes setting up clangd for proper completion and such, and it makes everything a lot easier. I use “printf-debugging” a lot too; you can use a debugger too, but I never really liked using them myself.

        I don’t think there are any shortcuts here: if you want to work on a large complicated project you will need to invest some amount of time. Developer documentation can be useful, as can people helping you out on IRC/Slack/mailing lists, but there’s no real substitute to actually spending time with the code.

        how you can overcome the fear

        This is probably common and normal; I remember when I started working on some FreeBSD ports and it was properly scary to submit a PR. I procrastinated sending them and went over them several times to make sure I actually got it right. Even many years later when I started submitting some stuff from my website to HN, Lobsters, etc. it was a rather nervous experience at first.

        It’s just a matter of doing it, and over time your confidence will grow and you realize there isn’t that much to be afraid of. I don’t think there are any “shortcuts”. I’m not even sure this is a bad thing either. Fear or anxiety isn’t necessarily bad, and it can be a good motivator to go the extra mile and do the best work you can.

        Overall I have very few negative experiences submitting patches. Actually, I can’t remember a single one – even if a patch is rejected people are usually reasonably nice about it. I’m sure negative experiences happen; but most of the worst comes out in long-running discussions and the like and not when someone just submits a patch. The chances of being told you’re an idiot are not zero, but very slim.

        Things like Linus’ outbursts are (in)famous, but remember he doesn’t just rant to random “hey, I’m new to contributing to Linux and whadayathink about this patch?” messages but to people who, in his opinion, really ought to know better. Something to keep in mind, because I think some people might get a bit of a wrong image of what it’s like to contribute as a new user based on this.

        The most negative experience I’ve had thus far is someone on Reddit being a cunt, usually when showcasing a project or posting some article. Someone on Reddit being a cunt! Hold the presses! It’s not a great experience but also not that bad of a thing to happen either. It’s different if someone you respect tells you off, but the amount of respect I have for random Reddit people is not especially high.

        1. 2

          The chances of being told you’re an idiot are not zero, but very slim.

          That really depends on a project maintainers. E.g. I’ve been told that “I have no idea what I’m doing” when contributing a small fix to ForgeGradle. I’ve contacted other maintainers on Discord and the first reply was that the change is a no-op, so I’ve briefly explained debugging steps from the linked issue, and another maintainer said that he’ll look into it. So far he didn’t, and I still have no freaking idea what was wrong with my change (if anything was wrong at all).

          1. 3

            Yeah; that’s not exactly a stellar response, if you can even call it that :-/ In my experience anything involved with gaming has a (much) higher chance of toxicity for some reason.

            1. 2

              It looks like you ran into an asshole. I’m sorry you experienced that. Many project maintainers are a great deal less bad than that.

              1. 1

                I’m sorry to hear this .

              2. 1

                Just read your entire comment and I totally agree with you. I think as beginner in open source community it can be overwhelming and scary at first but I think we shouldn’t let that fear stop you from contributing to open source projects.

                anyways I’ll definitely start looking into open source projects from a contributors prospective and try to contribute to the project

              1. 2

                This looks really neat! Definitely going to try this.

                Though why does it require an email/imap server?

                1. 1

                  I think it requires imap to fetch email sent from phone using sms gateway

                1. 2

                  Building a texting program but having a problem on how to serve commandline output as html page over localhost

                  Has anyone dealt with similar problem

                  1. 1

                    Could probably pipe into a wrapper around python’s builtin httpd

                  1. 3

                    Very well written post and explains the concepts really well

                    1. 1

                      Oh my god this is a very tough one for me. As someone who always starts a projects but somehow ends up leaving in the middle or unfinished.

                      So I started a project where I was going to build a news webscraper that would scrape news articles and run those articles through machine learning model that would tag those articles with different defined categories and then output those articles in a form of pdf report with tags and summary.

                      I managed to finish the scraping part and summarizing the news articles using gensim but never got a chance to implement the tagging feature as I lost the motivation and never finished the project. Now i feel like I should get back and try to finish that project.

                      1. 1

                        Really cool and definitely loved the images How are you getting the images on the site like are they free to use

                        1. 28

                          I don’t. I found it’s a waste of time. I’ve learned that I’m very bad at judging what I’ll find interesting a few months from now. Soon the log becomes too big to find anything in it. It has to be searchable because soon you’ll only look for how to do things that you know you can do, but most often the Internet is already searchable enough for that.

                          For work I did start with paper notes for short-term stuff, and contributing to the documentation server because you can’t just google the quirks of our product.

                          1. 1

                            That was true, in my case, years ago when search worked. It was better to look for the latest on the web than search my own knowledge base for slightly outdated results.

                            But today, in the last couple of years, I go first to my own search engine. Then to the web to check if I can find an update on a topic. If not (I run out of energies, got frustrated, etc) then what’s in my knowledge base is good enough.

                            1. 1

                              hey, I’m curious to know do you have an instance of your own search engine

                              1. 1

                                sorry :) that comment was related to https://lobste.rs/s/z8rowj/how_do_you_keep_track_things_you_learn#c_iqmrkj that is my “own search engine”

                          1. 11

                            tl;dr emacs

                            I track everything in one really big notes file.

                            Org-mode has a feature that is called “capture”. I just got into the habit of slamming the capture button all the time, with some metadata that flags the date of capture – then I can annoy myself and be like “here are all the things you captured like a month ago, are you still interested in it”?

                            A few years ago I read Getting Things Done, and my main takeaways were:

                            • Have a system to get shit out of your head
                            • REVIEW the system regularly (or else you just build a big list of TODO’s/it’s picture isn’t reality)
                            • REMIND yourself why you want to do what you are doing

                            With org, everything is plain text and thus searchable. Beyond the scope of my own “knowledge store”, I’ve been eyeing wallabag for articles, mostly because it tracks the reading position you are in.

                            Since everything is just headlines + metadata, you can structure things however you like and fish out shit later. One thing I did recently was the ability to fish out a note to a file, so that I can share it to my blog (screenshot).

                            org-modes scope goes beyond a capture target, as it encompasses:

                            • timekeeping
                            • scheduling/planning
                            • a lingua franca export markup (because with org macros and exporters, there is always an escape hatch to your desired output)
                            • TODO status/archiving
                            • habits (repeatable TODOs)
                            • priority ratings
                            • link targets (which you can use to make “labelled bookmarks” but to anything)

                            There are very much footguns, but it’s a powerful set of systems to learn, and you can opt into as little or as much as you want. The above list represents a few years of org usage before I feel like I /know/ how to shape it to my needs. But it’s a great tool to dive into.

                            1. 2

                              Are your dotfiles available or would you share your capture templates?

                              1. 4

                                Sure! I’ll link some smatterings here. Disclaimer: I have a tendency to treat org as a kit to build what I want, using primitives such as ts.el, org-ml, and org-pomodoro along the way.

                                Captures: I use org-ml to dynamically build captures with doct. Within projects I maintain targets for {captures,notes,tasks} for {to review, to reference, to do}. I also have a function that acts like org-refile, but uses the capture interface. Code here.

                                Timekeeping: With an emacs timer, I can ensure I am always clocked into something, and annoy myself if I’m not: link.

                                Scheduling/habits: here is a function I use to alert myself just before scheduled TODO’s come up. With org habits, I get recurring scheduled things, and the alert stuff just werks on those as well.

                                Jumping to headlines: here is a function I use to jump between headings, derived from counsel-org-goto.

                                The source of this blog post (button at the bottom right) shows how export macros can be tailored to an export target (in this case, html)

                                And last, a focus mode for when I’m in a pomodoro.

                                1. 1

                                  Thank you so much!

                              2. 1

                                After reading your comment, I’m very much convinced to try org mode and put in some time to learn org mode

                              1. 2

                                Since the question can be seen as general I’ll give you a specific answer as to how I deal with a subset of this issue. The things I learn - I tend to remember (for the very least, I remember there’s a specific method to solve a specific solution, and I know what to look for). But in order not to waste time finding that thing I remember I learned but forgot parts of, I use Pocket to bookmark links; That’s why I started with saying it’s a specific answer. I don’t tend to keep “small” things I remember. So commands might fall into that category; But if you learn things like commands through blogposts, SO posts and so on, you could bookmark them on Pocket under tags. That’s what I do anyway, and it’s handy as I used to be a full stack web developer up to 3 months ago, and I’ve partly made a transition into indie gamedev. So there’s a lot of math to re-learn, techniques, advanced topics that I know exist and can categorize them - I keep them on Pocket.

                                1. 2

                                  Nice, I have been using pocket too and it has worked really well for me when saving my bookmarks

                                1. 3

                                  I use a personal wiki and with a few patches find it highly effective.

                                  1. 1

                                    Hey just curious, Do you have your own instance of wiki? I would love to check it out

                                    1. 1

                                      I use gitit.

                                      https://github.com/jgm/gitit

                                      Most of my patches are quality of life things like allowing spaces in categories or making the search case insensitive.

                                      Oh and I use this theme https://github.com/t13a/gitit-bootstrap-theme with some minor tweaks so I can edit on my phone.

                                  1. 4

                                    Badly. (I sometimes blog about it.)

                                    1. 2

                                      I also put it on my blog so other people can find it too

                                      1. 1

                                        I’m inconsistent about that, but I blog for two reasons:

                                        1. Writing practice. I find my writing skills improve that way.
                                        2. Help me remember things I’ve learned that either weren’t very discoverable from a search engine or that I’ve had to search for 3 or more times. (The act of writing helps cement it in my memory sometimes.)
                                      1. 9

                                        I’m using email. When I find something interesting I’m emailing it to myself. Then I add tags. Then remarks, comments, updates - all as replies.

                                        Unlike apps which pop up and go this method is quite resilient and effective.

                                        1. 3

                                          I’ve been doing this as well, using Firefox‘s experimental Email Tabs to send whole articles. It’s been working out really nicely.

                                          1. 2

                                            Dang, too bad it doesn’t support other email providers.

                                            1. 1

                                              I do this also.

                                            2. 2

                                              That sounds pretty effective, I’m just curious to know what email provider do you use

                                              1. 1

                                                Gmail. But tagging and searching is available perhaps in any client / provider

                                              2. 2

                                                This gives you tree structure for free, but it seems difficult to cross reference. How do you link to other emails?

                                                1. 1

                                                  I don’t :) I mean I don’t link, but I could. Every email has an id. In Gmail I would use the link from “View original message”, I guess.

                                                  Some cross-referencing is offered by the overlapping tags. For example, I have an entry tagged with typography, resource, another with layout, resource … then resource becomes sort of a meta tag proven to be very useful.

                                              1. 2

                                                Really interesting. Loved how you showed us the unique features. I’m curious to know if we can host this on a raspberry pi

                                                1. 3

                                                  You can easily host it on a pi: it doesn’t require a lot of resources and it’s packaged in the repos (apt install cgit) :-)

                                                  1. 2

                                                    I wrote a small tutorial on how to install and configure it on Debian (this particular post uses a custom web server but you don’t have to, obviously you could just use nginx or what have you).

                                                1. 1

                                                  I’m currently hosting pihole as it allows me to block ads on my network. I am also thinking about hosting my family pictures but I’m kinda hesistent

                                                  1. 1

                                                    Hey you should give this a try https://github.com/lomorage/homepage

                                                    If you are looking to backup your photos