On 14.02.2017 16:15, Michael Berger wrote: Hi,
> First, my concern about the volume of email. I wasn't aware of the > feature in git to apply patches. Oh, you've missed one of the most important features. Being able to easily handle large patch queues and patch mails was one Linus's primary design goals, as (text-based) patches have proven to be (still) the best way for reviewing and collaborating on these huge amounts of changes in a widely distributed environment like the linux kernel project. There had been lots of previous steps of automatized imports/exports w/ other SCM tools, but none of that scaled enough and still left too many manual gaps. So Linus came up with a new approach, which opened up a completely new way of doing SCM. > It seems that you were offended by the lack of quality in the previous > commits, which is understandable. Yes, because I'm critized for something that others doing worse than me. It's not the claim itself, but the double standard. > I doubt a project such as FreeCol attracts ISO9000 style development. Of course not. These ISO norms aren't made for practical usefulness, but just to keep bureaucrats busy. I've been in project for medical devices, where IEC 62304 actually caused really bad code and actual life danger ... > How would you improve this? Should there also be test cases attached to > each patch, demonstrating an improvement? This too onerous? No, the oppositive. I wasn't proposing such things - I was asked to do extra bureaucrazy by adding an ticket (manually, on the website) for each single patch. I really doubt that anybody here really wants to go that route himself. > I do wonder though, isn't there a hierarchy in these projects? I'd guess there's some clerus of people w/ push access and then the rest of all the mere mortals. > don't changes have to have enough justification to warrant being > added to the project? Haven't heared of anything like that for the commits that went in ... It's just that a small clerus has write access, and the mortals have crumble on their knees to get anything in. > Lastly, I've noticed that your contribution has focused on > 'micro-optimizations', which I hope we can agree is an close enough > term. I'm not sure whether thousands of cycles per call are still 'micro'. Just have a closer look what, eg., the streams machinery does for a simple list filter ? For example, look at this: --- a/src/net/sf/freecol/client/gui/panel/report/ReportRequirementsPanel.java +++ b/src/net/sf/freecol/client/gui/panel/report/ReportRequirementsPanel.java @@ -182,8 +182,9 @@ public final class ReportRequirementsPanel extends ReportPanel { && info != null && !info.hasMaximumProduction() && !productionWarning.contains(goodsType)) { - forEach(map(building.getInputList(), AbstractGoods::getType), - gt -> addProductionWarning(doc, colony, goodsType, gt)); + for (AbstractGoods in : building.getInputList()) + addProductionWarning(doc, colony, goodsType, in.getType()); + productionWarning.add(goodsType); } } Or that: --- a/src/net/sf/freecol/client/gui/panel/ColonyPanel.java +++ b/src/net/sf/freecol/client/gui/panel/ColonyPanel.java @@ -609,8 +609,8 @@ public final class ColonyPanel extends PortPanel // Check for non-producing locations that can now produce. for (WorkLocation wl : colony.getCurrentWorkLocationsList()) { boolean change = false, check = wl.getProductionType() == null; - for (Unit unit : transform(wl.getUnits(), u -> - (check || !wl.produces(u.getWorkType())))) { + for (Unit unit : wl.getUnits()) { + if (!check && wl.produces(unit.getWorkType())) continue; GoodsType workType = wl.getWorkFor(unit); if (workType != null && workType != unit.getWorkType()) { change |= igc().changeWorkType(unit, workType); > I can certainly sympathize. I've looked at code that manually > parses a CSV string and though 'gross'. Where is it exactly ? I only remember once replacing a huge call chain by a trivial loop, to create some piece of csv. > It's hard to justify cleaning up such code, since it works well enough > for the project. a) it's unnecessarily slow b) i'm running fc on an LTS distros which dont have recent j8 yet (and probably will never get, as nobody wants to go to the hell of packing jdk - which becomes even worse with each release - again). c) in the long run, I want to build it w/ gcj directly to machine code. > How have you approached similar changes to other projects? Regularily. For example, in a recent project (embedded telemetry device) I've optimized-away about 1/3 of the code - with each new feature i've implemented, the LoC actually shrunk. > I find it's rarely worth the hassle. I do, as it all sums up. And it makes it easier to port onto j7, while still giving a benefit on its own. The whole streams thing is expensive, and - in contrast to some urban beliefs - still has nothing to do with functional programming at all. > On the flip > side, https://en.wikipedia.org/wiki/Broken_windows_theory It seems > finding the balance is a matter of experience. Thoughts? Yeah, in the end it comes down to collective carelesness that leads to rotting. Speaking of care - I dont care about upstream anymore, I'm done with that. --mtx ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Freecol-developers mailing list Freecol-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freecol-developers