Should I Learn Java in 2018 - <AUTHOR> https://www.e4developer.com/2018/06/09/should-i-learn-java-in-2018/ <comment><USER3> > Concern 5: Java is too slow/consumes too much memory

It's sad that this is still a thing. Compared to more trendy languages like Python and Javascript, Java is very light on memory. JS is known for being fairly fast and "light", but its actually 5-10x slower than Java and uses 5-10X more memory. And the whole "lightness" of it is a lie. Javascript's run- time is probably bigger and more complex than the JVM.

Java used to be painful, but there's a ton of tools that make it easy to use if you know where to find them. Some, like Lombok, get rid of a majority of the "cruft" by enhancing the language itself. Awesome Java is a treasure trove of useful stuff. [https://github.com/akullpp/awesome- java](https://github.com/akullpp/awesome-java)

The combination of speed, flexibility, and robustness can't be found anywhere else, Although Go is slowly catching up.

<comment><USER4> Hmm. Just checked memory use on some services we run on Go, Node, and Java. I'm not part of the Java team but results:

Go: 40M Node: 64M Java: 4GB

Any Java service I've seen in production has similar numbers. Coupled with the incredible startup time it's hard for me to see why you'd pick it in 2018.

<comment><AUTHOR> JVM uses as much memory as you allow. Use `-Xmx39m` to beat Golang.

<comment><USER5> My guess is that it won't work with less than 1GB bc of spring boot, hibernate and all the rest of Java enterprise "microservice" goodness.

<comment><USER3> IMO almost nobody is writing microservices with spring boot because its so gigantic. Hibernate isn't bad on memory use on its own.

There's a raft of more sane choices these days like Play, Dropwizard, Vert.X etc.. They all use far less resources. Spring Boot is huge because it has to support a decade of obsolete junk, its far more than just a REST app framework.

Checkout TechEmpower's framework benchmarks [https://www.techempower.com/benchmarks/#section=data-r16&hw=...](https://www.techempower.com/benchmarks/#section=data-r16&hw=ph&test=fortune&l=hr9lz3&d=9)

(I added filters to limit to Java+Go+JS+Python and limited DB to Postgres and Mysql)

Java and Golang lead the pack, with JS a distant second and most Python frameworks hanging out near the bottom

<comment><USER6> >IMO almost nobody is writing microservices with spring boot because its so gigantic.

I've encountered plenty of spring boot microservices in my work and, from what I hear of other companies, it's not particularly rare.

Most of the time, if you have a team that's productive in Spring, a manager or lead will be happy to spend some extra memory and get more features shipped.

</comment></comment></comment></comment></comment></comment><comment><USER7> If you want a low stress good paid job, where you would be able to rush home at 5pm, then yes.

If you are looking for excitement, learn $hype_of_the_year and join a startup, but be ready to learn $hype_of_the_next_year soon.

<comment><USER8> Oddly enough most of the startups around where I am at have been based on Rails. Some people use Node as well. That's about as $hype_of_the_year as it gets here.

<comment><AUTHOR> I think Rails/NodeJS are the most popular choices for startups everywhere in the world. Both technologies are made for lean development.

<comment><USER9> Node.js is 9 years old and is also very stable with a large ecosystem. It's far from "hype train" in 2018 and it's more the mature technology - <USER2> it's still moving fast forward with new tools and paradigms it's very stable.

</comment></comment></comment></comment><comment><USER9> I never got the "Should I learn X" posts. The answer is yes to all the "Should I learn X" questions so it's very hard to have a discussion.

Learning another language is _significantly_ easier than learning the first one or two - not to the point of being a master but to the point of being competent.

Should I learn OCaml? Yes, you learn from knowing a functional language and Scala (combines functional and OOP well) and Clojure (a lisp) and C++ (resource management is important) and most of these languages.

Should you learn Node.js? Also yes - it is popular, most of the FE tools are written with it - it's fun to use (subjectively) and it's popular and reasonably fast.

Also Go, Rust, Swift and a bunch of other languages - languages are like philosophies and knowing them helps you understand what you're actually doing better often.

I never understood developers that only know 1-2 languages since it severely limits how you _look_ at problems.

<comment><USER10> _Learning another language is _significantly_ easier than learning the first one or two_

Learning the syntax, sure. But to be productive at a commercial level in any language these days is about knowing your way around the ecosystem, libraries, tooling etc, and that takes a significant investment of time, and the knowledge is highly perishable.

3-4 languages is probably the most it's reasonable to maintain and to claim as an actual skill.

<comment><USER11> This is so overblown. We bring in folks regularly with no experience in our language much less the ecosystem and invariably they're totally productive in a month or so

<comment><USER10> Sure, if you work at it full time you could be up to speed in a month, say 200 hours of work. That's more than a casual investment of time if it's on top of a full time job as well.

And if you go away from it and come back in 6 months or a year you'll have to do it over again, some stuff you'll forget if you don't use and some stuff will have moved on.

</comment></comment></comment></comment><comment><USER12> I have been developing backend systems in Java, professionally, for the past 15 years.

You should not base your career choice of being Java programmer or not solely on Java's popularity.

There are genuine good reasons to learn niche technologies especially if you like them more. I think if you genuinely like something you are much more likely to succeed in that field and it is better for you no matter the size of the field.

Choosing niche technology means you will have less options when changing jobs but, remember, you only need one good offer.

Here's my thought about Java:

Java development is for a specific type of programmer that will most likely work for large corporation and more often than not on some unsexy backend system.

Java is uniquely suited to be language of choice for the enterprise for many reasons which I will not go into right now.

These companies are currently extremely hungry for Java developers. This also means you will not only have no problem finding a job, you should be able to command good starting price compared to about anything else (except maybe React).

Java is becoming better work environment, not worse, with every passing year. It has excellent tooling (IntelliJ IDEA being in my mind best IDE in the world except for Emacs with Slime). Excellent frameworks and support libraries (Spring Framework + satellite frameworks). Excellent support and portability (if you can install Java in particular major version it WILL work). Excellent build systems (Gradle being my choice). And it is also quite efficient with resources if you do it correctly and don't make bad choices -- JVM is actually very fast and the only major drawback is startup speed and memory upkeep which are not an issue for typical enterprise service.

Major drawbacks:

It is not particularly good language in itself, but that's what I get for learning Lisp. It got a bit better recently (recently in this case is past few years).

It is suited to particular types of projects which tend to be unsexy, enterprise services. If you become Java developer you probably will not be working on games, on exciting IoT projects, beautiful UIs, AI, and other exotic stuff. You will be doing backend systems and hopefully be paid well.

Oh, and you will be working with a lot of people that barely can write a loop. That's that. I said it...

<comment><USER13> > Oh, and you will be working with a lot of people that barely can write a > loop. That's that. I said it...

It's funny although it's true. I'm not a programmer, but that's the profile of the Java developers that worked in my team. Sad, really...

<comment><USER12> I have worked for a number of companies, big and small, and this is recurring thing.

If you are a person looking to get good salary by becoming programmer but you are not really interested in programming, Java is most likely to be your choice.

You will never advance, but that's fine. If you are bad enough you will just change company and get your salary from another.

There is so much pressure to find Java developers that companies frequently forgo any sane process to check whether the person is actually qualified to do the job. With tools available like CoderPad and the likes there should actually be no excuse to do this but I guess somebody high in HR would be very unhappy seing how few actual Java developers they are able to hire after applying it.

<comment><USER14> I don't know where you are from but most universities in the U.S. teach Java or C++ as primary language. Pretty much everybody in our school used Java as their interview language and due to the leetcode grinding culture, the interviews are not definitely easy. The companies you talk about sound like they suck.

<comment><USER12> It is easy to write that the company sucks, but the problem isn't that easy.

When you work as a manager for the company and you are presented with a new project you can't say you will not do it. In many companies this will mean you are expected to hire people and to get it out the door.

In most companies incentives are against "we will ACTUALLY only hire best people".

</comment></comment></comment></comment></comment><comment><USER15> Java or .NET are going to be prevalent in any mid-size or larger nascent organization. There's absolutely no reason why you wouldn't at least embrace it in your tool belt. It's proven technology. It may not be 'fun', but making stable business systems last is the point here - not building fun tech for the sake of building fun tech. (Wrong audience here, I know)

</comment><comment><USER16> Kotlin or Clojure would be a bit more fun to learn, still be able to benefit from running on the JVM.

<comment><USER7> As much as I like Clojure (and Clojurescript) whenever I want to actually get things done, I have to switch back to the simple Java jax.rs based backend and either native Android, or ReactJS based web front end.

I am kinda sick of spending days fighting with half-backed tools that would eventually give me a better and more productive workflow, just to get to the "almost there with only a few missing things" and finally giving up.

That being said, I have a high hopes for Flutter for the front end mobile development. From what I have seen from quick playing with it, it's as friction-less as it can get.

</comment></comment><comment><USER17> One annoyance with Java(and Kotlin too) is that it's pretty much the only language left that you really ought to use a specialized IDE with while pretty much every other language(including C#) you can get adequate support in VS Code or Emacs.

<comment><USER18> I think its the other way, there are only a few languages with as superb IDE support as Java. AFAIK its just C++, Java and C#.

You can get shitty support with just syntax coloring for anything and anywhere of course.

<comment><USER19> Couldn't agree more. A powerful IDE with rich, intuitive, self-discoverable, user friendly design tools, debugging and refactorisation is as important to me than the language itself.

And I'd say a third thing that matters as much as IDE and syntax is the wealth of libraries. Not just common things like consuming a rest API. But also specialised things like dealing with spreadsheets, music, whatever your domain cares about.

</comment></comment></comment><comment><USER20> There are plenty of reasons to learn a language - but Java in particular is a great learning tool. Whilst I don't enjoy developing in it (or its derivatives), I think that it's a great language to help people clearly understand control structure and polymorphism.

To this day, my experience continues to be that students who had a CS degree that included Java have significantly better fundamentals than those whose programme didn't. Whilst that's purely anecdotal, I'll definitely continue to skew this way until I see otherwise.

</comment><comment><USER21> Yes, you want to learn Java in 2018. It's still a go-to language in many corporations, though not super-glamorous. Even if you do not plan on taking on any such job in the near future, it's good to know it - at least cursory. Perhaps especially because it has similarities to languages like C# and Objective C, which are also corporate heavy languages (thought the former more than the latter). It might not be used in the next startup, but it's still one of the most important get-a-job language to know.

