Tools of the Trade, from Hacker News - <AUTHOR> https://github.com/cjbarber/ToolsOfTheTrade <comment><USER2> I find that my problem isn't finding services that match a requirement I have, but picking which one to use. It's totally overwhelming how many services do pretty much exactly the same thing these days.

I love that it's like this in the sense that there's healthy competition and they're all pushing each other forward, giving each other ideas to improve, etc... but as a pure consumer of these services, it's incredibly daunting to actually choose which to use.

<comment><USER3> I very much feel like this as well (on both counts), especially about CI.

I'd love to hear any strategies folksight have for coping with this and actually making decisions without looking into every single option, if that's a thing.

<comment><USER4> What I like to do sometimes is contact the support of the apps I'm hesitating on. Whichever is most responsive/helpful wins, as it's a good sign they actually care.

<comment><USER3> I hadn't thought of that, but it sounds like a useful thing to test out. Thanks!

</comment></comment></comment></comment><comment><USER5> Doesn't anybody do shit on their laptop anymore or on their own server? Why does it have to be 10 thousand services, why the dependency on the network and other entities? How many of these will go bankrupt by the end of the year, how many will change their terms in an incompatible way with your company project or your personal one?

<comment><USER6> When you have your own server, you're also the server admin. When that server craps out, so do ALL of the services on it and it's you who will spend nights and weekends fixing it.

Or you can pay a few bucks here and few bucks there and the uptime is Somebody Else's Problem.

<comment><USER7> And you now have to trust this random 'someone else' to have done a better job than you can. My intuition says there's more FUD around uptime and availability than it deserves. If anything, the hard work of maintaining uptime and security is a great learning path that should not be missed by beginners and small teams alike.

