1. 5

    So developing for a job isn’t as fun as developing for fun, who would have thought?

    1. 4

      “It’s only work if somebody makes you do it” (Calvin & Hobbes)

    1. 0

      It’s sort of what Bret Victor is trying to put forwards: Engaging the whole body in the design process, wether is code or cars. See the @Dynamicland1 twitter feed, it’s quite fun to watch.

      1. 2

        Article conflates OS with UI. They can perfectly keep iterating Darwin behind both. The point is if they might port UIKit (internally seems they already have) to be the basis for MacOS desktop apps.

        1. 14

          I don’t see a use to this at all. Is it just me? I don’t think many people want to input formulas into text boxes. Or if they do, the formula itself is useful and relevant, so it disappearing once the user unfocuses would be non-optimal. (Could save it to a data- attribute and switch it in on focus though.)

          1. 7

            UI design: Now and again you are doing simple pixel calculations when laying out design components (Sketch does it). Accounting/tax forms: once and again you might need a simple sum or product. Obviously, embedding a full javascript “eval” inside a form field is not a very good idea. But a simplified calculator can be very useful (limited to what a typical calculator can do).

            1. 5

              So, if you were using this in a CAD program or similar, it’d be helpful.

              1. 4

                I agree. I can think of very few situations where this would be useful - and in almost every situtation where it would’ve been, then you would want the original formula to be editable. For example, I was working on a data analysis tool that allowed for complex input of mathematical equations in order to change the output of a graph. This calc would not have been useful there, I would have had to still build my own.

                1. 2

                  I thought about saving it - but then you really need a two-input system where the formula is visible in one place and evaluated into another field I think

                1. 2

                  Does anyone use any “full” GTD strategy? I can’t imagine being busy enough to need all of this. I’ve been getting by with a combination of the “do it now if it takes less than two minutes” rule, saying “no” to various projects and engagements when possible and advantageous (I learned this from the book Essentialism, the only “self-help” book I’ve been able to read all the way through), and an old-fashioned todo list.

                  I’ll admit I’m quite young in both age and career progression, but these programs seem a bit daunting.

                  1. 3

                    I tried the full GTD, but never got to a stage where I used it for my whole life, as the book pretends. On the other hand, some ideas coming from it have been very useful:

                    • Redact todo’s as actionable items (not vague descriptions). This eases taking actions.
                    • Use a calendar for things that have to be done on a certain date.
                    • The “tickler file” to forget about things until later (I use a hidden calendar that reminds me by mail on the date only).
                    • The “out of sight, out of mind” principle. Leave it written in a trusted place so you can forget when you go home.
                    • The “zero inbox” principle. Trash and/or archive without mercy all things that you don’t need to act on.

                    Even if you don’t implement the full method, many of their ideas are quite useful and common sense.

                    1. 2

                      I don’t do full GTD, however I have gotten stricter about how I organize my time as my career has progressed. I generally have quite a bit of different stuff going on at the same time and small bits of information to keep track of. I’m a pretty heavy user of org-mode for it.

                    1. 1

                      I’ve heard about how terrible Auto Layout is from so many developers. Is it merely the case that people are confused about it? Or is it that it is kludgy even if you fully understand the process?

                      1. 3

                        The problem with Auto Layout is that when it works, it’s great. When it does not work, it’s a PITA to debug.

                        The IB implementation also had too much magic behind (adding missing runtime constraints so the equation system had enough variables to be solvable but causing it to have no solution). Then you had to read the debug dump and figure out what constraints to add or remove.

                        Also, things that are expressed in a single sentence in the design (e.g. “views evenly spread horizontally with a 4px separation”) where difficult to obtain. Before UIStackView was available, to do that you had to create invisible views between the elements, add constraints to them to have the same width, and then constraint the views positions to those.

                      1. 12

                        I had a coworker once who only used IntelliJ or Sublime + plugins for anything. He was one of the smartest programmers I’ve worked with, and one of the fastest at producing and editing code as well. You can be good with a lot of things.

                        These days I’m in Emacs (writing Clojure/script) and I’ve done the bulk of my coding in Vim. There is something of a grammar to learning those editors, and once you invest the time to learn the grammar, you can express yourself somewhat more efficiently and elegantly (in my opinion) than in an editor where your commands are limited to basic up/down/left/right/beginning-of-line/end-of-line + various plugin-like commands. But the sweeping statements like “you can’t do such-and-such in foo editor,” or “it is not possible to be as productive in foo editor as in bar editor” all reek of ignorance to me.

                        1. 2

                          I’ve been long using Vim and now using AppCode a lot (which is IntelliJ for Objective-C) and I’m starting to get to a personal view on the editing question.

                          Thing is, different text editors embed operations differently depending on the structure of the target text. For editing plain text, anything simple will do, even textpad. As soon as you add structure, you want to start editing at a higher semantic level.

                          Vim is great for programming because it gives you a “stuctured-code-assembler”, ie. a low level set of operations that map to semantic operations over what you are editing (mostly “source codey text”). It allows you to think about operations over lower (character, line) and higher structures (block, “scope”) and compose mnemonic combos.

                          But where Vim (and most general text editors) start to get short is when you need the editor to have a specific understanding of what you are editing. That’s the kingdom of the IDE, which can have operations fine-tuned to the language (e.g. refactoring).

                          IDEs are always limited to a small bunch of concrete kinds of “text” and manage at the project level.

                          Text editors tend to add features to get to the IDE experience, while being general enough for any kind of text. Take tags for example: Vim uses ctags, but the tool is clunky and fails with complicated languages and project structures, dependencies, general libraries, etc.

                          The interesting thing would be to get to a set of composable text operations and a language that allows to express the semantic structure of the underlying code for a large subset of (programming) languages.

                        1. [Comment removed by author]

                          1. 7

                            I think you get the same readability advantage from having an auto-formatter (eg gofmt), without adding so much complexity to the parser.

                            1. [Comment removed by author]

                              1. 3

                                Amen to that!

                                I’ve seen too many hours lost in discussions about code format issues.

                                Today, I expect any language I work in to have an automatic, command-line formatter. Even if the style does not match my preferences, I prefer uniformity over customization.

                                Add automated refactoring tools and I’m sold.

                                Any modern language should be thought from the start to make those kind of tooling possible.

                                1. 1

                                  I know of http://clang.llvm.org/docs/ClangFormat.html and for Python https://github.com/google/yapf

                                  Yapf kind of is the example that even though Python indentation is mostly right, there are a lot of other code-layout questions to be layed out in code.

                                  1. 1
                                    1. 1

                                      Dart, though not so popular, has some pretty decent tools, including a formatter… https://github.com/dart-lang/dart_style. Must be something in the water in Mountain View :-)

                                1. 1

                                  You should use Markdown for what was created: Simple snippets of text (blog posts, comments, READMEs) with some basic markup and structure that can be read with a basic text editor.

                                  If you have to write “serious” documentation, use TeX/LaTeX or something thought for the task.

                                  1. 7

                                    I disagree with his argument, but some of his premises seem right. I’m not the most experienced object oriented programmer, but my impression is that he’s right about why object oriented programming became successful. As he said, as it became easier to write code, people started writing too much of it, and it became difficult to manage the complexity. Object oriented programming is fundamentally a solution to a social problem, not a technical one.

                                    It seems like it’s a clever way to get people to namespace their code well. I think where I disagree with him is about whether that’s useful or not. I think naming things is hard, and even namespacing things is hard. Good object oriented programming typically keeps namespaces very, very small, which is useful because the technology stays manageable.

                                    1. 7

                                      The problem with OOP is that it’s always been kind of a “poor man’s mathematical abstraction”. Abstracting reality, wether processes, states or relations is a difficult task (ask any physicist or mathematician). Thus OOP offered the easy “cat inherits animal”, and seemed just right for many people-oriented problems. But as usual, when all you have is a hammer…. you end out with a lot of pitted abstractions.

                                      1. 3

                                        That is an insightful point about it incentivizing namespacing. I didn’t watch the video, so I don’t know whether it’s yours or the speaker’s, but that sounds exactly right.

                                      1. 1

                                        I agree with some of his points, but then he goes into a rant about large functions I quite can’t agree on. The “large function with commented sections” at the end (for those patient enough).

                                        Splitting large functions into smaller functions might not be necessary in his given example (typical of a setupThis, setupThat method). The intended functions of this refactor are those that have some kind of flow that encodes a “business rule”. His example has just a straight flow. In this case there’s not much difference between using some methods or some comment headers.

                                        The purpose of this kind of refactor is to clarify the business logic of the method so you can read it at a clear abstraction depth, without other concerns. E.g.

                                        if (amount < available) { // Remove amount from account
                                        // ... and some hundred lines...
                                        } else { // Transfer funds from secondary account 
                                        // ... some hundred lines more
                                        }
                                        

                                        Which splits into:

                                        if (amount < available) {
                                            removeFromMainAccount(amount);
                                        } else {
                                            transferFromSecondaryAccount(amount);
                                        }
                                        

                                        Which is a clear spec of the intended purpose of the function or method.

                                        • Edited to make a valid point ;)
                                        1. 2

                                          Tried the web app, couldn’t find the automation features you sell on the home page. Not bad for a team checklist, but still lacks communication features. Something like Asana but able to define template processes, automation and dependencies would rock.

                                          1. 1

                                            Thanks rpc.

                                            I agree with you that triggers and outcomes is hard to find.

                                            Here’s how to use them.

                                            To add triggers and outcomes to a template, go to your team, then click on the template you want to add triggers and outcomes to.
                                            
                                            On the top right corner there is a icon with three vertical dots, click on that to show a menu, there you will se two options, "Set triggers" and "Set outcomes". 
                                            
                                            Use this options to add triggers and outcomes to the template.
                                            

                                            We are looking into how we can make this much easier.

                                            1. 2

                                              Good. Another feature request: more than once, the outcome of a task is some kind of file/content (a document, a design, a image file…). I don’t know if some kind of attachment is planned, at least as a URL, as a “soft precondition” for task completion.

                                              1. 2

                                                I don’t know if you’re talking about outcomes for a howl checklist or the outcome of a task. So I answer for both.

                                                It’s an awesome idea to be able to attach some content to the outcome of a checklist. Currently we support something called “Result outcome” for checklists, this means you can add a couple of results a user must choose from before marking a checklist as completed. E.g Approved or Not approved, or Successful or Failed and so on. But adding the ability to attach content, like a large text, url or file would make it much more powerful.

                                                For individual tasks with a checklist we are working on adding the same “Result outcome” as for a checklist. So you can set a task as “On hold”, “Working on”, or “Completed” and so on.

                                                And of course you add these results yourself, you can add up to 10 possible results for a task or checklist.

                                                Thanks rpc for the good idea! I'l be sure to add it to our backlog.

                                                1. 2

                                                  Beware, that’s just an engineer view of task management! :D

                                                  Once and again, we find this two situations in Asana: We have a template, just a task list, with assignees in the titles (so tasks are not assigned until later). It’s very manual, and the “outcomes” that should trigger the next task don’t have a clear place to live in. There is some “task dependency” support in Asana, but it’s useless. Things like https://flowplane.com are too complex and external to be of use.

                                                  The ideal would be to have some kind of sequencial, outcome-based dependency that only sets a task as active when the previous one is complete. This might be easier to model visually, and the linear case covers most needs (for parallel you could use task group based dependencies).

                                                  1. 1

                                                    I see, it’s ha tough balance between functionality and simplicity. So every new feature needs a huge amount of consideration.

                                                    As I see it, the automation aspect is “plugged in” to either the trigger (start a new checklist) or the outcome (complete the checklist) between this two there is the checklist with tasks that people have to complete. I'l focus on making better automation and 3rd party integration on the trigger and outcome side of the service, keeping the checklist part as clean and simple as possible.

                                                    This is the plan anyway. And if I get feature request from people using the product I will of course take that into account.

                                                    Thanks again for well thought out feedback!

                                          1. 7

                                            I don’t know if they’ve gave up, but their software has definitely started sucking.

                                            One example that’s affecting me right now: The app store icon on my MBP shows there are 4 updates available, but if I click through to the Update page and click “Update” or “Update All” nothing happens. They’ve been available for days, and for days I’ve been unable to update them. Sometimes a spinning icon shows up in the corner by the forward/backwards arrows, but the updates never install.

                                            Another example: iCloud on my phone. It prompts for my password every 5 seconds, even though I click “Not Now” and don’t want to use it. So I tried to disable it. But I need to sign in to disable it?!? So then it starts prompting even more often trying to get the password to sign out. It was practically DOSing me trying to use my phone yesterday.

                                            And don’t get me started on how “Radio” and “Apple Music” have infiltrated the Music app and iTunes. I already buy my music on Amazon, I’m not interested. Yet they’re still there, apparently impossible to disable, and at least on iOs it seems to be the default screen when the app loads.

                                            They just keep screwing up every little thing in the most annoying possible ways. I’m not planning on upgrading my hardware any time soon, so I’m locked in for now, but I’m certainly not buying Apple when it’s time to upgrade.

                                            1. 4

                                              I don’t really see a regression - the Mac App Store and iTunes have always been crappy :). I have been pretty happy with the last two iterations of OS X. It seems that it has been getting some more attention after some years of stagnancy. E.g. El Capitan is much snappier on our Macs. I like the relatively new support for extensions, e.g. Finder and Photos.app extensions. System Integrity Protection seems good for family that every now and then manage to install dubious software.

                                              Hardware-wise, I really like my new MacBook 12", it’s beautiful, light, has a great screen, and I like the keyboard. Yes, they should’ve put in at least two USB-C ports. I don’t really have an opinion on iDevices anymore, since I switched to Android two years ago.

                                              tl;dr: to me it seems like business as usual, with occasional brilliance (MacBook 12", which will probably remove some of its limitations in the next iteration).

                                              1. 2

                                                the Mac App Store and iTunes have always been crappy

                                                If you include iOS’s music app in “iTunes” then I disagree. iOS2’s music player was big leap forward from the clickwheel design (I never used iOS1 but I assume it was the same) and there wasn’t significant backwards movement until iOS 7 and 8. Progress was slow (sorting names in subtly different order on unicode values outside ascii relative to iTunes, the addition of playlist editing, etc) but it wasn’t until they replaced “back” with “see a screen full of apple advertisements” that it became clear we were headed in the wrong direction.

                                              2. 1

                                                It’s illustrative, I think, that your complaints here are all with Apple’s services infrastructure and design.

                                                1. 5

                                                  Do you want some UI complaints? Try enabling bigger fonts.

                                                  Use the iOS9 todo list app. The text field is clipped and you can’t see what you are typing (bug reported). Now go to the contacts app. Too easy to get wrong, right? And a PHONE NUMBER! Once you have entered 5 numbers, the field goes offscreen and you can’t see what you are typing (bug also reported).

                                                  I don’t think they’ve given up. I think they are focusing on the “industrial design blink” and completely forgot usability. Ive without Steve.

                                                  1. 1

                                                    Yeah. I can imagine if a person signs up and enables everything and updates immediately to everything then it’s a great experience. But nobody’s considering the corner cases where people don’t go all in on every thing Apple releases, and a lot of those corner cases are broken.

                                                  2. 3

                                                    No, I think my complaints fall into two categories.

                                                    First, general software bugs, like the update problem.

                                                    My second complaint isn’t necessarily with their services, but with how they integrate those services into iOs and OSX. iCloud and Apple music may be great services, but it feels like Apple is trying to bully me into using them by shoving them in my face every 5 seconds asking me to log in or whatever. If I say “No” the first time, they should respect it. They could at least wait a day or something instead of literally asking 5 seconds later. I can post a video; it’s literally 5-10 seconds apart between prompting for my iCloud login.

                                                    1. 1

                                                      The update problem is because the same cloud infrastructure that does such a poor job with the various App Stores is reused for software updates. And yes, there’s a definite strategy tax issue with the way that the services have been shoe-horned into other software.

                                                      But I find the underlying software to be pretty good, and in some places, excellent. Full disclosure, of course, is that I used to work there.

                                                  3. 1

                                                    At least with Apple Music, you can turn it off in settings (via Settings > Music > Show Apple Music).

                                                  1. 36

                                                    I disagree with the second takeaway:

                                                    Takeaway: If you can choose a more permissive license for your project than GPL or LGPL, please do.

                                                    The GPL is a political and ethical choice. If you agree with the principles of free (libre) software, then please do choose the GPL.

                                                    I understand that it is annoying to find a project or library that solves your problem beautifully and not being able to use it in a commercial context (It has happened to me). Well, that’s life. At least you have the source as inspiration and to learn.

                                                    1. 13

                                                      There is the question of how common it is for someone to choose the GPL or LGPL without understanding that it is a political choice (and I do agree with you that it is). choosealicense.com, the site recommended by GitHub for the selection of an open source license when you create a new repository, describes the GPL as “…the most widely used free software license…” and I could definitely see people unfamiliar with it (students and those people new to open source) choosing it based on that line alone.

                                                      1. [Comment removed by author]

                                                        1. 4

                                                          If your philosophy says to use GPL/LGPL then there it is, choose those. Otherwise, consider using a license that allows more people to use it.

                                                          But even this framing makes GPL/LGPL the minority position, and MIT the majority position. I could also say

                                                          If your philosophy says others can take your work and not give back, choose MIT. Otherwise, consider using a license that keeps your open code open.

                                                          Things are hard. :)

                                                        2. 7

                                                          Exactly. If I decide to license a library under GPL or LGPL, it’s because I want compensation for my work. I will accept compensation in the form of code, and I’ll accept it in the form of money – I’ll happily cut you a release with a commercial license.

                                                          But either way you chose to pay for the GPL code, “Fuck you, pay me”.

                                                          1. 9

                                                            This is my perspective as well: gratis non-GPL code (MIT, BSD, Apache, etc) is exploitative of the developer: it allows taking without contributing back. It is - in my frank opinion - a scourge on hackers that they have NOT gotten compensated for their work, or recognized. A great example is the guy running the core NTP infrastructure. He should have a solid sinecure somewhere where he is paid a hefty salary with benefits to keep the system running.

                                                            If you want to give out your code, you deserve to be recognized and compensated. Your labor has value! If it’s a valuable contribution, it should continue on past your control and the control of the corporate users. This to me means AGPL3 is the most ethical licence when taking the historical view. From a “PAY UP” view, the commercial license is the correct one; MIT et al lets you NOT get recognition or compensation in any form except for corporate charity, which is sketchy at best. I feel super strongly about this.

                                                          2. 5

                                                            I was going to post this as well. Of course, many people end up choosing the GPL by default; the real takeaway for me is not necessarily “avoid the GPL”, but rather, “think about how you want your contributions to be built upon”. If you decide that the GPL is best aligned with your beliefs, than please choose it.

                                                            1. 3

                                                              If you agree with the principles of free (libre) software, then please do choose the GPL.

                                                              Copyleft does not have a monopoly on the principles of free software. I absolutely agree with said principles, but also explicitly avoid the GPL because of its viral tendencies and its reliance on intellectual property laws to work. If a library is GPL’d, I won’t even use it open source projects, because it (in practice) means that my project has to become GPL’d.

                                                              1. 3

                                                                It can be also a commercial choice if you dual license your code, the viral effect of GPL means no commercial work can be built over it, so it can be a tool to undermine your competition (by offering a “free” product ) and increase your market share (if you provide an easy transition from your GPL'ed code to the commercial one)

                                                                1. 6

                                                                  the viral effect of GPL means no commercial work can be built over it,

                                                                  Commercial work like github built on git or EducateWorkforce built on top of AGPLed edX?

                                                                  There’s more than one way to make money than to hide the source code and restrict your users.

                                                                  1. 5

                                                                    Straight from the horse’s mouth: http://www.gnu.org/philosophy/selling.en.html

                                                                    1. 1

                                                                      But those are services not products, my point is your competition cannot take your GLPed code, maybe extend it, and sell it as it was it own, thus they cannot (legally) steal your work. Plus, making available a free alternative of the product undermines their market.

                                                                      There’s more than one way to make money than to hide the source code and restrict your users

                                                                      I was never arguing in favor of that… in fact, I’m arguing about the opposite: dual license your product under GPL can be a good way to make money…

                                                                  2. 4

                                                                    I, on the other hand, use and have used tons of GPL'ed software commercially and I bet you have too. Which company nowadays would avoid using git just because it’s GPL'ed?

                                                                    There’s no need to be so afraid of the GPL, even for the most evil of plutocrats.

                                                                    1. 10

                                                                      Using GPL software and integrating with GPL libraries are two very different things.

                                                                      1. 9

                                                                        Of course, but the original blog post was “why I’m not using your open source software”. It sounded like they refused to even touch it if it was GPLed.

                                                                        My point is that some people have have more misgivings about the GPL than necessary.

                                                                        Oh, and this is not purely academic. I know for example Apple has or had a policy to not touch anything GPL'ed. A friend of mine once got excited about Octave and installed it on her Apple-owned laptop. She got chewed out by her boss for installing GPLed software. As part of her admonition, she was told that if she needed a Matlab license she should request it, but never install anything GPLed.

                                                                    2. 2

                                                                      There are libraries licensed under the GPLv3 and I cannot use those libraries with my MIT/BSD/ISC-licensed projects because if anybody deployed the binaries he would essentially break the GPLv3-conditions. I wouldn’t mind if the GPL was protecting free software from commercial exploitation, but the GPL does too much for my tastes. It tries to control what can’t and shouldn’t be controlled. In the end, companies don’t care anyway.

                                                                    1. 3

                                                                      I use pathogen.vim to install packages. If I only git clone via HTTPS (and I do—it’s the Github default), it should be the same as using vim-plug as the post suggests, right?

                                                                      1. 5

                                                                        In fact, if you are using sources from anywhere without auditing, it doesn’t really matter. You are just avoiding that the code is replaced in its way to you, but if the exploit is already there in the repo, that’s it. Just like piping wget https…. | bash. At last is a question of trust. Who says that the emacs or vim mantainer hasn’t put any backdoor there? We can only trust the many-eyeballs audit done by the “community”.

                                                                        1. 5

                                                                          I’d also estimate this to be a far more likely malware vector than my ISP backdooring emacs packages by rewriting them on the wire while they’re en route to me over HTTP.

                                                                      1. 5

                                                                        I really dislike flat design. Probably I can modify the UI in OS X (can I? I don’t know) but it’s also used in lots of places I have no control over like web pages. Sure, I could do some custom styling but I really have better things to do. I hope this trend will be reversed in the future.

                                                                        1. 1

                                                                          Go to System Preferences:Accessibility:Screen and enable the high contrast mode. That helped me a lot :)

                                                                        1. 1

                                                                          objc_setAssociatedObject… good old trick, useful to attach properties to certain objects passed to internal APIs and back, like MapKit annotations.