Open sourcing our Android and iOS apps
kickstarter.engineering
kickstarter.engineering
The Android codebase looks very modern and well structured. I think it makes great use of many of the goodies (gradle, rxjava, retrofit, dagger, android support lib, ...) and learnings (bring your own MV*; use Fragments when you need them, stick to Activities if you can) that is state of the art in Android development. I think it's a great thing to skim through if you are interested in developing for Android or to compare it to you own app.
I can only assume that the same is true for I iOS. I'll certainly check it out should I start developing for that platform.
Yes I've seen worse, but this most certainly isn't a great example of how to structure an Android app, not to mention the overall untidiness (commented out lines, messed up indentations etc.)
On Android MVVM is more difficult than MVP in my opinion (the most popular choice, not counting spaghetti projects), mostly because the platform doesn't provide the "glue" needed to bind viewmodels to the UI layer. At first glance it looks like they did it without overengineering, which is another trap as far as these matters go.
Clearly a work of very good experts
Wow. That's pretty impressive
Not to say they couldn't have shipped it in less time. Of course they could have. But it sounds like they shipped something very well built.
Development on Android tends to be slow overall, owing to numerous intricacies of the platform, but I believe that in general taking some extra time to roll out a clean and polished version 1.0 will pay off when it comes to 2.0 and 3.0. It's always easy to move fast in the beginning, use lots of duct tape and snap something out rapidly, but it comes at a cost and then you get bogged down further down the line
Right now we are working on a rearchitecture and are finding that creating dynamic views in the Activity/View requires business rules we are putting in Presenter. But the Presenter doesn't have context.
Also, not a huge deal for an app, but the package structure is organized by layers, not features. Makes Java's non-private access modifiers essentially useless.
The general style of the source code is solid though. I wouldn't be upset if I had to work in this code base on a daily basis.
I don't see a simple, low on boilerplate, one-size-fits-all solution for reusable and separated components on Android at the moment. I love that the community didn't settle with just Activities or just Fragments and is actively trying new stuff (after all, if you look at React or Vue or even freaking backbone.marionette, the web is in a much better spot right now regarding UI composition), but right now the right solutions always seems to take the path of least resistance and use whatever mix of pattern that gets you to your goal as easily as possible.
As for Activities, they are usually overkill for most screens. They don't allow for seamless transitions between screens and prevent sharing UI components across screens (e.g. a Toolbar). Fragments and/or regular views have the added flexibility of being able to use more than one at a time and allows for easy re-use and view composition.
Like I said in my previous comment, the only really good reason to create additional Activities is to provide additional entry points into your app. Otherwise Fragments or Views will suffice and provide greater flexibility and improve the UX in many cases.
self.youLabel
|> authorBadgeLabelStyle
|> UILabel.lens.textColor .~ .whiteColor()
|> UILabel.lens.text %~ { _ in Strings.update_comments_you() }
Which again is very different from regular iOS/Swift code.That said, I think this project is interesting to look at from the perspective of "this is what it would look like to go all-in with ReactiveCocoa and MVVM". It's kinda like Twisted in Python: Twisted code looks very different from normal Python code, cause once you start using Twisted, it becomes Twisted all the way down.
Out of curiosity, how much were the tickets and how early was it sold out? I was in Budapest right at that time to attend our remote team meeting, and I’m cursing myself for not knowing about this conference.
I am really happy that Kickstarter has released their android app as open source - would definitely be a great learning experience!
But each of htem brings their own libraries, and don't explain what what's necessary and it's left to the user ot decide to how stitch all of this together.
Don't get me wrong...I'm happy for the demo apps (they had made my life a lot easier), but a production grade app is a whole different ballgame.
"Swift Playgrounds for iterative development and styling. Most major screens in the app get a corresponding playground where we can see a wide variety of devices, languages, and data in real time."
https://github.com/kickstarter/ios-oss/tree/master/Kickstart...
I've recently bought into this development method too. It's not quite what Bret Victor dreamed up, but it's a big step in the right direction.
https://developer.xamarin.com/guides/cross-platform/workbook...
If you want your code security audited, pay a reputable firm to conduct an audit. Throwing it up on Github and thinking "the good guys" will spend time looking and contact you for free when they discover problems is misguided at best.
This is a fantastic mentality, but unfortunately doesn't really play out in reality.
I'm a huge Open Source fanboy, but we need to be "real". How many people are really going to read every line of every open source program? Very-few-to-none is the real answer. Massively popular software gets eyeballs, but few others do.
Most of us just use the software and trust/hope someone else reviewed it for security et al.
The problem with that is, we are all trusting/hoping someone else did a review, but that someone else is trusting/hoping someone else did a review.
> How many of the people that do review your code would exploit it vs reporting it to you
By nature, attackers would be reviewing your code as well.
> Combine it with a bounty program
The overwhelming majority of Open Source software was created-by and is curated-by a single person who makes negative profit by working on the software for free in their spare time. Even some of the most popular projects are still total losses for their curators. You're not going to get bug bounty programs here.
For example, take a look at Crosstool-ng[1] (a popular project used to build cross-compilers for various architectures). Companies and individuals are all using this project to build cross-compilers that they trust to build other software with. A bug in Crosstool-ng could propagate into bugs in the compiled software it produces. Bryan Hundven does most of the heavy lifting on this project by himself, and as far as I know, he's paid nothing for it. You're not going to get a bug bounty program here either.
Heck, it's doubtful even a project as large as the Linux Kernel would be able to afford an ongoing bug bounty program. They're trying with the Linux Foundation and the Core Infrastructure program, but how many years before did it have none of that?
Essentially, these programs only work for commercially-backed software, which is only a small sliver of open source software.
Ah, I see. I misunderstood. Yes, I think we are in agreement then, although I have my doubts most companies want their "secret sauce" or code-indiscretions flapping in the wild.
I think the largest hurdle for getting more stuff open sourced is two-fold.
1) A large amount of software is sub-par, and likely commits many atrocities including having business logic in the UI.
2) Companies are afraid they'll be embarrassed by their code, and would rather not take the risk of being branded as a company that doesn't do things right.
For number 1, there are potential solutions by hiring better engineers etc... but number 2 is always a (perceived) risk, even if their codebase is "perfect".
And - if the code is good, clean, modern - attracting talented coders that way. Showing me such code is million times more convincing than all the usual slogans
Kickstarter is in an even better position. Their defendable advantage is the network effect of being the go-to place for crowd sourcing.
I just wish they had upgraded to Swift 3.0
Kudos to kickstarter.
I'm getting flashbacks from my last workplace where people merged in code that didn't compile and then went 'oh really? let me fix that real quick'...
Code wouldn't compile in master but the codebase... everything had to be clever. We can't just have a model, a network request to fetch/update for it, a view controller and view cells. A few storyboards and of course no bloody tests - it's a phone app.
No, we need protocols everywhere we can fit them, third party libraries - ones that haven't been out a few years (Reactive whatever), a third party library to make a basic GET request (Alamofire looking at you), a CSS styling library, a JSON to Model library, list goes on.
What we don't need is folder structure that lets you know this is the initial VC, the two folders beneath it are the 2 possible places you can go, the sub-folders in there are the places you can go from that VC and on and on.
Let's just dump all VCs in one folder, all cells in another. Nevermind that in 90% of the cases, that one cell is only ever used in that one tableview - no need to group those together.
I don't know - maybe it's just me - I'd rather I download a zip, open the project, click that triangle and it runs - this thing makes me jump through hoops, and it still doesn't work... And nothing makes sense, unless you go learn reactive cocoa - based on the amount of files/code, a clear waste of time.
The app requires a different version.
https://github.com/kickstarter/ios-oss/blob/master/README.md
I concede. There are issues getting the dev environment configured.
https://github.com/kickstarter/android-oss/blob/888a37468358...