Penti Chorded Keyboard - <AUTHOR> https://software-lab.de/penti.html <comment><USER2> I feel like computers are such an important part of our lives now that it's surprising so many people settle for the entrenched option of 'standard QWERTY computer keyboard'.

I realised a while ago that since I spend so much of my life interacting with a computer, I should really invest significant effort into improving, even marginally, the ergonomics and bandwidth of the IO channel between my brain and the computer I am interacting with. This realisation and the ensuing quest for a better option led me to adopt the Ergodox EZ keyboard. This has been the most significant improvement to my day-to-day interactions with computers since learning Vim. It did take several months to adjust and a significant amount of effort went into designing the optimal layout to suit my needs, but the results have been incredible.

\- I never need to look at the keyboard

\- My WPM rate is sufficient that I can type almost as fast as I can think

\- The palms of my hands never move (zero wrist flexion)

My keyboard layout can be found here [https://github.com/Ganon-M/ergodox-vim- ubuntu](https://github.com/Ganon-M/ergodox-vim-ubuntu)

If any of you out there are heavy Vim users and want to take your ergonomic experience to the next level, I suggest taking a look at the above layout.

<comment><USER3> I use a QWERTY and I can type faster than I can think. I can routinely type at 130 WPM and at bursts up to 140 WPM. But I didn't type this comment that fast, not even close. I think much more slowly than I type. Point being, I can already type far faster than I need to on QWERTY, so why bother switching to something else, where I will almost certainly be slower for a period of months at best?

<comment><USER4> It really depends on what you're using your typing skills for.

If you're trying to record verbatim what someone is saying, you could easily have to type much, much faster than that.

Stenographers are often required to type at least a hundred WPM faster than you type, and some people speak even faster than that. The demands are even higher when more than one person is talking at the same time and you're trying to record them both.

There are some tricks one could use to speed up plain old QWERTY, however. In particular, you could use macros. That's essentially what stenographers use on their special steno keyboards. A single chord will translate in to a full sentence. Likewise, you could trigger a macro on a QWERTY keyboard with a single chord and that can boost your WPM significantly, if you use a lot of them.

<comment><USER5> People do not speak at 230 wpm. Ever. It does not happen.

Edit: I stand by this. Auctioneers do provide a good counter example but much of what they say is just repeated phrases.

<comment><USER6> [https://www.quora.com/Speeches-For-the-average-person- speaki...](https://www.quora.com/Speeches-For-the-average-person-speaking-at- a-normal-pace-what-is-the-typical-number-of-words-they-can-say-in-one-minute)

Average speaker is 150, an auctioneer is 250-400, the fastest person. The fastest talkers male and female can recite over 500,600 words per minute.

People can certainly and some people while exited/upset may.

<comment><USER7> > 500,600 words per minute

I realise 500/600 looks like 5/6, but 500,600 reads to me as 500600. Maybe | is a good unambiguous character to use for "or".

<comment><USER8> Dashes are customarily used for ranges. 500-600 wpm; 35-75 Kph; 2-3 grams. While a / can be used for words "and/or", using it with numbers leads to confusion with fractions: 2/3.

<comment><USER9> > While a / can be used for words "and/or", using it with numbers leads to > confusion with fractions: 2/3.

As Y_Y already indicated:

> I realise 500/600 looks like 5/6 ….

If we're going to fuss about typography, these things:

> 500-600 wpm; 35-75 Kph; 2-3 grams.

are hyphens, and you want an en-dash: 500–600 wpm instead of 500-600 wpm.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> This is cool, but the author could sell his idea better. It took me a while to figure out what a Penti Chorded keyboard even is. The video linked at the very bottom shows why this could be useful: [https://www.youtube.com/watch?v=z_01ha1uS6Y&feature=youtu.be](https://www.youtube.com/watch?v=z_01ha1uS6Y&feature=youtu.be)

I wish the author had explained at the start what problem this solves rather than launching right into an explanation of how it works.

<comment><USER11> Thanks for that. I thought it was a physical keyboard. Didn't realize it was a tablet-screen keyboard.

</comment></comment><comment><USER12> I've been trying to use it on Android for 40 minutes now (read: brute forcing and trying to match what I see with the docs) and I just figured out how basic stuff like backspace is supposed to work.

Some getting-started tips:

\- The first thing you need is to touch all 5 fingers in a comfortable position to the screen. This activates the view that you were expecting to see. (This info is buried in the second to last paragraph of intro text.)

\- To reset the buttons' positions (and get to pick new locations), activate another keyboard and then activate this one again.

\- The arpeggio versions with two options (such as "tab/del") are directional: A->B is tab and B->A is del, where A and B are two of the five buttons.

\- "del" is the equivalent of "backspace", not "delete".

\- Backspace is supposed to be the arpeggio version of L, which is "\- ##--" (index and middle finger), with middle finger first. So what you do is: press and hold middle finger, wait, press index finger, then release both. Do not release middle before you press index, do not be too fast, and do not be too slow. It's easy to be too fast or too slow, so keep practicing I guess...

\- That mysterious little 6th button is the repeat key (this is also mentioned somewhere in the middle of the text).

\- All keys disappearing when you tap next to it is not a bug but a feature: it allows you to use a second finger (while the first one hides the keyboard UI) to tap something behind the keyboard, such as opening a menu or selecting text.

\- The lowering of audio volume (and perhaps some stuttering) is not your hitting the key combo for volume changes, but it's your music app detecting that this app is playing sound or vibrating or whatever and lowering its volume temporarily in response.

</comment><comment><USER13> I'd like to notice an important thing: with this keyboard, one _does not move the fingertips at all_. The only motion required is press / release.

This is a great quality when hands are busy with something else, like holding a bike's handlebar, or an aircraft control rod.

It's also likely a good setup for some smart glove type of input device, where there are no keys to press but finger motions are detected.

If fingertips are allowed to change the position, a few more keys allow for easier chords and much more characters, all using the same 5 fingers. They can be touch-typed even easier than a normal keyboard.

</comment><comment><USER14> Reminds me of the AlphaGrip[0] somewhat. Of the problems of using it, I mean. I bought it like 10 years ago, and sold it a couple of years later, it's good to see that they're still in business.

On the AG, instead of a combination of buttons to produce a keypress, you have 8 keys (buttons?) that can rock in two directions, plus thumb buttons, including red and green "shifts" that work as Fn keys. Normally you type text, pressing red shift you input numbers and arithmetic symbols, with green shift the rest of the symbols. It was great for games and got past my regular QWERTY speed writing English text after a couple of months.

Now, if you write in more than one language, you're screwed. Using other layouts would make the already difficult task for developing muscle memory even more annoying. I tried it with US-Intl layout (as I was used to it on QWERTY) to have a unique layout for multiple languages, but it quickly becomes unusable: to produce an "À", I don't remember exactly, but required 2+2 or 3+2 simultaneous keypresses, plus US-Intl is implemented different in different OS, so sometimes you have to take into account dead keys, sticky keys, sometimes not. And don't get me started on shortcuts and programming...

[0] [http://www.alphagrip.com/](http://www.alphagrip.com/)

<comment><USER15> I actually used an Alphagrip daily at work for probably a year+. It halved my normal qwerty speed (120 wpm down to 60 wpm), but got rid of all of my wrist pain. Good exchange! I had a similar experience that I bought my first one ten years ago, then sold it after a few years of not using it. On a whim after I started feeling pain, I tried again and after doing typing tests for 10-15 minutes each morning for a month it finally stuck. Ended up modding it with a teflon trackball before I finally unplugged my normal keyboard and put it behind my monitor.

Would be nice to see an upgrade with a working shift key (the modifier is not actually sent) and a wireless option...

</comment></comment><comment><USER16> This reminds me of steno keyboards and the plover system. It's interesting, but I don't think it's the most important thing for developers. In my opinion a comfortable keyboard like an ortho one, and a bunch of helpers like modal editor and shortcuts using something like qmk provide the most value. That takes you to like 90%. Using steno after that is just pushing you to like 95%. (I know that's some weird random metric, but hopefully I got the point across.)

<comment><USER17> Stenography is likely overkill if you're only coding: an orthographic and/or split keyboard, keyboard shortcuts, a snippets, and autocomplete gets you most of the way there. Unlike prose, you really don't crank out that many characters of code very quickly.

The question is really: how much of your day do you spend writing prose rather than code? For me, I have a lot of instant messaging to do with coworkers in remote offices, or emails to write or respond to, or design documents to write. In this case, stenography really helps me out, and since I've learned it, I might as well use it for coding where it's convenient (mostly comments but also for writing some new lines of code.)

</comment></comment><comment><USER18> I just wonder if there's any chorded keyboard implemented as a smartphone bump case (with 4 buttons on the one side and one for the thumb on the other side, but maybe some other layout), so user can grip it with their hand and use for input.

Should be painful to learn (obviously), but then should beat on-screen keyboards because it won't require tapping (and even looking) at the screen at all.

<comment><USER19> Indeed; who has never dreamed of a DataEgg keyboard on a smartphone.. [https://www.media.mit.edu/wearables/lizzy/dataegg2.gif](https://www.media.mit.edu/wearables/lizzy/dataegg2.gif)

</comment></comment><comment><USER20> This is a cool idea. New explorations and innovations in this direction are very welcome IMHO. I'm still a bit dismayed after reading about Douglas Engelbart's 5-key chording keysets that there's very little on the market to fill such a niche completely.

It may be argued that we now have mouses with 5+ buttons, when Engelbart himself scaled back from 5 to 3 for the mouse hand, and we're now used to keeping one hand on the keyboard where we commonly do two- and three-finger chords, but there's a certain level of facility that I think can still only be realized with a dedicated chording keyset.

Engelbart's keysets could also provide two-way communication (by puffing air under the keys) to do things like prompt for certain responses when mousing over certain screen elements, which still seems slightly out of reach for smartphones' limited "haptic feedback" (not that I saw that mentioned here, just something that came to mind when I saw this was an implementation for touchscreen devices).

<comment><USER21> I'd like to see someone develop a chorded keyboard with some sort of gesture based feedback. An advanced sign language for computer input.

Cameras, etc could be used to read our gestures:

[https://www.cnbc.com/2018/07/16/ctrl-labss-neural-tech- lets-...](https://www.cnbc.com/2018/07/16/ctrl-labss-neural-tech-lets-humans- control-machines-with-their-brains.html)

[https://atap.google.com/soli/](https://atap.google.com/soli/)

<comment><USER22> I also think our hands could do more in keyboard position. Lift off slightly and gestures could be recognized by a camera, even things like 2-finger scrolling could be done by lifting the fingers slightly and doing it.

Same with pinch-zoom or scroll. Or when working with a 3D model, making a hand shape as if you were gripping a globe, you should be able to twist and rotate objects on screen.

I remember posting excitedly about this on Slashdot 15 years ago and am just remembering it now. This should be easily achievable with modern libraries to get basic detection working.

Although some abhor the idea and want more complex keystrokes chords, for myself I think there are specific gestures I consider intuitive and wouldn't have to particularly learn anything new.

</comment></comment></comment><comment><USER23> A friend of mine created a chorded (virtual) keyboard for making typing on tablets easier[0]. The more common the letter, the simpler the chord combination.

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

<comment><USER24> Is this project still active? I remember seeing this years ago, but it seemed like the developer walked away from it.

I would _really_ like to have the ability to install asetniop on Linux, and have the layout be configurable.

<comment><USER23> It's still active - he launched iOS and Android apps earlier this year. I don't know if he's planning desktop support, but you might try shooting him an email.

</comment></comment></comment><comment><USER25> My dad had an Agenda which had a 5-key chorded keyboard[1]. It was quite cool, you could actually type in your pocket to an extent.

[1] [https://www.microsoft.com/buxtoncollection/detail.aspx?id=4](https://www.microsoft.com/buxtoncollection/detail.aspx?id=4)

<comment><USER26> I had never heard of this device, looks very nice. Thanks for sharing.

</comment></comment><comment><USER27> Surprised no-one has mentioned the Microwriter [1]. In my teens I saved up for one to use with my BBC computer but never really got on with it.

[1] [https://en.m.wikipedia.org/wiki/Microwriter](https://en.m.wikipedia.org/wiki/Microwriter)

<comment><USER19> I got a Microwriter AgendA from someone around the turn of the millennium, and I loved the chording system as an idea, especially for mobile input. I've reimplemented it once or twice using the down/right arrow keys and 4/8/6/return on the numpad of a typical keyboard, as a novelty.

And I bought a CyKey, so both devices seen in this image in your link:

[https://en.wikipedia.org/wiki/File:MicroWriter,_AgendA,_and_...](https://en.wikipedia.org/wiki/File:MicroWriter,_AgendA,_and_CyKey.jpg)

But it is enormously slow; it's approximately like typing with one slow finger, with writing being enough let alone punctuation.

I'm most surprised nobody has made a HTML/JavaScript chording thing that works on multitouch tablets to be an overlay (maybe a bookmarklet?) to type into textboxes. So this Penti keyboard link is a great interest to me.

</comment></comment><comment><USER28> I want to build a mirror chorded keyboard, using an existing split design like a Dactyl or Ergodox, where a modifier on each side gives you the mirrored key (mod+A gives you ', mod+e gives you p, etc.)

I've seen some commercial keyboards like this, but they're incredibly expensive and non-mechanical (mostly geared to people who are disabled/have limited or no use of one hand).

My theory is that the learning curve of a one handed keyboard that is just a mirror would be easier than a totally new layout like the FrogPad or the example linked here.

Reprogramming an existing split model means I could also build both the left/right hand versions and try to learn both.

<comment><USER29> This is 100% doable, hell 100% easy, within QMK (the current open source firmware of choice for custom MK builders)

</comment></comment><comment><USER30> I built one of these! With a shifter on the palm, and a separate control toggle, you'd get pretty much the full ASCII set.

Even though I'm right handed, it worked best on my left hand. This is because of how surprisingly nice it was to use my dominant hand to do something (use a mouse, eat, etc), while still typing with my left.

Alas I assume the reason this never caught on was due to the learning curve. People will never leave qwerty. Also it was pretty slow. When I built this back in 2005, I was thinking for PDAs and early cell phones and was only competing against T9 and early palm keyboards. After a few months of practice, I never topped about 45 wpm.

<comment><USER31> Was it something like this?

[http://bengler.no/chorder](http://bengler.no/chorder)

> Chorderoy is a an attempt at crafting an optimal method of text input for > mobile and wearable devices aimed at those who enjoy the rewards that come > with free climbing steep learning curves.

</comment></comment><comment><USER32> Recently I have been pondering something very similar, but strictly "arpeggio"-based [0] and for regular keyboards, and whether it could be comparatively performant like normal qwerty. I've amused myself fancying scenario when using just fraction of keys in an unusual way could perhaps beat traditional touch typing professionals. I've seen some video where blind person claimed that typing on braille keyboard [1] could be insanely fast.

Coincidentally, today I have been testing what my keyboard can handle in regards of how many simultaneously pressed keys it recognizes at most. (I know it depends on particular keyboard hardware and its "ghosting", but it was fun to try out [2]. I've squeezed 12 keys max.)

[0] in penti vocabulary, meaning progressions of several held and released keys, mainly to circumvent hassle of definition what timespan is still "parallel" and what "progression". Releasing the last key could be the end of progression and produce output. [1] like [http://www.teach- ict.com/as_a2_ict_new/ocr/AS_G061/312_softw...](http://www.teach- ict.com/as_a2_ict_new/ocr/AS_G061/312_software_hardware/specialist_hwsw/miniweb/pg5.htm) [2] [http://myfonj.github.io/tst/keyboard-simultaneous- keys.html](http://myfonj.github.io/tst/keyboard-simultaneous-keys.html) not perfect, since some keys or OS key combos produces funky results…

</comment><comment><USER33> I think there is going to be room in the future for a single handed symbolic entry system like Twiddler as we enter the era of immersive computing. It seems likely you're going to need a way to do text entry on-the-go, while wearing AR glasses. An input mechanism where one hand is dedicated to doing that seems like a good model, with the other dedicated to more fine motor gesturing.

<comment><USER34> Hi. I think you may be delighted to see what I have built. I would love to get your thoughts on it if you're in a related field. I can also let you try it if you'll give me feedback. How can I reach out to you? My contact is my username @opdig.com.

</comment></comment><comment><USER35> I have wanted to try something like this ever since I watched The Mother of All Demos.

[https://en.wikipedia.org/wiki/The_Mother_of_All_Demos](https://en.wikipedia.org/wiki/The_Mother_of_All_Demos)

</comment><comment><USER36> Really nice to see this, 10 years ago I designed a chording system with 5 bits, distributing the difficult to use combination to less frequently used characters (like in the Dvorak keyboard layout). Was there any though given to this aspect?

</comment><comment><USER37> Perhaps also the video snippets in this article are helpful:

[https://picolisp.com/wiki/?TermuxPentiPicoLisp](https://picolisp.com/wiki/?TermuxPentiPicoLisp)

</comment><comment><USER38> This reminds me a lot of the old "BAT" keyboard:

[https://www.infogrip.com/bat-keyboard.html](https://www.infogrip.com/bat- keyboard.html)

</comment><comment><USER37> I should explain more clearly how to generate an arpeggio in PentiKeyboard:

The rules are: 1\. The last key must be pressed AT LEAST 80 ms later than the second. 2\. The last key must be pressed MAXIMALLY 240 ms.

A backspace (DEL) is generated with middle and index finger.

While pressing middle and index finger simultaneously (or longer than 240 ms) gives an "l", you get a backspace when you first press the middle finger (as long as you like, but at least 80 ms), then make a _short_ tap with the index finger and immediately release both fingers.

</comment><comment><USER39> I still want to try this keyboard [https://en.m.wikipedia.org/wiki/DataHand](https://en.m.wikipedia.org/wiki/DataHand)

<comment><USER19> I did buy one of eBay many years ago, and after a long time of hardly any use (years), sold it again, and still miss it sometimes.

The good: fantastic design and build quality. Magneto/optical key sensors way better than any key switch on a normal keyboard. Really surprisingly easy to learn and adjust to "almost-qwerty" default layout. Nice for long-form typing, fingers roll around very short movements, very comfortably.

The bad: huge on a desk, they are really chunky boxes and there's a big power supply and controller box. Basically unusable for one-handed hunt-and-peck typing. Really annoying to use as a mouse (can be done - one side middle finger does big movements, the other side does fine movements, but it's still stepped keyboard-based-mousing), but also annoying to move hand from keyboard to mouse and back because it involves careful lifting of fingers out of, or into, the key-wells - fingers are surrounded by keys you don't want to press. Because of that, can't hover hand over keyboard. Ever. Awkward unless you have perfect typing style - can't habitually press a key with the "wrong" finger, now there's a correct finger for every key and no other option. Expensive even then before their big price hikes and production problems, even second hand.

</comment></comment><comment><USER40> There was a one handed keyboard in BYTE magazine that was similar to this, it was built on to a half sphere so the hand naturally curled around it.

My only issue with specialized keyboards is that I have at least 6[1] I use nearly every day, not all of them are easily replaced, so much harder to go back and forth between styles than to just have one style you can use.

[1] Home workstation work workstation, personal laptop, work laptop, home server, work machines in the lab.

</comment><comment><USER41> I wonder how efficient could someone be if they mastered this keyboard compared to traditional one? My first thought is that it takes more movement of fingers to achieve the same result. For example typing one letter multiple times would make you lift and lower multiple fingers at once. Or going from B to V takes no effort on traditional keyboard compared to raising and lowering combination of 3 different fingers. Nonetheless pretty cool

<comment><USER42> I would imagine having to use a touchscreen is a serious speed impediment, because of inherent latency issues on a touchscreen (if it responds too quickly, it gets too many transients). Physical chord keyboards should be able to go faster. I've seen various conflicting reports of how fast a chorded keyboard can go, possibly because it's really hard to find anyone with 10 years experience on a chorded keyboard.

<comment><USER43> I have no issue typing full speed with two thumbs on a large phone in portrait. This incidentally enables an 80-column terminal....

That is, even on QUERTY on a laptop keyboard I get significantly higher typing speeds due to the use of more than 4 fingers combined with the lower travel distance (measured relative to the target precision), along with the distinct tactile feedback of whether you hit the key or one next to it. Tactile feedback, like a blackberry keyboard, would allow even higher speeds and, most importantly, allow to keep the eyes off the thumbs, as they are needed to use typos as feedback and also to correct these typos.

</comment></comment></comment><comment><USER33> This will be very cool, if it ever ships: [https://waytools.com/](https://waytools.com/)

<comment><USER19> Wow that feels like forever ago; that thing still hasn't shipped??

Here's a HN-er ordering one in Jan 2015 and being surprised that the expected shipping date is March 2015:

[https://news.ycombinator.com/item?id=8880581](https://news.ycombinator.com/item?id=8880581)

</comment></comment><comment><USER44> [https://software-lab.de/Penti1991.jpg](https://software-lab.de/Penti1991.jpg)

</comment><comment><USER45> See also a related but more physical idea: a "Chordite"

\- [http://www.chordite.com/protophotos.htm](http://www.chordite.com/protophotos.htm)

\- [http://blog.russnelson.com/chordite/index.html](http://blog.russnelson.com/chordite/index.html)

</comment><comment><USER46> So I'm the only person that didn't realize this was describing a soft keyboard and not an actual physical layout until I reached "Initially the letters "P E N T I" are displayed."?

Maybe this comment will save someone else the frustration.

</comment><comment><USER47> Would love something like this for single-handed use in Android.

I'm amazed at how poor my typing skills in android are, after years and years of constant use. Something just is not working!

</comment><comment><USER48> Nice, though I feel that if IO is the bottleneck (as opposed to the brain), then perhaps it's time to move on to a more intellectually challenging use of a computer.

<comment><USER49> This is true; I only feel like I can't type fast enough when working in something that requires churning out a lot of boilerplate. The rest is editing and adjusting. Which could be faster, I think, vs code doesn't for example autoclose html tags (or jsx / react) fast enough for my liking, doesn't seem to help me at all.

<comment><USER48> I'm hoping we'll soon get some ML for typing/completing boilerplate code.

</comment></comment></comment><comment><USER50> I have to think there must be at least one disabled person that could benefit from a keyboard which did not force you to move your arm - and could work with 5 fingers.

<comment><USER51> True, right here! I'm temporarily disabled after Rt shoulder surgery and am looking for a left-handed-only keyboard solution (typing very slowly w/LH on the laptop kbd now).

I found a great mouse solution, a Logitech trackball mouse that sits in my RH sling [1] -- so good I expect to switch to it after recovery. But the kbd...

[1] Logitech MX ERGO Advanced Wireless Trackball [https://smile.amazon.com/gp/product/B0753P1GTS/ref=oh_aui_de...](https://smile.amazon.com/gp/product/B0753P1GTS/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1)

</comment></comment><comment><USER52> I found myself thinking of teletype wire signals, probably because CuriousMarc have been uploading videos on them refurbishing a naval version recently.

</comment><comment><USER53> So would someone typing on this keyboard look more like someone playing piano where they are holding and raising and lowering certain fingers?

<comment><USER7> It doesn't seem so in the provided "short" example video [0].

Unfortunately the thumb is on the wrong part of the hand for this system to work on touchscreen (imho). Maybe it would be suitable for chimpanzees, or a hardware device like a twiddler.

[0] [https://youtu.be/z_01ha1uS6Y](https://youtu.be/z_01ha1uS6Y)

</comment></comment><comment><USER54> > However, combinations where the ring finger is up while its neighbors are > down is physiologically problematic.

Really? Why?

<comment><USER55> Because the middle, ring, and pinky all share the same muscle group.

Try this: hold your hand out in a fist and extend your middle, ring, and pinky straight out. Now try to flex each of the three extended fingers individually without moving the other two.

Now try the inverse: make a fist and try raising each finger individually without moving the other two. It's physiologically impossible because the muscle used for extension is shared between those fingers.

(Edit: extension is impossible, not contraction)</comment></comment>


Pluralsight Free Weekend Feb 2020 - <AUTHOR> https://www.pluralsight.com/offer/2020/february-free-weekend <comment><USER2> Looks like it requires you to list your company and actually validates the company as you type. Also requires a phone number?

I get that it's free, but just be aware you're potentially agreeing to a lot more unwanted phone calls than you're already getting.

<comment><AUTHOR> Just give your personal email or create one and give it. :) I know it's kinda wrong, but yea, if you're privacy concerned, there are throwaway emails too.

</comment></comment><comment><USER3> what good is one weekend of free content? advertisement much?

<comment><AUTHOR> I have seen some people who are hunting jobs Feb, they can look at it and download the course too. BTW, you can download the course contents and watch it later.

<comment><USER3> ahh ok didn't realize</comment></comment></comment>


Show HN: Leantime 2.1 – open-source Project Management System - <AUTHOR> https://leantime.io/ <comment> http-teapot A little bit of feedback. Your homepage brings my computer to a crawl. I'd fix this problem since that page is the first impression user will have when they check your product.

<comment><USER2> Thank you, appreciate the feedback. We'll take a look at slimming that down.</comment></comment>


Apple Watch Series 3 - <AUTHOR> https://www.apple.com/apple-watch-series-3/ <comment><USER2> The page you're looking for can't be found.</comment>


Recognize relatives with deep learning - <AUTHOR> https://blog.floydhub.com/build-image-classification-app-with-fastai <comment><USER2> Every time I see facial recognition tech I think, "Isn't this actually pretty dangerous technology?" It's a cool DYI project, but also _wow_ that in 2018 this is a DYI project.</comment>


Show HN: A new way to organize online discussions - <AUTHOR> http://www.drewgl.com/?utm_source=hacker%20news&utm_medium=hacker%20news&utm_campaign=hacker%20news <comment><USER2> Can someone explain what this really is? I cant find any details on the link, just pop ups.

<comment><AUTHOR> It's a website that's a space for discussion and it uses a new forum technology that no other website has implemented to organize the discussions. The pop up is a 30 second explanatory video of how to use the new design. Note: the new design is only available on a laptop/desktop</comment></comment>


Tell HN: Credit Card type is very easy to ascertain from the number - <AUTHOR>

One thing I hate is when I'm checking out and a site asks me for my credit card number, then asks what type of credit card it is. Maybe it was my years in high school working for a pizza place, but credit cards are very easy. I thought it was basic info, but am surprised when I find out how many people have no clue. The first digit always determines what kind of card it is:
3 - American Express
4 - Visa
5 - Mastercard
6 - Discover
Go ahead, check your wallets, I guarantee that's right. Don't make your users give redundant information! <comment><USER2> The 'what type of card' field should be before the number. I believe it should be a method of informing your users what cards you accept, rather than figuring out what card you are using. The same can be accomplished with an image of accepted cards, but I think the text version is more accessible.

</comment><comment><USER3> Users expect it and are confused when an expected field is absent. You don't want to make a customer think twice about you when they have their wallet out and are about to make a purchase.

<comment><AUTHOR> I highly disagree with you. The less roadblocks you put in the way of a customer purchasing something, the more likely you are to get a conversion.

By this logic, Amazon's One-Click purchase would be a failure because people "expect" to have to enter their address and billing info every time. That's simply not the case.

Furthermore, some sites require this piece of data, some don't. I don't think this is like asking for the customer's email which they'd expect, selecting my card type is only present on ~50% of places I check out. (purely observational, no evidence to back that up) My point being that since entering your card type is not an expected piece of data every customer expects to put in for every transaction, they won't miss it to the point that they think your site is untrustworthy when it's not there. You have just made their life a little easier behind the scenes by not requiring them to supply it manually.

</comment></comment><comment><USER4> Some BBSes from 1984 are calling and want their G-Files back.</comment>


Habits of highly mathematical people - <AUTHOR> https://medium.com/@jeremyjkun/habits-of-highly-mathematical-people-b719df12d15e <comment><USER2> Couldn't this also be titled "Habits of high rational people", with mathematics simply being one application?

I'm not a mathematician and was miserable at math in school, but I apply these habits in the business world every day. They help me cut through a lot of crap that comes from other people's sloppy/lazy thinking.

>Anyone who has gone through an undergraduate math education has known a person (or been that person) to regularly point out that X statement is not precisely true in the very special case of Y that nobody intended to include as part of the discussion in the first place. It takes a lot of social maturity beyond the bare mathematical discourse to understand when this is appropriate and when it's just annoying.

I don't disagree but would argue that the far more common problem is people - not just mathematicians, mind you - not considering definitions _enough_ which ultimately leads to confusion and/or misunderstandings and consequently additional, unnecessary, cycles spent in discussion about "what do you really mean?"

<comment><USER3> (I studied math and computer science. Walked out of a math Ph.D. program before starting one)

>I'm not a mathematician and was miserable at math in school, but I apply these habits in the business world every day. They help me cut through a lot of crap that comes from other people's sloppy/lazy thinking.

That's possible. The OP does not claim that the traits he listed apply if and _only if_ you are a mathematician. It's certainly possible that you hone these skills without being mathematically inclined.

I do contest, however, that these habits apply to _all_ "highly" rational people. I know plenty of people who are rational (or so are they deemed to be by their friends and colleagues) yet decidedly do not possess some of the listed habits, especially "scaling the ladder of abstraction" and "Being wrong often and admitting it".

On "being wrong often and admitting it," based on my experience, it's not that you become modest as a result of studying math. By studying math, you realize how prone your mind is to arriving at a faulty, unproven conclusion, and you learn to be more skeptical of your own thinking and become more at ease with being "wrong", allowing yourself to let your intellectual guard down.

<comment><USER4> _On "being wrong often and admitting it," based on my experience, it's not that you become modest as a result of studying math. By studying math, you realize how prone your mind is to arriving at a faulty, unproven conclusion, and you learn to be more skeptical of your own thinking and become more at ease with being "wrong", allowing yourself to let your intellectual guard down._ Indeed...math if anything promotes mental hygiene.

</comment></comment></comment><comment><USER5> There's one habit in particular that he didn't really touch on that has been one of the most impactful parts of getting my math degree on my thinking.

There seems to be a gap between formal definitions and what we feel actual definitions are. Every once in a while, a professor would prove something that was clearly right, but felt like a violation of some unstated implicit part of a definition (for example, that the set of all vector spaces is itself a vector space). Despite feeling wrong, I couldn't come up with a particular reason that it wasn't right (short of falling back on some weasel word like "technically that's correct"). Math education forces that gap out into the open, and makes you pay more than lip service by building more and more theorems on top of it. The real world effect is to make you examine whether there's some actual value in this definitional gap (which can then be explicitly stated) or whether it's just fallacy.

I know far too many people who are comfortable with stopping at "this doesn't feel correct despite me having no counterargumemt to its 'proof' ". I've never been inclined that way but my math education certainly sharpened my ability to avoid this.

<comment><USER6> > for example, that the set of all vector spaces is itself a vector space

Hmm... under what operations? It's a semigroup under direct sum, and probably something under the tensor product, but I'm having trouble imagining what the scalar multiplication should be. (Or was that a "fictional" example? :)

<comment><USER7> Unless I'm mistaken, The totality of vector spaces is not even a set.

<comment><USER6> There's one for every cardinality (up to isomorphism). I forget my set theory, but if the cardinalities form a set, then the totality of vector spaces does too. If not, we can amuse ourselves by looking at the set of finite- dimensional vector spaces.

</comment></comment></comment></comment><comment><USER8> Mathematics promotes bad habits too. Example 1: paying too much attention to worst-case scenarios. When creating a mathematical proof you want to make sure that your conclusion holds in all possible scenarios allowed by your assumptions. In real life decision-making worst-case scenarios are really bad, really expensive to guard against but also really rare so often the best thing to do is to ignore them. You may find that hard to do psychologically if you spend too much time doing mathematics.

Example 2: being too parsimonious. When doing mathematics you have a clear cut objective (your conclusions) and your goal is to achieve it while using the least resources (assumptions). In real life a person thinking mathematically may put in just enough effort to fulfill the formally specified part of their objective while ignoring informal requirements that are assumed to be 'common sense' by non-mathematical people.

<comment><USER9> Concerning example 1: There are different concepts, such as average-case scenarios (for example modeled by expected value) or quantiles. Use them if this is what you want to model (but pay attention to the assumptions).

Concerning example 2: If you want some 'common sense' property to hold, why don't you specifiy it then?

<comment><USER8> What you are saying is definitely true within mathematics and its applications. But the original article was about "The […] skills that students of mathematics […] will practice and that will come in handy in their lives outside of mathematics" and in the same spirit I wanted to point out habits of thought developed doing mathematics which have a negative effect when the problem you are facing cannot be fully formalized.

</comment></comment></comment><comment><USER10> > The most common question students have about mathematics is "when will I > ever use this?"

The author then goes on to provide 6 semi-abstract reasons as to why abstract reasoning matters. Since this question is most likely to be asked by a child, it is code for "how can math-skills make me money or get me a job." Upon hearing the author's answers, 13 year old me would conclude, "it doesn't, and math is as useless as writing poetry". A child who _isn 't_ thinking in this practical way is already academic minded and _doesn 't need an answer_. "When will I ever use this?". It obvious! "In next year's math class".

It is sad that a student can leave high-school with almost no classes that ever makes math less abstract. The most beautiful moment in my life was my freshman college physics class. It first filled me with joy and then resent. Because I almost didn't go to college and there was no reason I wouldn't have understood this course at 13. Same goes for finance.

So answers should focus on applications like modeling simple Newtonian physics of a satellite in orbit or predicting the RPM when a 4-stroke engine red-lines based on max-stress specs. Or show them useful short cuts like the Rule of 72 and if they are curious show a derivation. Show examples of ratios/percentages, how fractals can simulate a landscape, ray tracing, or examples of the Fibonacci series in nature, etc.

<comment><USER11> The point of the article isn't to show that the math will be used. The point is that people who ask such a question are missing the point.

"Education is what remains after one has forgotten what one has learned..." \- Albert Einstein

<comment><USER12> And the point is that high-horse mathematicians are missing the point when they ignore the relevant lives of their audience.

</comment></comment></comment><comment><USER13> Math PhD here. I have also had the chance to work with many bright "analytically-minded" people from other backgrounds while a management consultant.

This article is spot on, and some of the behaviors really do seem more indicative of "mathematical people" \-- which I suggest really stands for "those who have done research in a 'mathematical' field." (The key being the mix of cold, hard precision in the idealized proof with the squishy, intuitive, human activity of discovering what is pretty and true -- an aspect usually lost in math education!)

Some examples I found most poignant:

\- The article mentions "fluidity with definitions" and illustrates it well with the anecdote about Keith Devlin. This is a skill distinct from pure "analytical reasoning," as it requires comfort with definitions that are at once _precise_ but also _open to (frequent) change_. The process of forming and changing definitions is creative and imprecise, and falls into what is sometimes called "conceptual reasoning." (A programming analog might be API design.)

\- Several of the other points are tools for figuring out what is true, and for precising imprecise statements. For example the need to "teas[e] apart .. assumptions" is only natural when reading papers with Theorems that have very precise conditions .. which do not exactly hold in the case you need! In many other "analytical" contexts pre-conditions are not made as precise and arguments by analogy are considered acceptable provided the conclusion is believed. (A programming analog might be debugging when some implicit pre- conditions or invariants break.)

</comment><comment><USER14> I'd like to propose another habit: the habitual use of certain idioms that are present in mathematical reasoning, in reasoning about other problems. I'm thinking of constructs like

\- "if and only if", versus mere implication

\- TFAE, as in, the following are equivalent ways of establishing some property

\- Defining a relation, say R, between entities, and establishing properties about R, like transitivity.

\- Defining notations, labels and symbols for certain quantities or relationships within a problem.

You typically first learn these idioms when doing proofs or reading lots of math and trying to summarize the ideas in it. Some of them are also aligned with the more abstract side of CS (unsurprisingly).

Someone who has had a little experience with these habits can make a real contribution to clear thinking. How many times have you stood at a whiteboard discussion where people repeatedly talk about "the properties that this object inherits from its parent" (or similar) -- but without just inventing a notation for that thing?

</comment><comment><USER15> I really liked reading this article. The author describes not just the skills that are important for _reasoning well_ (mathematics seems to just be an arena in which this kind of thinking is _required_ ), but in the end, also the pitfalls of taking these skills to their logical extremes in social situations. As the author points out, context is very important.

Most of the Senior Engineers I look upto and who I consider as role models seem to know this. They are carefree and jovial in most conversations, but when its time to design a system or drill into root causes of an outage, they are capable of asking (and answering) these types of precise questions. I've learned a LOT from working with them and do hope to be like that in the future.

</comment><comment><USER16> The parts that jump out to me in the context of being a professional programmer:

1) Definitions == overloading. We regularly run into overloaded terms that mean very different things to different people. Microservices. Technical debt.

2) Being wrong - there is a perceived cost to being wrong, and in many organizations it is unfortunately a reality. When new or young, there is so much emphasis on proving oneself that there is easily a disincentive to opening oneself up to risk of being wrong. After being around a while, it is easier - sometimes I like advancing a position I know to be wrong because I know it will more efficiently generate explicit reasons why, as people protest (although even there I usually make clear I am doing devil's advocate).

3) Abstraction scaling - it's unfortunately so common for programmers and technical people to get pedantic, which frustrates people and wastes time. Sometimes it's driven by insecurity. For instance, needing to be the smartest person in the room, or proving competence in an area that is not directly relevant. And sometimes that insecurity is rational, for instance if part of an organization that encourages insecurity through its systems. But oftentimes it is because of a lack of experience with abstraction, or an inability to recognize what "rung" a discussion is on, or losing one's place on the abstraction tree. Complicating this is that sometimes it is important to drill down when no one else wants to. Recognizing this and keeping track of _relevance_ is one of the hardest things to do when dealing with deep subjects and arguments.

</comment><comment><USER7> There is an interesting Math Overflow thread called "Mathematical habits of thought and action which would be useful to non-mathematicians". The answers there all interesting (and sometimes conflicting), but my favorite (part of an) answer comes from Terence Tao:

>Equivalence. Basically, the idea that two things can be functionally equivalent (or close to equivalent) even if they look very different (and conversely, that two things can be superficially similar but functionally quite distinct). For instance, paying off a credit card at 10% is equivalent (as a first approximation, at least) to investing that money with a guaranteed 10% rate; once one sees this, it becomes obvious why one should be prioritising paying off high-interest credit card debt ahead of other, lower- interest, debt reduction or investments (assuming one has no immediate cash flow or credit issues, of course). Not understanding this type of equivalence can lead to real-world consequences: for instance, in the US there is a substantial political distinction between a tax credit for some group of taxpayers and a government subsidy to those same group of taxpayers, even though they are almost completely equivalent from a mathematical perspective. Conversely, the mistaking of superficial similarity for functional equivalence can lead to quite inaccurate statements, e.g. "Social Security is a Ponzi scheme".

[1][http://mathoverflow.net/questions/74707/mathematical- habits-...](http://mathoverflow.net/questions/74707/mathematical-habits-of- thought-and-action-which-would-be-of-use-to-non-mathemati/75022#75022)

</comment><comment><USER17> Very good article. I might add that a further pitfall in being "highly mathematical" is when you assume that the person you are communicating with is also "highly mathematical" and therefore has similar habits. That's not true MOST OF THE TIME and can lead therefore to severe misunderstandings.

<comment><USER5> IME you get used to this pretty rapidly, and what you're left with KS even better: the ability to translate between the two modes of communication (and expose the lack of rigor in one, which often leads to its proponent discovering errors in their assumptions).

</comment></comment><comment><USER18> #6 scaling the ladder of abstraction

This is one I have a tough time explaining to students who are so focused on the task at hand they don't feel there's time to sit back and reason in generality.

<comment><USER19> Came across this Dijkstra quote via [https://www.youtube.com/watch?v=GqmsQeSzMdw](https://www.youtube.com/watch?v=GqmsQeSzMdw)

> The purpose of abstraction is not to be vague, but to create a new semantic > level in which one can be absolutely precise

By taking away all the non-essential things and leaving only on what you need, it allows you to truly understand the structures that you are studying. Definitely rings true when I work in ML/Haskell-style type systems. Easier said than done convincing the students though...

<comment><USER20> > By taking away all the non-essential things and leaving only on what you > need, it allows you to truly understand the structures that you are > studying.

This is the essence of type abstraction and parametricity!

</comment></comment></comment><comment><USER21> I did poorly in high school. Largely because of untreated ADHD. I got to university and did no math. But really excelled at my studies (STEM related).

Somehow I got into a software engineering position in robotics. And regularly I need not just the logic and rational thought you gain from school, but the practical math skills.

I've been picking up what I need to learn from open courseware like MIT lectures. The thing that really upsets me is that I'm learning it without issue. I was always completely capable of it, but my time in high school convinced me I wasn't. I wish I had been convinced/allowed to take more math in university.

</comment><comment><USER22> Yeah, if we remove every mention of mathematics to make it less "elitist", then one could notice a few nice things, such as justification behind some TTD practices (writing down examples and counter examples to come up with more refined definition), healthy obsession with precise usage of words (plus not mentioned but important - to use as less of them as possible - just enough), and that, basically, the whole process is a heuristic search, so a "wrong" is nothing but merely an empty branch of the search process, not a "failure" \- so, just accept it and backtrack. The need of assertions and tests (proofs) is obvious. And the ladder of abstractions is the very same notion of layers of composable abstractions, where each layer is a "language" and building blocks for a layer above, which was popularized by the on SICP and On Lisp books.

This, by the way, is also the answer to that question "do we need to study math for programming". Discipline in the use of ones own mind is what is required.

</comment><comment><USER23> Just reading those 6 bullet points reminds me very, very strongly of the kind of discussions I have with my friends (all of whom are CS students).

</comment><comment><USER24> There's a really great Quora answer along the same lines: [https://www.quora.com/What-is-it-like-to-understand- advanced...](https://www.quora.com/What-is-it-like-to-understand-advanced- mathematics/answers/873950)

<comment><USER25> This is without question my favorite Quora post of all time.

I find myself rereading it every once in a while.

</comment></comment><comment><USER26> I'm not sure these traits exist outside of mathematics as much as posited. I would think this happens mostly because mathematics is such an abstract realm that it is possible for mathematicians to cultivate that sort of detached mindset effectively. Once you start getting into topics and subjects that are more personal and unable to be completely abstracted, these traits may be a burden or not exist in practice.

Not many people will take the same approach to their own values, and philosophy shows the difficulties in using the mathematical/logical approach to value systems and human thinking.

</comment><comment><USER27> Haha that's funny I was just scrolling through the comments before clicking and thinking "I wonder what Jeremy Kun has to say" and lo and behold...

</comment><comment><USER28> 7\. Being precise.

The precision you hold yourself to through a rigorous approach to a problem is also very valuable and is the reason I think calculus is very important.

<comment><USER9> > The precision you hold yourself to through a rigorous approach to a problem > is also very valuable and is the reason I think calculus is very important.

What property concerning precision does calculus have that doesn't hold for _any_ topic in mathematics?

<comment><USER12> Infinity (and infinitesimals) is intuitively east to use but easy to misuse. Arithmetic isn't so easy to misuse.

Students usually see infinity for the first time in calculus (or maybe when working with infinite series)

These are the situations where we commonly see people being confident in their incorrect answers (which is worse than being unconfident and unable to get correct answers)

Difficulty wrangling infinity comes up a lot on Hacker News, even [https://hn.algolia.com/?query=infinite%20series&sort=byPopul...](https://hn.algolia.com/?query=infinite%20series&sort=byPopularity&prefix=false&page=0&dateRange=all&type=comment)

<comment><USER9> > Students usually see infinity for the first time in calculus (or maybe when > working with infinite series)

Students also see groups or R-modules the first time in abstract algebra. So what.

> These are the situations where we commonly see people being confident in > their incorrect answers (which is worse than being unconfident and unable to > get correct answers)

> Difficulty wrangling infinity comes up a lot on Hacker News, even > [https://hn.algolia.com/?query=infinite%20series&sort=byPopul...](https://hn.algolia.com/?query=infinite%20series&sort=byPopul..).

I rather the reason why "infinity" is misused so often, but, say, groups or R-modules, not so lies rather in the fact that too most math instructors too much to appeal to intuition in calculus, but not in abstract algebra. Thus mathematics should be taught in a much more abstract way where you are not misled by your bad intuition because you simply aren't able to formulate wrong thoughts in the abstract framework (that's why the abstractions and formalism was invented).

</comment></comment></comment></comment><comment><USER29> Only problem is people tend to build whole theories and conclusions out of assumptions, and their assumptions could be wrong.

Mathematics only shows you deductions that could be make out of initial axioms and rigid rules. It doesn't mean the assumptions you made while forming axioms or the rules itself are right.

Having said that being mathematical increases your chances of arriving at the right results.

<comment><USER20> > It doesn't mean the assumptions you made while forming axioms or the rules > itself are right.

There's no absolute notion of "right" to begin with. There's just "provable" (in a theory) and "true" (in a model of a theory). Furthermore, a statement that's true in one model might not be true in another.

</comment></comment><comment><USER30> _Mathematicians need logical precision because they work in the realm of things which can be definitively proven or disproven._

Not really, by Gödel's incompleteness theorems, they are always working in a realm where some things cannot be definitely proven or disproven.

<comment><USER31> Your quote didn't say that _all_ things can be disproven or proven. You need to think mathematically!

</comment></comment><comment><USER32> 'Scaling the ladder of abstraction' applies quite strongly to dealing with a new codebase, and is something I think inexperienced people (myself included) initially struggle with.

</comment><comment><USER33> Only six habits, I would have hoped for a seventh one :)

<comment><USER34> Isn't there an old quip about how poor mathematicians are at arithmetic? ;)

<comment><USER35> I don't recall. How are poor mathematicians at arithmetic? ;)

<comment><USER34> lol my bad.

</comment></comment></comment></comment><comment><USER36> his piece about discussing ideas and switching opinions made me remember a comment i made once to someone that said "evolution is just a theory, people need to hear both that and creationism". i said "only evolution is a theory, because it's based on facts and bits of logic, the other's not".

</comment><comment><USER37> It might also be that individuals who have these traits self-select into studying math. So we can't easily conclude that studying math leads to the development of these "highly mathematical habits", because the causation could also flow the other way.

</comment><comment><USER38> mathematician here, so true</comment>


[Keybase] What is it useful for? - <AUTHOR> I have a keybase account, but I don't know what to do with it. Someone how has an account could give me an idea? <comment><USER2> Their file system is useful for sharing encrypted files.

Other than that it's pretty much a key server with account verifications, so it's good if you want to sign or encrypt documents and give the recipient an easy way to confirm the key identity.

</comment><comment><USER3> I was my understanding that it was a mainly used as a means of verifying that User-A on website One is the same person as User-A on website Two. In other words, I thought it was being used to prevent impersonation.

</comment><comment><USER4> It's useful for, amongst other things, making it harder to know if someone is the sole owner of their private GPG key.

Don't use it.

<comment><USER5> Well, giving your private key to Keybase is optional. But there is probably no way to prove that they don't have your private key?

<comment><USER4> You can still disclose it: [https://gist.github.com/ncouture/a28937c50053db129578ac0307b...](https://gist.github.com/ncouture/a28937c50053db129578ac0307b79770)</comment></comment></comment>


How Git Changed My Workflow by Matt Polito - <AUTHOR> http://ontwik.com/git-github/how-git-changed-my-workflow-by-matt-polito/

<comment><USER2> For those that don't want to watch a 22-minute video, this has nothing to do with the title except that Git is involved.

tl;dw - He shows how to branch, cherry pick, reset and a few more branch things.

<comment><USER3> Perfect. Saved me 22 minutes. Bless you.

</comment></comment><comment><USER4> This "ONTWIK" site is an interesting play in the tagged video repository space. It's been front page on HN several times in the last week with mostly old videos embedded off of other sites yet.. I see some value in doing this.

</comment><comment><USER5> no offense to this person, but this is a really boring presentation...

<comment><USER6> None taken, what would you change to make it more lively?</comment></comment>


Apple plans to announce ARM transition for all Macs at WWDC 2020 - <AUTHOR> https://arstechnica.com/gadgets/2020/06/apple-plans-to-announce-arm-transition-for-all-macs-at-wwdc-2020/ <comment><USER2> Note that the only source for this article is the Bloomberg article posted earlier today:

[https://news.ycombinator.com/item?id=23465364](https://news.ycombinator.com/item?id=23465364)

<comment><USER3> Yes. We've moved the comments thither. Thanks!

On top of that, "plans to announce" is hardly a substantive story. Oh well.</comment></comment>


Why Boston fails young entrepreneurs - <AUTHOR> http://cortlandtjohnson.com/why-boston-fails-young-entrepreneurs/

<comment><USER2> So true. I live in Boston and I've been to these events, and he's hit the nail on the head. You would think having Boston be ranked the #1 spot for innovation 2 years in a row would inspire the community to rally together and keep its young talent.</comment>


Ask HN: Of Introverts, the Open Office, and ADHD - <AUTHOR> I am one of those people who detests the open office. I find them noisy and distracting. Even with headphones on I am distracted by the movement around me and the feeling the I am in a fishbowl being looked at from outside. I've read a lot of articles and rants about the open office posted on HN.
I've recently been reading about ADHD and I', starting to wonder if my difficulties may have more to do with ADHD than being an introvert.I don't know if I have ADHD. I'm 40. I wasn't diagnosed with it as a kid but I don't know if people knew much about it then. I do remember constantly daydreaming, loosing things and forgetting to do my homework as a child.
Can anyone relate to this? Does anyone have any insight on this? I apologize for the incoherent nature of this post. <comment><USER2> "I do remember constantly daydreaming, loosing things and forgetting to do my homework as a child."

Oh, you mean you were behaving like a child?

I don't have ADHD and I _hate_ open spaces.

</comment><comment><USER3> I'd start by comparing yourself against the Adult ADHD scale: [http://www.hcp.med.harvard.edu/ncs/ftpdir/adhd/18Q_ASRS_Engl...](http://www.hcp.med.harvard.edu/ncs/ftpdir/adhd/18Q_ASRS_English.pdf)

It's more than just distractability.

Hating open offices is pretty common, ADHD or not, extrovert or not, as they tend to kill concentration.

</comment><comment><USER4> I don't have ADHD and am extrovert but still hate open office. When I work I want to work.

</comment><comment><USER5> You don't have to have ADHD to hate open offices and find that setup distracting, but it's certainly a possible factor. I know this is boring / dissatisfying advice but going to a doctor could probably add more context to your self-assessment.

<comment><USER6> We should start pushing to get private workspaces by seeing ADHD as a disability

<comment><AUTHOR> I think ADHD is actually considered a disability. However, most people probably wouldn't be comfortable telling their boss that they have ADHD. If your ADHD having a negative impact on your performance and you're about to get fired revealing your disability might save you from losing your job. However, I don't imagine being known as the ADHD guy is going to brighten your prospects for future promotions.

</comment></comment></comment><comment><USER7> I agree on open-offices being distractive - had worked on a work-shelf kind of environment where we could easily elbowed adjacent person without moving an inch from chair. And the division was 'research' oriented! This was because it was a prime location. No wonder most wanted to work from home or do most of their design kind of work in conference rooms. Main reasons I see open office environment is - they want to save up on real-estate. So most of times its hidden and given fancy names.

</comment><comment><USER8> Yup I can relate a lot.

Since I started working for myself from home the difference has been night and day.

I hope I can survive on my own for the longterm because the thought of having to go back to yet another office, especially an open one irritates me.

One of the things that I found as an introvert is that being around people all day exhausted me so much that by evening I was just all numb.

I had to isolate myself for the entire weekend just to recharge enough for the next week.

So I would get into this never ending cycle of kind of wasting my weekends.

</comment><comment><USER9> I've probably got some mild form of ADHD (and going by the link posted I'm definitely in the area). I'm also an introvert and I work in an open office.

I'm not sure how a normal office would work though, seems like I would go crazy in one of those.</comment>


Image optimization decreased website's page weight by 62% - <AUTHOR> https://freshman.tech/image-optimisation/ <comment><USER3> As someone else mentioned, it's much easier to just use ImageOptim if you're on Mac. There's also a CLI and accompanying tool for NPM that includes this and ImageAlpha and JpegMINI: [https://www.npmjs.com/package/imageoptim- cli](https://www.npmjs.com/package/imageoptim-cli)

But one thing I'd caution is that webp is not a panacea for image optimization. It's only supported in Chrome. If you want to fully leverage next-gen image formats cross browser, you'll also need JPEG 2000 and JPEG XR...and even if you do all of that, you still won't get support for Firefox.

There's also srcset and lossy compression, which are also viable options: [https://userinterfacing.com/the-fastest-way-to-increase- your...](https://userinterfacing.com/the-fastest-way-to-increase-your-sites- performance-now/)

<comment><USER4> The market fragmentation is why I prefer to use JPEGs more intelligently than authoring multiple versions of the same image for each browser. It feels like the 90s all over again. Using fewer images, smaller images, and caching them has worked well for me.

<comment><USER5> I'm at the point now where I've realized that nothing is ever the solution all the time. It's a little frustrating.

I used to use the rule of thumb that JPEG was for images, and PNG for charts, and things with text.

But these days I go through each image I get from the art department and optimize it myself in Photoshop, cycling through a series of presets.

To my surprise, depending on the image, sometimes an 8-bit PNG will end up smaller than a JPEG, and provide better visual quality.

Naturally, your mileage will vary; at participating locations; not valid in Alaska, Hawaii, or Puerto Rico; no cash value; batteries not included; do not taunt Happy Fun Ball.

</comment></comment></comment><comment><USER6> I'm a bit surprised there's no mention of image optimization proxy / services like thumbor[0] (which is open source). Instead of pre-processing all your images, it lets you worry about it later. You can compose different transformations and filters (e.g. add a watermark, resize, crop etc). This is especially useful when things on the website change. It lets you keep the original at full size, and transform them as you need.

There are some commercial services in this space, as well as other similar open source services.

If you're looking for a quick way to get thumbor up and running with docker, I'd plug [https://github.com/minimalcompact/thumbor](https://github.com/minimalcompact/thumbor)

[0] [https://github.com/thumbor/thumbor](https://github.com/thumbor/thumbor)

<comment><USER7> Similarly, if you're still living in the past and / or want to maintain your own server instead of pass it through a 3rd party like that or a CDN, a few years ago Google's mod_pagespeed (module / plugin for both apache and nginx) did image optimization and a lot of other optimizations, all transparently - page caching, creating sprites, inlining small images (as base64), above-the- fold CSS optimization, etc.

I'd still recommend it if you've an old-fashioned webserver (like idk, random wordpress installation) and don't want to pay a third party. I don't know if it's still being maintained or updated though, I haven't heard much of it since its release.

<comment><USER8> > Similarly, if you're still living in the past

you mean like when privacy was still a thing?

<comment><USER9> If you have a public-facing site, how is using something like Imgix a privacy issue?

<comment><USER10> You're letting a third party track your users and their usage of your site.

</comment></comment></comment></comment></comment><comment><USER11> Coincidentally, when I was a freshman in high school in the late 90's this was a topic our instructor drilled into us. I remember trying to shave off every little kilobyte for .gif and .jpg files and to make my personal website load as quickly as possible with a reasonable amount of quality over a modem.

From my perspective, it seems that everything has gotten way more bloated there is an assumption that everyone has unlimited data and bandwidth. I used to have a 1GB data cap on my phone that I would blow out in a couple of weeks from just reading news websites. For example, bloomberg.com shouldn't need to make nearly ~300 requests and download 18mb of data just to load the front page.

<comment><USER12> Your comment made me bring out DevTools, because I thought your number of requests you said ("~300") sounded a bit high.

Boy was I wrong!!!

      - 500/565 requests
      - 7.0 MB transferred
      - 9.86 second to load

Holy crap!!!

<comment><USER13> This is weird. In Chrome incognito, I get ~400 requests (without scrolling), and in Firefox private browsing, I get ~120 requests before scrolling, and ~190 after. What in the world? I disabled all the extensions in Firefox too.

<comment><USER14> Doesn't Firefox private browsing has a tracking blocklist active by default?

<comment><USER13> Wow, I didn't know that! I thought the tracking protection was just about the DNT header and I didn't expect that to make much difference here. However, even disabling that, I only get ~200 requests. There's still a lot missing... is it still blocking things under the hood?

<comment><USER15> It may also be that different resources are loaded based on browser agent to track the user in different ways/display the page correctly on different browsers/polyfill javascript differences

</comment></comment></comment></comment></comment></comment><comment><USER16> A long time I ago I "automated" the optimization of images on my site by running `optipng` in a cronjob. Every file that touches my server gets optimized.

I wrote about it here: [https://ma.ttias.be/optimize-size-png-images- automatically-w...](https://ma.ttias.be/optimize-size-png-images- automatically-webserver-optipng/)

Benefits:

\- Don't have to think about it

\- Optipng is really good at reducing PNG's to their bear minimum

Downsides:

\- Doesn't resize images (if a 1024x768 is displayed as a 10x8, it'll still download the 1024x768)

\- Only does PNG

\- If your images are stored in git (and you didn't pre-optimize before committing/deploy), you can get merge conflicts

Still, better than nothing.

<comment><USER17> The node package Sharp does a great job of optimizing images and letting you manipulate them for different sizes, color and channels.

[http://sharp.pixelplumbing.com](http://sharp.pixelplumbing.com)

<comment><USER18> If using gulp you can use gulp-responsive which uses sharp internally.

The automatic cropping methods are pretty cool and work really well, too.

</comment></comment></comment><comment><USER19> <picture> <source srcset="sample_image.webp" type="image/webp"> <source srcset="sample_image.jpg" type="image/jpg"> <img src="sample_image.jpg" alt=""> </picture>

Didn't know you could wrap images in a <picture> tag and browsers (except for IE) will automatically download the .webp version if they support it. Used to do this via a Javascript. I like on-demand scaling where you pass scaling parameters in the url, such as: /200x200/sample_image.jpg.

<comment><USER20> No need to do on-demand scaling via JavaScript either! The srcset attribute is also available in <img> tags and lets you define differently sized images for different viewports: [https://developer.mozilla.org/en- US/docs/Learn/HTML/Multimed...](https://developer.mozilla.org/en- US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images)

</comment></comment><comment><USER21> If you're developing on a Mac, ImageOptim can handle all of the image compression (JPG, PNG, etc): [https://imageoptim.com/mac](https://imageoptim.com/mac)

For SVGs, svgo (brew install svgo) usually produces the best results for me.

<comment><USER22> svgcleaner is supposed to be faster and have a better compression ratio than svgo: [https://github.com/RazrFalcon/svgcleaner](https://github.com/RazrFalcon/svgcleaner)

It also has a GUI.

<comment><USER23> After fighting with the options, failing to find a good default, and still consistently getting larger images, I fail to see how svgcleaner is better.

<comment><USER22> I think it's only with lossless compression that it's better.

</comment></comment></comment></comment><comment><USER24> I just ran a quick comparison on two big ecommerce sites I'm familiar with. I know for a fact they performed as much optimization as they possible could in their respective file formats

Webp and .jpg file both had similar dimensions, picture detail complexity, and dpi. Webp format came out to 50% smaller file size

I didn't have enoughof a sampling and/or tests though.

I personally don't think image optimization with webp should be a thing though. The lack of native web support is one issue, the next is lack of native support on windows OS is another.

Two things IMO are most important about image optimization for heavy-image load sites. One is lazyloading.js (frontend library) via specifying a class for those images past a threshold browser height on the backend. Most notably this is used in many ecommerce sites, but on analysis amazon doesn't seem to be using this.

Next would be sprite compression of common social links. A great example of this is amazon actually, checkout this image I extracted from from their webpage.

[https://images-na.ssl-images- amazon.com/images/G/01/gno/spri...](https://images-na.ssl-images- amazon.com/images/G/01/gno/sprites/nav-sprite- global_bluebeacon-V3-2x_optimized._CB474516457_.png)

<comment><USER7> I think with images, just as with videos, there will never be a consensus; some people will insist on certain proprietary formats, forever. At least there's standards now, so that you can provide fallbacks - if you as a website owner would e.g. prefer people use webp because it compresses more than jpg then you can offer both, without forcing one or the other on them.

I wouldn't mind a solution on the server-side though, where in your html you just put an img tag and the server determines what the best format is based on browser support. Of course, that would mean there'd be a header (or some smart user agent analysis) for every image request, and you'd like to keep that overhead to a minimum.

</comment></comment><comment><USER25> I've been using this great imagemagick script for optimizing images the past few years. Works like a charm. Any images that are going to be served from my websites first get optimized via the script.

      smartresize() {
          mogrify -path $3 -filter Triangle -define filter:support=2 -thumbnail $2 -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB $1
      }

Usage:

      smartresize image.png 300 outdir/

Looks like I must have found it here [https://www.smashingmagazine.com/2015/06/efficient-image- res...](https://www.smashingmagazine.com/2015/06/efficient-image-resizing- with-imagemagick/)

<comment><USER26> Thanks. I noticed a gain of 20% on my images with this method.

</comment></comment><comment><USER27> If you are using webpack, I highly recommend imagemin-webpack-plugin [0] (although I might be a bit biased as I created it...)

It will run a slew of image optimizers by default using imagemin, and has support for a wide range of others.

It also supports caching and optimization of images that aren't being directly imported through webpack (thanks to some awesome contributors) so it's a great way to set it and forget it and never have to worry about sending 3mb images to your users by accident.

[0] [https://github.com/Klathmon/imagemin-webpack- plugin](https://github.com/Klathmon/imagemin-webpack-plugin)

<comment><AUTHOR> That's a nice one, thanks for sharing! Makes sense for those who already use Webpack

</comment></comment><comment><USER28> If you are using Ruby, I can recommend the image_optim[0] gem together with image_optim_pack (that packs the binaries), it is maintained by a great person I only know by the name of his handle "toy".

I used to give him a few dollars per week when Gratipay was still up and running, sadly I don't know of an alternative now.

[0] [https://github.com/toy/image_optim](https://github.com/toy/image_optim)

<comment><USER29> Curious as to what Gratipay was, so I did a little a research. It turns out the maintainers of GratiPay have handed over all assets over to Libreapay[0]. Libreapay appears to be a fork for Gratipay. This might be what you have been looking for!

[0] - [https://liberapay.com](https://liberapay.com)

*I have no affiliation with liberapayn just did some curious research.

</comment></comment><comment><USER30> Another option, if your images are simple enough, is to use [https://github.com/fogleman/primitive](https://github.com/fogleman/primitive) to convert it to SVG. Might not be worth the effort though as the space savings could be too insignificant to matter for the artifacts produced. Neat effect though for small amounts of shapes.

<comment><USER31> Another approach is to design the site with SVGs as the priority format. Use flat cartoon like graphics in place of JPG photographs, whenever possible.

</comment></comment><comment><USER32> Sometimes I visit a project and drop all public images (logos, icons, stock photos, whatever) in the project in imageoptim. 75% reduction in file-size for some images is not uncommon.

</comment><comment><USER33> One of the nicest additions to the GitHub Marketplace is a bot that will optimise your images automatically: [https://github.com/marketplace/imgbot](https://github.com/marketplace/imgbot)

(No connection to me - just think it's a great idea, and totally free.)

<comment><AUTHOR> Another GitHub bot[0] was shared earlier. This one looks similar. Thanks for sharing!

[0]: [https://www.shrink.sh/](https://www.shrink.sh/)

</comment></comment><comment> jim-jim-jim Making sure that grayscale/monochrome images are set as such (oftentimes they aren't) can also shave the size down. I use imagemagick for that.

<comment><USER34> This applies to any image will never be seen in its original state - eg. photos that are opacified or dulled down to act as background elements.

We had a site outsourced (because I found Shopify to be ..'tricky'.. to meaningfully work with on a PC) and the developer was darkening 'hero' images on the homepage shout in CSS, rather than specifying that we simply pre- process them in something like Photoshop before uploading.

When I realised (I wasn't particularly hands on by this point) I was livid, so changed the code and we knocked a few hundred Kb off the front page. Our site is necessarily image heavy, so any gains anywhere are useful.

When I first started I had a ceiling limit of about a 120Kb for the entire page - images and all - so today's internet is a weird and foreign land to me.

</comment></comment><comment><USER35> Setup metrics that you'd like to hit for your pages. When I was a kid putting up a fan site for games, (back on Geocities), I was mostly stuck on a 28.8k modem, and aimed to have it finish loading in 30s.

Now, I was quite brutal in the compression and probably should have backed off a bit to avoid artifacts.

It might be nice to have an automated test that the system under test limits the bandwidth and try to load your pages, and set some times that you'd like to hit.

</comment><comment><USER36> is there a robust, automated, and universal process for gauge image optimization result, and comparing it to required image quality level? I've always done it manually and I have a keen sense of image degradations as I increase the compression.

</comment><comment><USER37> I personally have been working around web technologies and performance for the last 14 years. I understand where this article is coming from and I actually have to give it some credit, it has a good click-bait title but it's an old solution. I'm tired of reading about this type of solutions, there are thousands of articles exactly like this one.

Reducing the size of your images is just the first step and there are many things you need to consider in order to make your website faster, things you need to solve: \- Format: deliver the images in the right format for each browser (e.g. using WebP for Chrome) \- Size: What size for each image? What happens on mobile, tablet, desktop and the different screen sizes and pixel ratios (it's not only retina or not) \- Quality: Is your image being resized by the browser? Are you using raw files to generate the optimized images? \- Thumbnails: Are you also generating thumbnails for listings or smaller versions of your images? How are you going those thumbs to your original images? Do you need to use a Database? \- Storage: Where are you going to store those images? \- Headers: Caching static assets it's key for recurrent users, are you using Apache or Nginx? Is your setup working well? \- CDN: are you using a CDN to deliver those assets? CloudFlare is great but it's not the fastest way to deliver images. What about setting the right configuration for that CDN? How much are you going to spend?

So what's next? Going to one of the API service to optimize images, read their 500 pages of docs to get to resize and crop an image? Ad complex plugins to your backend and have a high dependence integration?

I mean, if you like to add more dependencies to your project, maintain more code, spends hours rebuilding scripts and running cron jobs to update your images, go for it.

That's why about 9 months ago we started working on a new concept, solving all these problems with a service that integrates as easy as a lazy-loading plugin and it solves EVERYTHING about image optimization (and yes, everything that you're talking about on every comment on this HN post).

Don't get me wrong, we have a lot to improve and there are many details of our product that we need to polish, but we believe we've built a solution that solves perfectly all the most important parts of image optimization and delivery. It's not about reducing the image size by 1KB more, it's about everything else and understanding the big picture.

We love feedback and our backlog is prioritized based on our customer needs, let us know what you think.

Here's the link to our startup website: [https://piio.co](https://piio.co)

<comment><AUTHOR> Author here. Thanks for the feedback. I agree that what I've done is nothing revolutionary, but the vast majority of websites out there don't have these sort of thing. That's one of the reasons why the average page weight continues to grow every year [0].

Moreover, this solution is good enough for people with small blogs just like mine. Anyone who needs something more involved can use your service or other alternatives.

As for responsive images, I implemented that on my site too although I didn't mention it in the article. I plan to write a follow up article on that topic soon.

On a side note, you might want to bump up the font size of the navigation links on your site. They're too faint.

[0]: [http://idlewords.com/talks/website_obesity.htm](http://idlewords.com/talks/website_obesity.htm)

<comment><USER37> Totally agree with the page weight and that we're missing something. Increasing page weight when we're also increasing connection speeds is only bad when the first one increases more rapidly, and I believe that we're under that situation.

Would love to connect to chat about this and for sure I'll read the follow-up article.

Thanks for the feedback too!

</comment></comment></comment><comment> Xt-6 After seeing people forgetting to do basic optimization step on images at our respective jobs, a friend and I build [https://www.shrink.sh](https://www.shrink.sh). The goal this tool is to create a catch all system. It also prevent you from installing some tools that will slow even more build or deploys and that you would need to maintain forever.

</comment><comment><USER38> For one of my websites (a static page with some pretties), I challenged myself to remove as much cruft as possible without degrading the experience.

I used Fontello to strip out unnecessary FontAwesome icons and uncss to remove unused Bootstrap styles, replaced some Bootstrap JS with vanilla JS and made use of SVGs (optimised with SVGOMG) for backgrounds and the logo.

The resulting site is a total of 178Kb when viewed in Chrome (down from over 1MB), including bootstrap, analytics, some screenshots, a custom font and animated logo. There's plenty more I could do to trim off size, but I had more important things to do.

There are so many ways to make webpages smaller and more efficient, and it can be a really fun learning experience.

</comment><comment><USER39> [https://github.com/DarthSim/imgproxy/](https://github.com/DarthSim/imgproxy/) imgproxy I've not seen mentioned, it is probably the fastest image processing I've used yet. It uses libvips, [https://github.com/jcupitt/libvips/wiki/HOWTO ----Image-shrin...](https://github.com/jcupitt/libvips/wiki/HOWTO----Image- shrinking) which not only handles resizing & other basic img needs but optimizes on top of being very light weight on memory & CPU cycles compared to most other implementations.

</comment><comment><USER40> There's some unexamined hooey in this post. For example you can't really compress a JPEG, but you can re-encode it to a lower quality, which can have dramatic effect on the file size. That's what moz2jpeg is doing for this person.

But they could have just done the same thing in Photoshop, Preview, MS Office image tool, etc. JPEG is a standard; file size does not depend on what tool you use to create it. It's strictly dependent on the image itself, and the render settings you choose. Same with PNG.

In fact, you'll get better quality for the file size if you go directly from the original image straight to your final resolution in one step. Rendering to high-quality JPEG, then re-rendering on the server to shrink the file size, will give you worse image quality than just going straight from the original file to the final in one render.

WebP looks promising but is not yet well-supported. Most sites can go a long way just by caring about, testing for, and adjusting image rendering defaults to optimize for file size.

EDIT to add a bit more:

If you are optimizing images as part of a pre-deploy build process, you can use whatever library you want. The only thing that really matters is your choice of format (JPG or PNG), and the render settings. Or, you can hand- optimize the images and drop them into your repo to deploy as-is.

If you're running a CMS where non-developers are going to be uploading images through an admin UI (like Wordpress), your CMS should be using a server-side library to render optimized versions of the images that get uploaded, then serving the optimized versions. You can adjust the settings of the server's image library, although that might require a plugin or module, or custom code, depending on the CMS.

Missing this is a common killer mistake in page load times. I visited a site the other day that served a _16 MB JPEG file_ for the "hero" image on the homepage. My guess it that it was the JPEG straight out of a high-resolution camera.

This is also good for user privacy, as the server-side rendering should remove IPTC and EXIF data that would get served with the original image.

<comment><USER41> > JPEG is a standard; file size does not depend on what tool you use to create > it.

That's simply not true. The specific choice of cosines can make a huge difference on compression while having nearly zero perceived visual difference. Most encoders however take a naive approach whereas something like Guetzli does an amazing job of compressing JPEGs way better than Photoshop ever could.

<comment><USER40> Guetzli is not appropriate as a general-purpose tool for optimizing website images. That's not really what it's designed for.

I guess I should specify that I'm trying to give practical advice for people who think the linked blog post is instructive. For the vast majority of people, the simple act of thinking about, selecting, and testing the available settings in popular image optimization tools is going to have a far greater effect than the small optimizations (and sometimes big tradeoffs) that might come from cutting-edge stuff like Guetzli.

The reward per effort of going from "not optimizing my images" to "purposefully optimizing my images using common tools" is typically much bigger than the step from the latter to "using the absolute best possible tool for each image."

<comment><USER42> > Guetzli is not appropriate as a general-purpose tool for optimizing website > images. That's not really what it's designed for.

What is it designed for? I downloaded and compiled it, and it seems to work quite well for the photographs on my website. The README says:

> Guetzli is a JPEG encoder that aims for excellent compression density at > high visual quality

[https://github.com/google/guetzli/](https://github.com/google/guetzli/)

<comment><USER40> Guetzli is for minimizing file size at the highest quality levels for JPEGs. Essentially, it's for nice looking photos.

It only goes down to quality 84 and it takes a looonngg time to optimize. As a point of comparison, the author of the linked blog post dropped his JPEG quality to 70 and was happy with it. A JPEG at 70 (or lower), if you're happy with the look, has a good shot to be even smaller than the smallest Guetzli output.

Generally speaking, the easiest gains in JPEG file size will probably come from just dropping the quality down and down in tests, and deciding what you can live with. But if you have to have the best quality, and have plenty of resources/time for encoding, then maybe Guetzli will be a good fit.

</comment></comment></comment></comment></comment><comment><USER43> You can save another 7.6% on that png by passing it through advpng+pngout. ImageOptim is fantastic for this: [https://imageoptim.com/mac](https://imageoptim.com/mac)

</comment><comment><USER44> We at Gumlet also provide image optimisation which just works: [https://www.gumlet.com](https://www.gumlet.com) It's also accompanied by client side javascript library: [http://github.com/gumlet/gumlet.js](http://github.com/gumlet/gumlet.js)

</comment><comment><USER45> Cloudinary is another option to get optimized images/videos without having to manually optimize everything. Definitely a good option if you have lots of user uploaded content. Running an optimization script within your app will likely use more resources than it's worth unless you're already operating at scale.

<comment><USER46> If you use Akamai's CDN you can get per-browser auto image optimization (size, quality, format) as an add-on service via Image Manager.

</comment></comment><comment><USER47> 2016 Google developers conference had something on this : [https://m.youtube.com/watch?v=r_LpCi6DQME](https://m.youtube.com/watch?v=r_LpCi6DQME)

</comment><comment><USER48> we recently moved all our images to s3, we have created some lambda function which compress the images using Guetzli, it's very slow but the results are good.

</comment><comment><USER49> This article like many others is full of fallacies.

Image formats are not used wisely: [1] is PNG not JPEG and [2] is JPEG not PNG.

> I found that setting quality (mozjpeg) to 70 produces good enough images for > the most part, but your mileage may vary.

You can get away with this setting for hidpi sizes but 1x will look horrible [1]. If you care about quality, the mileage is actually 75-95.

> (Pngquant) quality level of 65-80 to provide a good compromise between file > size and image quality

Again, it may only be applied to hidpi sizes, and it will easily ruin any gradients or previously quantized images.

Pngquant is a great color quantization tool but it does not actually perform any lossless PNG optimizations, which can save you at least 5% more, and up to 90% in some cases.

All of these tools will also blindly strip metadata (but it's not guaranteed!) along with color profiles and Exif Orientation resulting in color shifts and image transformations respectively.

Most importantly, none of them are good enough for automatic lossy compression. Guetzli is the closest but it still has some severe issues [3]. I'm also trying to build a real thing, and it is hard.

> there's value in using WebP formats where possible

WebP lossless and WebP lossy are quite different formats. WebP lossy being always 4:2:0 is not a good replacement for JPEG [4] especially at higher quality. On the contrary WebP lossless has evolved into a decent alternative for PNG including lossy [5].

Proper responsive images would give you considerably smaller page weight and improve performance on mobile devices. BTW Google treats oversized images as unoptimized [6].

[1] [https://freshman.tech/assets/dist/images/http-status- codes/e...](https://freshman.tech/assets/dist/images/http-status- codes/everything-ok-683.jpg)

[2] [https://freshman.tech/assets/dist/images/articles/freshman-1...](https://freshman.tech/assets/dist/images/articles/freshman-1600-original.png)

[3] [https://github.com/google/guetzli/issues](https://github.com/google/guetzli/issues)

[4] [https://research.mozilla.org/2014/07/15/mozilla-advances- jpe...](https://research.mozilla.org/2014/07/15/mozilla-advances-jpeg- encoding-with-mozjpeg-2-0/)

[5] [https://twitter.com/jyzg/status/958629795692150790](https://twitter.com/jyzg/status/958629795692150790)

[6] [https://developers.google.com/speed/pagespeed/insights/?url=...](https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Ffreshman.tech&tab=desktop)

</comment><comment><USER50> Hate to ask a dumb question but What are the best tools/strategies to optimize images?

</comment><comment><USER51> I just did convert -strip -quality 40 for a website I had to make

</comment><comment><USER52> I use Kraken on every site I do for this reason.

</comment><comment><USER53> There are better ways that place usability first. By usability this means that there is nothing for the content creator to do and nothing for the frontend developer to do.

I use mod_pagespeed - there are versions for nginx and Apache that do all of the heavy lifting.

With mod_pagespeed you can get all of the src_set images at sensible compression levels. All you need is to markup your code with width= and height= values for each img.

With this in place the client can upload multi-megabyte images from their camera without having to fiddle in Photoshop etc. It just works and the hard part is abstracted out to mod_pagespeed.

By taking this approach there is no need to use fancy build tools. However, a background script to 'mogrify' your source images is a nice complement to mod_pagespeed, if you want your images to be in Google Image Search then 1920x1080 is what you need.

The really good thing about taking the mod_pagespeed route is that you do get 'infinite zoom' on mobile, e.g. pinch and zoom and it fills in the next src_set size. Keep going and you eventually get the original, which you have background converted to 1920x1080.

There is also the option to optimise image perceptually, so you are not just mashing everything down to 70% (or 84%).

On your local development box you can run without mod_pagespeed and just have the full resolution images.

Or you can experiment with more advanced features such as lazy_loading - <USER2> also comes for free with mod_pagespeed.

If you want your images to line up in nice squares then you might add in whitespace to the images. Maybe taking time in Photoshop to do this. However, it is easier to just 'identify' the image height/widths and to set something sensible for them, keeping the aspect ratio correct. Then you can use modern CSS to align them in figure elements to then let mod_pagespeed fill out the src_sets.

Icons and other images that are needed are best manually tweaked into cut down SVG files and then put into CSS as data URLs, thereby reducing a whole load of extra requests (even if it is just one for a fiddly 'sprite sheet').

Oh, a final tweak, if you are running a script to optimise uploaded images and to restrict max size then you can also use 4:2:0 colour sampling. This is where the image still has the dots but the colours are 'halved in resolution'. This is not noticeable in a lot of use cases and particularly good if you are using PNGs to get that transparency.

As mentioned, mod_pagespeed reduced project complexity by offloading the hard work to the server, keeping cruft out of the project and making the build tools out of the way. It can also be covered to inline some images and plenty else to get really good performance.

Mileage may vary if the decision has been made to use a CDN where such functionality is not possible. However, if serving a local market then a faux CDN is pretty good, i.e. a static domain on HTTP2 where the cache is set properly and no cookies are sent up/down the wire to get every image.

[https://www.modpagespeed.com/doc/filter-image- optimize](https://www.modpagespeed.com/doc/filter-image-optimize) [https://www.modpagespeed.com/doc/filter-image- responsive](https://www.modpagespeed.com/doc/filter-image-responsive)

</comment><comment><USER54> > How Image Optimimization decreased my website's page weight by 62%

Title needs spellcheck.

<comment><USER55> Would save 3% too.

<comment><USER56> $ echo "How Image Optimimization decreased my website's page weight by 62%" | wc -m

67

$ echo "How Image Optimization decreased my website's page weight by 62%" | wc -m

65

$ echo "scale=3; (67-65)/67" | bc

.029

Math checks out, sir.

<comment><USER54> But:

        $ echo "" | wc -m
        1

You probably want to add the -n flag to echo. It doesn't change the validity of the statement though.

</comment></comment></comment></comment><comment><USER57> Optimisation

</comment><comment><USER58> Venkatraman Santanam.

Made deep learning improve thumbnail representation. Facebook (or google) showed up, gave him a 6 to 8 zeros to the left of the decimal, preceded at the far left by a $ and O(1).

[https://arxiv.org/pdf/1612.03268.pdf](https://arxiv.org/pdf/1612.03268.pdf)</comment>


Massively speed up 3d printing by using holograms - <AUTHOR> https://all3dp.com/startup-daqri-hologram/ <comment><AUTHOR> So basically, what's going on is that Daqri has a software-defined hologram that you can point at resin to print the _entire object_ on one go.

What remains to be seen is the available "depth" (this paperclip is ~1mm - <USER2> you print a 10mm object?), and whether you can print cavities without support material (since you're printing the whole thing in one go), but that may be the case.</comment>