1. 5

    There really needs to be a federated github.

    1. 46

      Like… git ?

      1. 21

        So github but without the hub. May be on to something.

        1. 7

          Github is one of my favorite stories when I talk about how decentralized systems centralize.

          1. 7

            But did GitHub really centralize something decentralized? Git, as a VCS is still decentralized, nearly everyone who seriously uses it has a git client on their computer, and a local repository for their projects. That part is still massively decentralized.

            GitHub as a code sharing platform, that allows issues to be raised and discussed, patches/pull requests to be submitted, etc. didn’t previously exist in a decentralized manner. There seems to have always been some central point of reference, be it website or just a mailing list. It’s not as if whole project were just based around cc’ing email to one another all the time. How would new people have gotten involved if that were the case?

            The only thing I could see as centralising is the relative amount of project hosted on GitHub, but that isn’t really a system which can be properly described as “decentralized” or “centralized”..,

            1. 4

              It’s the degree to which people are dependent on the value-adds that github provides beyond git. It’s like a store having a POS that relies on communication with a central server. Sure, they can keep records on paper do sales but it’s not their normal course, so they don’t. This comment on HN sums it up: https://news.ycombinator.com/item?id=16124575

            2. 1

              Got any other examples?

              1. 3

                Email would be a prominent one. Most people (and I can’t say I am innocent) use gmail, hotmail, yahoo mail, etc. I belive there is some general law that describes this trend in systems, which can then be applied to the analysis of different topics, for example matter gathering in around other matter in physics or money accumulating itself around organization with more money, etc.

                On the other side you have decentralized systems which didn’t really centralized significantly, for whatever reason, such as IRC, but which had a decrease in users over time, which I also find to be an interesting trend.

                1. 4

                  Many businesses run their own email server and also I don’t have to sign up to gmail to send a gmail user an email but I do have to sign up to github.

                  1. 1

                    A tendency towards centralisation doesn’t mean that no smaller email servers exist, I’m sorry if you misunderstood me there. But on the other hand, I have heard of quite a few examples where businesses just use gmail with a custom domain, so there’s that.

                    And it’s true that you don’t have to be on gmail to send an email to a hotmail server, for example, but most of the time, if just a normal person were to set up their mail server, all the major mail providers automatically view this new host as suspicious and potentially harmful, thus more probably redirecting normal messages as spam. This wouldn’t be that common, if the procentual distribution of mail servers weren’t that centralised.

                2. 1

                  Did a talk using them. This cuts to the chase: https://www.youtube.com/watch?v=MgbmGQVa4wc#t=11m35s

            3. 1

              Git has a web interface?

              1. 7

                … federation is about data/communications between servers.. but seeing as you asked, yes it does: https://manpages.debian.org/stretch/git-man/gitweb.1.en.html

                1. 10

                  To be fair, whjms did say “a federated github”. The main feature of GitHub is its web interface.

                  1. 2

                    Right, and there are literally dozens of git web interfaces. You can “federate” git and use whichever web ui you prefer.

                    1. 12

                      But you then miss out on issue tracking, PR tracking, stats, etc. I agree that Git itself provides a decentralized version control system. That’s the whole point. But a federated software development platform is not the same thing. I would personally be very interested to see a federated or otherwise decentralized issue tracking, PR tracking, etc platform.

                      EDIT: I should point out that any existing system on par with Gitea, Gogs, GitLab, etc could add ActivityPub support and instantly solve this problem.

                      1. 4

                        Doesn’t give you access to all the issues, PRs and comments though.

                        1. 4

                          git-appraise exists. Still waiting for the equivalent for issues to come along.

                          https://github.com/google/git-appraise

                          1. 4

                            huh git appraise is pretty cool.

                            I was going to suggest some kind of activitypub/ostatus system for comments. A bit like peertube does to manage comments. But a comment and issue system that is contained within the history of the project would be really interesting. Though it would make git repos take a lot more space for certain projects no?

                            1. 3

                              I’d assume that those could potentially be compressed but yes. It’s definitely not ideal. https://www.fossil-scm.org/index.html/doc/tip/www/index.wiki

                              ^^^^ Unless I’m mistaken, Fossil also tracks that kind of stuff internally. I really like the idea that issues, PRs, and documentation could live in the same place, mostly on account of being able to “go back in time”, and see when you go back to a given version, what issues were open. Sounds useful.

                          2. 3

                            BugsEverywhere (https://gitlab.com/bugseverywhere/bugseverywhere), git-issues (https://github.com/duplys/git-issues), sit (https://github.com/sit-it/sit) all embed issues directly in the git repo.

                            Don’t blame the tool because you chose a service that relies on vendor lock-in.

                            1. 4

                              If I recall correctly the problem here is that to create an issue you need write access to the git repo.

                              Having issues separated out of the repositories can make it easier, if the web interface can federate between services, that’s even better. Similar to Mastodon.

                              1. 1

                                There’s nothing to say that a web interface couldnt provide the ability for others to submit issues.

                          3. 3

                            Right, and there are literally dozens of git web interfaces.

                            Literally dozens of git web interfaces the majority of developers either don’t know or care about. The developers do use GitHub for various reasons. voronoipotato and LeoLamda saying a “federated Github” means the alternative needs to look like or work with Github well enough that those using Github, but ignoring other stuff you mentioned, will switch over to it. I’m not sure what that would take or if it’s even legal far as copying appearance goes. It does sound more practical goal than telling those web developers that there’s piles of git web interfaces out there.

                            1. 1

                              Im going to respond to two points in reverse order, deliberately:

                              or care about.

                              Well, clearly the person I replied to does care about a git web interface that isn’t reliant on GitHub.com. Otherwise, why would they have replied?

                              Literally dozens of git web interfaces the majority of developers either don’t know [about]

                              Given the above - The official git project’s wiki has a whole page dedicated to tools that work with git, including web interfaces. That wiki page is result 5 in google and result 3 in duckduckgo when searching for “git web interface”. If a developer wants a git web interface, and can’t find that information for themselves, nothing you, or I or a magic genie does will help them.

                      2. 5

                        It’s not built-in, but Gogs and Gitea are both pretty nice.

                        1. 2

                          Hard agree. I run a personal Gogs site and it’s awesome.

                    2. 7

                      It would be enough if people stopped putting all their stuff on github.

                      1. 8

                        It won’t happen for a while due to network effects. They made it easy to get benefits of a DVCS without directly dealing with one. Being a web app, it can be used on any device. Being free, that naturally pulls people in. There’s also lots of write-ups on using it or solving problems that are a Google away due to its popularity. Any of these can be copied and improved on. The remaining problem is huge amount of code already there.

                        The next solution won’t be able to copy that since it’s a rare event in general. Like SourceForge and Github did, it will have to create a compelling reason for massive amounts of people to move their code into it while intentionally sacrificing the benefits of their code being on Github specifically. I can’t begin to guess what that would take. I think those wanting no dependency on Github or alternatives will be targeting a niche market. It can still be a good one, though.

                        1. 2

                          I hear the ‘network effects’ story every time, but we are not mindless automatons who have to use github because other people are doing it. I’m hosting the code for my open source projects on a self-hosted gitlab server and i’m getting contributions from other people without problems. Maybe it would be more if the code was on github, but being popular isn’t the most important thing for everyone.

                          1. 1

                            Just look at sourceforge, if everyone had to set up their own CVS/SVN server back in the say do you think all those projects would have made it onto the internet?

                            Now we have a similar situation with got, if GitHub/Bitbucket/etc. didn’t exist I’m sure most people would have stuck with sourceforge (Or not bothered if they had to self host).

                            You can also look at Googlecode to see the problem with not reaching critical mass (IMHO). There were some high profile projects there, but then I’m sure execs said, why are we bothering to host 1% (A guess) of what is on GitHub?

                            1. 1

                              ‘Network effects’ doesn’t mean you’re mindless automatons. It means people are likely to jump on bandwagons. It also means that making it easy to connect people together, esp removing friction, makes more of them do stuff together. The massive success of Github vs other interfaces argues my point for me.

                              “Maybe it would be more if the code was on github”

                              That’s what I telling you rephrased. Also, expanded to the average project as some will get contributions, some won’t, etc.

                          2. 4

                            Heck even I won’t move off of it until there is a superior alternative, sorry.

                          3. 3

                            I thought about a project along these lines a while ago. Something along the lines of cgit, which could offer a more or less clean and consistent UI, and a easy to set up backend, making federation viable in the first place. Ideally, it wouldn’t even need accounts, instead Email+GPG could be used, for example by including an external mailing list into the repo, with a few addition markup features, such as internal linking and code highlighting. This “web app” would then effectively only serve as an aggregator of external information, onto one site, making it even easier to federate the entire structure, since the data wouldn’t even be necessarily bound to one server! If one were to be really evil, one could also use GitHub as a backend…

                            I thought about all of this for a while, but the big downsides from my perspective seemed to be a lack of reliability on servers (which is sadly something we have come to expect with tools such as NPM and Go’s packaging), asynchronous updates could mess stuff up, unless there were to be a central reference repo per project, and the social element in social coding could be hard to achieve. Think of stars, followings, likes, fork overviews, etc. these are all factors which help projects and devs display their reputation, for better or for worse.

                            Personally, I’m a bit sceptical that something along these lines would manage to have a real attractiveness, at least for now.

                            1. 3

                              Lacks a web interface, but there are efforts to use ipfs for a storage backend.

                              https://github.com/cryptix/git-remote-ipfs

                              1. 3

                                I think there have been proposals for gitlab and gitea/gogs to implement federated pull request. I would certainly love it since I stuff most of my project into my personal gitea instance anyway. Github is merely a code mirror where people happen to be able to file issues.

                                1. 3

                                  I think this would honestly get the work done. Federated pull request, federated issue discussion

                                  1. 1

                                    I’m personally a bit torn if a federated github-like should handle it like a fork, ie, if somebody opens an issue they do it on their instance and you get a small notification and you can follow the issue in your own repo

                                    Or if it should merely allow people to use my instance to file issues directly there like with OAuth or OpenID Connect. Probably something we’ll have to figure out in the process.

                                    1. 2

                                      just make it work like gnusocial/mastodon. username@server.com posted an issue on your repo. You can block server, have a whitelist, or let anyone in the world is your oyster.

                                  2. 1

                                    Would be nice if I could use my gitlab.com account to make MRs on other gitlab servers.

                                  3. 1

                                    I always thought it would be neat to try to implement this via upspin since it already provides identity, permissions, and a global (secure) namespace. Basically, my handwavy thoughts are: design what your “federated github” repo looks like in terms of files. This becomes the API or contract for federation. Maybe certain files are really not files but essentially RPCs and this is implemented by a custom upspin server. You have an issue directory, your actually git directory, and whatever else you feel is important for managing a software project on git represented in a file tree. Now create a local stateless web interface that anyone can fire up (assuming you have an upspin user) and now you can browse the global upspin filesystem and interact with repos ,make pull requests, and file issues.

                                    I was thinking that centralized versions of this could exist like github for usability for most users. In this case users’ private keys are actually managed by the github like service itself as a base case to achieve equal usability for the masses. The main difference is that the github like service exports all the important information via upspin for others to interact with via their own clients.

                                  1. 4

                                    I have to hand it to the sequel ruby library by Jeremy Evans. It’s a dataset-first instead of model-first abstraction. Models are available as a layer on top of datasets, but are not required.

                                    def users_allowed_to_receive_alcohol
                                      state_codes = DB[:states].where(can_ship_alcohol: true).select(:code)
                                      user_ids = DB[:addresses].exclude(state_code: states).select(:user_id)
                                      DB[:users].where(id: user_ids).where{ age >= 21}
                                    end
                                    

                                    Gets you an chainable dataset representing the query

                                    SELECT * FROM users
                                    WHERE age >= 21 AND id IN (
                                        SELECT user_id FROM addresses
                                        WHERE stateCode IN (
                                            SELECT code FROM states
                                            WHERE can_ship_alcohol = true)))
                                    

                                    It does a great job of providing a unified abstraction in most cases, and it still allows you to use database specific features (PG’s json, pub/sub, cursors, etc) without breaking the DSL. You could argue for writing raw SQL, but that gets ugly quickly when you’re dynamically building a query.

                                    1. 2

                                      Yes, sequel is a very nice library. The active record pattern was a known bad thing back when NeXT called it “Enterprise Object Framework” and it’s a bad thing now.

                                      1. 1

                                        This is exactly why rom-sql is powered by Sequel Dataset API. I’m wondering why it’s not a separate gem.

                                        1. 1

                                          I was unaware of that. Thanks for the heads up.

                                      1. 8

                                        One nice way to indicate “alive” status is to have a file with the version of everything the last test run passed on, and update it whenever a dependency changes.

                                        1. 3

                                          Nice! That’s definitely a productive approach.

                                          1. 3

                                            It’s specific to languages, but I’ve seen a few github projects with badges indicating dependency status from https://gemnasium.com/

                                          1. 6

                                            There are many ways to skin the “develop with a chromebook” cat and they all seem to fall terribly short to me. I have a chromebook, I’ve done ubuntu via crouton and it works fine… but at the end of the day you’re using either a poorly-spec’d machine, or using terminal-only apps ssh’d into something else you’re presumably paying for.

                                            Until there start being options for chromebooks with decent memory/storage I just don’t see them as valid alternatives to a “traditional” developer’s laptop for the vast majority of devs I know.

                                            1. 7

                                              This solution works great for me, since the only graphical app I use anymore is Chrome. So many traditional applications have moved to the web, so I barely miss being able to run other applications. The other machine was also already set up as a server, so I don’t see it as any extra cost. I would of course like to have a “real” notebook to use, but there is quite an appeal to me in having something so lightweight that I can still get work done with.

                                              1. 4

                                                I guess for my money, an 11" Macbook Air is going to beat a Chromebook in everything but cost. And if this is a machine I’m doing professional, paid work on, I can justify the cost. YMMV though, there is undeniably something very appealing about a ~$200 dev setup, and I do own one so I guess I can’t be too critical here :)

                                                1. 14

                                                  I just wish people would say what kind of development they DO with these setups. I suspect its something web related but its hard to say.

                                                  I bought a cheap chromebook for the same reason. Thing is, the battery life is just horrible to the point where I just don’t see the point compared to getting a beefier machine. $200 is a fine price point. But that old adage bites you in the end.

                                                  And I agree on memory/storage. Even with 4gigs its painful to hit out of memory problems when compiling.

                                                  Additionally the retina screens have corrupted me, given I look at text all day I’ll just stick to using my macbookpro+nix+osx etc… I also like being able to work disconnected, I get more done and the compulsion to just browse goes away when you’re not always online. That and on flights I can actually do stuff without a connection.

                                                  I can still ssh into boxes but with a real terminal client. Running ssh through the browser just activates my “this can’t be a good idea security wise” part of my brain. Could I do “everything” remotely I do now? Maybe but typing latency for everything I do is not my favorite thing. I’ve been on enough spotty networks to consider this idea a bit of a non starter.

                                                  But if it works for the op more power to you and all that.

                                                  1. 4

                                                    I’m mostly doing web API development in Node.js and development tooling projects right now. So I’m running either HTTP servers or command line tools.

                                                    I’ve had excellent battery life on my Chromebook (its hardware being closer to mobile than desktop), lasting 7 hours on low screen brightness.

                                                    The limited memory and storage is why I offload the actual work to a server that is much more capable. I definitely would not use this hardware alone for any kind of serious work.

                                                    I definitely miss the retina displays, but I’ve gotten used to the small screen. It might even help me focus, since I can only really fit what I want to focus on on the screen. In the development that I’m doing, I do basically always need to be online. But having a lightweight computer with good battery makes it easy to move around to anywhere with wifi.

                                                    With regards to security, SSH is going through OpenVPN, so that makes me feel better. For typing latency, I hear mosh makes that a lot more bearable, but I haven’t really run into a need for it. Granted, I don’t really travel, I just move between home, cafes, coworking spaces, etc.

                                                    1. 2

                                                      Fair enough that explains how it is workable to your setup.

                                                      Mosh helps but it most definitely doesn’t fix the problems of bad connections. Bad connections with pegged upstream or just bad packet loss even with mosh result in storms of change, wait for it to redisplay, change etc…. When that gets too annoying I tend to get angry.

                                                      I find it truly maddening when editing files as I tend to be switching between buffers so it means lots of wait. I still prefer to just edit locally and sync to remotes. I’ve never had a great experiences with relying on networks.

                                                      I suspect my battery life is lower in general in that I’m doing more things like compiling etc… which will peg all cores for a while. That and I have hooks into my editor to be running syntax checks/clang behind the scenes etc… So probably just the difference in i/o and overall cpu/memory use. I’d love to remove the local dependency, but I’m not sure its worth it. My strategy is to just make setting up a machine a run a script affair. That works well enough for me for the moment.

                                                      Hopefully my post didn’t come off too negatively!

                                                    2. 2

                                                      Happened to describe what I do in another comment–Web backend stuff that we do remotely anyway. Can’t argue if you need more memory to build stuff, etc.

                                                      1. 2

                                                        Makes sense in that regard then thanks for the clarification! I’m at the point that as soon as apple releases a laptop with 32gb of memory I’m hitting the order button faster than a beam of light.

                                                        1. 3

                                                          You can always just download more RAM :)

                                                          1. 2

                                                            I wish I could!

                                                            1. 2

                                                              Well, there’s always compressed RAM. Since Apple added it to OS X, training with ~8GB datasets on my 8GB MacBook Air has become far more doable. There’s support in Linux for compressed RAM as well:

                                                              https://lwn.net/Articles/545244/

                                                              So, yeah, you can download more RAM ;).

                                                              1. 2

                                                                I tried out the zram stuff on my 4g chromebook, turned that off straight away though it was painful enough. Made compiles quite a bit slower more so than just using swap.

                                                                But I might have done it wrong, and might’ve been a bad kernel build, was 3.17 iirc.

                                                  2. 6

                                                    I got Nix installed on a Chromebook and used it for PureScript development for a few months. 2GB of memory is totally acceptable for compiling the web app I was working on. Battery life of ~10 hours was pretty awesome. I ran X11 and installed keepassx, Skype and some other Nix packages, too.

                                                    I’ve just bought a Carbon X1 since I’m planning on doing more Haskell in the future, but a Chromebook is definitely an option for doing useful things.

                                                    1. 2

                                                      I use a C720, the i3 4GB model as it was the most specced out model other than the Pixel. Arch + dwm. Battery life runs about 7 hours for normal work habits (streaming music, filesystem watchers). Most of the development I use it for is ruby and node hitting postgres docker containers. Rarely a hiccup other than installing massive node_module trees. For a ~$300 machine it has far exceeded my expectations.

                                                    1. 7

                                                      Hitting “stop” before “start” breaks the “start” button.

                                                      The 1 second delay between hitting “start” and receiving any feedback gave me the feeling something was wrong.

                                                      1. 1

                                                        Ok, fixed the “stop what wasn’t started” bug.

                                                        Yeah, I’m not sure what could be a good feedback when hitting start.

                                                        1. 4

                                                          Maybe make the text darker when the stopwatch is active?

                                                          1. 3

                                                            Perhaps make the colon hide/unhide every half second, and hide it as soon as you press start?

                                                            1. 1

                                                              I still see a problem with pressing “stop” before “start”. If I press “reset” while stopped, then press “stop” and wait a few seconds, then press “start” again, the stopwatch starts at 4 seconds or so, instead of 0 seconds.

                                                              1. 2

                                                                Damn :) Fixed that one too now!

                                                          1. 7

                                                            Suggestions on video conferencing that isn’t Skype or Hangouts? Most OSS video software is doubleplusungood

                                                            1. 5

                                                              We use Zoom.us and love it. I think they have a free plan which is capped at 20 or so participants. We routinely run full-team meetings with 100+ people and it works great. I recently moved to the backend of nowhere and the best my ISP can offer is 1mbit DSL. Zoom still performs wonderfully, which is remarkable to be honest.

                                                              When we used hangouts with 10 participants, it felt like my macbook air was going to melt. Zoom hardly breaks a sweat.

                                                              1. 4

                                                                If you’re a single-digit number of people, and don’t need fancier things like screensharing, you could try one of the sites that’s just a thin wrapper around WebRTC, which should work as well/badly as browsers' WebRTC implementations (hopefully on an upward trend). https://talky.io/ supports up to 5 people, and https://appear.in/ supports up to 8.

                                                                1. 2

                                                                  Thanks for the talky.io recommendation. I tested it out the other day. The quality of video and screensharing is killer. I dig that you can full screen the screen sharing, something that always bugged me about hangouts. The other perk is that my fan doesn’t kick on the moment a conversation is started. The 5 person limit is reasonable, WebRTC scalability limitations, and should be able to accommodate most uses for me.

                                                                  1. 1

                                                                    Might work, since screen-sharing can be handled by the (admittedly not totally satisfactory) Chrome Remote Desktop app

                                                                  2. 2

                                                                    Tox is in early development, but some of the clients, like uTox and qTox, are already usable. I have had video calls using both.

                                                                    Tox has some limitations that they are working on. The biggest one being the ability to use your profile on several devices at the same time.

                                                                    Give it a try! You can add me if you like: 86B1DC08F49D53D18B5A9D36D2491C499413D7FFA8E2E39787536C0149863F183B975502DE59

                                                                    (Add me, anybody)

                                                                  1. 2

                                                                    Last week I set up Wercker CI to build docker images for a web app and push them to a private repo. I’m liking that the tests run against the same image that will be deployed. Switching to Wercker from Jenkins is a win because of build configuration living with the source code. Also, it’s one less server to maintain.

                                                                    This week will be setting up a CoreOS cluster running vulcand to load balance the app. I’ve been using Ansible’s ec2 modules to spin up and down an entire cluster for testing.

                                                                    After I get a grasp of that, I’ll be taking on deployment. I’ve been thinking to use docker tags to denote which environment an image is suitable for. Next, restart the webapp service, which would pull down the updated image and start up the next version. It seems straight forward, but I intend on writing an article about the pain points when I’m done.

                                                                    1. 2

                                                                      Working through 4clojure and taking this as an opportunity to test out the Light Table editor. The “instarepl” feature is helpful for getting my bearings in the language. However, I’ve missed vim keybindings for manipulating text.

                                                                      Also, I’ve been reading Getting Things Done. I’m not usually one for productivity books, but a coworker suggested it.

                                                                      1. 1

                                                                        There is a plugin for Light Table that provides Vim keybindings. (Likewise, another one for Emacs.)