1. 2

    Looking forward to it! I’ll be doing Rust after I started with it on AoC last year. One annoyance I found with AoC 2018 (maybe it’s every year, I didn’t check) was heavy reliance on fiddly text parsing. I don’t design puzzles, let alone language-agnostic programming puzzles, so it might be that this is just how it has to be done. Still, I just wish there was less emphasis on text parsing and more on problem solving.

    1. 9

      Every time I read Paul Graham I think back to Dabblers and Blowhards from 2005 (which unfortunately has some sexist overtones, but a lot of the essay still holds). This quote in particular sticks out:

      [A]fter a while, you begin to notice that all the essays are an elaborate set of mirrors set up to reflect different facets of the author, in a big distributed act of participatory narcissism.

      The whole genre reminds me of the the wooly business books one comes across at airports (“Management secrets of Gengis Khan”, the “Lexus and the Olive Tree”) that milk a bad analogy for two hundred pages to arrive at the conclusion that people just like the author are pretty great.

      1. 5

        I don’t know why the author is writing in hypotheticals, rad-hard ICs have been in production for decades now. A quick search yields an ARM core that offers reasonable performance for a thousand bucks.

        1. 6

          I keep telling you! Like the Phoenix, FORTH will rise from the ashes, and take us into the skies!

          1. 4

            In particular, there is, right this moment, working CPU rolling over Martian terrain in the form of RAD750 (PowerPC ISA) inside Curiosity rover. It has worked on Mars for more than 7 years since 2012.

          1. 3

            A long time ago I set up Chrome Remote Desktop on a GCP VM so I could browse Facebook without it tracking me. It was kind of fun, but the biggest annoyance was having to log into the GCP console to start the VMs when I needed them. Cool to find out about Apache Guacamole.

            1. 11

              I love dhall as a non turing complete config language.

              1. 3

                Sort of related: I had no idea what Dhall was for but recently listened to the CoRecursive podcast with the creator and found it interesting https://podcasts.google.com/?feed=aHR0cHM6Ly9jb3JlY3Vyc2l2ZS5jb20vZmVlZA&episode=Y2I0NmZhNmZjOTQ5NGY1OTkxZWE2ZDZkNzU2MDM0Mjk&hl=en&ved=2ahUKEwjlo8OLnu_lAhUGrVkKHXOiAOkQieUEegQIABAG&ep=6&at=1573924629200

                The CoRecursive site isn’t working for some reason so I shared the google podcasts link instead.

                1. 2

                  This episode of CoRecursive mentions this SERadio podcast episode about Dhall too: https://www.se-radio.net/2019/08/episode-375-gabriel-gonzalez-on-configuration/

                2. 3

                  Yeah! Starlark (mentioned in the article as well) is also not Turing complete. It’s a dialect of Python which makes it a bit easier to adopt if you’re familiar with Python. I’m using the Rust implementation for a small personal project that needs configuring.

                1. 1

                  While most times progress bars and splash screens are good, occasionally they get in the way of what’s important: https://lwn.net/Articles/299483/

                  “We hate splash screens. By the time you see it, we want to be done.” The development time that distributions spend on splash screens is much more than the Intel team spent on booting fast enough not to need one.

                  1. 4

                    From my perspective as a software tools guy, Python 3 has never been useful. I don’t use Unicode at all, as a rule. I’m using it now when I do Python, because Py2 is going out of date, particularly the libraries. But it’s thoroughly an uninteresting shift that has not brought me any value.

                    1. 16

                      You don’t really control if your programs use unicode, your users do. Things like people’s names, URLs, filenames, addresses, etc will contain unicode.

                      1. 1

                        You don’t really control if your programs use unicode, your users do. Things like people’s names, URLs, filenames, addresses, etc will contain unicode.

                        These have been irrelevant for my work so far. My interactions with unicode have purely been unrelated to work.

                        1. 1

                          None of my users use Unicode. And I don’t use it. It’s nice to be future ready when one finally does. But I don’t think it’s a driving reason to change a bunch of stuff.

                          I use python3 because that’s when I started using stuff. I think it’s good to design for Unicode, but it I had started with 2, I would stay there.

                          I have little snippets of java and JavaScript and whatever that still run 20 years later. I would be annoyed if they stopped working because of something I viewed as not required.

                          1. 5

                            I keep track of every submission to Hacker News, Lobste.rs, and /r/Programming, and based on the titles alone, the percentage of titles with codepoints higher than 127 are

                            • HN: 15.97%
                            • Lobste.rs: 5.34%
                            • Proggit: 7.20%

                            All of these sites are explicitely English-speaking, all are based in the US, but they still have a significant amount of Unicode in their content.

                            1. 2

                              None of my users use Unicode. And I don’t use it. It’s nice to be future ready when one finally does. But I don’t think it’s a driving reason to change a bunch of stuff.

                              Maybe it’s not for you, but in general unicode in Python 2 was a fertile source of bugs. I regularly encountered it in both other people’s programs and my own. Even though I tried to do the right thing, it was often hard and simple mistakes slip in.

                              And yeah, I agree it’s annoying and that for some people it’s just useless “churn” and that sucks :-( But for a lot of us there is real value, too.

                          2. 2

                            it’s thoroughly an uninteresting shift

                            Doch, Unicode ist unglaublich nützlich!

                          1. 12

                            So the article seems to talk about big and slow companies and inertia as the underlying reason. I’m sure that’s true for some, but as I’ve written before, for Mercurial it’s just a ginormous pile of hard work. We’re not a big and bureaucratic organisation, but we do have a big commitment to backwards compat (maybe that’s inertia?). Nevertheless, Mercurial has been slowly migrating to Python 3 for about 10 years, in a way.

                            It’s just a lot of work and I get frustrated with people who seem to say “why don’t you just…” Well, we didn’t “just”, because it wasn’t a matter of “just”.

                            1. 5

                              I think it’s really unfortunate that mercurial was hard-hit by the 2to3 changes, but I’m happy the work to migrate is being undertaken.

                              1. 4

                                Yep, seems like another example of Windows XP: it will stay around as long as the community supports it because the cost of moving is too high to otherwise justify. OSS communities need to have a very clear policy (and perhaps a bit more draconian than Python here) about not supporting versions beyond X years old. Ubuntu is the canonical good example here: 5 years for LTS and that’s it. Simple and easy for all to predict and plan for.

                                1. 3

                                  Ubuntu is the canonical good example

                                  nice

                              1. 1

                                One wonders how they intend to handle the implied ping to GOOG servers with each page to look up performance.

                                1. 1

                                  There might be a way to do it similarly to how Safe Browsing v4 is implemented: a device-local cache combined with a lookup service for exceptions. https://blog.trailofbits.com/2019/10/30/how-safe-browsing-fails-to-protect-user-privacy/ is the best description I’ve found (even though it’s critical of the technique).

                                1. 9

                                  I paid off all of my loans and have some savings for emergency. So, I’m going to look into investing in some stocks. I am a total newbie when it comes to investment. So, I don’t want to start it without knowing what I am getting into.

                                  On technical side, I am going to try Google’s Sentiment Analysis APIs for one of my private projects.

                                  1. 11

                                    I work in finance, and most people who actively manage portfolios buy passive stuff (like ETFs or low-fee funds) for themselves with their “important” money.

                                    With then some amount of play money they often invest in the latest fad like cannabis stocks or some other bullshit, and they usually lose as much as they gain on average.

                                    Point is, keep it boring, with fees <70 basis points if you just want to leave your money alone for a decade or two. Don’t stock pick unless you would be willing drop the same amount on blackjack or poker.

                                    1. 2

                                      Robo-advisors (like Schwab or Betterment) offer a compelling solution, investing your moneys in index funds (passive stuff), rebalancing automatically and in certain situations, ‘tax-harvesting’ on losses.

                                      Still not an excuse to not understand what’s going on, but reduces labor (and potential mistakes).

                                      1. 2

                                        My problem with robo advisors for taxable investment accounts is that they have a certain amount of lock in - transferring shares out in kind creates a mess that’s fairly difficult to manage by hand. TLH/rebalancing is also quite easy to do manually once or twice a year on a small ETF or mutual fund portfolio.

                                      2. 1

                                        I like the idea of keeping it boring. Like I said, I am really new to investment. So, stocks might not be the only options I want to pursue. Also, I am not making a lot of money right now but I though it would be a good idea to do some study when I have time. Thanks for you suggestions.

                                        1. 3

                                          One piece of advice that got my attention was to contribute to your employer 401k program - specifically contribute as much as your employer would match. That way you know you’re getting a 100% return on that money, which is basically unmatched anywhere else. The catch is that contributing more than what your employer matches actually brings that % return down.

                                          The idea that marginal returns are what matters was particularly powerful to me - basically paying down your credit card debt at 18% interest rate is equivalent to investing in a stock with 18% return. So unless you can guarantee that you can get an 18%+ return on your investment, you may as well just “invest” in paying off your credit card.

                                          1. 1

                                            I am contributing to my 401k as much as my employer matches right now. I plan to increase my contribution in future though.

                                      3. 3

                                        Some books I recommend

                                        I agree with the no stock picking / buy an index advice even though these are about stock picking :) I’ve heard Mastering the Market Cycle book is a good introduction to investing.

                                        1. 3

                                          Congratulations!

                                          This is a ~16 page book that I recommend for new investors. It packs a bunch of useful advice in a very short volume: https://www.etf.com/docs/IfYouCan.pdf

                                          Past that, the Boglegeads wiki and forum has a wealth of information and people who can help if you want to learn more or ask about your specific situation.

                                          1. 3

                                            As a novice myself I found A Random Walk Down Wall Street refreshing.

                                            1. 2

                                              Thanks for the recommendation. I will definitely check it out.

                                            2. 2

                                              Good work getting to debt free!

                                              1. 1

                                                Thanks. I did not have huge debt. It was mostly student loan and my car installment. Still, it was a huge relief.

                                              2. 2

                                                Congrats on paying off your loans! One piece of advice (among the hundreds of unsolicited pieces of advice you’ll get when talking about investment online) is to only buy risky¹ investments with money that you don’t need to survive with. If you imagine that pile of money disappearing, would you still be able to pay for food, rent, and other daily expenses? It’s also prudent to plan for the occasional emergency expense such as last-minute travel for a funeral. You obviously can’t plan for everything (nor should you), but you don’t want to be put in a position where you have to sell stocks at a loss to pay for a plane ticket.

                                                ¹ “risky” in this context means anything that only makes sense as a long-term multi-year investment, such as stocks

                                                1. 2

                                                  Congrats on paying off all your loans!

                                                  1. 2

                                                    On the off-chance that you end up looking at peer-to-peer investment sites like LendingClub and Prosper, be aware that your money stays locked up for years in those loans. With LendingClub you may be able to sell some of your loan investments on a third party site (FolioFN) but Prosper does not have this. You won’t be able to get your money out easily (or at all) if you need it - you’ll get it back (hopefully with a profit) in a trickle as loans are (hopefully) repaid. I see these platforms now as essentially a medium term bet on economic stability, and I am personally not a sophisticated enough investor (or maybe I’m just too risk averse) to make that bet. I’m gradually withdrawing my investments as they’re repaid (that’s not intended as investment advice 😀)

                                                  1. 9

                                                    My personal favorite obscure stdlib bits:

                                                    • distutils.utils.strtobool(). Converts the strings y, yes, t, true, on and 1 to True, and n, no, f, false, off and 0 to False. Ridiculous for existing, ridiculous for being so en_US-centric, and ridiculous for being in a module titled distutils.utils (the utilities for the utilities?), but I’ve found it useful for the occasional personal script.
                                                    • bisect.bisect_left() and bisect.bisect_right(). Python has a complete binary search algorithm implemented as a library. I used this once when I had a sorted list of times and actions, and I wanted to know which action was currently the “valid” one.
                                                    1. 1

                                                      Great article! I appreciated how @hwayne kept the dead-ends in the post along with the solution, and I wish people did this more.

                                                      As for training yourself to speak more slowly: I used to do radio in college, and I trained myself to do this by practicing speaking slowly in normal speech. If you try to speak about 80% slower in an everyday setting, you can feel a tension where your brain wants to go faster but you’re intentionally holding it back. (If you need more imagery, imagine letting your brain idle while your mouth finishes speaking each sentence). I find it mildly uncomfortable! By practicing a bunch you can learn to recognize and expect this semi-uncomfortable feeling.

                                                      When you go onstage you can try to focus on holding the feeling rather than concentrating extra hard on your words or whatever. Since you’ll naturally speed up on stage (or are perhaps just fast in general), the feeling of speaking slower will counteract that and leave you speaking at a normal speed.

                                                      1. 9

                                                        Something I don’t understand is why Evidence Based Scheduling isn’t more popular. Joel’s original article is well-written and insightful, but I haven’t seen anyone mention this outside of Fog Creek.

                                                        I wrote a small tool to try this technique out, and was surprised to find out how reliable the data can be (the left and center charts represent the same dataset, one is the raw data and one is a graph of the median IIRC). Not only does it show that “smaller” tasks have a tighter estimation bound, but my estimates weren’t meaningless.

                                                        This tool unfortunately has sat dormant for a while – I recently started trying to resurrect it to get it working with AppEngine’s “Cloud Endpoints Frameworks version 2.0” (what a mouthful), but ran into some snags. If I get it working again I’ll post more about it here.

                                                        1. 6

                                                          I mean, I worked at Fog Creek, and the thing is that EBS is honestly eerily, amazingly accurate, but you need to:

                                                          1. Stay completely on top of what you’re working on, and
                                                          2. Not lie

                                                          Most people don’t do #1, so then they try to guess what they actually did, which results in a well-intentioned #2. And plenty of people actually do #1, but they don’t like what the 80th percentile for shipping is, so, eh, I mean, I know I marked that I spent 45 minutes on ticket 1234, but like half that was actually email, so I’ll just revise the estimate. In both cases, even if you were coming from a good place, EBS will now be wrong, and you blame the tool.

                                                          I’d be curious if @tedu has a radically different opinion, but I doubt it.

                                                          That said, I’d love a reimplementation. As I said, when you do feed it good data, it is accurate. There are times I’d gladly deal with the micromanagement to get the right results.

                                                          1. 1

                                                            Did @tedu work at Fog Creek as well then?

                                                            1. 1

                                                              Yes. He was a key dev on the Unix version of FogBugz.

                                                          2. 1

                                                            This actually does sound really good. However, I wouldn’t want to ask a team to try this without also presenting a good tool that could actuate it. In my case, something which could use Trello’s API to automatically get data on card lifetimes to feed into the EBS calculations would be ideal.

                                                            1. 1

                                                              I’ve done something similar with t-shirt sizes – track how long tasks actually take and classify them based on story points. I never extended it to the probability curve level, but over time it did become an increasingly useful metric. It was also excellent feedback for the developers as we figured out more appropriate t-shirt size definitions.

                                                            1. 17

                                                              Seems like the wrong takeaway to me. You had great intentions, someone came in and told you to throw them away and rush things. You decided to go ahead and do that, and suddenly rewrites and future-proofing things is “bad”?

                                                              1. 8

                                                                The “future-proofing” was almost entirely ways to increase scope.

                                                                1. 8

                                                                  The “future-proofing” was almost entirely ways to increase scope.

                                                                  My interpretation here is that “future-proofing” was not about a set of well-described features that addressed the written scenarios, added to design documents, then estimated and then prioritized in cooperation with the product team and management. I guess that in this situation, as I have seen a lot, “future-proofing” is stated as an overall requirement that all code should follow.

                                                                  And that, I believe, makes future-proofing as a pitfall the most important takeaway from your article. I believe the problem with this kind of future-proofing is larger than just the risk of increasing scope. It’s is about the mentality that increasing scope silently is ok, without being judged by the expertise of the rest of the company.

                                                                  I think code should always be looked at alongside a design. If there is anything in code, be it features, infrastructure, an elaborate data model or even quality-driven version control practices, that is not needed by any requirement in the functional design, something is wrong and should be changed, either to the code or to the design.

                                                                  As soon as engineers start introducing ‘silent’ features or requirements, i.e. requirements that are only seen by engineers and not by the product team and management, things start to slide. For example, if a requirement such as “it works with short response times for more than 10.000 simultaneous users” is not in a design document, it should not be supported by the code. Obviously, if someone brings an engineer a design document that misses this requirement, it should be brought up and the consequences should be discussed. But then, at least there will be an official estimate of this feature and management can make a conscious decision and compare trade-offs, which often means de-prioritizing other requirements because development hours are not unlimited and the estimate of maintenance hours increases with every feature.

                                                                  I have come to the conclusion that every line of code in a commit that is not directly justified by a written and verified requirement, should in fact be flagged as a mistake. Even if there is an expectation that in the next version, this requirement will be added.

                                                                2. 7

                                                                  Not only that….

                                                                  The heart of the task matching code was this monstrosity of a cross join that took the other people on the team a few sheets of graph paper to break down and understand.

                                                                  That’s a huge red flag too…. it’s says… “You know our DB structure, our indices, the super cunning query optimizer in the DB engine and all that Good Stuff? “

                                                                  Eh. None of that applies to this problem.

                                                                  BIG RED FLAG.

                                                                  1. 8

                                                                    You had great intentions, someone came in and told you to throw them away and rush things. You decided to go ahead and do that, and suddenly rewrites and future-proofing things is “bad”?

                                                                    The problem is that runaway scope can push the delivery time of the “non-rushed” system out to infinity. The people building the system are usually very reluctant to realize this – they tend to use the rationale you described to defend their working pace, when the real issue is the scope of the work involved.

                                                                    As the author described, “future-proofing” can be an extremely tempting way to inflate scope – many scenarios can happen in the future, programmers love to show how clever they are in thinking up new ones, and nothing is ever obviously wrong. Limiting scope to what is happening now (or what will happen in the very near future) is a conservative, but effective, way to limit this problem.

                                                                    1. 2

                                                                      Keeping within scope and future-proofing are two different things. If the problem was a runaway scope, then that should be the takeaway. If you don’t future-proof your code, it will not live very long. Future-proofing is about designing a system that lasts, and in some cases it’s about simplification (read: reducing scope, not increasing it). That takes time to do well.

                                                                      1. 2

                                                                        Why is building systems that last worth it? When the facts change, perhaps the software should change.

                                                                        1. 1

                                                                          Why is building systems that last worth it?

                                                                          No one is stopping you from building something that breaks shortly after encountering the real world if that’s what you want to do.

                                                                    2. 2

                                                                      I think the message was that what happened (scope creep, overengineering) is almost inevitable. Even if you know exactly that those are the risks, you cannot sufficiently divert the forces pushing them. Only if everyone is on board, in writing, and your leads and senior engineers can be relied on to scrupulously guard against overengineering and your management can be relied on to have your back against other parts of the company, then it may be evitable.

                                                                      1. 2

                                                                        I agree most of it doesn’t seem to be about future proofing. I’ve seen that work when it focused on data formats and interfaces. The 64-bit portability layer of System/38 getting it through AS/400 and IBM i phases is an example. Amusing and relevant: it key ideas came out of the abandoned “Future Systems” project.

                                                                        This is mostly about the risk of rewrites of legacy systems and a product team trying to use a legacy system for what it wasn’t designed for.

                                                                        1. 4

                                                                          I found that the real future proofing is usually about removing/abstaining from things rather than adding them. Before adding a feature in a certain way, one should stop and think what it may prevent them from doing in the future.

                                                                          You can’t anticipate future requirements, but you can predict how your current decisions will interfere with them.

                                                                          1. 2

                                                                            Supporting your point, there’s also the fact that small, well-documented things are easier to rewrite. The cost goes up with the complexity. Once it’s past a point, there’s not going to be either a rewrite or a successful rewrite.

                                                                      1. 5

                                                                        I’m surprised nobody has mentioned the second system effect yet, it seems to crop up everywhere.

                                                                        1. 2

                                                                          I always thought that was pretty clever.

                                                                          That was actually pretty stupid, on so many level I don’t even go to details.

                                                                          1. 23

                                                                            This isn’t Hacker News, if there are reasons it’s stupid, we go into why it’s stupid :P

                                                                            1. 0

                                                                              I did that immediately in my second comment.

                                                                              1. -1

                                                                                This morning, I thought of saying the same thing about trivial dismissive comments in response to your comment here.

                                                                                1. 3

                                                                                  I’m sorry, what? How is saying “I found a part of confusing” in any way similar to “this is stupid on so many level I don’t even go to details”?

                                                                                  1. -5

                                                                                    I was following it up until the linear logic part; I think the first principles of LL could be explained better here.

                                                                                    This isn’t Hacker News, if there are reasons the first principles can be explained better, we go into how it can be explained better :p

                                                                              2. 4

                                                                                Oh yes, I think the same. So much that can go wrong with physical devices. Imagine someone lightly touching the arm and getting it out of alignment.

                                                                                Note that you can just attach a USB mouse to an iOS device and click buttons with that. USB mice are easy to emulate in software.

                                                                                1. 1

                                                                                  Thats one thing. Second is that you could just run the whole app in emulator. Or decompile it and just cut the approving routine from it. Whole

                                                                                  There was no programmatic way around this.

                                                                                  is just a failure of imagination. Off-course, best solution would be to run this through management and force them to remove this bullshit altogether.

                                                                                  1. 11

                                                                                    Or decompile it and just cut the approving routine from it.

                                                                                    Yes just reverse engineer a banking application and hope you don’t mess anything up. It’s just money, nothing serious could happen if you introduce bugs.

                                                                                    Also, from the post:

                                                                                    we couldn’t just run it in a simulator

                                                                                    Maybe don’t make so many assumptions about the author or their problems. For all you know, they exhausted all the reasonable options before resorting to this tomfoolery. Or this technique was used as a stopgap while coming up with a more robust solution. Or they simply didn’t have the time to do better. A business runs on money, not perfectly elegant solutions.

                                                                                    1. 6

                                                                                      You’re imagining this was a technical constraint on their side. It might have been a legal or contractual constraint.

                                                                                      1. 5

                                                                                        The approval was software-based, but in a closed system. The approval mechanism ran in a third-party iOS application, and we couldn’t just run it in a simulator.

                                                                                        I’m assuming there were considerably more constraints going on that make the “obvious” solutions in applicable.

                                                                                        1. 4

                                                                                          Those are some pretty big “just”s!

                                                                                          Personally, since it’s presumably a capacitive touch screen, I’d attach a wire to the correct area of the screen, and hook it up via a relay to a wet sausage. It would require weekly maintenance, maybe more in warm weather.

                                                                                          1. 3

                                                                                            This kind of armchair quarterbacking isn’t helpful. You could have rephrased all of your points as questions to find out the situation: “I wonder why they didn’t run this through management…” Not only does this make your comment less hostile, it opens you up to learn (as @saturn said, it might have been a legal requirement). Assuming you haven’t changed your mind after learning the full context, you might be able to persuade people that an assumption they held isn’t actually true – that’s how you provide technical advice on something you didn’t build without pissing off the creators.

                                                                                      1. 2

                                                                                        Doing some research on streams and stream processing, specifically looking for concepts that are true across a wide range of disciplines.

                                                                                        The lowest form of streaming I can think of might be people waiting in line for checkout at a local store. Then there’s the circular buffer many of us know and love. At the high end, we’ve probably got things like Netflix and their simian army.

                                                                                        So what topics exist across all of those scales? Well, we’ve probably got window size, processing units, control feedback. Maybe a few others like recursion (for the case of queuing up trees) In fact, I may limit scope to queuing up unknown-sized trees, assuming I can find examples of this in various places. That’s the more interesting case, since you can’t predict performance using simple things like Little’s Law. Much fun ahead.

                                                                                        1. 2

                                                                                          It sounds like what you’re looking into is queueing theory, although I’m not sure what you mean by ‘trees’ in this context. Depending on how you structure your models, you might find closed-form solutions for a lot of the questions you want to ask (for example, M/M/1 queues have several closed-form solutions to problems).

                                                                                          For more complicated scenarios Monte Carlo simulation can yield results, but you have to worry about how interconnected and “nonlocal” the process can be (think of the scenario where being too late for a bus causes you to miss a flight; the tiny bit of lateness at the bus causes a huge effect somewhere else). https://arxiv.org/pdf/1001.3355.pdf might be helpful if you want to attempt this, it’s a really nice paper describing how to approach the challenges involved.

                                                                                          1. 1

                                                                                            This is very close. Thanks. Makes for a good starting point.

                                                                                            1. 1

                                                                                              Actually, after reading up some more, I think I’m going to punt for a while. The most interesting case is a stream of trees, unbalanced, of arbitrary and unknown depth. The paper is a good start, but it may be too tied to modern web services. I was looking for something more generic that would be applicable in many places aside from CS.

                                                                                              It might make for some monte carlo fun, though. Don’t know.

                                                                                          1. 1

                                                                                            I’m unable to function without __git_ps1. I have a simple hostname:curdir>, with hostname in red and the basename of the current directory (and git info if applicable) in cyan:

                                                                                            \[\e[0;31m\]\h\[\e[0m\]:\[\e[0;36m\]\W$(__git_ps1 "(%s)")\[\e[0m\]>

                                                                                            Without colors that’s

                                                                                            \h:\W$(__git_ps1 "(%s)")>

                                                                                            At work I added a little bash function to tell me how long the last command took if it took more than a second, but it’s not as useful as I expected.

                                                                                            1. 3

                                                                                              Company: Fastmail

                                                                                              Company site: https://www.fastmail.com/

                                                                                              Position(s): Email Client Application Developer

                                                                                              Location: Philadelphia, PA

                                                                                              Description: https://www.fastmail.com/about/jobs/2019-04-clientdev/

                                                                                              We’re looking for an Email Client Application developer to join the FastMail team in our Center City Philadelphia office.

                                                                                              Together with the rest of our team, you’ll work on our email services FastMail, Pobox, and Topicbox. When the vast majority of people get email for free, the reason people choose a paid service is because they value both privacy and a great user experience.

                                                                                              You’ll be working on our best-in-breed mail clients, providing super-fast, powerful access to webmail, calendars, contacts and more. You’ll work with our collaborative team of front- and back-end developers, designers and researchers. Improving our customers’ interactive experience, keeping it secure and a delight to use is what we do, every day.

                                                                                              Our interfaces are built upon our own Overture framework and the new email standard JMAP. It gives us full control from top to bottom to build the right solutions to difficult problems. If you’ve worked with other MVC application frameworks, like Apple’s Cocoa, you should find Overture easy to pick up.

                                                                                              You’ll have the opportunity to work at many levels:

                                                                                              • building features from scratch with our design and product teams
                                                                                              • optimizing and improving existing code
                                                                                              • tracking down and fixing elusive bugs reported by customers

                                                                                              Contact: Email us at jobs@fastmail.com to introduce yourself and tell us why you would be a good fit for the job! This job requires clear communication, so that message is part of your application, but please also include a PDF of your resume.

                                                                                              1. 2

                                                                                                I’ve been interested in looking at gmail alternatives and I’ve heard good things about Fastmail. Good to know there’s an engineer on here, makes me trust it a bit more.