
Show HN: Bringing Pull Requests to Ship, a macOS native client for GitHub Issues - kogir
https://www.realartists.com/blog/pull-requests.html
======
songgao
Before you try it out, just know that it will install a webhook on every
single one of repositories that you have permissions on, not just the ones
under your personal account, but all the organization ones as well. And GitHub
doesn’t seem to have a way to easily remove them all at once, even after the
app's permission has been revoked.

EDIT: as pointed out by Prefinem below, using the "Logout" feature uninstalls
all webhooks:
[https://www.realartists.com/docs/2.0/uninstall.html](https://www.realartists.com/docs/2.0/uninstall.html)

~~~
kogir
Sorry you were surprised. Just to check, was the Privacy Notice displayed
before you logged in? It looks like this:
[https://s3.amazonaws.com/support.realartists.com/PrivacyNoti...](https://s3.amazonaws.com/support.realartists.com/PrivacyNotice.png)

We do plan to make repository selection for sync configurable in the next
release.

~~~
songgao
I was too eager to try it out that I did not read it carefully enough.
Completely my fault! Yeah repository selection would be nice!

------
Prefinem
@TheTon

Like another use said, I would rather pay once and receive updates than a
monthly subscription. I know that you are using your own servers to pull
information, but I don't know why that is even necessary. I would rather have
an app that doesn't pass any information through a third party server.

I also ran into a problem when trying to create a milestone for a repo (this
was the second milestone I was creating with the app) and it locked up.

Other than that, it's extremely nice, and if you ever made it into a one time
purchase, I would probably pick it up right away.

EDIT: Just a couple of notes. I tried out a couple of other applications to
compare features (since I can see how nice managing issues, etc from a single
app is compared to the website) and I have to say that Ship is by far the
nicest out of the bunch.

As posted below:
[https://www.realartists.com/docs/2.0/uninstall.html](https://www.realartists.com/docs/2.0/uninstall.html)

T̶h̶a̶t̶ b̶e̶i̶n̶g̶ s̶a̶i̶d̶, w̶h̶e̶n̶ I̶ w̶e̶n̶t̶ t̶o̶ c̶l̶e̶a̶n̶ u̶p̶ /̶
r̶e̶v̶o̶k̶e̶ a̶c̶c̶e̶s̶s̶ t̶o̶ a̶l̶l̶ t̶h̶e̶s̶e̶ a̶p̶p̶s̶ t̶h̶a̶t̶ I̶ j̶u̶s̶t̶
a̶l̶l̶o̶w̶e̶d̶ a̶c̶c̶e̶s̶s̶ t̶o̶ G̶i̶t̶h̶u̶b̶, I̶ f̶o̶u̶n̶d̶ a̶ t̶o̶n̶ o̶f̶
h̶o̶o̶k̶s̶ o̶n̶ n̶o̶t̶ o̶n̶l̶y̶ t̶h̶e̶ o̶r̶g̶a̶n̶i̶z̶a̶t̶i̶o̶n̶ l̶e̶v̶e̶l̶,
b̶u̶t̶ e̶a̶c̶h̶ r̶e̶p̶o̶ l̶e̶v̶e̶l̶. I̶ k̶n̶e̶w̶ t̶h̶a̶t̶ y̶o̶u̶ w̶o̶u̶l̶d̶
h̶a̶v̶e̶ h̶o̶o̶k̶s̶, b̶u̶t̶ I̶ a̶s̶s̶u̶m̶e̶d̶ t̶h̶e̶s̶e̶ w̶o̶u̶l̶d̶ b̶e̶ o̶n̶
t̶h̶e̶ o̶r̶g̶a̶n̶i̶z̶a̶t̶i̶o̶n̶ l̶e̶v̶e̶l̶ o̶r̶ r̶e̶p̶o̶ l̶e̶v̶e̶l̶, b̶u̶t̶
n̶o̶t̶ b̶o̶t̶h̶. E̶i̶t̶h̶e̶r̶ w̶a̶y̶, i̶t̶ t̶o̶o̶k̶ m̶e̶ a̶r̶o̶u̶n̶d̶ 1̶0̶
m̶i̶n̶u̶t̶e̶s̶ t̶o̶ c̶l̶e̶a̶n̶ u̶p̶. N̶o̶t̶ s̶u̶r̶e̶ i̶f̶ y̶o̶u̶ h̶a̶v̶e̶
p̶l̶a̶n̶s̶ f̶o̶r̶ a̶u̶t̶o̶ r̶e̶m̶o̶v̶a̶l̶ o̶f̶ w̶e̶b̶h̶o̶o̶k̶s̶, b̶u̶t̶
t̶h̶a̶t̶ w̶o̶u̶l̶d̶ b̶e̶ a̶m̶a̶z̶i̶n̶g̶ i̶f̶ y̶o̶u̶ d̶i̶d̶.

Either way, I will be keeping my eye on Ship because I really enjoyed it for
the most part and it is better than the alternatives I found IMO. Keep up the
good work!

~~~
athenot
This also makes it impossible to use for Github Enterprise because the
installation is (usually) not available from the public internet and most
enterprises won't be cool with the data being accessed/stored by a third
party.

It's too bad, it looks like a cool product.

~~~
kogir
We can support GitHub Enterprise with a self-hosted appliance. If you're
interested I'd love to talk.

~~~
athenot
That self-hosted appliance would have to undergo a year-long security review
process. Basically we'd have to know all the internals, how things are
implemented, with which libs, which versions, how it gets updated...

For something that really should be a piece of desktop software, that most
likely won't fly.

I understand your business decision to go for a SaaS model instead of a fixed
price, but the added value of the service (vs. a product) doesn't justify it
on the user's side.

~~~
kovek
I wonder, would you be able to check if the self-hosted appliance is making
requests to IPs other to the one that hosts your Github Entreprise instance?
If you can check for this, you can be more confident that your data is not
being sent out to machines you do not control.

~~~
athenot
That would help build a case for mitigation, but it would still have to
undergo the entire scrutiny process.

------
lol768
I'll preface this by saing: I'm not a Mac user and am unlikely to ever use
this or any other tools built for macOS.

But, it's really great to see work being done on an intuitive native interface
for this sort of thing. Major props for the write-up on the security of the
tool, too. Lots of transparency there as to how the tool works under the hood,
and it sounds like you've put a lot of thought into how that should work.

~~~
jsmthrowaway
Out of curiosity, why did you feel the preface necessary? Your point seems to
stand without it just fine.

------
jason_slack
I really like this app, but I don't think I will buy it.

Why?

It is the monthly subscription fee. If I stop paying then I lose
functionality. I'd rather pay $50 or something and get regular updates and
continued functionality than $5 a month.

Yes, I know, I already pay GitHub $7/mo, but I can't get paying monthly for a
client app.

~~~
res0nat0r
You are being downvoted but I agree. Not everything should be a never ending
monthly fee. I'll pay for a good app and happy to buy the next major release
if I think it offers enough functionality to upgrade.

~~~
tracker1
In this case, maybe an annual fee might be better... but it seems like the
application itself requires a server component (that they host) for webhooks
from gh and push notifications to their client ui.

~~~
res0nat0r
Ah...got it. If they are relying on their infra to provide services that makes
sense.

------
gerbal
I really like the look of the app. It's nice to see established well developed
desktop interface concepts applied well.

The first link in the blog post should really link to the home page. A
download link is unexpected and unwelcome for someone who's trying to figure
out what Ship is for the very first time.

~~~
TheTon
Good point. I updated the link.

------
kogir
James and I have put a ton of work into this since we first showed you Ship
six months ago. We've fixed many bugs, improved fit and finish, and even
lowered the price.

Trials have been reset, so if you looked at Ship earlier, feel free to give it
a fresh look on us!

We'll be in the thread and would love to hear your feedback.

~~~
jastanton
I'm excited to give this a try, as it's downloading, is there support for:

\- Approving / rejecting on the PR as a whole?

\- @ mentioning

\- Assigning team members to a PR

\- Viewing a subset of the diff (i.e. all changes since my last review, or
even better all changes between these two commits)

~~~
TheTon
Yes, yes, yes, and yes :)

@mentions are an aspect of the product that's a little weak right now. There's
a lot more we can and should do with it. We plan to improve this in a future
release.

------
stephenr
I don't use GitHub anywhere near enough to warrant using this anyway, but it's
sad to me that true native app development (a rare and positive thing these
days, it seems) is shackled with what I consider the scourge of the modern app
landscape: monthly subscription pricing, justified by a man-in-the-middle
server(s) for reasons that are in no way logical.

How many email "clients" have launched in the last few years, only to be
shutdown without any future use possible because they all had a hidden server
component?

So you get to pay almost as much as most people will pay for all of GitHub,
for an app that's tied to another company being around, with the bonus that
they get to see all your private repos?

I know a lot of people won't see any issue with this, and that this is
"normal" for them, but this is most definitely not "normal" for me, and it
pains me that so many people accept this as "normal".

~~~
kogir
When we initially started development, the application directly synced with
GitHub. Turns out, to accurately reflect the current state of Issues on
GitHub, you need to poll multiple resources per repository every minute, in
addition to subscribing to hooks (hooks alone don't cover everything). Even if
those requests are all 304 Not Modified responses, they add up in size,
number, and time. Furthermore, some views, like Issue details, actually
require tens or even hundreds of requests to refresh completely.

The server component can quickly make needed requests in parallel over a
reliable, high bandwidth, low latency connection. Then, once the changes are
known, the server streams them down to the app as deduplicated, compressed,
incremental changes. This allows the application to sit idle, using
essentially no CPU, network, or battery resources.

It's unfortunately the only way to provide a good user experience.

~~~
TheTon
Not to contradict what my partner, kogir, is saying here, but I think the
benefit, as a Ship user, for subscription pricing goes even further than any
discussion of the server.

Imagine that a future GitHub API v5 is perfectly suited to the feature set and
user experience that we want to offer with Ship. That's great, now we can
happily delete our server.

But, GitHub itself is a subscription service that is not a fixed target. They
routinely introduce new features and APIs, in fact nearly weekly [1]. Our app
is only valuable as long as we provide utility to you beyond what you get by
just using github.com. When GitHub adds a new feature, and your collaborators
start using it, if it isn't usable in Ship, then Ship now has negative utility
compared to loading up github.com in your browser. This isn't just
hypothetical either -- we do a lot of work to keep up with GitHub's pace of
development.

Imagine you sign up today and then 2 months from now GitHub makes a change
that substantially reduces the utility you get out of Ship, or Nick and I go
out of business. With the current subscription pricing, you will have spent
$10 for 2 productive months with the app, and you can go back to using GitHub
in a web browser with no downside, because Ship (intentionally) doesn't have
any lock-in.

Now contrast that with a model in which we ask for $70 up front for Ship. I
think this is not unreasonable considering the pricing of standalone dev tools
of similar utility (for example, consider fancy diff tools like Kaleidoscope
[2] or Beyond Compare [3]). As I'm sure you know, most indie Mac software has
a sales curve that starts off with a big spike over the first week or two
after a release and then it trails off pretty sharply. That's fine for an
offline app, but I hope you can now see how the subscription pricing model is
a better fit for Ship, both for us and for our users, given the large surface
area and fundamental nature of our integration with GitHub.

[1]
[https://github.com/blog/category/ship](https://github.com/blog/category/ship)
[2] [https://www.kaleidoscopeapp.com](https://www.kaleidoscopeapp.com) [3]
[http://www.scootersoftware.com/shop.php](http://www.scootersoftware.com/shop.php)

------
xena
I'd pay $40 for this. Can I pay you $40 once instead of $5 a month?

------
chowes
I can't wait for a Visual Studio Code implementation of this...

------
throwaway91111
Any plans for bitbucket?

~~~
TheTon
Sorry, not at the moment. We're all in on GitHub right now.

------
lyime
Any support for iOS (Ipad Pro) down the road?

~~~
TheTon
Maybe. We did iOS support on Ship 1.0, and I think it turned out pretty well.
For Ship 2.0, the Mac app is a Cocoa app, and the codebase is already factored
into UI/non-UI areas, so it's somewhat portable, but of course much of the UI
stuff has to be rethought to work well on iOS.

------
finnn
Is it just me or do none of the links work?

~~~
TheTon
Sorry, I was doing something dumb with javascript on those, so if you were
browsing with it off or were blocking resource loads from ajax.googleapis.com,
it wouldn't work. I think it's fixed now.

Here's a direct link to the app:
[https://www.realartists.com/builds/2.0/Ship.app.zip](https://www.realartists.com/builds/2.0/Ship.app.zip)