</comment></comment></comment><comment><USER8> Related to this, using: [https://hnprofile.com/](https://hnprofile.com/)

You can identify who is an expert related to each tool or any topic in general

<comment><USER9> The mood detection may as well be RNG.

I have an even better way to identify who is an expert on HN. Say "It's silly that X still isn't a thing." If X is a thing, you'll get ten people telling you why you're wrong within ten minutes. Example: [https://news.ycombinator.com/item?id=17941772](https://news.ycombinator.com/item?id=17941772)

You'll have to trade some karma for the answer though.

<comment><USER10> What else is karma for? :D I have seen this technique used to great effect inside large companies too. People will spend a lot of effort telling you why you are dead wrong.

<comment><USER11> [https://www.xkcd.com/386/](https://www.xkcd.com/386/)

</comment></comment></comment></comment><comment><USER12> Needs to denote difference between price per month and price per user per month.

Especially on items like support and HR. Apps that charge per user in "flat hierarchy" companies like mine where any employee can do anything is death to your service because I'm not paying for all my employees when we equally share the workloads depending on schedule.

<comment><USER13> This is something I'd definitely be interested in adding to this list. Trouble is that services are changing their pricing very frequently.

</comment></comment><comment><USER14> Time to remove [https://www.blitz.io/](https://www.blitz.io/) from the list or add them to a dead-pool. Looks like they are shutting down October 1st, 2018. :(

"It's time to say farewell... Blitz will be shutting down on October 1, 2018. We'll no longer be accepting new subscriptions. Subscriptions will not be renewed after June 30, 2017. Your account credits will still be accepted until October 1, 2018."

</comment><comment><USER15> Not affiliated but gcp could use some more recognition... as quick example firebase is also "deployment" and "identity verification". It's only mentioned as "database" which really does not do it much justice.

</comment><comment><USER16> The contributing guidelines page at [https://github.com/davisonio/awesome- irc/blob/master/CONTRIB...](https://github.com/davisonio/awesome- irc/blob/master/CONTRIBUTING.md) gives a 404.

Wanted to mention mattermost.com/.org as a Slack alternative in the Group Communication/Chat Tools section.

<comment><USER17> The correct link is: [https://github.com/cjbarber/ToolsOfTheTrade/blob/master/CONT...](https://github.com/cjbarber/ToolsOfTheTrade/blob/master/CONTRIBUTING.md)

I submitted PR to fix this: [https://github.com/cjbarber/ToolsOfTheTrade/pull/325](https://github.com/cjbarber/ToolsOfTheTrade/pull/325)

</comment></comment><comment><USER18> By chance, has anyone made a curated list of self-hosted things?

<comment><USER19> I think this one covers self-hosted nicely: [https://github.com/Kickball/awesome- selfhosted](https://github.com/Kickball/awesome-selfhosted)

</comment></comment><comment><USER20> I don't understand why is there not more competition / options in the BaaS area. User management is stable, almost boring functionality required by every single product.

<comment><USER21> Any thoughts, folks?

Is this a good opportunity?

<comment><USER9> Sure, everything is an opportunity. Make it happen!

On the other hand, the traditional wisdom is that a lack of competition isn't a good sign.

<comment><USER21> That is what I was thinking, no competitors = red flag.

Is it really that hard to roll your own and do you really want that being maintained by a 3rd party?

</comment></comment></comment></comment><comment><USER22> Why are most of these services rather than open source projects that fill these roles?

<comment><USER21> We used to build startups by piecing together other open-source offerings with our own programmatic secret sauce.

Cash is plentiful and time is valuable, so it is now easier to patch together a bunch of SaaS tools.

</comment></comment><comment><USER23> I would add site24x7.com for server monitoring. We're monitoring all sites and services in our small startup for just $10 a month. Sends out all type of threshold alerts and supports scheduled maintenance. Many other features I haven't even scratched the surface of.

<comment><USER13> Nice idea, feel free to send over a pull request

</comment></comment><comment><USER24> How come all these awesome lists use free form markdown? This is the sort of data that should have some sort of structure, if only just a schema less json file. That would make it easy to run a script from time to time to, for instance, remove 404 entries.

<comment><USER25> Because writing markup is more fun than writing JSON. If you want to automate something, you just need a regular expression to get whatever you want.

<comment><USER26> But but but what about XSLT?

</comment></comment></comment><comment><USER27> It's also a nice resource of company one liners!

</comment><comment><USER28> Anyone knows about a team shifting saas around there?

A tool that could help me to design and automatize a shift schedule for security guards for instance.

Basically I am looking at the following assumptions: \- 24/7 coverage \- 8 hours shift \- 40 annual leaves days per year \- 14 days of certified sick and uncertified sick leaves per year. \- need for 52 periods of 2 consecutive days off (week ends). \- team composed of 3 personnel. \- 15 working days of training in the year. \- teams of 3 personnel for each shift.

So I could easily answer how many teams of 3 personnel do I need and what type of shift schedule works for that?

Would you have any idea about that? Thanks.

<comment><USER29> If you have a business school locally, ask a MBA student/professor.

It is a standard resource allocation problem in decision support model, supply/resource allocation and management courses in MBA program.

If you do little bit digging online for textbooks in this area and available supplemental materials, you should be able to find a pre-designed spreadsheet to solve your problem.

</comment></comment><comment><USER30> I've got to mention [https://www.logrocket.com](https://www.logrocket.com), for error tracking, APM and user testing combined. Great price point, great support and absolutely changed the way we understand and capture errors. I'll create a PR to add it.

</comment><comment><USER31> Great to go fast, but know you're building on shaky grounds that will shift underneath you.

</comment><comment><USER32> I keep forgetting about this and I am always surprised when I click through.

</comment><comment><USER33> Great list! Dropbox Paper is missing in the notes section.

</comment><comment><USER34> Great list! Thank you author!

Side note - does anybody tried clockify.me ? Looks awesome, and it's free! Wondering how they earn money and how reliable they are.

<comment><USER35> It's legit. There is a paid plan (buried in extra features section), plus big companies pay lots of money for self-hosting and custom development

</comment></comment><comment><USER36> What a great (and overwhelming) list!

In the code hosting section keybase seems to be missing. It has git support.

<comment><USER13> Thank you! Maybe Keybase is worth adding but git support is not one of its stand out features IMO

<comment><USER36> Agreed, but _Encrypted_ Git is... they don't see your repo.

I don't know anybody else who does it.

</comment></comment></comment><comment><USER37> What does everyone use to pull credit reports? Is there a good, affordable vendor with an API?

</comment><comment><USER38> Excellent list! But you should probably add AirTable ;)

<comment><USER13> Thank you :) Airtable is a good one!

</comment></comment><comment><USER39> Missing joplin in the note taking tools section. - Great list though!

<comment><USER13> Thank you</comment></comment>


Ask HN: What's Your CI/CD Workflow for Your Machine Learning Projects? - <AUTHOR> We are working on an ML project (Computer Vision specifically) and we are in the process of productionizing our models. What kind of tools do you use and what's your workflow for integrating, testing and deploying your models? Do you have any suggestions or tips about what to do and what to avoid? <comment><USER2> Having put many models into production in an almost real time environment (ad servers that need predictions in < 10 ms) I would say a large portion of what you need depends on your production requirements. The system I work on is very high volume 100k request / sec and we have massive amounts of data so it complicates everything.

First, I would highly recommend wrapping your ML models in some kind of microservice. Depending on your production requirements and if the ML is in Python a fairly simple Flask/Sanic web server should be sufficient. This is great because you can leave all your feature transformation code as is in Python.

If your production environment has very low latency requirements you are going to have some work cut out for you. You'll most likely have to rewrite all your transformation code in a faster language like Go or Java. You might also need to implement the inference code as well to get the speed you need. This adds considerable time and adds a ton of surface error for potential insidious bugs. The ML will still make predictions, but they will be wrong or very slightly wrong.

Because I'm working with larges of amounts of data and my source of truth is Parquet logs in S3, the pipelines start with Spark. We do as much data wrangling as possible in Spark to get things into a manageable size to create our train/dev/test sets. This data gets uploaded to S3.

The datasets are then trained on EC2 instances using Pandas & sklearn. When everything is fully automated the Spark job will push a message onto an SQS queue with the S3 path of the fresh dataset. An EC2 instance will be polling that queue and pull down the data and train a new model.

The final result of training my case is a text or binary model file that goes back up to S3. Our prediction microservice polls an S3 bucket and pulls down any updated model files and swaps out the running models.

Tips:

      1. Instrument everything! Hopefully you have something like graphite/datadog/prometheus in place already, but you'll want metrics on your predictions.
      2. Exception tracking on everything especially anything in your model creation pipeline. Sentry or something like that.
      3. Try and keep everything as simple as possible.

<comment><USER3> Thanks for this; I really appreciate the detail here. There seems to be a lack of these kinds of explanations around.

One piece did give me a bit of surprise:

      You might also need to implement the inference code as well to get the speed you need

I've never had the super-low-latency requirements you have, but as you point out this seems amazingly error-prone. I'd love to hear anything else you can share about the cost-benefit analysis you do before deciding to go this route, and if there's any tools or languages you've had a better time with than others for this.

<comment><USER2> Yeah, the requirements are pretty different than most Data Science teams, especially the very low latency requirements.

The constraints force us to use simple models like linear regression and logistic regression some of the time or at least as a version 1. The inference here is straightforward, multiply and add then take the sigmoid if doing logistic regression.

What we tried to do initially was integrate with C/C++ APIs where possible. We ran into some issues with speed and bugs doing this though, which is why we wrote the inference ourselves. Where we had issues was calling the XGBoost C API from Go. It was extra overhead and too slow. In our benchmarks our implementation in pure Go was many times faster than calling the C API. We also found the multithreaded version to be slower than the single threaded. We found this to be true when calling XGBoost from Java and from Go. We also found this to be true in our own inference implementation it was always faster to walk the trees in a single go routine rather than create some number of worker go routines to walk the trees in parallel.

We were very careful implementing the inference ourselves to make sure the predictions matched. What we did to verify this was create a few toy datasets of about 100 rows with sklearn's make_classification function. We then trained a model using the reference implementation, saved the predictions and the model. We then loaded this model into our implementation and made predictions on the same dataset. We wrote unit tests to compare the predictions and make sure they are the same within some delta. We were able to get our implementation to be within 1e-7 of the reference implementation, in this specific case XGBoost. It was actually more time consuming to deal with parsing the inconsistent JSON model output of XGBoost than it was to implement the GBDT inference algorithm. We also had to make a slight change to the XGBoost code to write out floats to 18 decimal places when writing out the JSON model in order to get the two implementations to match.

<comment><USER3> This is all SO fascinating to me. Multiple threads slowing stuff down & 18 decimal places being relevant stick out as surprising.

Part of me is thankful to not have these problems, while another part thinks it'd be a lot of fun to do this kind of last-mile engineering.

<comment><USER2> Yeah, I had a very hard time believing that the multithreaded approach would be slower. Its so counterintuitive since at first blush it seems that walking N trees is an embarrassingly parallel problem. I tested up to 1000 trees and single threaded was still faster. I'm sure at some point the multithreaded approach will win out, but its beyond the number of trees and max depth we are using.

<comment><USER3> I've half-convinced myself it's because we're talking about GBM's and not Random Forests (where my mind goes first). One of the smart things about XGBoost is parallelizing training by multithreading the variable selection at each node, but that doesn't apply to inference; I imagine you gotta predict trees sequentially since each takes the previous output as an input? Now I wonder what those extra threads were even doing...

<comment><USER2> Each tree can be traversed independently. Each tree is traversed until a leaf node is reached. Those leaf values are summed for all the trees. The sum of all the leafs plus a base score is then returned. In the case of binary classification that sum is passed through a sigmoid function. For linear regression the sum is returned.

</comment></comment></comment></comment></comment></comment></comment><comment><USER4> Shameless plug: I cover this topic in my book, Reactive Machine Learning Systems: [https://www.manning.com/books/reactive-machine-learning- syst...](https://www.manning.com/books/reactive-machine-learning-systems) In particular, chapters 7 and 8 cover the design of model servers and model microservices, from publishing through to serving. And chapter 9 focuses on how build CI/CD pipelines for ML systems.

Definitely lots more options than I even had space to cover in a single book, though. This is an area where the tooling continues to rapidly improve.

</comment><comment><USER5> I read this [1] a while back. Have a look, might help out or given you some ideas.

[1] [https://engineering.semantics3.com/moving-machine- learning-f...](https://engineering.semantics3.com/moving-machine-learning- from-practice-to-production-9c462eeef9fa)

</comment><comment><USER6> I have deployed ML algorithms into production including computer vision and data science models. From my experience, it's based on the application and cost we are comfortable with.

1\. Keras/Tensorflow based algorithm(Applicable for any compute intensive or GPU-capable algorithm): Deployed the method (as a flask service) inside a Docker container along with a queueing system(for reliability w/ redis). We can now decide the server type and the kind of orchestration tool we can use to manage these containers. Following are some options for it,

        a. ECS on AWS
        b. Kubernetes
        c. Docker Swarm
        d. custom orchestration tool

2\. If your ML model is a simpler with a small (enough) model size, then using Lambdas on AWS would also work. This can provide high throughput and low cost per request if your computation time isn't very high.

Tips:

       i. Have the memory flush in the code after the service is used so that there is no memory leak.
       ii. You can use tools such as htop to understand the memory usage.
       iii. Regarding system performance, you can use prometheus to gather stats along with grafana dashboard to view them.

I consider CI/CD essential for achieving a seamless workflow for a data scientist, and after having faced the same problems ourselves, our team and I have been working on Datmo, a tool to help companies more easily and cost- effectively deploy + manage their models in production.

<comment><USER6> 3\. Another important component for CI/CD is the integration of tools like Airflow in order to schedule and monitor workflows. This helps us in deploying newly trained models.

</comment></comment><comment><USER7> We faced the issue of building CV models a lot as grad students but at that time reliability wasn't really something we had to solve for. Once we had to implement them for industrial applications we found we had to ensure there was reproducibility and versioning throughout the process. Now that we have put a few computer vision algorithms into production we decided to architect our code in the following way.

1) training code is written with normal packages (we tend to prefer keras with a tensorflow backend), these are trained on our own GPUs since this is often the cheapest and are done in bulk --> side note is that TPUs/GPUs may one day be better but certainly too expensive currently.

2) prediction / inference code will also be written in the similar packages but will be tied with the final weights files that we get from the model

3) deployment code -- in order to enable a reliable system we have used celery for distributed queueing and converting our prediction functions into celery tasks which can then me passed to workers that can process and return the result to an API endpoint. This allows us to scale our workloads as needed with throughput (depending on request requirements)

This architecture allows us to test during training time using our training code and validation sets, while also enabling testing of different models versions through our prediction APIs. We often would just write scripts for testing that we then run via our CI/CD workflow.

Tip: keep your code as simple as possible and don't rewrite your code unless your throughput requirements mandate it. good error handling will go a long ways here and likely will be easier if written in a language you're most familiar with.

</comment><comment><USER3> I don't work on computer vision specifically, and can generally suffer a few seconds of latency, but we have a two-stage process that I think applies fairly generally

1\. all lowish-level production code (importing, transforming, modeling) is written in packages, which are thoroughly unit-tested with a CI system

2\. that code is wrapped up into docker container(s) in separate repositories, which are built and integration-tested with CI. In addition to the Dockerfile and any testing scripts, there's usually a single code file here which handles I/O specifics, API endpoints, and primarily calls code from the package

This works well with R or Python and should work with others; we use Gitlab for the free private repos and awesome built-in CI.

This doesn't cover where the data or models are stored, but that varies more per-project for us. Lately we've been using Pachyderm and loving it, but you can get pretty far with a postgres instance for data and storing trained model objects in S3/GCS.

</comment><comment><USER8> Hi i'm founder of [https://bitbank.nz](https://bitbank.nz) a crypto currency live prediction dashboard/API/bulk data service.

Our system streams in market data from exchanges, creates forecasts with python/sk-learn and displays the data, we also have background processes that updates our accuracy over time once real data is available.

We test our code with the normal python unit/integration/end to end testing methods locally with local copies of all of our components (except firebase for live UI updates, we don't have a dev version of that yet just use live forecast data when testing the UI charts/display), would probably get expensive/cumbersome to setup dev environments with local firebases in them.

with deployment we simply ssh into machines, git pull latest code and supervisorctl restart so its fairly low tech, the forecaster has a roughly minute outage when we deploy new models because there is a decent process that computes and caches a data structure of historical features for use in the forecaster.

In terms of maintaining a reliable online stream of data input, feature computation/prediction pipeline we run the code under supervisor aswell as running a manager process under supervisor, that manager process checks if conditions are turning bad (OOM/no progress updates by the forecaster) and restarts things if anything goes wrong.

For testing we also use the standard training/test data split when running backtesting/machine learning optimisation algorithms to train parameters of the algorithm. If things perform better on training and test data over a long enough time period to build confidence then we will deploy a new model.

Using graphite/graphana to monitor prediction accuracy over time is a good idea as mentioned already :) and some kind of alerting/monitoring if things go down.

</comment><comment><USER9> I'm a statistician by trade so I mostly do prototype work. As far as building models my key workflow is using a R and Rstudio. The biggest issue is data management. I suggest a good API or wrapper for a data source that has all of the ETL already done for the most part. R connects very well to most database systems. RStudio makes development easier with connectivity to GitHub or other popular version control systems.

As far as putting into production I'm not as familiar. Yet I hear that a good Python workflow would probably work best.

<comment><USER10> Also Rstudio mates well with bitbucket for those who want private repos for free.

<comment><USER3> For private repos, I'd say gitlab is an order of magnitude (or two) better than bitbucket. Or, it clearly was 2 years ago, and while I haven't kept up with bitbucket, gitlab has improved by leaps and bounds in those two years.

The killer features for me are nested subgroups (which bitbucket may have, but github does not) and a really awesome CI system with a generous free tier (2000 minutes/month). For R packages, we have it setup very similar to github + travis (devtools::check() every push), and for deployable bits we have it build containers and run integration tests on them. Super impressed with all we get for free there.

</comment></comment></comment><comment><USER11> Disclaimer: I compete in this space and may compete with your internal team, your cloud vendor, or something you are interested in.

FWIW: Production is an overloaded term. CI may not even be applicable here. Say you're doing batch inference where you need to run jobs every 24 hours on a large amount of data: That might be tied to some cron job.

That being said you _could_ use a CI system for that in theory.

There are also other factors here: What other kind of things do you want to track? Experiments results? Wrong results by your machine learning algorithm?

Concisely: What kind of deployment requirements do you have and what are your goals?

If you are edoing real time, what does "deployment" even mean? Are you serving in real time via a rest api? Are you doing streaming? What are your throughput requirements? What about latency? Is that even hooked up to a CI system?

Something that _is_ vaguely related: How do you test the accuracy of different models across your cluster? Say you want to do a self deployment, what if you want to tie that to say: a workspace where you produced the results?

Is that hooked up to a CI system? If so, what's your use case?

Then there's that common hand off from data scientist to production, what does that look like? A sibling thread mentioned some of these things.

If anyone else is curious about this stuff, we deploy deep learning models in locked down environments both on kubernetes as well as touching hadoop clusters. Happy to answer questions.

</comment><comment><USER12> Shameless plug (I'm head of product at Algorithmia): we've written a lot of algorithms ourselves including many computer vision algos [1] that are published publicly for use. The underlying platform at Algorithmia is able to run production models at scale and puts a simple REST API in front of all of the algorithms so developers can easily call them from your production apps. The algorithms you see in the marketplace are publicly published but the platform runs private algorithms for software teams as well. Check it out: [2]

[1]: [https://algorithmia.com/tags/computer- vision](https://algorithmia.com/tags/computer-vision) [2]: [https://algorithmia.com](https://algorithmia.com)

</comment><comment><USER13> We use DeepDetect everywhere. I started coding it up in 2015 out of immediate need for my customers in production at the time and waited for something else to come out. But until now, we've sticked to it and customers ask for it when they see us using the pre-configured pipelines. Some run their production with the DD server. So three years later we're still putting down some time on improving it, and support for caffe2 is coming up among other things. It already has built in semantic search due to customer demand. Welcome any feedback an comments btw. Also we're hiring, contact us, we're at [http://jolibrain.com/](http://jolibrain.com/)

</comment><comment><USER14> I try to do as much of the transformations as possible in tensorflow using the Datasets API so that I don't have to write them in another language/system in production.

<comment><USER15> I had tried to do the same. However given the CPU/GPU imbalance on AWS GPU instances I have resorted to building a fully "rendered" training set and doing all the transforms in spark.

See: [https://github.com/tensorflow/tensorflow/issues/13610](https://github.com/tensorflow/tensorflow/issues/13610)

</comment></comment><comment><USER16> heard of datmo.io they automate the versioning and deployments. Check them out if it suits you.

</comment><comment><USER17> If you use Algorithmia.com you can add your model in the language of your choice (on GPUs if you want) and it will do all of the Devops and give you an API end point. You get free credits at sign up and quite a few each month for testing.

<comment><USER18> Full Disclosure (usually considered courteous to provide this yourself): @mikeyanderson is head of Marketing at Algorithmia.com.

It does look like a cool service, though!</comment></comment>


We like impostor stories because we're afraid we're impostors (2016) - happy-go-lucky http://m.nautil.us/issue/42/Fakes/catch-us-if-you-can <comment><AUTHOR> From one of the imposter's wiki pages, some sage advice on office politics:

>(Demara)'... had come to two beliefs. One was that in any organization there is always a lot of loose, unused power lying about which can be picked up without alienating anyone. The second rule is, if you want power and want to expand, never encroach on anyone else's domain; open up new ones...'

>Demara referred to it as 'expanding into the power vacuum,' and described as such; 'if you come into a new situation (there's a nice word for it) don't join some other professor's committee and try to make your mark by moving up in that committee. You'll, one, have a long haul and two, make an enemy.' Demara's technique was to find his own committee. 'That way there's no competition, no past standards to measure you by. How can anyone tell you aren't running a top outfit? And then there's no past laws or rules or precedents to hold you down or limit you. Make your own rules and interpretations. Nothing like it. Remember it, expand into the power vacuum!'[7]

</comment><comment><USER2> But we are imposters. Nobody gives you a manual on how to handle work, children, people, sex, money, life in general. You are suppose to figure it out on yourself, and everybody act like the others know what they are doing. We are literally faking it until we make it for the most basic things in life.

<comment><USER3> There's this joke on Arrested Development where Lucille Bluthe complains there's (paraphrasing) no manual on raising children. They then cut to an Amazon search revealing hundreds of search results for books on "Raising Children".

While this is excellent snark and a great witty rejoinder to internet arguments, there is something underlying which I think is useful: Figuring it out yourself is commendable, but no-one's going to mind if you look for some expert advice from time to time.

<comment> angry-hacker But then again who is an expert in raising children? The problem is what works with some children doesn't work with others. Heck, even some children from horrible families become smart and good citizens of the world. The problem with raising children is no one really knows why! First hand experience.

<comment><USER4> There are a lot of experts in raising children. No one is an expert in _your_ child, particularly when combined with _your_ priorities, morals, family history, etc. If anything, it's a curation challenge: given the excess of good advice, books, experts, friends, parents, intuition, etc.—you have to wade through all that to find something that works for you and gets the results you want.

</comment></comment></comment></comment><comment><USER5> I think this also touches on a 80/20 type scenario. For many professionals that take serious time and experience to have achieved. Anyone could probably have done 80% of their job with minimal training. It's the smaller less common cases that matter and make it up.

It's easy to be a general when your winning. Perhaps there are no wrong moves. But to be one on losing side and turn it around requires I think a special type of person or experience.

It reminds me of a 1990s movie where some rich people make a successful and non successful person switch places and prove many things are a matter of circumstances more than most.

But then again watching recently The Most hated woman in America, reminds us how much an individual can pioneer something.

<comment><USER6> "It reminds me of a 1990s movie..."

Maybe you mean Trading Places (1983) with Eddie Murphy.

The title has two meanings:

\- 'Trading' as in stock trading

\- 'Trading places' as in 'swapping places'

I didn't notice the second meaning at the time, as the phrase 'trade places' isn't common in the UK.

<comment><USER7> Really the second meaning Is obvious in uk English and is used in the UK regularly.

<comment><USER6> I don't recall it being common back when I first saw the movie, maybe 1985 or 1986.

<comment><USER7> Its quite common to say I wouldn't want trade places with him.

</comment></comment></comment></comment></comment><comment><USER8> I am beginning to find almost nothing more intellectually irritating than articles like this which basically say, here's some poorly studied pop sociology. It explains why people like X.

I have a much simpler reason people enjoy these stories. We love these stories because they roll up a handful of narrative features humans love.

Suspense: Good stories need stakes. Imposters, are constantly in danger of being found out. Thus very high stakes are ever present throughout imposter narratives. Constant presentation of high stakes results in suspense

Novelty: A good fake must be clever, the unclever ones don't last. So there is always some new tricks a con has to teach us. Don't believe me? MacGiver was a hit TV show and the only thing it had going for it was each episode had a couple moments of great novelty.

Underdogism: The con man is going up against all of society. Every institution, socal group and personal relation has cause to uncover the faker and thus, in the game of keeping his/her secret a secret the con is on a team of one against a team of everyone else.

As to why humans actually like imposter characters? Because humans like or at least empathize with any character whose story they become involved with. Humans will literally empathize with a box if you give it a bit of character (which was good news for Been Affleck's career.)

Did you root for Walter White? Was it cause you think underneath you're a psychopathic genius chemist ready to turn drug lord the moment you get the personal justification to? No, it's because you saw the story from his side. At times, when you really hated what he was doing you still kind of wanted him to succeed.

</comment><comment><USER9> Maybe we like impostor stories because we can _convince_ ourselves that the reason we don't feel like we're good at something is not because we legitimately aren't, but because we've somehow misjudged our abilities. In other words: we're better than we are, and we can do it!

</comment><comment><USER10> _A young man pretends to be the son of actor Sidney Poitier, conning his way into wealthy Manhattan homes._ ⇨ [http://www.imdb.com/title/tt0108149](http://www.imdb.com/title/tt0108149)

 _A wily Frenchman passes again and again as a long-lost orphan_ ⇨ [http://www.imdb.com/title/tt1966604/](http://www.imdb.com/title/tt1966604/)

</comment><comment><USER11> Hmmm, I think the term "hack" might be better. Wariness of the Dunning Kruger effect does not an imposter make.

</comment><comment><USER12> The whole premise of impostors is bogus because it implies there is such a thing as non-impostors to begin with - a false assumption. At a certain point everyone has to "make up" what they are doing without knowledge of "the right way" of doing said thing.

</comment><comment><USER13> Imposter stories are fascinating. You can't help but marvel at the shear audacity of the imposter and their inevitable demise. It also help us all recognize imposters and their motives.

</comment><comment><USER14> We also like murder stories because we are afraid of being murdered.

<comment><USER15> or is it because we instinctually have some compulsion to murder?

</comment></comment><comment><USER16> >Deep down, psychologists suggest, impostors appeal to us because we suspect that we are all, to some degree, faking it.

No, I've never had this fear.

</comment><comment><USER17> You are all fake imposters.

</comment><comment><USER18> If you feel like an impostor, then you almost certainly are one. Most impostors probably don't even realize that they're impostors. I've never felt like an impostor, every day I have the opposite feeling.

<comment> nommm-nommm >People who have reportedly experienced [imposter] syndrome include Academy Award-winning actor Tom Hanks,[5] screenwriter Chuck Lorre,[6] best-selling writer Neil Gaiman,[7] best-selling writer John Green, comedian Tommy Cooper,[8] business leader Sheryl Sandberg, US Supreme Court justice Sonia Sotomayor,[9] and actress Emma Watson.[10]

Do you believe that those people are all impostors?

<comment><USER19> That list made think about what would make you feel impostor syndrome. I think it often happens when the rewards you get are disproportionately large compared to the amount of effort you've put in.

No doubt Tom Hanks put in a lot of effort, but fifteen years into his career he was being paid tens of millions of dollars and getting nationally feted to go onto a movie set and do his thing. All of those people, simply because of the scale of the US and how the economic/legal structure operate, were at some point just way more rich or influential than it's natural for anyone to be, often too soon.

The people I've personally known most subject to impostor syndrome are programmers early in their career who slacked off a bit in college who are suddenly making close to or more than a hundred thousand dollars a year to do something they didn't have to work all that hard to be able to do. The sort of people who put in 70 hour weeks even in college never seem to feel it. (Neither do cooks)</comment></comment></comment>


Why Facebook Still Matters to Me - <AUTHOR> https://nytimes.com/2018/04/16/opinion/facebook-matters.html <comment><USER2> This is the problem with Facebook. Facebook is not the platform; the people are the platform. All the problems Facebook solves for her are problems that the Internet solves, not specifically Facebook, but Facebook just makes it so easy: everyone is already there.

The author says, "Until another platform comes along, I'll stick with it." But there are certainly already other platforms. I think what she means is, "Until another platform becomes popular among my social circle."

<comment><USER3> In theory we've had Contacts apps and E-mail lists for decades that people could have used for essentially all of their interactions. And it's never been easier to use either of those from any device.

Then I think about how poorly integrated those basic things really are. Why can't my iPhone Contacts app let me create basic groups like "Friends" and "Family" for instance? Why is there no dead-simple event site that uses good- old-mailing lists as the core mechanism for deciding who is going, and communicating?

Sometimes it feels like we came so close with the basics and then just stopped improving them. I think defeating Facebook starts by addressing those core features.</comment></comment>


Page Lifecycle API - <AUTHOR> https://developers.google.com/web/updates/2018/07/page-lifecycle-api <comment><USER2> This article is about Chrome's _implementation_ of the W3C Page Lifecycle API[1]. In the long-term, this approach applies across all browsers, contrary to the current HN title's implication that this is a Chrome-specific solution.

[1] [https://wicg.github.io/page- lifecycle/spec.html](https://wicg.github.io/page-lifecycle/spec.html)

<comment><USER3> We've just updated the title from 'Chrome's solution to the "too many tabs" memory problem'. There are many reasons not to editorialize titles when submitting, and the likelihood of saying something misleading is one of them.

> _Otherwise please use the original title, unless it is misleading or > linkbait. Don 't editorialize._

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER4> I don't think it's a bad edit. It would be better to have both, but "Page Lifecycle API" doesn't actually tell you what that API is for --- it doesn't even tell you it's a web browser API.

I think a better title would be: "Page Lifecycle API - A solution to the 'Too Many Tabs' memory problem".

<comment><USER5> No.

"Page Lifecycle API" from "developers.google.com" gives a hint that the article is written by Google and given "developers" is about an open source (or open API at least) Google product, and presto in the first paragraph: "[...] shipping in Chrome 68 [...]". The title is perfectly fine as it is.

</comment></comment></comment></comment><comment><USER6> Article author here. Most of the comments so far are talking about using lots of tabs, but what I think is actually the most interesting part (or parts) of the article hasn't been mentioned at all.

As I was doing my research for the article, I found a _lot_ of things that really surprised me. And I feel pretty confident in saying that most web developers aren't aware of these things either.

Here are my top four:

\- We shouldn't use the unload event. Ever.

\- The unload event often doesn't fire when closing tabs/app on mobile

\- The pagehide/pageshow events even exist (virtually no one I've talked to knows what they do; most people think they're about page visibility).

\- In browsers that implement a page navigation cache, you can click a link to navigate away and then navigate back with the back button, and all your JS code is exactly as it was before you navigated.

To this last point. Try doing this in the console:

1\. Write a promise that resolves in a setTimeout after 5 seconds.

2\. After 1 second, click a link to navigate to a new page.

3\. Stay on that page for an hour.

4\. Click that back button.

5\. Your promise will resolve in 4 seconds!

<comment><USER7> You can see the last point in action on a number of places. I can think of two sites in particular that pop up "You will be signed out in XX [decreasing number] seconds unless you click 'Continue'." messages. I can come back to the site's tab three hours later, and the countdown just started!

</comment></comment><comment><USER8> "The Great Suspender" is a chrome extension that solves this very gracefully. I came across it, showed a couple coworkers, and it spread like wildfire inside my workplace, where everyone I work with spends their day split across dozens of chrome tabs. I was wondering when this would become native to chrome.

<comment><USER9> This extension requests the following permissions:

\- "Read and change all your data on the websites you visit"

\- "Read and change your browsing history"

That's a lot of power to grant to a third party, especially on a work machine where some of that data you're looking at may belong to your users.

<comment><USER10> I don't disagree, but I also don't know how you would build an extension like that without those permissions.

How many applications are running on your work machine outside the browser, with no warnings or significant[0] limitations?

[0]: [https://xkcd.com/1200/](https://xkcd.com/1200/)

</comment></comment></comment><comment><USER4> Any sufficiently advanced web browser is indistinguishable from an operating system.

<comment><USER11> You joke, but I've been thinking. Tabs were mind blowingly good UX when they first came out, But with WebAssembly et al, are tabs still the right abstraction?

<comment><USER12> This might be crazy, but... I think it would be kinda cool if tabs were a Thing at the window-manager level. It's sort of a reverse approach to solving the Electron "problem"- instead of making web applications more like desktop applications, make desktop applications (including browsers) work more seamlessly together.

<comment><USER13> That's what MS is trying to do with the "Sets" feature in Windows 10.

</comment></comment></comment></comment><comment><USER14> Don't know the details of how they handle this but going above 100 tabs in Chrome proved to be too laggy and slow to be usable.

Meanwhile I've had 800+ tabs open in Firefox with no noticeable issues.

<comment><USER15> I've seen comments similar to this one often enough that I need to ask: What is the use case for having that many tabs open, and how can you possibly consume that much information?

<comment><USER16> If you're doing research and opening tons of articles, it's common that you might want to go back into your browser history and reopen one of the last 50 things you might have opened but you might not remember the name of the page - it's faster to hold command+shift (or control+shift on windows) and left- bracket or right-bracket to page through tabs and glance at each tab for 2 seconds to see if it's the article you were trying to re-find as opposed to opening up your history and clicking each, waiting for the tab to load, realizing it's not that thing you looked at on Monday that you're looking for, go back to history, check the next link, repeat.

In other words - this behavior is proof that there's room for improvement of browser history UI.

<comment><USER14> >In other words - this behavior is proof that there's room for improvement of browser history UI.

Definitely. Firefox's built-in history browsing UI is frankly horrible. Norwell History Tools was better but is no longer supported.

<comment><USER17> Have you ever used chrome's default history browsing UI, it's even worse.

</comment></comment></comment></comment></comment><comment><USER18> > _If I can 't run asynchronous APIs in the frozen or terminated states, how > can I save data to IndexedDB?

[In the future, we will add a commit() method to perform write-only transactions that don't require callbacks. (assuming the IndexedDB database is already open).]_

This seems like a strange design. So there is a callback specifically for persisting data before freeze, but when it runs, the main persistance API isn't actually available.

Wouldn't it have been possible to mark IndexedDB callbacks as "non-freezable tasks" \- or allow a promise to be returned from the freeze callback? (Subject to a timeout)

> _For code that needs to work today, however, developers have two options:

\- Use Session Storage [...]

\- Use IndexedDB from your service worker [...]_

I guess session storage is technically a workaround - but it seems odd, as almost everywhere else you get the recommendation to use IndexedDB instead.

I guess a strategy could be to simply dump all your unsaved data into session storage on freeze, and then "properly" load it into IndexedDB on the next load or unfreeze. Still, this seems complicated and subject to problems if your data exceeds the maximum storage size.

</comment><comment><USER19> Am I the only one concerned that this seems to give web pages more ways to track your activity? How long you had the page visible but not focused for, how long it was hidden for etc. So a web site could display an advertisement video and it would automatically pause if I'm doing something else to force me to sit through it to continue using the site etc.

</comment><comment><USER20> Looks a lot like the lifecycle of an Android or iOS app–it's a good thing that websites can now be prepared to be forcefully unloaded in the background since it builds in resilience and reduces wasteful use of resources in the background.

<comment><USER21> Most websites shouldn't care, because they should be static html, and the dumping them to disk and reloading them shouldn't make a whit of difference.

The rest should probably be an actual application.

</comment></comment><comment><USER22> Semi-OT: I'm one of these guys with ~200 tabs open spread over 5 different Chrome user profiles (work plus one session per Twitter account, as I can't stand Tweetdeck or any other app). Once an hour some tab, usually it's Twitter or a specific newspaper, will run amok in the background and run up to 100% CPU usage until I manage to launch the Chrome Task Manager and kill the offending tab (group, sometimes).

Is there any way to force Chrome to totally inactivate all tabs in the background, with a whitelist option so Youtube and friends can run?

<comment><USER23> I think that's pretty much what "the great suspender" does: [https://chrome.google.com/webstore/detail/the-great- suspende...](https://chrome.google.com/webstore/detail/the-great- suspender/klbibkeccnjlkjkiokjodocebajanakg)

</comment></comment><comment><USER24> Meanwhile, we're still waiting for the "too many tabs" UI problem to be addressed. The had a hidden side tabs option that looked promising but got rid of it.

<comment><USER25> For starters, wie need search among open tabs and windows

<comment> yjftsjthsd-h In Firefox, go to the location bar and type in "% foo" and it will search for foo in open tabs (the space is required). I have no idea why this isn't documented better; it's a lifesaver.

</comment></comment></comment><comment><USER26> I thought the strategy was always to to create a bunch of threads so it's very opaque what chrome is actually using.

That is to say, I've only seen chrome get worse in this regard.

<comment><USER27> I had to recently increase my user noproc ulimit because Chrome was spawning so many background threads that it was hitting the limit and causing all my applications to crash/behave strangely. On a system with (only) 4GB of ram, Chrome is such a resource hog that it is almost unusable without Tab Suspender.

<comment><USER28> Why not use a more lightweight browser then?

<comment><USER27> I generally use Firefox as my main browser. However, I've been leaning on Chrome while the whole post-XUL extension apocalypse settles down and session managers in Firefox are back on par to what they were prior to the switch to web extensions.

<comment><USER29> I very much miss Session Manager (from Mozdev) on newer Firefox releases. The WebExtensions based session management extensions are still not as rich or as reliable as that one. So on machines I control, I use an older version of Firefox so that I can rely on Session Manager and a few other extensions from the XUL world.

Firefox 52.x ESR, which does work with XUL extensions, would remain a supported choice until September 2018 (a couple of more months from now). After that, there wouldn't be a Mozilla supported browser that's not exclusively WebExtensions based, AFAIK.

</comment></comment></comment></comment></comment><comment><USER30> the left half isn't talking to the right.

the webassembly / webgpu / webvr people are trying to bring multi gigabyte games to the web and the page lifecycle people are trying to make it so every time you put that.tab in the back you have to wait several minutes for the data to reload.

</comment><comment><USER31> This is terrible, just suspend, and dump to disk if you need more memory, this should be transparent to websites.

or, you know, start optimizing. Opera 12 used to render websites using 5-10MB, same websites took 50-100MB in Chrome.

<comment><USER32> > This is terrible, just suspend, and dump to disk if you need more memory, > this should be transparent to websites.

How do you transparently suspend a site that has a setInterval(foo, 1000) running?

<comment><USER31> Same way you suspend a laptop, dump whole state to disk.

</comment></comment></comment><comment><USER33> Oh god. They didn't learn anything from Android's lifecycle insanity then.

</comment><comment><USER34> It's the umpteenth "standard" to be pushed by Chrome in early draft form only to ship it a few days or a few weeks after publication.

<comment><USER6> This isn't true. The proposal was discussed many times in the WebPerf working group and went through a TAG review before shipping.

Microsoft made a public statement of support for the API, and Firefox engineers were actively involved in many of the design and implementation discussions.

You can read more details in the Intent to Ship thread here: [https://groups.google.com/a/chromium.org/d/msg/Blink- dev/Na7...](https://groups.google.com/a/chromium.org/d/msg/Blink- dev/Na7aTFJOpWs/_tpdtav8CAAJ)</comment></comment>


Microsoft's Earnings Call Hints at Trouble Spots - <AUTHOR> http://www.microsoft-watch.com/content/business_applications/microsofts_earnings_call_hints_at_trouble_spots.html?kc=MWRSS02129TX1K0000535&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+RSS%2FMicrosoftWatch+%28Microsoft+Watch%29 <comment><USER2> Sure they fell on their earnings in some areas. However, they still managed to produce great results in other areas - for example, in their entertainment division. The article doesn't reveal the whole picture.

<comment><USER3> And the Ent division is going to keep growing. For example, the PSN issues will likely boost xbox live's user base.

<comment><USER4> Folks hear Microsoft and think operating systems only, which I think is a mistake.

They're diversified enough to stumble in one area and make up for it in another. OS/Office Software/Search+Advertising/Mobile/Entertainment. They aren't General Electric, but they are diversified enough to ship a crappy game or OS, or miss on a product launch and not have it torpedo the bottom line.

</comment></comment></comment><comment><USER5> "Microsoft should also give a raise to whichever executive decided to scuttle the potential Yahoo acquisition, a few years back"

They should give Jerry Yang a raise?</comment>


Show HN: Amazon S3 API Support for Backblaze B2 Cloud Storage Service - <AUTHOR> https://blog.minio.io/experimental-amazon-s3-api-support-for-backblaze-b2-cloud-storage-service-685e0f35a6d7 <comment><USER2> I've never really been able to figure out what a good strategy is for object storage organization. Do you create a bucket per application instance? user? organization?

Right now I'm playing with a new service and came up with this which is probably over engineerd:

Here is an actual object key including the bucket: 7dcdb229600e4467a2714866e0d406f6/85/26c/c0271374067b5db832adb7909a7/bbda55db15266f7ce2284d8f5f66fc85e495e2b12265ef87537237ad5e2658b24c081970332417f60e5fc352ae9b8c1031398c02ecde03eb29af2d3c8eda8a4b/y18.gif

Given the file's uuid is aabbbcccccccccccccccccccccccccccccc

for original images: {{organizations_uuid as bucket}}/aa/bbb/cccccccccccccccccccccccccccccc/{{sha512sum}}/{{originalfilename}}

And for all derivatives of it: {{organizations_uuid as bucket}}/aa/bbb/cccccccccccccccccccccccccccccc/derived/{{this files uuid}}_{{filename}}

My thinking was that:

\- using the organizations' uuid (which can have multiple users) as a bucket makes backing up per organization and having on prem deployments easier.

\- Encoding the file's uuid in the object name can identify it easily and by splitting that uuid up in 2/3/rest would help with spreading of objects.

\- Encoding the file's sha512sum in the key name would enable checking that file's integrity even without a database.

\- putting all derived files under derived but with the original file's uuid prefix makes the link between them clear.

I know this will result in long object names as shown above in the actual example but it does include quite some information. What parts of this is considered bad practice? Do you have any real world examples for other strategies? They seem hard to come by.

<comment><USER3> Perhaps I'm missing something about your use case, but I only create buckets per application, or sometimes file category (videos, profile images, whatever).

Trivial example following your org/user pattern:

my_app/profile_images/org_id/user_id/aabbccccccc.jpeg

I then obviously have a reference to that file in my db.

<comment><USER2> I don't have any other real use case for bucket per org other than easy bucket mirroring, backup and maybe migration from shared hosting to on premises.

I didn't think of using different prefixes for different media usages. We for example would then use thumbnail/originating_file_uuid.png and poster/originating_file_uuid.png.

How would you handle uploaded media then?

<comment><USER3> Something to the effect of my_app/profile_images/org_id/user_id/uuid_thumb.png uuid_large.png uuid_original.png can work.

Then in your app, you can have a way of specifying which version of the file you'd like to reference, for example:

`user.avatar.large -> '<path>/uuid_large.png'`

Not sure if that helps?

<comment><USER2> The problem with that is that the originally uploaded filename is lost. At least without storing it in a separate database.

I could shorten the key by moving the sha512sum from the url to a CHECKSUM file.

org/file_uuid/original/original_filename.png CHECKSUM org/file_uuid/thumb/160x90.png 48x48.png org/file_uuid/poster/1k.png 2k.png org/file_uuid/other/

<comment><USER4> > The problem with that is that the originally uploaded filename is lost. At > least without storing it in a separate database.

Sure, but that's a tradeoff nearly every website accepts because they just need the image itself. If you do want to preserve the original filename, is there a reason for not just keeping it in a database?

<comment><USER2> I'd like to have these systems as decoupled as possible or at least have some meaningful information without a dependency on an external datastore. This might be just me being paranoid and overthinking it but after having to deal with a nasty monolith of an application for the last couple of years and finally convincing the rest that we need to change if we want to be able to expand I want to do it right.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> This is something Backblaze should provide on their side. But kudos and thanks minio for the work. Really impressive!

</comment><comment><USER6> Gorgeous, when I first beta tested it, I told them to make it s3 compatible but they convinced me it wasn't the best idea. I still want it though.

</comment><comment><USER7> First time I've heard of B2. Makes you wonder why it's not S3-compatible in the first place...

<comment><USER8> According to them, it is to keep their cost low. The b2 API requires a call to get an endpoint before you make the upload.

S3 just uses one endpoint and proxies the upload where it wants to go. B2 saves money by not proxying everything coming in.

</comment></comment><comment><USER9> Let's hope Amazon doesn't start doing something anticompetitive with the network routing to B2 from EC2, and instead competes on price.

<comment><USER10> What's the point of an answer like that? Does Amazon have a history of sabotaging network links between, say, Google's or MSFT's networks and their own? Or is this just an attempt at being funny?

<comment><USER8> They have a history of sabotaging anyone who competes with them, though not with AWS.

For example, they banned all Chromecast sales from amazon.com after they launched the firetv.</comment></comment></comment>


Firefox Product Roadmap - <AUTHOR> https://wiki.mozilla.org/Firefox/Roadmap <comment><USER3> As a recent Firefox user, I'm super excited about the future evolution of the browser. I switched to Firefox Quantum after using Chrome as mainstay for over 9 years and I was absolutely BLOWN AWAY by the under-the-hood refinements and UX enhancements in v57.0 -- could clearly observe the impact of Gecko's upgraded Servo/Rust components at work.

Noticeable visible differences included page-load performance as well as a smaller memory footprint relative to Chrome.

Faster WebAssembly[0] starting from v58.0 made the speed optimization more visible -- it was at this point when I truly fell in love with the browser -- Firefox dethroned Chrome as my default. Add to this the hardened tracking protection, Greasemonkey's super massive stash of user scripts and values of the non-profit organization that supports the browser -- Chrome felt so old- school.

[0] [https://hacks.mozilla.org/2018/01/making-webassembly-even- fa...](https://hacks.mozilla.org/2018/01/making-webassembly-even-faster- firefoxs-new-streaming-and-tiering-compiler/)

<comment><USER4> As someone who has used Firefox as my default browser since it was called Phoenix, I can tell you that Quantum was a big step backward in terms of memory consumption and CPU utilization for Firefox.

On a Lenovo T450s sitting idle with 14 tabs across 4 windows, FF is now using 25-100% of the CPU and over 4GB of RAM. When I resume from Hibernation (on Windows) it can take up to 10 minutes for FF to settle down and for the system mouse to respond.

If that's an improvement from Chrome, then OMG you poor bastards who use Chrome as your daily.

FF seems to be fine on more powerful systems but on my lower spec'd laptops it's just a battery sucking lap warmer.

<comment><USER5> If you experience a bug like that, report it!

People's mental model (Chrome fast, lean; Firefox slow, bloated) seem to really not update quickly. When Chrome hangs it's "That's weird, something must be broken, the website sucks" when it's Firefox "Well further proof the Firefox is terrible".

For the record, my 2012 MBA, which is probably weaker than your Lenovo, has no issues with Firefox at all.

<comment><USER4> I generally do report it and the bugs are generally addressed in followup releases of Firefox.

My remarks were not strikes against Firefox's performance, it's stellar, just that since Quantum it has become a resource hog to achieve that high performance.

</comment></comment></comment></comment><comment><USER6> I really like the goals they picked, but wish "Native Look and feel" was also in there. I use Firefox as my primary browser on Windows, but on the Mac it still feels significantly non-native. For instance, we're still missing rubber-band scrolling, Firefox still doesn't set the file attribute that causes the progress bars to be displayed on the Finder for each file and on the Downloads stack on the dock, on full screen the toolbar doesn't 'move down' along with the menu bar when I move my cursor to the top of the screen, there is still no pinch to zoom, the back/forward trackpad gestures and checkboxes/radio buttons are not animated, etc.

<comment><USER7> If anyone wants to help out with any of those issues the respective bugs are:

Rubber band scrolling: [https://bugzilla.mozilla.org/show_bug.cgi?id=1124108](https://bugzilla.mozilla.org/show_bug.cgi?id=1124108)

Downloads in Finder: [https://bugzilla.mozilla.org/show_bug.cgi?id=909760](https://bugzilla.mozilla.org/show_bug.cgi?id=909760)

Toolbar movement in full screen: [https://bugzilla.mozilla.org/show_bug.cgi?id=738335](https://bugzilla.mozilla.org/show_bug.cgi?id=738335)

Pinch to zoom: [https://bugzilla.mozilla.org/show_bug.cgi?id=688990](https://bugzilla.mozilla.org/show_bug.cgi?id=688990)

Animate back gesture: doesn't seem to be a bug for this.

Animated checkboxes: can't find a bug for this either.

<comment><USER8> There actually is an animated back gesture, but E10s sort of broke it: [https://bugzilla.mozilla.org/show_bug.cgi?id=1170032](https://bugzilla.mozilla.org/show_bug.cgi?id=1170032)

</comment></comment></comment><comment><USER9> > Breach Alerts: Breach alerts will inform a user if a site they've visited > has been breached and will ask if the user wants to have their account > checked to determine if it was compromised. If it was compromised, some > helpful information will be presented to the user. (October)

This is very interesting. If Chrome decide to follow the same path it could give a serious incentive to some website to be more careful about there security.

The whole "display a warning when login are passed via HTTP" already managed to create some reaction. It probably won't be a revolution but it might be a good first step.

<comment> yjftsjthsd-h And of course we should be ready for the slew of sites complaining about how terrible and irresponsible it is to tell users that they've been compromised:)

<comment><USER10> The last thing a business wants is a browser scaring customers away without cause. But I think they would be OK as long as the list is maintained and is accurate. Certainly, we should do more to penalize hackers, and not blame the victims of cyber attacks (as is sometimes the case).

<comment> yjftsjthsd-h > we should do more to penalize hackers

Malicious hacking is already illegal with significant penalties.

> not blame the victims

If the victims failed even basic security measures, I'm quite happy to give them their share of blame. There have been plenty of reports of exposed databases with no password protection, places that stored passwords in plain text, folks running unpatched OSs... You can't just ignore security and pretend that you're not at fault.

<comment><USER10> >Malicious hacking is already illegal with significant penalties.

Yes, more people should end up in jail.

>If the victims failed even basic security measures, I'm quite happy to give them their share of blame.

Please detail how you have established that the victims themselves personally ignored security practices.

>There have been plenty of reports of exposed databases with no password protection, places that stored passwords in plain text, folks running unpatched OSs... You can't just ignore security and pretend that you're not at fault.

You are making broad claims. Remember that the non-technical business owners/managers/CEOs etc need our help, and they don't need people shaming them for using vendors or consultants who might have made made mistakes.

</comment></comment></comment></comment></comment><comment><USER11> I've always loved Firefox. Had to switch to Chrome for stability and resource consumption, but I did not enjoy being all Google and I did miss numerous awesome features of Firefox. The awesomebar and dev tools to just name a few.

Went back to Firefox Quantum for a few months. Now I'm back on Chrome for exactly the same reasons. After hours of active use, Firefox is eating a ton of RAM and consuming way too much CPU, while also struggling to open any pages (let alone more complex apps) or downright crashing the apps that were already running.

Plus, it does not seem to support web calls at all (Google Meet, BlueJeans, GoToMeeting you name it).

I hate being on Chrome again, and I miss those Firefox features. But I have work to do, and I just can't have my tools grind to a halt all the time.

<comment><USER12> I'm using all day Firefox for front develop, an I have multiple tabs open. I don't have any issue of excessive RAM or CPU usage. Even I noticed that Chrome uses more RAM that FF . The actual instance that I have open to write it, with 16 tabs open, it's using around 300-400MiB and ~5% of CPU.

Also, FireFox for Android runs faster that Chrome (not because FireFox is faster that Chrome on Android, but because the ad-blocker does a nice work avoiding to load garbage), and the RAM usage it's keep at bay. I have like ten tabs on FF for Android and keeps working like if I had one open.

On any case, on Chrome and Firefox you can install a add-on called "Tab suspender". It allows to save ram, literally suspending tabs that has not been accesses on some time. Try it.

*edit : grammar

<comment><USER13> > Even I noticed that Chrome uses more RAM that FF

Reflects my experience. I use Firefox at work, Chrome at home. Chrome RAM usage is much higher than FF. Not that I really mind - I have more than enough RAM to support it. But it often leaves me wondering if some tab/plugin/extension is misbehaving, which in turn forces me to close all my tabs only to find that the memory use stays high and the number of Chrome processes doesn't decrease as expected. I'm considering switching back to Firefox at home now.

EDIT: OK, tested with Firefox now. Number of process doesn't decrease as I close tabs either, but memory use is still considerably higher than Chrome.

<comment><USER14> In Firefox, entering about:performance in the URL bar will give you some statistics on how much memory or CPU each tab is using.

Entering about:about in the URL bar gives you a short list of interesting about:* links that you can play around.

<comment><USER12> I just saw that I'm using more RAM that I thought, but Tab suspender really works fine to keep ram usage at bay.

</comment></comment></comment></comment></comment><comment><USER15> My one issue with Firefox right now is CPU use. On my iMac or on desktop it doesn't truly matter. But on a MBP no matter how many tabs I have or what I'm doing the fans never turn on with Chrome. On Firefox they turn on regularly.

I've tested while looking at the activity monitor a bit. Loading random sites like HN show Firefox spiking to 80-90% CPU while Chrome spikes to 20-30%.

<comment><USER16> I have the same issue on my Linux laptop. It seems like Firefox always maxes out at least one core when loading pages or rendering pages with certain video codecs. I'm guessing Chrome throttles its performance or maybe it's just more performant.

</comment></comment><comment><USER17> How much worse than chrome is firefox actually? I use firefox beta on a 500$ laptop with ubuntu mate and i'm more than satisfied with the speed and general performance. Privacy has been a very hot topic on HN lately (or has always been) and now i see people complaining over silly little things on firefox than make them go back to Chrome. How can we complain for the monopoly of Google Facebook etc, when we can't stand using a very good, competent and open source product that respects our privacy despite some minor bugs? Is firefox really so bad that you're willing to give everything to Google?

<comment><USER18> Sadly not many mentions of privacy in their roadmap (outside of grouping controls). Things like "container tab" could allow them to really differentiate from Chrome ...

<comment><USER19> Did you skim and miss how they plan on blocking intrusive ads and cross-domain tracking/retargeting by default, and improving the existing tracking protection functionality? There are certainly more mentions of privacy than you cite.

<comment><USER18> Guilty, thank you :). I was hoping to see it higher.

</comment></comment></comment></comment><comment><USER20> This feature already out (v59) caught my eye: "When we detect that disk IO may be slow, we send a network request in parallel, and we use the first response that comes back. For users with slow spinning disks and a low latency network, the result would be faster loads".

Wow, the browser is giving up on the OS. What madness given that typical W10 PC's with 2GB RAM (with the disk spinning in vain) have only two apps open: the browser and its adversary, the AV. Heck 4GB isn't comfortable anymore with several tabs open.

</comment><comment><USER21> Can we maybe instead of/additional to a new Mozilla password manager get an API with which existing password managers can integrate with Firefox?

<comment><USER22> Doesn't that exist already? I'm happily using 1Password with Firefox.

<comment><USER23> The hoops a password manager has to jump through to get halfway decent integration into a browser is basically begging for security vulnerabilities. Seriously, just look at how much JavaScript is riding behind webextensions like LastPass, KeePassRPC, Bitwarden, etc. It's staggering.

I dont have any interest in using Lockbox; I already have a self-hosted open- source password management solution (Bitwarden, in my case, but that's just an implementation detail) that works for much more than just my web browser, which means I'm way more interested in hearing how Mozilla plans to make this kind of integration smoother and less error-prone.

I need to sync passwords for apps on my phone, for desktop apps that aren't web browsers (and for multiple browsers on several platforms), and Mozilla's one-off reinvention of existing software and protocols for their singular use cases is just xkcd'ing the problem, sadly.

</comment></comment></comment><comment><USER24> For Firefox to gain market share, it needs to target the average Joe, which I think they are trying. But in order to do that, it's not enough to make it work better than Chrome when you have 40 tabs open (less memory and CPU usage), they should also try to have the clean interface that Chrome has, or even cleaner, right after the installation.

Take the toolbar, for example: After installation it has all that unused space on the left and right sides of the address bar. This is probably to encourage customizations to it, but Joe doesn't care about that.

And then there are so many things on the toolbar that shouldn't be there. I think they should be hidden behind the sandwich menu, as the power users will know to add to the toolbar the ones that they need, and Joe wouldn't be overwhelmed by them.

Only these things should be present on the toolbar: back button, forward button, reload button (maybe), a home button - only if a home page was set, a clean omnibar, and the sandwich button.

Instead, even after trying to remove as much as I can from the toolbar, I still have: a non clean omnibar (two icons on its left end that seem to come from different universes, and too many things on it's right end - there should only be a dropdown button for the history at this end) and a more tools button. I counted and in total on the omnibar and the toolbar I have 4 buttons for "more stuff", instead of two (one dropdown for the history and the sandwich menu).

But I do think they are on the right track. I personally switched to Firefox from Chrome less than a year ago, and I'm not going back. Thank you, Mozilla, for all the good work that you did on Firefox!

</comment><comment><USER25> I switched to Firefox recently (with v57 or something) and I'm impressed, it really feels much faster than Chrome.

But they need to get all videos working. It feels to me that it's a 50:50 chance to play a video.

On Android the startup is faster than with Chrome too, but the scrolling feels rather sluggish, so I still prefer Chrome here.

<comment><USER26> > _But they need to get all videos working. It feels to me that it 's a 50:50 > chance to play a video._

Videos generally work for me in Firefox. The only videos that don't work for me are from sites that are still (and only) using Flash because I don't have Flash installed.

What's an example of a video that doesn't work for you?

<comment><USER25> Flash videos work. FF asks me if it should start Flash for it.

Some "html5" videos on Facebook and Twitter don't work.

<comment><USER26> I rarely look at videos on Facebook but all the Twitter videos (or GIFs which they convert to H.264 video) I've seen have worked in Firefox. Do you have a link to a Twitter video that doesn't work for you in Firefox? If these videos are somehow different from normal then I'd find it a useful test case for an application I wrote which makes use of Twitter video.

</comment></comment></comment></comment><comment><USER27> Does anyone know if WebRender will become available as a crate for other Rust applications to use? I will be working on a text-heavy GUI application later this year and WebRender looks like a good fit feature-wise.

<comment><USER28> You can probably just pull it from GitHub:

[https://github.com/servo/webrender](https://github.com/servo/webrender)

(Cargo lets you specify Git repos for dependencies.)

<comment><USER27> Sure, but an unreleased crate is not likely to make any commitments wrt API stability etc.

<comment><USER29> The Github Repo contains 3 releases as of now.

Just because it has no release on crates.io doesn't mean it's unreleased or unstable. Crates.io is just one way to get your crates.

</comment></comment></comment></comment><comment><USER30> Boo, looks like osx keychain integration will still languish ([https://bugzilla.mozilla.org/show_bug.cgi?id=106400](https://bugzilla.mozilla.org/show_bug.cgi?id=106400) Reported 17 years ago).

I'm puzzled what Lockbox is mean to do. [https://mozilla- lockbox.github.io/lockbox-extension/faqs/](https://mozilla- lockbox.github.io/lockbox-extension/faqs/)

      What's the difference between Lockbox and the Firefox password manager?
      newer encryption than what is offered with password manager

AES256-GCM, HMAC SHA-256, eh, sounds fairly run of the mill?

<comment><USER31> >Boo, looks like osx keychain integration will still languish

probably because it wouldn't work with sync on linux/windows/android

> eh, sounds fairly run of the mill?

would you have preferred them to use some cutting edge cipher instead?

<comment><USER30> I can't see why they couldn't sync with linux/windows/android as well as storing the entries in OSX keychain.

"run of the mill" is me taking a lazy jab at their description of advantages of Lockbox - they need to make a whole new product just to use the standard cipher/auth you'd expect them to be using anyway? I assume there might be more to it, but their product page doesn't really explain much.

</comment></comment></comment><comment><USER32> What's interesting is that the Mobile section doesn't mention Firefox for Android at all? Given that both Firefox Klar and Firefox Focus are mentioned, which I thought were different names for the same product, I'm probably misunderstanding something. Anyone who can clear that up for me?

<comment><USER33> Klar and Focus are indeed the same thing, something about a trademark dispute in Germany over the name Focus. Whoever wrote the article seems to have been slightly confused about this.

I think Firefox for Android didn't get mentioned just because most of the desktop improvements apply equally to the Android version and they don't have much mobile-specific stuff planned. Meanwhile Focus/Klar is an entirely different codebase that is getting some new features.

<comment><USER34> But Quantum still hasn't come to Android?

<comment><USER35> Firefox for Android has been using Quantum for some time. It's just that they haven't switched Focus over to using it (it currently uses an Android WebView).

</comment></comment></comment></comment><comment><USER36> > Global permissions management: Permission prompts, especially for > notifications, have gotten out of control and users must deny them > individually at every site that offers them. Firefox will provide users with > a way to disable permission prompts globally for Location, Camera, > Microphone, and Notifications. (Firefox 59)

THANK YOU! I hope this will stop the notification boxes implemented in JS too. Using the web has become a whack-a-mole game with each website requiring me to tell it off ten times unitl I can get to the content.

<comment><USER37> I would gladly disable notification prompts. A number of sites I rarely visit show them. There's a reason I visit them rarely, and it's not because I forget to!

But camera and microphone? They seem useful for Skype, Hangouts, and other opt-in use cases. Are people seeing those prompts so much they're annoyed by them? What's the mechanism to opt back in for selected sites?

<comment><USER36> Notifications are the most frequent offenders, in my experience, and it's followed by the Location one. It seems to me that they'll provide four individual settings one for each permission in order to optionally globally disable the relative one. I don't think it's going to be one button to kill them all though. I'll disable cam, mic and notifications, but I do share my location to some websites very occasionally.

<comment><USER37> Yeah. But it looks like the way it works is you say "Don't ask again" on e.g. microphone, then there's no good way to deal with some new site where you actually want to use your mic.

I guess the site can detect the permission denial. But making the website show browser-specific instructions for how to disable the global opt-out seems really suboptimal. The browser is where browser-specific specific UI belongs!

<comment><USER36> Well I hope they'll add a way to whitelist for that. It's unfortunate that we need whitelists and blacklists for everything. As an irrelevant rant, I can say that I miss xombrero so much. It was so nice being able to have all your browser config in a couple files, in plain text. These days I'm waiting to see if the Next browser will become a viable option.

</comment></comment></comment></comment></comment><comment><USER38> For those curious about the progress of Pathfinder (WebRender's GPU-based font and vector graphics rasterizer), this month's Bay Area Rust meetup featured a talk and live demo from pcwalton: [https://air.mozilla.org/rust-bay-area-meet- up-march-2018/](https://air.mozilla.org/rust-bay-area-meet-up-march-2018/)

</comment><comment><USER39> I'm excited for WebAuthentication. That's probably the only thing that will push me to implement something new and significantly valuable for my apps this year based on web platform improvements.

</comment><comment><USER40> No mention of u2f. Is it because it's already available on the build (via about:config) or because they are not focusing on it at all this year?

<comment><USER28> I think it is effectively part of/superseded by Web Authentication, which is mentioned and links to:

[https://groups.google.com/forum/#!msg/mozilla.dev.platform/t...](https://groups.google.com/forum/#!msg/mozilla.dev.platform/tsevyqfBHLE/lccldWNNBwAJ)

First sentence in that thread is "Web Authentication is backward compatible with FIDO U2F second-factor tokens, and also supports more advanced capabilities in future FIDO 2.0 devices."

<comment><USER40> Yup, just came to edit my comment after reading the Web Authentication bit, guess will leave it if anyone has the same question.

<comment><USER41> Yes, WebAuthentication will supersede U2F and it's backward compatible (meaning you can use your Yubikeys, but the API is different).

</comment></comment></comment></comment><comment><USER42> To what for a price..

The new Firefox mainly caters to simple users. Mozilla has abandoned their feature rich concept to appeal only to Chrome users.

Mozilla's only goal today is becoming number one in marketshare and beat Google no matter what. Even if that means they alienate every single power user.

I do not at all agree with that. That is a pure simple betrayal - <USER2> their origin user base against Chrome users. Opera did that too.

The issue is, there is already an over-simplistic browser - Chrome. And only a minority of Chrome users will switch over to Firefox - the hope to absorb the majority of the Chrome user base will not work out for Mozilla.

They should have kept the features for the nerds and geeks inside. You know, there is something which is called honesty and dignity. This is for what we from Anonymous are standing for and what we are valuing.

And it is disgusting to see that an Open Source organization throws all of that over board just to become mainstream compatible.

</comment><comment><USER43> I have tried to use Firefox but I keep ending up back on Chrome. It's because I am lazy and I have been sucked into the convience of Google's password manager. Also because many of the developer extensions I use aren't on Firefox (Apollo Dev tools). I think Firefox is great, I should make the switch.

</comment><comment><USER44> I can't wait for webcomponents to land in stable.

</comment><comment><USER45> Biggest issue for me switching to Firefox is the DevTools. "Undo" does not work for CSS changes in DevTools! Tried to submit a bug for this but it was misunderstood and dismissed. Hoping this might be fixed by the 3-Panel Inspector...

</comment><comment><USER46> great choices, but I'm little disappointed seeing 0 results while searching for 'battery' as my Mac-book battery last longer on Safari than Firefox.

<comment><USER47> Fixing [https://bugzilla.mozilla.org/show_bug.cgi?id=1429522](https://bugzilla.mozilla.org/show_bug.cgi?id=1429522) should bring a noticeable improvement here and should happen in 2018.

<comment><USER46> Sorry, how does "Avoid using a transparent window by using CoreAnimation" improves battery life?

<comment><USER48> Less compositing necessary, among other things

</comment></comment></comment></comment><comment><USER49> I don't care about any of that. Just add swipe animations when moving forward/backward in history already!

</comment><comment><USER50> Most of these features started in 2016 / 2017\. So 2018 really is shipping those stable.

But what about Servo? As in the parsing and layering part? Last time the test we had 10x speed difference compared to Gecko.

WebRendr is GPU / Nvidia limited? I though PCwalton said it will also be a Software Render too.

<comment><USER51> Servo is a rendering engine and Firefox has no plans to include it.

<comment><USER52> AFAIK: Servo is an experimental browser with many components, including a web rendering engine. Some parts of Servo already are migrated to Firefox, mostly in the Quantum release last fall.

<comment><USER51> Hey, sorry about the nonsensical comment yesterday. I was pretty much asleep and didn't really need to start an argument over nothing.

<comment><USER52> Thanks for being so thoughtful, but no problem. I honestly didn't realize I was involved in an argument.

</comment></comment></comment></comment></comment><comment><USER53> > by blocking the worst content and more clearly communicating the privacy and > other protections the browser offers.

I really hope this includes the likes of outbrain, taboola and similar clickbait garbage that pollutes far too many blogs these days

</comment><comment><USER54> I recently moved from Chrome to Firefox 57 on both Mobile and Desktop. The only grip i have with it is that i hope it can get a good with device battery as safari is.

</comment><comment><USER55> I'm just sad that proper keyboard API for a better Vimperator/Pentadactyl successor seems to have been silently dropped.

<comment><USER56> Isn't that what this bug is mostly about? [https://bugzilla.mozilla.org/show_bug.cgi?id=1215061](https://bugzilla.mozilla.org/show_bug.cgi?id=1215061)

<comment><USER55> Seems like it. But just compare how vocal the "we intend to support vimperator-like functionality" message used to be before version 57, and how silent everything has been since.

<comment><USER56> I honestly don't remember the actual message from Mozilla varying much over the past two years when it comes to Vimperator-needed APIs. But then I don't remember _anyone_ doing much to get things figured out on that front, so a lack of progress is hardly surprising to me.

</comment></comment></comment></comment><comment><USER57> Video auto play blocking! I can't wait to have that feature. I hope it'll be there on mobile version as well.

<comment><USER58> You're able to activate that feature right now.

\- open about:config.

\- type "autoplay" into the search bar at the top of the page.

There should be two options there:

"media.autoplay.enabled" and "media.block-autoplay-until-in-foreground"

What these options do _should_ be rather self-explanatory.

EDIT: damn markdown formatting

</comment></comment><comment><USER59> > QUIC (aka HTTP/3)

Why focus on QUIC when the JS APIs to use it aren't available? Numerous of the features of HTTP/2 aren't usable (i.e. trailers, flow control, security sensitive headers, priority, etc.).

I don't understand how the web is supposed to flourish without giving web developers _some_ kind of access to these tools. Meanwhile, app developers are showered with such goodies.

<comment><USER28> I'm not sure how you come to this conclusion, or what you mean? As I understand it, QUIC is a transport layer for the HTTP application-level protocol, so I would guess that pretty much all of the JS-exposed APIs are equally applicable.

<comment><USER41> I guess they mean _extra_ API that utilize stuff that's in HTTP/2 but not in HTTP/1.1.

</comment></comment></comment><comment><USER60> Looking forward to web components, ES6 modules and shapes path editor.

</comment><comment><USER61> Anyone know if/when WebRender will be testable on Android?

</comment><comment><USER62> No easily switchable, fully isolated profiles a-la Chrome, no default zoom support without installing an add on (handy on 4K displays). Epic fail. Better luck next year, Mozilla.

</comment><comment><USER63> Given how neutral Firefox is I wish they didn't create new stuff when good open community developed alternatives are available. I'm referring to lockbox. It would be better id this was an extension to keepass or a fork that read the same file format

</comment><comment><USER64> >Ctrl+F "tab groups"

>Phrase not found

Guess I'm still staying on v56...

<comment><USER65> Tab Groups isn't in v56 either. What you're looking for is actually there, at least most of it:

> More Extension APIs: Firefox extensions will become more capable with > additional features for tab management and organization, including a full > implementation of Tab Hiding (61)

Once you can hide tabs, you can basically have tab groups.

<comment><USER19> This is in fact the explicit motivator for the addition of this API.

</comment></comment></comment><comment><USER66> _Filter certain types of ads by default: Firefox will offer users a simple ad filtering option. We 're in the early stages still, researching types of advertisements that should be blocked by default. (Q3)_

Come on, do the right thing for once and put the user first.

<comment><USER58> There ARE some types of non-intrusive ads (read: unnoticed unless specifically searched for) like little ribbons with text and maybe a link, like on [Troy Hunts blog]([https://www.troyhunt.com/](https://www.troyhunt.com/)) or small non-animated banners like the ones on StackOverflow.

The ones everyone (except the ad networks) wants blocked by default are the intrusive ones, like video ads auto-playing loud BS or the ones where you scroll or move the cursor and some <div> or something pops up, darkens the rest of the site and annoys the reader with some pathetic bid to "subscribe to our page" etc.

<comment><USER66> I completely disagree, non-intrusive ('acceptable' etc) ads don't exist, no matter how hard this concept is pushed, period.

Nevertheless, pretending Mozilla is not receiving funds from Google (who is already trying to force their standards through Chrome / Coalition for Better Ads) is intellectually dishonest.

Block all ads, let the user white list, that is the pro user approach. Should have been done years ago.

</comment></comment></comment><comment><USER67> It's sad that browser UI improvements came to an end.

A number of innovative browsers never gained traction, and when mainstream ones try to improve UI it gets considerably worse.

Every new browser has a short runway of new awesome ideas and then it's stagnant for decades.

<comment><USER68> The UI of Firefox improved greatly, just remember how the old preferences screen looked like before.

<comment><USER69> I remember when it used to look like a nice, compact native dialog box* instead of a full-screen, space-wasting abomination that follows no standards for anything.

But consistency, visual coherency, discoverability and predictability are apparently all outmoded concepts in UI design, so opinions like mine -- that native applications should look and feel like native applications -- don't seem to be worth much among the cool crowd nowadays.

* [https://winaero.com/blog/wp-content/uploads/2015/04/firefox-...](https://winaero.com/blog/wp-content/uploads/2015/04/firefox-38-restore-old-preferences.png)

<comment><USER70> I disagree with you on this particular point, but in a wider scope I think you're spot on - it seems so little thought is given to the very basics of UI design.

iTunes is the classic example!</comment></comment></comment></comment>