</comment><comment><USER22> Author says Java was relatively new in 2007 although introduced in 1995... I'm not sure what is meant.

Java is many things: the language? The vm? The ecosystem?

I keep hearing that Java is fast, and indeed hotspot is but every system I encounter that's written in Java is sluggish.

I keep hearing that Java lost its abstractwidgetfactoryfactoryfactory fetish, and I think it's improved in the last 15 years, but it's still horrible.

My view:The language is meh; acceptable syntax, reasonable performance. The ecosystem is bleh - only if you really love bureaucracy.

<comment><USER23> > I keep hearing that Java is fast, and indeed hotspot is but every system I > encounter that's written in Java is sluggish.

Counterpoint: ElasticSearch and Solr are excellent, reflecting many hard years of work by the Lucene team. (I say that as someone who last wrote serious amounts of Java in the 90s)

Java's problems are cultural and the experience really depends on whether you're over in enterprise land with that insatiable complexity fetish or somewhere else where people are serious about getting anything done. The big risk to me these days is Oracle since they're prone to milking their IP now at the expense of its long-term future.

</comment></comment><comment><USER24> yeah, also in 2019 and 2020. it's only getting better and better. the echosystem is amazing. I think you should focus on 3 languages:

1\. Java for stable heavy big projects with lot of develpers. 2\. Typescript for frontend lifting. 3\. Python for machine learning and data analysis.

Master those 3 and general programming and system design concepts this is what i'm working on.

<comment><USER25> That's exactly the three languages I use and for those exact reasons. I'll sometimes throw in R for data analysis as I find the ease of importing/editing poorly formatted excel (most business scenarios) to be the easier than python (more of a personal preference than anything)

</comment></comment><comment> oh-kumudo > Should I learn Java? This is a question that just keeps coming up.

Really? Java has a verbose but bland syntax, relatively fewer surprises, to 'learn' it, should be straightforward. I don't think this should pose as a problem to average dev at all.

<comment><USER26> Agree. Even if you don't plan to be an expert Java developer it is still useful to learn it, and the effort should not be huge. Especially not for someone with experience in other languages. It really isn't a difficult language to learn up to a level of basic proficiency. It should not be more than one or two weeks of effort to be able to create useful things if you know what to look for.

The effort of learning new programming languages often seems to be hugely over-estimated.

<comment><USER19> But learning the syntax is only a small part of learning a language. Knowing your libraries is a huge part of being productive. How do I do rest queries, cryptography, filesystem manipulations, serialization, spreadsheet manipulations, images manipulations, web frameworks, interaction with the OS, multi-threading debugging, UI, etc. Outside of staying within an ecosystem (JVM / .net), you need to rediscover all these from scratch, get bitten by all the gotchas, etc.

</comment></comment></comment><comment><USER27> Yes, by all means learn Java. It's not as hip as Go or JavaScript, nor as versatile as Lisp. Learn it because it's still a valuable utility language for writing networked services (especially large ones) and it has HUGE library support. Learn it for the hell of it. And don't be swayed by its reputation; Java in 2018 is asymptotically approaching Kotlin (which you may also want to learn, as long as you're on the JVM).

</comment><comment><USER28> It's the defacto standard language at Amazon. There's no specific requirement that teams write code in Java and all the high level infrastructure makes no presumptions, but there's great internal support for it.

And Amazon hired Gosling, so interpret that as you will.

<comment><USER29> >...so interpret that as you will.

Probably 'just in time' as this a Java thread.

</comment></comment><comment><USER30> Java - just like JavaScript has a lot of inertia which won't be going away anytime soon.

Anecdata: my seven person college social circle consists of one front-end dev(me), one systems dev working in C++ and Go, one all-around programming handyman, one sort of dev-ops and three backend devs who work exclusively in Java.

Large non-IT companies and their respective IT departments are first and foremost interested in technologies that work and can be easily staffed. Java fits the bill for now.

</comment><comment><USER31> Java itself is pretty fast and wonderful, at-least the modern versions. It's the libraries and the ecosystem. Java folks typically over engineered things with layers and layers of abstraction in the name of "enterprise".

Writing a web app in Django/express vs tomcat/jboss you'd feel the pain. It would take forever to start, chew an insane amount of memory and nodejs runs circles around it.

There aren't that many things where Java is a great usecase. If you want serious perf, then you'd go C/C++/rust. Perf with nicer abstractions would be Go. Dynamic languages? Javascript and Python.

Yes Android uses Java heavily but even Google got sued left and right by Google. Oracle simply gives Java a really bad rep.

Java is still heavily used by banks and enterprisy companies but I'd bet C# has equal penetration. C# is just designed much nicer, it's like java but a great user experience and similar perf. With .NET being OS, i'd bet on C# to have bright future. MS invests a lot more into it than Oracle into Java.

So to answer your question if you should learn Java. Absolutely go build a simple Android app or a simple cli app. I wouldn't count on it being the only tool in the toolbox.

If you have limited time and you want to make a choice on what to learn. I'd say Javascript and Python. Those are in good demand nowadays.

<comment><USER32> Sun would have sued Google as well, if they still had the money to do it.

Oracle is so bad, yet no other company was bothered to rescue Sun, not even IBM which backpedaled on their proposal.

And mostly importantly, Google, after what they had done.

</comment></comment><comment><USER33> Yes, by all means.

Then you can learn $FLAVOR_OF_THE_YEAR to get you exciting gigs while maintaining proficiency in $OLD_FAITHFUL to keep you employed as you learn $FLAVOR_OF_NEXT_YEAR.

</comment><comment><USER34> I just yesterday managed to compile a little utility program of mine in java using openjdk 10 and then via [https://github.com/moditect/moditect](https://github.com/moditect/moditect) link together linux and windows binary packages which run on both platforms without a JVM and weigh in at ~35mb. It impressed me that something like that is now possible with Java.

</comment><comment><USER35> I think that its time that the enterprise switches to full stack Typescript as a much better solution for developing enterprise software.

Why use two languages and two different ecosystems for the backend and for the frontend, when we can use only one? It makes hiring a lot easier too.

Let's face it the Java ecosystem is stagnated and has lost a tremendous amount of mindshare in the last 7 years.

The level of modularity that they are trying to achieve has been available in Node since 2009, while all the language features that they are trying to implement are already there in a Typescript in a much better form.

The Java ecosystem did not manage to produce a good frontend development solution, and that was its downfall.

Things like JSF and later GWT did not deliver on the promise of abstracting away the browser for non-frontend developers, and the result is that you have to be both a frontend developer (HTML/CSS/Javascript ) and a Java developer in order to build UIs in Java.

<comment><USER36> > Why use two languages and two different ecosystems for the backend and for > the frontend, when we can use only one?

Why use a hammer and a screwdriver when you could just use the hammer?

Do people really make blanket decisions like this for their projects instead of properly evaluating what the project's actual needs are?

</comment></comment><comment><USER37> IMO the enhancements of Java over the last few versions have been very well chosen. I can't think of another language which has improved so much, and with so little hassle to developers.

streams, type inference, lambda expressions, an official REPL: big changes, which effectively targeted some of the biggest pain-points in earlier Java.

<comment><USER38> And more is coming:

Fibers, pattern matching, continuations, value types, low latency garbage collector …

</comment></comment><comment><USER39> Any fears of oracle stewardship?

[https://www.google.com/amp/s/www.infoworld.com/article/32841...](https://www.google.com/amp/s/www.infoworld.com/article/3284164/java/oracle- now-requires-a-subscription-to-use-java-se.amp.html)

<comment><USER40> Yes, but not there. Don't use Oracle Java. That article only applies to Oracle Java. I personally would not recommend anyone relying any Oracle owned software (e.g. even Graal) but have no problem recommending community owned software like the JDK/JVM. Of course it's just a recommendation, sometimes we don't always have a choice.

My concerns with Oracle stewardship is more about their business practices concerning the trademark, (lack of) distribution of the TCK, treatment of alternative impls, litigation concerning perceived misuse, installer software bundling, etc.

</comment></comment><comment><USER41> I was at the tail end of the Java-first code teaching approach - the Stanford open courseware I was following in 2013 was largely built on top of Java. Stanford switched those courses to Javascript a couple of years later.

Java has definite advantages over its scripting cousins when it comes to learning the OOP paradigm, program patterns/anti-patterns and typing. You can't really get away with not knowing any of it in Java (as opposed to Python), but the language is still fairly newbie-friendly (as opposed to C++). Additionally, Java 8 is a fairly decent introduction to functional programming for people who've never worked with it before.

All that said, right now I wouldn't start a new codebase in Java unless I really, really had to. Learn your fundamentals through Java, then get comfortable in something else and code your projects in that instead.

</comment><comment><USER8> Java is old, and it may not be fashionable, but it's still so widely used that every other JVM language is just a drop in the bucket by comparison. It's not particularly difficult to learn either. Seems like it would be good for your career even with all the warts the language and APIs have.

</comment><comment><USER42> I wrote this in 2014 and think it's still reasonably relevant: [https://mcconnellsoftware.github.io/java-golden- handcuffs/](https://mcconnellsoftware.github.io/java-golden-handcuffs/)

</comment><comment><USER43> I quite like modern java. With spark java, lambdas and all the helpful jars it's really not a bad language. Plus you get native lucene and almost every other thing you could want is already written

In fact the only thing I wish for with it is fast syntax highlighter in Java like pygments for python or chroma for Go. The pygments/jython implementation is too slow and there is no the else mature out there.

It's also useful to know career wise. It may not be the new hot thing but it's likely to be around 20 years from now and a little stability in languages and tools is something to be thankful for.

</comment><comment><USER44> You should learn Java if you want to get a job programming in Java (e.g. a very large proportion of programming jobs).

</comment><comment><USER45> Was hopping to see more mentions of Android development... I'm currently weighing building an app in Kotlin or Java

<comment><USER40> IMO to use Kotlin effectively you need to know Java, so to answer to the article title for you is yes. But I would probably use Kotlin for the actual development due to Android Java being versions behind and version fragmentation.

</comment></comment><comment><USER46> Java has the best IDEs on earth. And the best tooling too.

</comment><comment><USER47> To hell with Java. Learn it if you have to, but thankgod it's no longer mandatory skill on the market.

</comment><comment><USER48> How reliable is the TIOBE index?

C having 7% year over year growth seems hard to believe.

JS is shrinking and smaller than Visual Basic.NET?

</comment><comment><USER49> Totally J++ is the wave of the future!

</comment><comment><USER50> What are the best (and least painful) resources to learn (modern) Java?

</comment><comment><USER51> if you learn Scala, you'll learn also Java as side effect

<comment><USER52> SBT is hellish though and the added complexity that Scala has imposes a lot of cognitive overhead.

With Kotlin, you always end up writing cleaner Java and don't risk erring on the side of unneeded entanglement in the spaghetti monster that Scala can sometimes be.

<comment><USER53> Before going multi module and needing special control on the build process and having a LOT of code, what exactly hellish do you think someone and a beginner at that will encounter? I have been writing it professionally for 5 years and I find it ok.

<comment><USER54> SBT is a monster for beginners and experts alike. Haoyi (Ammonite creator) wrote a pretty good article about it [1]

[1]: [http://www.lihaoyi.com/post/SowhatswrongwithSBT.html](http://www.lihaoyi.com/post/SowhatswrongwithSBT.html)

</comment></comment></comment></comment><comment><USER55> Do it. There's a ton of things you can learn just conceptually and a lot of Amazon for example is built on it so there's them for jobs and tons of other enterprises that would employ you.

</comment><comment><USER56> maybe consider cobol instead?

<comment><USER52> Well, you do have a point in that COBOL jobs are safe places where you don't have a lot of need in staying up to date with the freshest tech, leaving more time for other things in live than code, same as it goes for many JavaEE shops.

However, lots of banks are rewriting their COBOL code in Java, so you might end up writing some Java anyway.

</comment></comment><comment><USER57> Learn Kotlin! It's a lot of fun. And gradle is a nice build system.

<comment><USER58> Historically, Gradle is a Java build system, isn't it?

</comment></comment><comment><USER59> Unpopular opinion: Java is a Flash of the backend.

<comment><USER60> Bashing Java is unpopular?

<comment><USER61> I can see how comparing server-side Java to Flash would be an unpopular opinion (since it doesn't make any sense at all).

</comment></comment></comment><comment><USER62> <engage irony>

Not at all, you should learn a more macho language like C++, where you can suffer, acquire scars, loose countless hours to weird template errors, learn the intricacies of writing code that has to compile on different compilers that don't agree on the syntax or semantics of the language, fight with crappy tooling, use IDEs that barely manage to do auto-completion, encounter all kinds of bizarre hardware and OS behaviour that the Java runtime shields you from, resulting in code that doesn't compile or run anymore every 6 months when part of your compiler or library toolchain changes, and acquire skills that are largely useful only as bragging rights

<comment><USER63> Please don't do programming language flamewars here.</comment></comment>


Insights – Open-Source Self-Hosted Business Intelligence Platform - <AUTHOR> https://github.com/mariusandra/insights <comment><USER2> I totally do not get the negative comments.

Having seen a fair share of BI tools (I created and maintain an "awesome" list at [1] which I created for the sole purpose of getting an overview of what's out there) and assessing the stage you're at developing solo, you're getting quite some important UI basics very right imo.

The "Next Steps" give a great impression of what's possible and how to navigate the app.

From an E-Commerce viewpoint, most people want to flexibly play around with Products, Orders and Order Line Items and ratios between the three. Configuring this by hand in something like Google Datastudio etc. is cumbersome, even or more so in Looker (if broken out into separate Views, one needs to needs to create Merged Results Looks; if not the different cardinality objects are always connected). I feel like Insights is handling this really well. If you would add support for calculated fields, you'd offer a compelling E-Commerce controlling solution.

One issue I noticed though is that your nesting seems to be unlimited. I could open an infinite "table" tree if I start from the order_lines or product view --> order_lines --> order --> order_lines --> product --> seller --> orders/ products... ad infinitum.

You want to make sure that this drilldown into FK relationships does not lead to loops. Also I think some visual support where in the nest tree one is at (orders --> order_lines --> product --> sellers) would be great, otherwise it's quite easy to get lost.

Other than that honestly congrats on doing a lot of things right in terms of data viz, responsiveness, sharing capabilities. Really like your work!

[1]: [https://github.com/thenaturalist/awesome-business- intelligen...](https://github.com/thenaturalist/awesome-business-intelligence)

<comment><AUTHOR> Hey, thank you for your kind words!

I've been putting a lot of effort into the UI/UX lately and it's great to see it paying off... even though there is still so so much to improve.

We actually already have support for calculated fields! Just edit a "subset" and you can add as many custom fields as you would like. [1]

Thanks again for the feedback! :)

[1] [https://user- images.githubusercontent.com/53387/74677547-e8d...](https://user- images.githubusercontent.com/53387/74677547-e8d00280-51b8-11ea-922b-1746b38831d6.png)

</comment></comment><comment><USER3> Nice, well done! I'm using Metabase at the moment, which I quite like, except for a few little annoyances. What was your motivation for writing this, and where do you see insights differ from the current main players like metabase, superset and redash?

Feature wise, in case you are interested, for these tools it is important to me to be able to create the graphs/dashboards in an automated way, e.g. via an api. Import/export would also be good. Also: openid support, ldap would be nice to have too, but openid would suffice.

<comment><AUTHOR> Hey, thanks!

Regarding Metabase, Insights has full blown first class support for joins... so we don't have to write blog posts like this [1]. My research shows Metabase works great with normalised tables (like a CSV file? normalised NoSQL table, etc)... but falls short when you need to visualise relations between tables. You can look at for example all your orders, think "I wonder what's the highest grossing country" and have the results at your fingertips.

Regarding Redash, which seems to be a nice SQL editor, in Insights you don't need to know any SQL to get answers. Thus "business stakeholders" can get dirty with the data with minimal training.

Regarding Superset, I'm unfortunately not familiar with its latest features. Please somebody reply with an overview! :) Last time I checked it (many years ago), it was pretty complicated to get it installed (some python issues?) and I'm not sure if you could explore data without knowing SQL. Insights in comparison is super easy to install (npm install -g insights) and get going with.

[1]: [https://www.metabase.com/blog/Joins/](https://www.metabase.com/blog/Joins/)

<comment><USER4> I work on Metabase and wanted to say congrats on putting all this together. Excited to see more open source options for BI.

Just as a point of fact - that blog post you linked to is 3.5 years old at this point.

Even at that time we had implicit joins (for things like top grossing countries if you had an FK in your transactions back to a table w/ the country field).

We've had joins in our notebook mode for a while now ([https://www.metabase.com/docs/latest/users-guide/custom- ques...](https://www.metabase.com/docs/latest/users-guide/custom- questions.html))

<comment><AUTHOR> Ah, my apologies! Thanks for clearing this up!

</comment></comment></comment></comment><comment><USER5> The title should be: "Insights is a tool to visually explore a PostgreSQL database"

</comment><comment><USER6> IMO, your demo site could be improved by having some widgets created in advance.

</comment><comment><USER7> Already on my nope not even gonna try it list.

The demo page does that annoying crap where it tries to prevent you from navigating to your prior site.

I thought that trend peaked in like 2001.

<comment><AUTHOR> I can assure you, that's a bug and not an intended feature.

Thank you for your feedback.

<comment><USER7> In that case I apologize for the prior tone.

I will check it out now that you have stated it is a bug.

Thanks!</comment></comment></comment>


How to Make Deep Learning Models That Don't Suck - <AUTHOR> https://blog.nanonets.com/hyperparameter-optimization/ <comment><AUTHOR> Training deep learning models can be tough. They don't work without the right hyperparameters. The interactive blog gives an explanation of the algorithms that can automate the hyperparameter search and has all the code you need to try it out for yourself.

</comment><comment><USER2> Great article! Might be worth adding that too much dropout can cause your model to never converge, which would be creating a model that "sucks!"</comment>


PR Veteran Gives Canadian Startups Advice One Cup of Coffee at a Time - <AUTHOR> http://www.techvibes.com/blog/public-relations-veteran-gives-canadian-startups-advice-one-cup-of-coffee-at-a-time-2012-10-03

<comment><AUTHOR> Like the different business model (fact that you can buy as little as 1hr of work at a time, unlike traditional PR) and the use of coffee analogy to describe their services.</comment>


Creative QR Codes - <AUTHOR> http://mashable.com/2011/07/23/creative-qr-codes/

<comment><USER2> Don't do this. Ever.

Firstly, you're eating up your margin for error. This seems fine when you're scanning with an iPhone 4 from a galley proof in a brightly lit office, or from your calibrated monitor. It becomes a big problem when users are scanning creased newsprint on a poorly lit train, from a dirty TV at the wrong aspect ratio, or with a crappy cameraphone with a scratched lens.

Secondly, you're pissing away the inherent call to action in a QR code. Many of these more styled QR codes are barely recognisable as such. Either you reduce your scan-through rate because people don't know that your multicoloured blob is actually a QR code, or you have to explicitly state "this is a QR code, you can scan it". I hope I don't have to explain why those are bad design outcomes.

If you hire designers, this is a brilliant litmus test. Anyone who thinks that this is a good idea is incompetent, plain and simple. They will make decisions which are pretty, but will annoy your customers and cost you money.

</comment><comment><USER3> Will any of those codes actually _read_?

The Disney codes are cool - they are creative in a way that doesn't compromise the readability of the code. The others just seem like gigantically bad ideas.

It's hard enough convincing people to use QR codes - the more you violate the spec the more devices will stop reading it.

<comment><USER4> The "Barcode Scanner" app in the Android market had trouble with the first one, and the one with the panda in it. Google Goggles had no trouble with any of them.

<comment><USER5> Goggles was uable to load the Farmville one for me.

</comment></comment></comment><comment><USER6> I'm torn between NFC and QR codes... or at least, I was. I've seen some really spectacular exampled of QR codes recently - while in Korea, and most recently via paperlinks. I was initially skeptical of the user experience with QR codes, but after watching a paperlink demo, it's like magic.

We're about to finalize our logo, and immediately afterwards, they'll have one more happy, paying customer.

<comment><AUTHOR> We at Paperlinks appreciate the support! With NFC and QR codes, I don't think it has to be either/or. NFC is a fantastic technology that truly makes real world hyperlinking even more seamless. We just need more phones with NFC readers on them. In the meantime, there's QR codes, and companies like Paperlinks are trying to make them as easy and effective to deploy as possible!

</comment></comment><comment><USER7> If you have an Android phone I released an app last week that lets you create customised QR codes containing your contact info. Check out [https://market.android.com/details?id=com.rabidgremlin.andro...](https://market.android.com/details?id=com.rabidgremlin.android.mecodelite)

</comment><comment><USER8> In a similar vein: <http://blog.mappiness.org.uk/2011/04/05/logo-qr-code/> and <http://2d-code.co.uk/bbc-logo-in-qr-code/>

</comment><comment><USER9> Speaking of aesthetics, I like the experience of looking at Microsoft Tags much more than looking at (ordinary) QR codes.

</comment><comment><USER10> There's a lot more cool stuff yet to be done with QR codes!

I'm going to announce this properly sometime this week when we've got a nice demo video, but we just (and I mean JUST) launched a new webapp for people who want to have flexible QR redirects with analytics.

If any of you guys are interested: <http://omniqrcode.com>

</comment><comment><USER11> Does someone know an easy way to figure out what elements in a QR code are irrelevant?

</comment><comment><USER12> They suck. #5 won't work on my phone. #7, #9, #11, #12 don't like me, too. Even something as simple as #10 works incorrectly. #8 has problems.</comment>


How Syria's White Helmets became victims of an online propaganda machine - <AUTHOR> https://www.theguardian.com/world/2017/dec/18/syria-white-helmets-conspiracy-theories <comment><USER2> There is no real argument in the article dismantling the White Helmets' play. The article only revolves around the machinery used to move the news and tweets around the world but it actually fails at dismantling the facts. I have recently stopped believing any international information. There is so much manipulation.</comment>


A clone of Microsoft Paint in JavaScript, using the WHATWG Canvas - <AUTHOR> http://canvaspaint.org/

<comment><USER2> Whoa, that's a surprise – I wrote this back in late 2006 and it has been unmaintained since then. A lot has happened in the <canvas> world in the past four and a half years (font drawing API, get/setImageData, lots of implementation improvements and bugfixes).

</comment><comment><USER3> Pretty cool. The rectangular select tool doesn't work on my system (Chrome 9.0.597.107, Mac OSX10.6). I see tons of visual artifacts where it hasn't repainted correctly. See <http://grab.by/9hPv>

</comment><comment><USER4> I use this semi-regularly mainly because file->save saves to a URL, saving me the extra upload-somewhere step when making quick sketches that I want to share with people.

<comment><USER5> Try <http://cosketch.com/> Does the same thing and provides convenient embedding codes on the saved images. Also has multi user functionality, image uploading and works in IE.

</comment></comment><comment><USER6> "Sorry, your browser doesn't support flood fill"

\- Firefox 3.6.13/WinXP

<comment><USER7> Same: Chrome 11.0.686.3 dev / Win7

Only supported in Opera 9: <http://canvaspaint.org/blog/2006/12/flood-fill/>

</comment></comment><comment><USER8> OK, let me see if I got this right:

      1. Identify any Windows desktop program that most people need.
      2. Build an equivalent app that will run in any browser.
      3. Migrate everything to the cloud (whatever that means).
      4. Give everyone an iPad with 4G.
      5. Get rid of the network.
      6. Get rid of IT.
      7. Get rid of all desks, chairs, phones, and break rooms.
      8. Get rid of the corporate office.
      9. Build 24,000 more Starbucks.
      10. Get back to work.

What did I miss?

<comment><USER9> Sure, the important part is the first two items. Creating a browser app means it is cross platform and flexible... the move to browser apps for everything illustrates well why MS knew they had to try to kill Netscape and control the browser market.

<comment><USER10> I don't think anyone in the world saw the (still hypothetical) move to browser apps coming in... 1995. I don't think that was part of their motivation at all. Browser apps were barely (if at all) possible in 1995.

<comment><USER9> No, that's not true at all. Netscape saw the potential and talked publicly about it quite early on. The details were imagined differently, but people knew that the browser would be a cross-platform way to distribute software. People might have thought things like Java would be more involved than JavaScript, but that's not the point. I can find citations if you'd like. Believe me, I was there.

This all came out in the Justice Department's antitrust case against Microsoft, too - emails written by MS and Netscape employees discussing this.

Think of how Microsoft saw the world back then. Applications like Britannica on CD-ROM were _Windows Applications_. Browsers were perfectly capable of displaying images, formatted text, and arranging to play sounds. That means something like an encyclopedia was perfectly possible, and it would work the same on Windows, Mac or Unix. It was clear a lot of apps could be done in a browser.

Whether an application ran in the browser or on a remote server is not the point. The rise of an open way to distribute content meant the Win32 API was going to be much less valuable, and MS would lose the control. From the beginning the browser had the potential to become a platform-independent way of delivering program content to an end user, and everyone knew it.

</comment></comment></comment></comment><comment><USER11> The canvas is not stretched to the entire width of the container in FF 3.6.13/Mac. Try setting the dimensions of the canvas dom object to the dimensions of it's container.

</comment><comment><USER12> Now that the MacPaint src is out, I would like to see a web version of that. Sure, they're functionally pretty similar, but I have more nostalgia for MacPaint.

</comment><comment><USER13> I was hoping it would work on iPad.

</comment><comment><USER14> Why is it anti-aliased?

Also, what license is the code?

<comment><USER2> The code is public domain (but also kinda sucks – I wrote it). [http://canvaspaint.org/blog/2008/02/code-released-into- publi...](http://canvaspaint.org/blog/2008/02/code-released-into-public- domain/)</comment></comment>


Ask HN: Alexa left me a creepy message for somebody else. Anybody else had this? - <AUTHOR> Hi HN!
So, I've just had the fright of my life when I tried to pick up some messages left on my Amazon Echo.  There were indeed messages, couple of delivery notifications and a gem saying:
"Hello, I can see you.  Are you okay?"
Except the person sending the message is completely unknown to me and to add to the whole Black Mirror caste my afternoon is apparently taking, the voice speaking those words were that of a young girl.
I have a recording on my iPhone but for obvious reasons I am reluctant to post it on the Internet, but I was wondering if this is widespread or just me?
Thanks.
(I hope my heart rate returns to normal soon) <comment><USER2> Since you are here you are aware that it is broadcasting back to mothership to an application that, like all other applications, contains bug. Bug that send audio from strangers to you. The same bugs that probably send some of your audio to other strangers. If even there are no bugs and nothing is being sent to any strangers by mistake, it is at the end of the day you that has decided, by own free will, to place an internet connected audio recording device in you're room. And now you are shocked that it is sending audio to strangers. A device where it is no secret that audio is being listen to by the manufacturer. If you have any issues with that you audio is being send to others (strangers or employees of amazon, Google, others) you should throw you device into the trash where thar spy device belong

</comment><comment><USER3> Now look I know you are asking this because you frightened and want to feel that what happened to you is normal. But there are two possible cases : Either someone called you and left a message as a bad prank or the software malfunctioned and sent a random message belonging to someone else to you.

Which one scares you more?

</comment><comment><USER4> This is just aesthetically creepy. The real creepy thing is that you have a bug in your home that records audio and sends it to Amazon.

<comment><USER5> You do probably have a bug in your pocket that also listens to voice commands.

<comment><USER4> That's true, but sending the voice commands to Google/Apple for processing isn't fundamental to the functioning of the phone. I can and do use a phone without ever using any voice commands, and at least on standard distributions, I've never heard of anyone packet sniffing and finding that voice is recorded and sent out when someone isn't using voice commands. Unlike Alexa, being a bug isn't inherent to a phone's fundamental function.

Certainly phone security is a problem, but let's not pretend it's as fundamental a problem as Alexa's complete lack of even pretense of security.

<comment><USER6> Yes and I'm uncomfortable that the software to do this is even on my device. It's hard to tell if it's 100% disabled and stays that way with updates.

</comment></comment></comment></comment><comment><USER7> Sounds like someone is trying to play a prank on Echo owners. I doubt an actual child is trying to contact you and I'm not sure why Amazon would want to generate such a message to users.

Your device hasn't been paranormally occupied either, it's merely just playing audio that someone felt like sending to you (and possibly others).

</comment><comment><USER8> A bug/prank/mistake as stated above. It would have been a lot creepier if limited to the first sentence only.

</comment><comment><USER9> Data pagan, cyber vegan.

</comment><comment><USER10> Sounds like a prank. Do you know the range of the Bluetooth on Alexa? Does your living situation allow for that range to be accessible from those outside your house?</comment>


Brython, Python in the browser - <AUTHOR> http://brython.info/index_en.html <comment><USER2> It actually translates Python into Javascript! I'm thoroughly impressed.

Another approach that may work in Chrome is to use Chrome Native Client to embed a 'proper' Python runtime.

I've often lamented that we have Javascript and not Python :( [http://williamedwardscoder.tumblr.com/post/20771096806/why-d...](http://williamedwardscoder.tumblr.com/post/20771096806/why- didnt-we-use-python-in-the-browser)

<comment><USER3> _Completely_ agree that Python ought to be the default browser scripting language. Far, far better than JS. I've always been excited about the prospect of NaCl because it may be able to help us make that a reality in some limited contexts.

<comment><USER4> Python noob here, I am very interested in what you think makes Python a better browser scripting language than JS (which I use a lot on client and server side and like very much).

<comment><USER2> It is surely subjective. Not the person you reply to but I'll chip in anyway.

I write lots of Javascript; mostly 'raw' Javascript in the webGL space. Here's just of the top of my head what's wrong with Javascript:

* looping over elements has too much boilerplate

* the mindfulnesss of 'this' is distracting

* the duality of dictionaries and lists and how that's an easy lie to fall for is fustrating

* that there are multiple frameworks trying to use $

On the other hand, their anonymous functions are very nice. And, I rather like prototypes vs classes. A bit. Sometimes

With Python, I _like_ significant whitespace (so sue me) and especially the syntax for collections and packing/unpacking them.

I've blogged along these lines a lot in the past e.g. [http://williamedwardscoder.tumblr.com/post/18319031919/progr...](http://williamedwardscoder.tumblr.com/post/18319031919/programming- language-readability)

<comment><USER5> With that particular list of features and complaints, you may want to take a quick look at CoffeeScript. It addresses everything on the list except for the "multiple frameworks trying to use $" bit.

<comment><USER6> I think the $ point is a bit soft anyway. With jQuery, it's easy enough to just use non-conflict mode.

<comment><USER7> It's not often you want to use two libraries that both use $ anyway (e.g. you'd use jQuery OR prototype, Zepto OR MooTools - not usually both).

<comment><USER2> Funnily enough, it was trying to use a box2d port that used prototype in an app that already used jquery that raised my hackles most recently...

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> This was posted a couple of months ago - discussion here: <http://news.ycombinator.com/item?id=4923530>

</comment><comment><USER9> I am impressed but I'm also wondering why people try to avoid learning new stuff -- to potential downvoters, no rant intended. I am just surprised how many people try to circumvent JS: Rubyists with Coffee, Closurists with ClosureScript, etc. instead of just using JS directly. I don't believe the main motivation is JS' potential inferiority and that you could employ much better design pattern with languages compiling to JS. Neither, JS' syntax is bad or ugly. I assume that's it's the fear of learning something new, to be again a beginner. JS has its quirks but in general it's a very modern and beautiful language and offering more innovation than traditional scripting languages. And V8 is so blazingly fast that I sometimes think this feels more like C compiled code which would be just another reason rather to switch to JS in the backend.

<comment><USER10> I can't speak to ClojureScript, but in my experience, CoffeeScript is primarily used by people who _already_ know JavaScript. You can't use CoffeeScript effectively without understanding JavaScript. Most of us who use CoffeeScript instead of JavaScript appreciate CoffeeScript's syntactic shortcuts, which for us makes it quicker to write and improvise with new ideas, as well as its enforced whitespace, which makes it easier to write maintainable code.

Otherwise, as someone whose first and second strongest languages are Python and Javascript, I agree with you. JavaScript is a beautiful language that accommodates a variety of programming styles. As you mention, JavaScript is also much more performant than Python, which makes me questions whether Python would ever be a viable replacement for JavaScript in the browser. Add to that JavaScript's excellent webworker API compared to Python's choices for parallel programming.

Now, Lua, on the other hand, would be an excellent browser language (specifically the LuaJit implementation). Lua is close enough to JavaScript that folks could easily pick it up, and its blazing fast. But it will never happen.

Besides, there are so many great JS libraries now that in most cases, I wouldn't want to switch to Lua in the browser and face re-inventing the wheel (same reason why I generally use Python instead of Lua elsewhere). But its fun to think about.

<comment><USER9> > makes it quicker to write and improvise with new ideas,

I've never thought about that but could make sense.

> as well as its enforced whitespace, which makes it easier to write > maintainable code.

This is something I've never understood and where I tend to disagree. When starting with "whitespace" languages like Coffee, Ruby or Python people initially are please with clean and tidy looking code but in the long run this code is not maintainable since all the white space makes the code looking not distinctively enough. In contrast, bracket based languages like C or JS give much better orientation. I can quickly see where code blocks start or I can immediately recognise functions etc.

> Lua, on the other hand, would be an excellent browser language

Totally agree

<comment><USER11> Ruby is not a significant indentation language. do not comprehend how Indentation is not visually distinctive.

<comment><USER9> I didn't mean the indentation, I meant leaving away brackets.

</comment></comment></comment></comment></comment><comment><USER12> This was posted previously at <https://news.ycombinator.com/item?id=4923530>, along with some fairly extensive discussion and criticism.

The basic gist of the criticism seems to be the code is basically just directly translating a Python token list ( _not_ an AST) into Javascript, and as such is reasonably fragile and horrible code (the main translator function: [https://code.google.com/p/brython/source/browse/trunk/py2js....](https://code.google.com/p/brython/source/browse/trunk/py2js.js#52) ).

</comment><comment><USER13> This isn't a particularly good implementation, though. Looking through the code, it's not something I'd be comfortable using.

Skulpt is much better, and about as incomplete.

</comment><comment> jarek-foksa I don't like the fact that underscore and camelCase notations must be mixed, e.g. in the clock demo:

        def set_clock():
          ctx.beginPath()
          ctx.fillStyle = "#FFF"
          ctx.arc(width/2,height/2,ray*0.89,0,2*math.pi)
          ctx.fill()
          show_hours()

This is not the case with some other languages that compile to JavaScript, e.g. LiveScript allows dash-case almost everywhere.

<comment><USER14> They don't; it's purely a matter of convention that Python style guides prefer under_scored over camelCased. But you are entirely free to implement all of your python functions and variables and whatnot in camelCase, and in fact, many libraries do.

<comment><USER14> You could probably even try to write a decorator that converted under_scores function names to camelCase for a nice little introduction into various parts of some of the more internal pieces of python.

<comment><USER15> uhmm, AFAIK pep8 suggest UpperCamelCase for classes, under_score for packages, methods and functions[0]

btw: it's not a decorator :) but a camelCase->under_score renamer it's pretty easy to write

        import re

        def unCamel(obj, *maybe_camels):
            if not maybe_camels:
                maybe_camels = filter(lambda n: not n.startswith('_'), dir(obj))

            for maybe_camel in maybe_camels:
                underscore = re.sub(r'([^A-Z])([A-Z])([^A-Z])',
                    lambda m: '%c_%c%c' % (m.group(1), m.group(2).lower(), m.group(3)),
                    maybe_camel)
                if underscore != maybe_camel:
                    setattr(obj, underscore, getattr(obj, maybe_camel))

        if __name__ == '__main__':
            class CamelCase(object):
                def multiWordMethod(self):
                    print('called multiWordMethod')

            def multiWordFunction():
                print('called multiWordFunction')

            unCamel(CamelCase)    # magic
            import sys
            unCamel(sys.modules[__name__], 'multiWordFunction')    # magic

            CamelCase().multi_word_method()
            multi_word_function()

[0] <http://www.python.org/dev/peps/pep-0008/>

</comment></comment></comment></comment><comment><USER16> How is the performance impacted?

I could see myself using this for a SaaS app I am developing right now; would be useful to run the same language on the client as on the backend. But it needs to performant in this case.

</comment><comment><USER17> How do these things happen? One moment, I know nothing about a lightweight Python interpreter in JS (a thing I would have heard about, even if it were in its infancy), and I see a full-blown interpretation the next.

I'm amazed at how this has slipped past me so far. Does anyone know the specifics on how it works (performance, does it implement the complete language, etc)?

</comment><comment><USER18> Wonderful. Now give it a name that doesn't sound like "Bro-Python" and I'm sold.

</comment><comment><USER19> Is this just a translator Python->Javascript (which I would expect would have many holes in it) or is it being run by a true Python engine?

And if it's run by a true Python engine, does the user have to have Python installed do run it? (Hard for me to tell since all my machines ATM have Python installed).

<comment><USER20> It's a translator and I agree it would probably have many holes in it. Also can you imagine importing libraries?

</comment></comment><comment><USER21> Compared to the original JS demo (linked on page), the version transpiled from python looks really choppy.

</comment><comment><USER22> Looking for something like this since a long time now. Essentially, you have made a Google Web Toolkit (GWT) for Python. Good work, I hope it matures to a level and is widely adopted. Best luck!

<comment><USER23> GWT was actually ported to python a while back. The project lives on at pyjs.org

</comment></comment><comment><USER24> Brilliant. Now let it run natively in the browser rather than compiling to JS and you made the world a better place!

</comment><comment><USER25> He should call it pQuery!

<comment><USER26> Already taken! - <http://www.pquery.org/>

Also see: <http://ajaxian.com/archives/pquery-php-and-jquery> | <https://metacpan.org/release/pQuery>

<comment><USER15> and pyQuery too - <http://pypi.python.org/pypi/pyquery> (btw it's a really good way to handle xml)

</comment></comment></comment><comment><USER27> I think I prefer the Google/Dart approach -- that is, a language designed for the web browser and that has a native engine for the browser (although only currently included in chrome).

</comment><comment><USER28> Please upvote it you need Brython for Ruby!

<comment><USER29> <http://qiezi.me/projects/mruby-web-irb/mruby.html>

</comment></comment><comment><USER30> I find it a bit the overkill. If you'd like to implement Python in the browser, at least make sure to write a good implementation. An implementation written in JavaScript, is not a good implementation.

<comment><USER31> > An implementation written in JavaScript, is not a good implementation.

Do you have some evidence for this, or are you just judging it by the fact it is written in JavaScript? I can imagine source-to-source translation between Python to JS that would provide an excellent implementation of Python.</comment></comment>


Ask HN: What functionalities have you built using AWS Lambda (or) Serverless? - <AUTHOR> <comment><USER2> I wanted to display a Twitter feed on my static site without using the hard to style and tracking script riddled default Twitter timeline widget but Twitter only allows getting a JSON feed of that data with OAuth so I made a Lambda function which runs once every half hour and caches the Twitter timeline on S3 which I can then use a simple AJAX request to retrieve. The code is here: [https://github.com/eberkund/tweet-reader- lambda](https://github.com/eberkund/tweet-reader-lambda)</comment>


Covid-19 Cases Are Rising, So Why Are Deaths Flatlining? - <AUTHOR> https://www.theatlantic.com/ideas/archive/2020/07/why-covid-death-rate-down/613945/ <comment><USER2> First of all, deaths are on the rise[1]. That said, if the populations for new cases stays about where it is now, the relative rate for new cases vs deaths will likely still be lower than we saw in the "first wave". This is because the population of individuals getting covid now is skewed toward young people. Think of it as a large group of individual that have a low risk of death engaging in behavior that has a high risk of getting them infected.

[1]:[https://www.worldometers.info/coronavirus/country/us/](https://www.worldometers.info/coronavirus/country/us/)

</comment><comment><USER3> "The trillion dollar question. Why are COVID cases increasing while deaths are decreasing? The answer is simple. It's called Simpson's paradox and it's the result of incorrectly pooling data and arriving at a false conclusion. A thread:"

[https://twitter.com/mbeckett/status/1278750652160634880](https://twitter.com/mbeckett/status/1278750652160634880)

<comment><AUTHOR> Right, while not explicitly discussed in terms of Simpson's paradox, part of the article does discuss things by breaking down the numbers between AZ/FL/TX (current US hotspots) and the rest of the US.

Also, unless you are @mbeckett on Twitter, I'd recommend changing your comment to be a quote as you've repeated their content verbatim.

<comment><USER3> Thanks for pointing that out.</comment></comment></comment>


Show HN: What is it like to make breathtaking web pages from a mobile device? - <AUTHOR> https://ench.app <comment><AUTHOR> Hi, we're a newborn team making a mobile editor that allows everyone to create beautiful web pages without any design, code, or marketing experience, in just a few minutes.

We want to bring these three points to the development of mobile web pages:

1\. Convenience 2\. Simplicity 3\. Speed

If you don't have a business page or a landing page for your startup yet, our tool can be useful for you.

Here are some simple templates as an example:

[https://ench.app/piedpiper](https://ench.app/piedpiper), [https://ench.app/Place](https://ench.app/Place), [https://ench.app/Company](https://ench.app/Company), [https://ench.app/Hiring](https://ench.app/Hiring)

if you have any ideas or comments please tell us. We're very excited about your feedback.

Thanks!</comment>


Writing a Microservice in Rust - <AUTHOR> http://www.goldsborough.me/rust/web/tutorial/2018/01/20/17-01-11-writing_a_microservice_in_rust/ <comment><AUTHOR> the repo supporting this example: [https://github.com/goldsborough/microservice- rs.git](https://github.com/goldsborough/microservice-rs.git)

<comment><USER2> If the article is meant to walk someone through creating their own microservice, it begins to miss crucial code snippets in the `Accepting POST Requests` section. It doesn't point out that one should go back to the Cargo.toml file and add the `url` and `serde_json` crates (and possibly `serde` and `serde_derive`). Also, it's missing these crates in the point regarding updating the `use` statements. However, if the article is not meant to walk the reader through creating their own, but just to follow along from your git repository, then think about updating the article to have the repo url listed at the beginning. Good article, otherwise.

<comment><AUTHOR> it's not my article..</comment></comment></comment>


Exercising for Healthier Eyes - <AUTHOR> http://well.blogs.nytimes.com/2014/03/26/exercising-for-eye-health/ <comment><USER3> Let this be a tale of warning.

In February of 2011 I was a 28 year old, healthy (perfect vision, etc) software developer working for a small software company. I was working on some cool stuff, was getting the extra responsibilities I wanted and putting in at least 10 hour days every day. I was learning, and hacking and building at an awesome pace.

Until, like a switch, my eyes dried up and I could barely keep them open. Literally in the span of an hour or so I was happily hacking away to driving myself home opening one eye at a time. Since then it's been more of the same. Avoiding bad lighting, no more TV, limited computer use.

I've seen 3 Opthamologists, some name brand ones, some research clinics. They all tell me I have Blepharitis, which I disagree with (which I know sounds crazy). I wake up with tired, dry eyes and it's a battle all day long. I've tried lots of things, low light, low contrast, fish oil pills, antibiotics, anti-inflammatories, cold compresses, hot compresses, drops of all kinds, special computer glasses, restasis, books, meditation, etc.

To be honest, it's been hell. I worry about my future career and it's negatively affected relationships. It's gotten somewhat better, but it is still a constant discomfort. I just try to keep my eyes relaxed, eye drops nearby, and massage them frequently.

So, give your eyes a break once in a while and be more mindful of them. I bet if I listened to my body at the time it would have told me my eyes were strained and I should give it a break.

If anyone else suffers similarly, please reach out would really appreciate chatting with people in similar situations.

<comment><USER4> I can understand your frustration with doctors.

Around 15 years ago I had redness and pain in my eye. It got bad enough, that although after-hours, I went to a Cigna Urgent Care center. I was examined by a non-specialist who didn't know what the problem was, but guessed it was probably a bacterial infection. So he sent me home with antibiotics, and told me to come back in "about a week" if things did not clear up. Well, a week later it was only worse, so he told me I needed to see a specialist "immediately".

I was in terrible pain. Redness, photosensitivity, etc. I get an appointment with a real opthamologist, and he said I have a viral infection in the cornea, and its serious. I had already permanently lost vision (from 20/20 to 20/50). Antivirals + steroids cleared it up, but it created a dynamic that is difficult to manage to this day.

Now with corneal ulcers, the surface of the cornea is uneven. This prevents the tear film from distributing evenly.

With poor tear film (tear break up time, TBUT) the eye becomes inflamed.

With inflammation, comes neo-vascularization, nerve destruction, and more epithelial defects. All these conspire against proper tearing, and the cycle repeats.

So - its very important to get whatever dynamic you have under control. 'Dry eyes' is actually pretty serious, but most opthamologists agree we don't have good weapons for it.

Some people have dry eyes, even though they produce too many tears. Its because their tears are defective. Like some people having high HDL, but their HDL is defective.

Almost all the OTC stuff is crap. All I can do is recommend

1) Find the best specialist in your area, and see them. I saw a cornea specialist at the Mayo Clinic for a while; they were "OK". But I was surprised they had an even more famous individual there - and she never once said "hmm, what we've been trying for the last 2 years hasn't been working, lets see what my (famous) colleague X thinks". So you have to manage your doctors with great attention. Also, my suspicion - is that cornea MDs like to operate (in my case - cornea replacement), not treat. Operating is probably more profitable.

2) For dry-eyes, you should consider a few things. I use Systane _Gel_ Drops going to sleep. Friction between cornea and eye lids is a problem. The various PM oil formulations are too goopy; but this is the thickest liquid that seems to protect me through the night. I don't wake up with red eyes.

3) For the office, consider moisture being wicked away from your cornea by ventilation. I wear a hat and glasses. Try things that make a full seal, like something Ridick would wear, or a motorcycler. Try Wiley-X Climate control stuff. Since the seal needs to be perfect, try them on first.

4) I love my Oakley M-Frame Heater lenses. Huge, wrap around the face. I wear clear even at night if I'm not wearing goggles to protect that micro-climate around the eyes.

5) You can try the 'dry eye forums' at [http://www.dryeyezone.com/talk/](http://www.dryeyezone.com/talk/) .. YMMV.

I hope things get better.

<comment><USER5> Just to drive this one point home (IANAD, but personal experience): the cornea of the eye is simultaneously very susceptible to infections and more or less immunosuppressed by design to maintain clear vision (see [1]). Infections can spread extremely fast and will (even if promptly treated) leave behind permanent damage such as photosensitivity (best case really). Ideally you would have daily checkups to see if the antibiotic is actually effective.

If you use contacts, make sure to be extremely diligent in cleaning them.

1: [http://en.wikipedia.org/wiki/Ocular_immune_system](http://en.wikipedia.org/wiki/Ocular_immune_system)

</comment></comment></comment><comment><USER6> I'm genuinely interested in what steps do other people on HN who spend their work day on a computer take to "protect" their vision ?

I took on the habit of looking a distant wall every half hour or so for a couple minute or go drink a coffee, but while it helps with the "always looking close" vision I still have a very tired feel in my eyes at the end of a long day.

I do have good vision and have it checked every year, but I worry I'm doing some long term damage anyway, and the white of my eyes does look more bloodshot than they do in average people my ages (and gets a lot worse after big long hours release/bugfix days).

Do you guys have any tips to help the eyes rest ?

<comment><USER7> I feel that modern LCD monitors are too bright. Typically I have mine set at 50% brightness. Adjusting environmental/ambient light is important too if you can. I try to adjust my desk/chair orientation that overhead lights are behind my head instead of in front of me (no line-of-sight light sources other than my monitors). I also use f.Lux ([http://justgetflux.com/](http://justgetflux.com/)).

I'm not sure what combination of this list of things does the most good, but I rarely get eyestrain and I look at screens for 12+ hours per day.

Not sure if this matters, but I had LASIK surgery 7 years ago and ever since my eyes have been pretty sensitive to light (night vision FTW), so this is something I've been working on for a while now.

Edit: I am 40 years old, and have been looking at screens for long hours at least 10-15 years now.

<comment><USER8> Indeed. But I'd describe it as modern LCDs have a default brightness that it likely too bright for most uses.

Manufacturers likely set this so that the colours 'pop' when being demoed (the same reason they sell/create/display glossy monitors, because they demo well).

Taking the brightness down almost never impacts usability, but I've found can significantly affect eye strain (that 'OMG, my eyeballs are hurting' feeling).

<comment><USER9> I totally agree with this. I usually turn my monitor brightness down to the lowest setting (my work monitor has been set this way for years). I've done the A/B testing on myself and find that I will develop something like a mild headache (probably eye strain) after a day of working at the default brightness. On my old LCD monitor the brightness would reset if power got disconnected so I did the experiment several times accidentally. My current monitor (Dell U3014) remembers the setting across power resets. I have my brightness control set to zero. It looks dim at first but after a few minutes it looks completely normal and you forget about it.

</comment></comment></comment></comment><comment><USER10> Glad I'm not a mouse: "After two weeks, half of the mice in each group were exposed to a searingly bright light for four hours. The other animals stayed in dimly lit cages. This light exposure is a widely used and accepted means of inducing retinal degeneration in animals."

This sounds like torture to me. I love you scientific method, but sometimes you bum me out.

<comment><USER11> The real kicker to this is:

"But obviously, mice are not people, so whether exercise can prevent or ameliorate macular degeneration in human eyes is "impossible to know, based on the data we have now,""

I have a fairly complex view of animal testing where I think it may be justified in some situations, but this type of testing in situations where you self-admit you didn't learn anything knowingly human-applicable when you could have done a more long term study just observing the eye health of multiple sets of older humans (one set which lives an active lifestyle and one which does not) is pretty fucked up.

<comment><USER12> Animal testing is horrible. There are some cases where it may be necessary, but this is just excessive. There was one guy who exploded hundreds of dogs in a vacuum, basically just to see what would happen. And I bet there are probably worse things being done even today.

</comment></comment></comment><comment><USER13> Most important part: "But obviously, mice are not people, so whether exercise can prevent or ameliorate macular degeneration in human eyes is "impossible to know, based on the data we have now," said Machelle Pardue, a research career scientist at the Atlanta Veterans Administration Medical Center, who is the senior author of the study. She and her colleagues are trying to find ways to determine the impact of exercise on human eyes. But such experiments will take years to return results."

</comment><comment><USER14> _" These growth factors, especially one called brain-derived neurotrophic factor, or B.D.N.F., are known to contribute to the health and well-being of neurons and consequently, it is thought, to improvements in brain health and cognition after regular exercise."_

That's interesting, and it sounds great, but like nearly any study of the brain there is conflicting information from other studies:

 _" Brain-derived neurotrophic factor (BDNF) overexpression in the forebrain results in learning and memory impairments." [http://www.ncbi.nlm.nih.gov/pubmed/19095063*](http://www.ncbi.nlm.nih.gov/pubmed/19095063*)

<comment><USER15> Where's the conflict? Plenty of chemicals/hormones/etc. in the body follow the pattern of:

too little = bad enough = good too much = bad

A study showing the chronic, high levels of something are bad doesn't generalize to mean that increasing levels is always (or even usually) a bad thing.

</comment></comment><comment><USER16> I spend 10-16 hours in front a monitor too (work + come back home, watch movies etc.). After getting flux[0], I immediately noticed a marked difference in how much lesser my eyes were tired by the end of the day.

It takes a day or two to get used to the yellow tint that flux adds, but it makes the screen so much easier to look at. After using flux for a while, you'll be surprised how much a monitor not running flux hurts your eyes - <USER2> just feels jarringly bright.

[0] [http://justgetflux.com/](http://justgetflux.com/)

</comment><comment><USER17> Some good comments here that I feel like implementing

@ColonelPanic001 : dark cube, overhead lights off, monitor at minimum brightness

@jisaacstone : large monitor, big font, keep it far away. Relax instead of leaning in toward the screen. I am often mentally tired at the end of day but no eye strain.

@a8da6b0c91d : get sunlight

@xbonez : try [http://justgetflux.com/](http://justgetflux.com/)

@djb_hackernews : Personal experience on why taking timely care is important

</comment><comment><USER18> Need a beverage that deceives the mind into thinking the body has just finished exercising to release "growth factors" such as "B.D.N.F". This way, we can stay at home and keep on reading hacker news, as apose to, you know... exercising.

</comment><comment><USER19> This sounds crazy, But i started doing a chinese yoga called 'Qi Gong' and my eye sight has improved from -1.75, -1.50, to -0.5ish, -0.5ish

exercise works! especially martial art based ones

<comment><USER20> It worked for you, but at this time there's nothing saying it will work for everybody.

<comment><USER21> Nothing works for everybody.

</comment></comment></comment><comment><USER22> Interesting. They need subscription to read this article, but not if you are using Safari browser.

<comment><USER23> It might just be cookies or some kind of tracking. I got the login requirement in chrome (my default browser) but don't see it in IE (which I rarely use)

<comment><USER24> Seems to be cookies, private browsing mode works to get around them too.

</comment></comment></comment><comment><USER25> Requires registration to read the article. No thanks.

<comment> k-mcgrady Worked for me. I think they have a weekly limit you can read for free. Try incognito/private browsing mode.

</comment></comment><comment><USER26> Yup, exercise your eye muscle does wonders.</comment>


AT&T's Rube Golbergian Web Form - <AUTHOR> http://blog.joellehman.com/index.php/2011/06/youre-doing-it-wrong-att/ <comment><USER2> I work for AT&T. I have an obligation to inform you that what I say doesn't represent their official blahblah whatever. You should know this isn't an on- message marketing communique.

AT&T, the company that created Unix and C, could be said to no longer exist, or more correctly could be said to be a different company than the one now called by that name.

A little (abridged, simplified) history: AT&T, you may remember, sold its cell business to Cingular long ago. Bell Labs went to Lucent before that. Eventually, it even sold its residential phone business off. They backed out of a lot of markets and dropped the best R&D lab they could have had.

What is called AT&T now is actually SBC, a Baby Bell with a penchant for out- sourcing. SBC bought Cingular, AT&T, Pacific Bell, lots of other companies. Their AT&T purchase was motivated in part by the name: everyione has heard of AT&T.

SBC brought with them metric tons of bureaucracy, all running in IE. Disgusting. It's not just the external web interfaces. We have to deal with this BS internally, too. 1990s web interfaces that only work in IE (sometimes requiring 7, sometimes requiring 6) for every interaction with corporate. Taxes, mandatory training, time reporting, everything.

We have to grab a spare Windows machine or run a VM with XP in it. Most of the tech side of company knows and hates the whole thing. The impenatrable bureaucracy makes it impossible to find out who to complain to. There is no escape. The article is dead-on about what's wrong, and I know first-hand, because we have to eat that dog food weekly.

That said, it's a very cool place to work overall. For us, the consultant- generated tech is a dent in the Porsche. But for a customer trying to give you money? Even my mom doesn't use IE and she wouldn't understand the problem with ActiveX controls.

<comment><USER3> Some history from Colbert: <http://www.youtube.com/watch?v=rsCp-1hgfxI>

</comment></comment><comment><USER4> Over the last 7 years I've set up more than half a dozen DSL/cable/FIOS modems and routers (I've moved a lot). I've always used Linux or OS X (which was as problematic as Linux in 2004).

FWIW, every company I've worked with (AT&T, Comcast, Verizon, others) has a method of activating everything that does not require installing any software. If you have a technician on site installing something they can do it for you; if not you may have to call them to do it.

In my latest round with Verizon FIOS (4 months ago), the technician let me know that they have the option "in case you just moved in and your computer is packed away." Use that as an excuse, or say you haven't purchased your computer yet but your family is over visiting and need to use the WiFi.

<comment><USER5> I've activated without installing anything with every broadband provider I have had as well and most of the time it is quite easy.

Cable seems to be activated just by using their modem the last few times and qwest dsl can be activated by a simple login on a browser and waiting for them to verify.

</comment></comment><comment><USER6> Wow, that is truly horrible.

Although, think of it like this: AT&T is doing what every web developer in the world wishes they were able/allowed to do. It's getting people off IE6.

Granted, the process should be "If IE, then update, else, just show form"

</comment><comment><USER7> > _"In short: a simple web-form system shouldn't end up installing Internet > Explorer 8 for you. I think it's interesting particularly because no lean > startup would ever ever do this in a million years, yet we aren't > particularly surprised when a big company is flushing dollars down the > toilet in this way."_

I would hardly be surprised if doing it this way saves ATT millions of dollars. The default browser for Windows XP is IE6 and a large percentage of new ATT internet customers are highly likely to use whatever browser is on their system, and even a small fraction of ATT's customers is millions of people.

Also keep in mind that this default behavior was almost certainly implemented several years ago when the use of IE6 was even greater than it is today in order to avoid lengthy technical support phone conversations with people like your grandparents when they purchased their first computer.

I'll add that it costs ATT very little to only directly support IE - sure a few calls from Firefox users escalate but that is probably offset by the fact that as a market segment those users are more likely to be technically savvy.

ATT knows its market segment in a way that most startups would do well to emulate - and recognizing how their setup procedure goes to their bottom line is a valuable lesson about focusing on MVP rather than perfect code.

<comment><USER8> Well, and how these reasoning justifies the need of ActiveX (the solely reason of IE8 installation) in order to fill in a web form?

<comment><USER7> I suspect that ActiveX enabled browsers allows them to further reduce support costs, e.g. installing a 32 bit version of IE8 allows the Flash driver to be installed thereby reducing calls from grandpa whose new system came with a 64 bit version of Windows 7 and therefor uses the x64 version of IE by default - not to mention that ActiveX also allows ATT to install more powerful software on the customers browser for support and tracking purposes.

<comment><USER9> 64-bit Windows actually uses the 32-bit IE by default. You have to use a special Internet Explorer (64-bit) shortcut to run the 64-bit version. I don't think that's an issue.

</comment></comment></comment></comment><comment><USER10> _Now: Would DropBox do something this silly?_

Yeah. DropBox installs Growl without the user's permission. <http://growl.info/thirdpartyinstallations.php>

<comment> rm-rf And just for kicks, they accidentally open up your files to anyone who knows your e-mail address.

</comment></comment><comment><USER11> Rule #1 when calling AT&T DSL support: Always, ALWAYS say you're running Windows with IE. Lie. Fake it. Whatever.

If you say anything else you'll derail your support. Your goal is to get through the level 1 did-you-plug-everything-in-lets-restart-your-machine gauntlet.

That, or go to the forums at dslreports.com and hope you can contact a sympathetic AT&T engineer.

<comment><USER12> This seems to be a good rule for calling any cable/phone ISP.

The last time I mentioned using a Mac the support person ignored that I had already tried pinging certain gateways to check connectivity, and proceeded to condescendingly walk me through going to Applications->Utilities->Network Utility so that I could run ping from a tab there.

Of course I quit after 15 min of this, tried to access again in a couple hours, and it was just a network failure in my area, anyway. Geez.

<comment><USER11> I'll add Rule 1A: _Never talk net-speak with tier-1 support_.

"I've run some traceroutes and packets are getting lost at your router in Elmhurst. When I do get through, ping times are over 700 millseconds"

"Okay, sir, what I'm going to need you do to is close your browser and restart it"

<comment><USER13> _I'll add Rule 1A: Never talk net-speak with tier-1 support._

If only "shibboleet" worked in real life...

</comment></comment></comment></comment><comment><USER14> How many people give up before reaching the form, and end up calling someone at AT&T for help? The costs must be enourmous.

<comment><USER7> ATT has a pretty good infrastructure for handling phone calls from customers - being that they are a phone company with more than 120 years of experience in doing so (founded 1885).

So it is probably not as expensive as one might think at first blush.

<comment><USER15> From my experience with their phone support I'll agree that it probably isn't expensive, but only because it seems to be chronically understaffed. Multi hour wait times appear to be the norm when dealing with AT&T.

</comment></comment></comment><comment><USER16> So, you must have had IE6 or IE7? As much as I hate being forced to run any particular browser, one less machines running these old browsers is a good thing.

<comment><USER17> Typically, "upgrade your browser" techniques are welcomed in HN. Google drops support for IE6, then IE7 - smiles all around. Apps block off IE6 - "good for them".

AT&T does something similar and it's met with frustration?

Requiring IE* should be frowned upon. But anything that says "upgrade from IE6", in end-user land, is probably a good thing.

<comment><AUTHOR> My frustration was because IE*, and thus some form of Windows was required. I use modern browsers, just never IE, and windows only when I must.

So I agree with your point about upgrading being a good thing, but the underlying absurdity is that something inherently platform independent (a webform) was perverted into something entirely specific to not only a particular OS, but a particular browser.

My ire with IE being updated was that I was never going to use IE ever again (by choice), whether it was 6 or 8; and so whether it was upgraded or not would not affect my browsing experience on sites other than this particular instance. So for me, it was just one additional hoop that I had to grudgingly jump through.

</comment></comment></comment><comment><USER18> I just signed up for AT&T and their whole signup process is incredibly broken. Their customer section is divided into three sections: Wireless; Internet and Phone; and U-verse. Each has it's own login system. One use sequential IDs for logins, one usernames and the other email addresses.

I spent ages fighting the login and ID recovery system before I found out my DSL connection came under "U-verse" and not "Internet". Their login page even has a helpful picture of a TV to illustrate the U-verse link: <http://www.att.com/accounts/?source=IC4425j4900s2000>

I still have no idea what "U-verse" is and what differentiates it. I just assume that some crappy marketing manager thought the name was cute.

<comment><USER19> Four sections. The iPad plan has its own login hidden off to the side.

</comment></comment><comment><USER20> Why is the form asking for gender as a required field?

<comment><USER21> It's probably just a language thing, so the forms can say "him" or "her"?

Edit: or in support calls, they sometimes accidentally say "sir" to a woman etc., this might help with that.

<comment><USER22> Or they are selling this info to a third party... I've heard of a story of a guy that used his British girlfriend's identity to sign up to one of your American internet (or cable) providers and than got a lot of spam for her, even though that's the only place he used her name.

(Yes, I know this sounds like an urban myth, but I can dig up where I heard it straight from the guy, he has a podcast).

</comment></comment></comment><comment><USER23> Of course, a lot of this is plain incompetence, but there is a security motive explaining why enterprises only support specific browser versions, even if it's an irrational one. Enterprises fear people will blame them even when the browser is at fault. Celebrity's AT&T account gets hacked? "ZOMG AT&T doesn't care about its users' data."

It's not entirely crazy either, when you consider how mainstream media and consumers perceive security incidents. The problem, though, is when enterprises tend to be overly conservative, not acknowledging "reasonable risk". And being out of touch with browser trends, ie assuming that only a particular version of IE is safe. (In this case, IE is probably required because the developers didn't know any better, but in other cases, an out-of- date understanding of browsers is the rationale for supporting only IE.)

</comment><comment><USER24> There is (or was) a similar system profiler program that installs itself from Windstream's DSL service, and will not allow itself to be removed from a PC by any means I am aware of. Totally unacceptable on my machines that I purposefully kept perfectly clean!

<comment><USER25> It's not what you see, it's what you don't see.

Comcast installation was/is similar -- done in my case during the course of the Comcast technician's visit. I got rid of their crap when I reimaged the machine. Didn't affect service in any perceptible manner. (It did get rid of their branding from the IE window title, though -- another useless annoyance.)

If I have to go through similar, again, I'm going to do it in a disposable virtual machine image (reverting back to the last snapshot).

<comment><USER26> <http://support.microsoft.com/kb/176497>

You can change the 'Microsoft Internet Explorer provided by Yoyodyne' string to whatever you want.

<comment><USER25> Yeah, I'm more bothered by the services their default process installs. They can monitor their modem, if they must. They can keep their nose out of my system. Though branding the IE windows title is just downright annoying, particularly for non-technical users. In addition to taking up space and being distracting, every screenshot they make carries it, like it or not.

People are reminded of you every month when they pay their bill, Comcast. Don't push it. /rhetoric

</comment></comment></comment></comment><comment><USER27> Should be 'Goldbergian'. There is a 'd' in there.

</comment><comment><USER28> So what I want to know is whether the ActiveX control is actually doing anything _necessary_ [1] to automate the install process. Is it telnetting to the modem or something like that?

Other commenters mentioned you can call them to activate your account. What info do you have to give them that's not collectible via a web form?

[1] I'm assuming the whole ActiveX thing is to push a download of IE8 because the code whatever tool they used to build the signup form only works in IE8. But it just boggles.

</comment><comment><USER29> The landing page [...] plays some audio instructions [...] There is a five minute pause as AT&T's website "checks my system." [...] my browser is not supported — well, I use chrome on ubuntu [...] Firefox. Wrong. It requires an ActiveX control [...] Windows XP [...] IE [...] ActiveX control. I'm getting frustrated by this point.

Wow, this is one patient guy. I would have gotten frustrated by the second point already and would have thrown something against the wall by then!

</comment><comment><USER30> I noticed a surge in traffic to EndlessForms.com and realized it was coming from this post. Thanks to Joel for mentioning our site[1]! For those of you that don't know what I am talking about, see Joel's comment on the original post where he recommends EndlessForms.com, where you can design objects with evolution and 3D print them. Thanks all for checking it out.

[1] <http://endlessforms.com>

</comment><comment><USER31> I didn't run an ActiveX control. I did it from my Mac. Granted this isn't Chrome on Ubuntu, but I would be very curious to find out what would happen if you have Chrome on Ubuntu report it's user agent as Safari on Mac.

It would be even better if AT&T could somehow be convinced to run the same code that runs in normal browsers anytime the user agent isn't IE. Even better if they could somehow be convinced not to even run ActiveX in IE.

</comment><comment><USER32> Hmmm.. Random un*x variant. Then the backup plan is an OS from 2001. Sounds like the plot from Woody Allen's Sleeper...

</comment><comment><USER33> A faster approach would be to spoof your user agent -- announce yourself as IE 8 on Windows XP.

<comment><USER34> That would work if they hadn't used ActiveX

<comment><USER35> I wonder if the form would have worked anyways. People bring work laptop home that IT might have configured to not use ActiveX

Though you're probably right, probably would have failed.

</comment></comment></comment><comment><USER36> Only where AT&T is involved could we rush to the defense of IE6.

</comment><comment><USER37> Who said dinosaurs are extinct... They are hiding in plain sight...

</comment><comment><USER38> spent two days trying to subscribe using linux after I found out they are the only ones around... I finally found a phone number that has a short wait and somewhat knowledgeable people

1-800-288-2020

</comment><comment><USER39> Cui Bono.

What if Microsoft pays AT&T on the side to force a large number of people to use their platform? Even if most people already do, it instills in people the believe that that Line-ux thing doesn't work with the Internet.</comment>


Fun with Macros: If-Let and When-Let - <AUTHOR> http://stevelosh.com/blog/2018/07/fun-with-macros-if-let/ <comment><USER2> I like the macro transformers in R5RS Scheme. Here's how the multi-binding if- let and when-let look:

      (define-syntax if-let
        (syntax-rules ()
          ((if-let ((var value) ...)
                  consequent ...)
           (let ((var value) ...)
             (if (and var ...)
                 consequent ...)))))

      (define-syntax when-let
        (syntax-rules ()
          ((when-let (binding)
                     body ...)
           (if-let (binding)
                   (begin body ...)))))

<comment><USER3> Arc has corrupted me to barely be able to tolerate all those parens.

      (mac iflet (var condition . body)
        `(let ,var ,condition
          (if ,var ,@body)))

      (mac whenlet (var condition . body)
        `(iflet ,var ,condition (do ,@body)))

<comment><USER4> What kind of project are you working on with Arc? Or are you just having fun for now ;-)

</comment></comment></comment><comment><USER5> What's a example of these macros being used usefully? All I can find are contrived examples.

Why not use `if` and `when` directly? Is creating new names for variables — which is what `if-let` and `when-let` seems to contribute — that common of a pattern?

I must be missing something.

<comment><USER6> They're pure convenience, but they're pretty convenient. It's very common to have patterns like:

      (let ((result (do-some-calculation)))
        (when result
          (operate-on result)))

`when-let' would just skip one "layer" of code, and I believe avoid assigning a local variable if (do-some-calculation) fails. Just a convenience.

(edit: trying to fix formatting)

<comment><USER6> Never mind, it still binds a local variable (at least in elisp, where I just tried it).

<comment><USER7> It has to, otherwise it would have to execute the initform twice.

<comment><USER6> Yeah, that finally clicked afterwards...

</comment></comment></comment></comment></comment><comment><USER8> Maybe I'm missing the point of the exercise, but since the author is already using Alexandria in these examples, and Alexandria _provides when-let and if- let macros as well_ , then... why not just explain - or at least compare with and discuss - the implementation in Alexandria?

Skipping docstrings, those are exactly:

      (defmacro if-let (bindings &body (then-form &optional else-form))
          (let* ((binding-list (if (and (consp bindings) (symbolp (car bindings)))
                                   (list bindings)
                                   bindings))
               (variables (mapcar #'car binding-list)))
          `(let ,binding-list
             (if (and ,@variables)
                 ,then-form
                 ,else-form))))

      (defmacro when-let (bindings &body forms)
        (let* ((binding-list (if (and (consp bindings) (symbolp (car bindings)))
                                 (list bindings)
                                 bindings))
               (variables (mapcar #'car binding-list)))
          `(let ,binding-list
             (when (and ,@variables)
               ,@forms))))

<comment><AUTHOR> Alexandria's versions are basically the same as the "multiple bindings" versions, about halfway through the post[1]. So they are explained/compared/discussed... I just didn't mention that those versions happen to be in Alexandria. I suppose I could add a note, though calling out a particular library for having a less than ideal implementation seems a little rude.

[1]: They do allow a single binding as a special case, true.

<comment><USER8> > _calling out a particular library for having a less than ideal > implementation seems a little rude_

Why? As long as you call it "less than ideal", and not say "it sucks" :). Maybe in the end a patch will find its way upstream; I hear that someone is contributing to this library, sometimes.

</comment></comment></comment><comment><USER9> You could save a little work by noting that _when_ is a special case of _if_ and then writing _when-let_ as a special case of _if-let_. Something like:

      (defmacro when-let (bindings &rest body)
        `(if-let ,bindings
             (progn ,body)))

That's how it's implemented in Emacs at least. Maybe there are some edge cases involving declarations or whatever where this wouldn't work.

<comment><AUTHOR> You'd need to parse out the declarations, yeah. Otherwise they'd get shoved inside the progn which wouldn't work.

<comment><USER10> You could also introduce a "locally" form (for those wondering: [http://www.lispworks.com/documentation/lw61/CLHS/Body/s_loca...](http://www.lispworks.com/documentation/lw61/CLHS/Body/s_locall.htm))

</comment></comment></comment><comment><USER11> Paul Graham called these "anaphoric" macros in On LISP.

<comment><AUTHOR> The "anaphora" in "anaphoric" typically refers to how it binds the variable "it" automatically, without having to specify the variable name. Since if-let and when-let require you to explicitly specify the variable name, I don't think most people would consider them anaphoric macros. [https://en.wikipedia.org/wiki/Anaphoric_macro](https://en.wikipedia.org/wiki/Anaphoric_macro)

If you want actual anaphoric macros in CL, here they are: [https://www.common- lisp.net/project/anaphora/](https://www.common-lisp.net/project/anaphora/)

</comment></comment><comment><USER12> iflet and whenlet are written in C in TXR Lisp.

See the me_iflet_whenlet function in eval.c:

[http://www.kylheku.com/cgit/txr/tree/eval.c#n4125](http://www.kylheku.com/cgit/txr/tree/eval.c#n4125)</comment>