Ian Hickson Profile
Ian Hickson

@Hixie

Followers
7,025
Following
105
Media
13
Statuses
1,273
Explore trending content on Musk Viewer
Pinned Tweet
@Hixie
Ian Hickson
3 years
Did you know you could submit your app's tests to the Flutter project, so that we would run them with every change to Flutter's APIs, and that we commit to not breaking you if you do this?
10
53
207
@Hixie
Ian Hickson
1 year
The problem with cross-platform frameworks, I'm told, is that they can never perfectly match the system widgets.
20
43
420
@Hixie
Ian Hickson
3 years
@AcidBurn1986 @pervocracy @elibyronbaldrsn When people lose their mind over the "monkeys and humans have a common ancestor" thing, I'm like, wait til you hear about how humans have a common ancestor with fish... or bees... or trees...
1
4
353
@Hixie
Ian Hickson
4 years
Well, I vote for @a14n as @FlutterDev team member of the year, after they single-handedly migrated the entire Flutter framework to null-safe Dart in a matter of weeks. Hooray! 🏆
6
16
144
@Hixie
Ian Hickson
2 years
Every now and then I come across something that I wish I'd invented. This is one of them. Such a clean API, yet so powerful. We've long sought out how to make animations in Flutter easier, and this is far better than I had even hoped for.
@gskinner
Grant Skinner
2 years
As part of #FlutterForward I recorded a talk about the flutter_animate library I've been working on. It's a performant library that makes it simple to add almost any kind of animated effect to your UI. #Flutter #flutterdev
5
22
146
0
8
99
@Hixie
Ian Hickson
2 years
Flutter now has static analysis, in our CI, of every last snippet of code in our API docs.
4
10
94
@Hixie
Ian Hickson
2 years
Ever wanted to help out with Flutter? We just released a beta and are looking for help shaking out any bugs, especially in the tool, which had a major refactor this time around for null safety. Run `flutter channel beta`, try things out, let us know your experience!
3
14
89
@Hixie
Ian Hickson
3 years
I love that the screenshot for , an iOS widget, is actually... a fully interactive Flutter web app demonstrating the package. Being cross-platform is sometimes useful even for platform-specific code...
2
7
86
@Hixie
Ian Hickson
1 year
@GroovinChip If it was a Flutter app, the scroll bars would be consistent with each other. 😅
3
0
86
@Hixie
Ian Hickson
2 years
This is your periodic reminder that if you develop a Flutter library you really should submit it to flutter/tests so that we can guarantee not to break your library and your library's users next time we update Flutter.
@Hixie
Ian Hickson
3 years
Did you know you could submit your app's tests to the Flutter project, so that we would run them with every change to Flutter's APIs, and that we commit to not breaking you if you do this?
10
53
207
4
17
80
@Hixie
Ian Hickson
3 years
Time spent blocked trying to figure out how to code an idea: 5% Time spent blocked trying to come up with a good name for a variable: 95%
5
3
75
@Hixie
Ian Hickson
3 years
Every error message is an opportunity to make someone love your product.
2
17
77
@Hixie
Ian Hickson
4 years
I'm still trying to figure out if it's just the middle of winter over in Dashland or if it's just somewhere where nature has blue chlorophyll... Oh yeah also y'all should watch our thing next week! I'll be in it! Live from my house! This pandemic thing is weird.
@FlutterDev
Flutter
4 years
We've got a big surprise! We're one week away from #FlutterEngage on March 3rd. Are you ready for Flutter, too? 💙 Register now →
69
473
2K
1
5
71
@Hixie
Ian Hickson
3 years
Thinking about that time I confused everyone by having the stack in the HTML parser spec grow down rather than up like a real stack, but nobody bats an eye at the way trees are always rooted at the top with leaves at the bottom, what is that, have you ever even seen a real tree.
1
3
66
@Hixie
Ian Hickson
3 years
This is really good news for the web.
@SCOTUSblog
SCOTUSblog
3 years
BREAKING: In major copyright battle between tech giants, SCOTUS sides w/ Google over Oracle, finding that Google didnt commit copyright infringement when it reused lines of code in its Android operating system. The code came from Oracle's JAVA SE platform.
60
2K
3K
2
16
66
@Hixie
Ian Hickson
3 years
Every long-lived open source project I've ever been involved with has bugs on file from early on, and in every case I see people express surprise that there are bugs that have been open for years. Like, yes, that's how software development works when you're successful...
3
15
62
@Hixie
Ian Hickson
3 years
@EmilyKager Now the TL for @FlutterDev , previously editor of the @htmlstandard for ~10 years; my degree is in physics.
0
7
61
@Hixie
Ian Hickson
3 years
Flutter's audio plugin tests need actual sound data to test playback, so we're brainstorming the best sounds to use, bearing in mind that if we forget to mute the devices in the lab, some poor tech is going to hear these every few hours. Rooster? Dripping water? Mewing kitten?
19
3
58
@Hixie
Ian Hickson
3 years
Same for Flutter. Family and personal well-being has always come first.
@aboodman
Aaron Boodman
3 years
Chrome was delivered without any sprints at all. The team came in at 9 and left at 5 (figuratively, people actually kept their own ~8h schedules) every workday for a couple years like clockwork. No drama. No broken marriages, no broken families.
71
2K
12K
1
9
59
@Hixie
Ian Hickson
3 years
When writing error messages, even those that will "never" be seen or only ever be seen by bad actors, consider that one day that error message may be shown to one of your clients while they are in distress. In other news, my dentist's web site right now just says "You are bad".
4
17
57
@Hixie
Ian Hickson
3 years
I've never found a good solution to the problem of getting feedback on an early proposal. There seems to be no step between "everyone ignores it because it doesn't matter" and "everyone freaks out because they think you're deploying a fait accompli".
4
5
56
@Hixie
Ian Hickson
1 year
my new mission in life is to replace "scientifically proven" with "scientifically demonstrated a 95% chance of being better than placebo in a double-blind controlled trial wait what no we didn't do that sorry" (this mission will be short-lived i expect)
4
4
56
@Hixie
Ian Hickson
3 years
Borland Delphi is for me a big part of my inspiration for my work on Flutter. Delphi was an even cleaner execution of the Visual Basic idea of "Rapid Application Development", often shunned by "professionals" as "drag and drop programming".
@RealGeneKim
Gene Kim
4 years
Ouch. @timsneath pointing out how much more difficult it is to write apps now vs. Visual Basic. (Which is, incidentally, why I've invested 40+ hours learning Fulcro in Clojure — the promise of bringing back that ability to generate form-based apps is so appealing!)
Tweet media one
4
9
42
4
10
51
@Hixie
Ian Hickson
4 years
I love that even fully open source projects like Flutter can still have big reveals. Hard to believe it's only been two years since the big Flutter Live event where we announced the 1.0 build!
@FlutterDev
Flutter
4 years
Everyone is invited! 🥳
Tweet media one
157
643
4K
0
2
49
@Hixie
Ian Hickson
3 years
This whole thread is 😳😬😧. When engineers talk about having global impact this is not what we mean, I swear.
@emollick
Ethan Mollick
3 years
A third of all genetics papers published in Nature over a decade (and 20% across all journals) had errors due to the fact that many gene have names like SEPT2 (the official name of Septin 2), which were automatically coded as dates by Microsoft Excel.
Tweet media one
Tweet media two
53
816
2K
2
16
48
@Hixie
Ian Hickson
2 years
I still remember when @adambarth accosted me in the hallway and asked me to write some specs for a small thing he was working on... little did I know the crazy journey we were embarking on.
1
3
47
@Hixie
Ian Hickson
3 years
It's self-eval / promo season at Google, and unrelatedly on Flutter right now many efforts center around jank and rendering stutters. As a leader on Flutter's team at Google, all my meetings, e-mails, and chats right now are about "perf" and I am so confused.
2
0
43
@Hixie
Ian Hickson
1 year
One of the reasons I care so much about our API docs is that I use them literally ALL THE TIME.
@FlutterDev
Flutter
1 year
Flutter devs: The Flutter team seems to know everything about Flutter! The Flutter team: Regularly watching our own videos to remember anything
Tweet media one
31
72
775
0
2
43
@Hixie
Ian Hickson
1 year
@CodeOnTheRocks_ @timsneath Flutter is open source, and we're always very eager to get contributions, especially for Cupertino widgets! Join us on our Discord to get started, link is in the contributor guide:
1
7
42
@Hixie
Ian Hickson
3 years
Hanging out with @tomgilder at I/O and reminiscing about what Flutter was like in 2014... this is what it looked like back then, yikes.
Tweet media one
2
5
41
@Hixie
Ian Hickson
3 years
Are you a Dart/Flutter package owner who was broken by our most recent release? Register your tests in our repo and we guarantee we won't break you again.
@Hixie
Ian Hickson
3 years
Did you know you could submit your app's tests to the Flutter project, so that we would run them with every change to Flutter's APIs, and that we commit to not breaking you if you do this?
10
53
207
0
8
40
@Hixie
Ian Hickson
3 years
This presentation gives a post-hoc rationalization for several core architectural choices in the Flutter framework that can be helpful in understanding why things are how they are. (Mostly these reasons are fictional and the real reasons are "we got lucky" but...)
@LeoAFarias
Leo⚡Farias
3 years
The Mahogany Staircase - Flutter's Layered Design by @Hixie - A must for any Flutter developer that wants to know a bit more about it's architecture.
1
1
15
2
5
38
@Hixie
Ian Hickson
3 years
"Software is the only business in which adding extra lanes to the Golden Gate bridge would be called maintenance" -- David Tilbrook, ca. 1981 As true today as it was four decades ago...
2
4
39
@Hixie
Ian Hickson
2 years
Some of these jobs are for working on Dart and Flutter in a variety of roles, check out:
@sundarpichai
Sundar Pichai
2 years
We're announcing plans to invest ~$9.5B in communities across the US and create 12K+ new jobs at Google in 2022. This builds on the hundreds of billions in economic activity Google helped provide last year for US businesses, creators, nonprofits and more.
169
243
2K
3
11
38
@Hixie
Ian Hickson
3 years
I wish I could say that the FSF reinviting RMS to their board surprised me. When people ask why there aren't many women applying for tech jobs: this is exactly why. This, over and over again, all across our industry. It's disgusting.
2
9
38
@Hixie
Ian Hickson
2 years
I'm doing some analysis of activity on Flutter's GitHub repo. Shout out to our most intense participant, who in 2021 added five emoji reactions in one second and never returned. 👍😕❤️🚀👀
1
0
37
@Hixie
Ian Hickson
3 years
Large chunks of the web — the parser, what elements do what, parts of how HTTP work, many DOM APIs, how animated GIFs work, you name it — come not from specs, but from reverse engineering existing implementations.
2
9
37
@Hixie
Ian Hickson
2 years
I love the way that our industry has collectively decided to just pretend it's possible to make "non-breaking changes".
4
2
33
@Hixie
Ian Hickson
3 years
The RenderObject system was the result. When @abarth came back I handed him this whiteboard where the green parts are what I had implemented and the black parts were the APIs I had assumed would exist, and he implemented the black parts.
Tweet media one
1
0
33
@Hixie
Ian Hickson
4 years
Ten years ago, I stopped blogging in favour of Google+. Google+ didn't last long, sadly. Today I migrated the interesting(?) public posts I'd made on G+ to my blog (thanks to Google Takeout). I guess that means my blog is back? ()
3
0
32
@Hixie
Ian Hickson
2 years
Apropos of nothing, the entire budget for the WHATWG from 2005 to 2015 was about $20 a year for the domain and hosting, which I paid out of pocket. (It's a little bit more now but not by much. Not sure exactly who's paying for it these days though.)
4
1
31
@Hixie
Ian Hickson
3 years
Sometimes a software project is faced with a trade-off, a decision where there are pros and cons for each option and none of the options are perfect. Often, after years of living with a decision, the maintainers will switch to one of the other options. Often, it's worse.
1
1
30
@Hixie
Ian Hickson
3 years
Recruiters, if you won't even tell me what the supposed job you want to hire me for is, let alone how much it will pay, without a phone call, then I'm going to go on a limb and say I'm not interested.
1
0
29
@Hixie
Ian Hickson
2 years
The basic idea is to create a set of low-level primitives based on Wasm, WebGPU, WebHID, and ARIA, so that frameworks in languages like Dart, Go, or Kotlin can build on a solid foundation rather than having to build apps by targeting a document format and JavaScript.
2
0
28
@Hixie
Ian Hickson
3 years
When writing documentation I try to always make the examples be cultural references or in-jokes rather than random content. There's obscure LGBTQ+ references in the HTML spec, Hamilton quotes in the Flutter docs, pictures of my cats, references to events or people in my life...
@JillWohlner
jill wohlner
4 years
Whats something silly you've done in your career that still makes you laugh?
99
29
182
1
2
28
@Hixie
Ian Hickson
3 years
That feeling when you e-mail someone and their out-of-office e-mail autoresponder tells you to contact yourself.
0
1
27
@Hixie
Ian Hickson
2 years
There are two kinds of SDK developers: those who wish they could find a way to support shared-memory multithreading, and those who regret adding support for shared-memory multithreading.
0
0
27
@Hixie
Ian Hickson
2 years
It's been almost 20 years since we started HTML5, back in 2003. At the time there really was no standard cross-architecture cross-platform binary target like Wasm. Now that there is, it's time to rethink how we should extend the Web.
1
0
26
@Hixie
Ian Hickson
2 years
That feeling when you're editing dev/bots/test/test_test.dart, the unit test for the script that runs the tests in the test environment.
2
1
26
@Hixie
Ian Hickson
2 years
So much exciting stuff in these release notes!
@timsneath
Tim Sneath
2 years
Flutter 3.7 is a mega release, with so many useful features. We decided to release it the night before Flutter Forward so we could focus on the 'Forward' bit today. It's going to be a fun day! #Flutter #FlutterForward
11
149
698
0
1
26
@Hixie
Ian Hickson
3 years
PSA: adding a delay won't fix your flakes, it'll just make them less frequent while slowing down your tests.
4
1
25
@Hixie
Ian Hickson
1 year
I think it's a real lost opportunity that as an industry we haven't standardised on "bobbin" as the name for a group of strings, especially as in a localization file.
2
3
24
@Hixie
Ian Hickson
2 years
Or as if a stack as inane as HTML+JS became the basis of our entire economy wait
1
5
22
@Hixie
Ian Hickson
3 years
When we put it together, it worked! Anyway, I got sidetracked by this story but suffice to say, putting personal health and families first in no way a compromise. Even if it wasn't just the right thing to do morally, it's still the most effective way to build a productive team.
0
2
22
@Hixie
Ian Hickson
8 months
@RydMike @jpohhhh @ASalvadorini @briankariuki @luke_pighetti I've been working on menus for blankcanvas these last few days, but my speed has not yet gotten any faster than it was when I was still at Google, unfortunately. Most of my recent Flutter efforts have been spent on fixing old technical debt issues.
1
2
22
@Hixie
Ian Hickson
1 year
@icnahom That's certainly something to contend with, but to be honest a much bigger challenge is dealing with platforms that lock features behind private APIs.
1
0
21
@Hixie
Ian Hickson
3 years
while (true); do (clear; lcov -l coverage/lcov.info; flutter test --coverage; emacsclient --eval '(coverlay-reload-file)'); done
1
0
21
@Hixie
Ian Hickson
2 years
The thing this proposal is missing, though, is a catchy name. "Wasm ABIs for WebGPU, WebHID, and ARIA" doesn't really roll off the tongue. Anyone got any suggestions for a name and fancy logo for people to rally around? :-)
19
1
21
@Hixie
Ian Hickson
3 years
This 👇. When building something, the up front cost is obvious, but in reality it's dwarfed by the maintenance cost over the lifetime of the product. That's the main cost I try to keep in mind when doing long term planning.
0
6
20
@Hixie
Ian Hickson
3 years
Emacs highlights the uncovered lines in red. As I write tests, the highlighting disappears, one line at a time.
2
2
20
@Hixie
Ian Hickson
3 years
@LifeIsATest1776 @CryptoWhale Those were outdoors, largely masked, and somewhat socially distanced...
3
0
17
@Hixie
Ian Hickson
3 years
Can someone in the Java ecosystem explain to me why Java applications don't ship with a known-good Java VM, instead relying on a machine-wide shared VM, and yet Java isn't guaranteed to be backwards compatible? I don't understand this design choice.
5
4
19
@Hixie
Ian Hickson
3 years
I'm amused at how this tweet means nothing at all to some in my family and is hilarious to others.
@shantonusen
Shantonu Sen
3 years
My kids just asked why there was a Minecraft update with no features and what a “Log4J” was, and I have been preparing my whole life for this. I had to start at the beginning with C format strings. I should be able to get to Java and jar files by midnight.
103
2K
12K
0
0
19
@Hixie
Ian Hickson
1 year
@dancamdev @vincevargadev @CodeOnTheRocks_ @timsneath If you run into any trouble with the rules (which are mostly just that PRs have to be tested and pass the tests) please don't hesitate to reach out on the Discord, we have a channel just for that purpose.
0
0
18
@Hixie
Ian Hickson
3 years
@timsneath @windowsdev Also, Windows developers, if you want to take Tim's "join the Flutter team" more literally than he intended, we're hiring!
0
3
18
@Hixie
Ian Hickson
4 years
Tweet media one
0
3
18
@Hixie
Ian Hickson
4 years
Live in five minutes!
@FlutterDev
Flutter
4 years
💙 Today's the day, it’s #FlutterEngage ! Thank you for tuning into the livestream, the keynote will begin in 30 minutes! Join the Flutter community around the world for this special online event! We can't wait for you to join us. Tune in 👉
3
88
339
0
2
18
@Hixie
Ian Hickson
3 years
Hot take: Programming languages want to be boring, fun, and productive, and for programming languages, the opposite of "boring" is "surprising", the opposite of "fun" is "frustrating", and the opposite of "productive" is "tedious".
0
1
17
@Hixie
Ian Hickson
3 months
I just spent multiple hours trying to debug a new certificate setup only to realise that I'd just used the wrong Common Name. Why do crypto systems have such terrible developer experiences? A simple "CN doesn't match" message would have saved me so much effort.
2
1
17
@Hixie
Ian Hickson
1 year
Every few years I watch Primer (runtime 1h17m) and then spend 3 hours examining the various conflicting explanations people have written and diagrams people have drawn trying to understand it.
2
1
17
@Hixie
Ian Hickson
2 years
@migueldeicaza To the extent that the HTML5 circle is not entirely inside the ISO-8601 circle, except for allowing spaces instead of "T" between dates and times, I apologize profusely.
0
2
16
@Hixie
Ian Hickson
3 years
🐱🎼🎵
@treydayway
Trey
3 years
I got high and listened to this for 4 hours straight
787
8K
33K
1
2
16
@Hixie
Ian Hickson
3 years
Have you tried package:rfw? Tell me your stories! ()
1
2
15
@Hixie
Ian Hickson
2 years
There's some fun blog posts I wrote back in the day about this process, like , , and
@aboodman
Aaron Boodman
2 years
@FIR3CHI3F @ericlaw The modern answer for this question is that @Hixie painstakingly documented every. single. twist and turn the HTML parser is supposed to take. So new parsers just have to consult that. But there's a more interesting question of how that documentation came to be.
1
0
9
0
1
15
@Hixie
Ian Hickson
3 years
Yes.... on purpose, that's definitely what I've been doing. 😬
@bphogan
Brian P. Hogan
3 years
What would be really funny Is if people who maintain popular repos Started putting in wrong code on purpose.
0
33
575
0
1
15
@Hixie
Ian Hickson
2 years
Our contributing guide () has a link to our Discord, where you'll find a #qa channel where we can coordinate efforts.
0
1
14
@Hixie
Ian Hickson
2 years
This looks really neat.
@timsneath
Tim Sneath
2 years
Introducing Flutter Animate, a new library from @gskinner that makes adding animated effects to your app a snap: . More about it here: #Flutter #uidesign #animation #mobileapps
10
110
466
0
0
14
@Hixie
Ian Hickson
2 years
I tell folks at work this all the time. Q4 is only 6 weeks long. You should plan for half of your team to be on vacation at any given time (and not all at the same time).
@digitallogic
Mark Roddy
2 years
Quick reminder of how Q4 works: If it hasn't happened by November 15-ish, it ain't happening till January.
61
939
8K
1
2
14
@Hixie
Ian Hickson
2 years
x64: "there are 16 general purpose registers" also x64: "mul only works with rax, shl only works with rcx, movs only works with rsi/rdi" 🤨 when you say "general purpose"...
1
1
13
@Hixie
Ian Hickson
2 years
The goal is simplicity and developer ergonomics, more than performance, though performance is likely a side-effect.
1
0
13
@Hixie
Ian Hickson
3 years
An opposite ruling would have brought into question all the reverse engineering that's made the web what it is, potentially triggering any number of long-since-gone players to, ah, reenter the arena, shall we say.
1
3
13
@Hixie
Ian Hickson
2 years
@RydMike For those of you having trouble seeing the doc, this link should work: For the record this is very much an experimental project and not a formal part of our strategy (yet). Comments welcome though!
1
2
13
@Hixie
Ian Hickson
2 years
Hotel reviews are a trip y'all. "This hotel is beyond dated. It literally looks and SMELLS like an old casino. Everything is old, dingy, dusty. I literally paid to sleep elsewhere because it gave me the creeps. 6/10" WAIT WHAT HOW IS THAT SIX OUT OF TEN
1
0
13
@Hixie
Ian Hickson
2 years
The pandemic has really changed my attitude on things that I used to consider inevitable. I used to get colds multiple times a year; I haven't had one since early 2020. Forget COVID for a minute, I just don't want to get another cold! They sucked! Sick days, better ventilation...
@_Eric_Reinhart
Eric Reinhart
2 years
When pre-pandemic Americans had a cold, most carried on with their lives as usual. So long as they felt good enough, they’d go maskless to their jobs, gym, theater, bar, restaurant, etc without hesitation, making hundreds of others sick along the way. Why was that ever “normal”?
841
7K
52K
1
1
13
@Hixie
Ian Hickson
3 years
My work day got entirely derailed today when one of my partners shared with me the existence of a restaurant in Osaka, Japan, that is also simultaneously a model railway exhibit and a kitten rescue, as well as being a cat hotel.
4
0
12
@Hixie
Ian Hickson
3 years
Unfortunately, unless something has changed about the pros and cons of the original decision, usually, doing nothing (and staying the course) is the right choice... for the same reasons that the decision in question was the right choice in the first place.
3
0
12
@Hixie
Ian Hickson
3 years
@filiphracek @KhanhNwin @ktjlee1 omg I never saw the finished product this is fantastic! We need to link to this from the error message!
2
0
12
@Hixie
Ian Hickson
2 years
It's been almost ten years since the Extensible Web Manifesto was published, back in 2013, and we still can't actually explain Web APIs by referencing simpler primitives. ()
1
0
12
@Hixie
Ian Hickson
5 years
@LanceJagerson provides a counterargument (namely that the study did hold up, though both study and replications have been misinterpreted in popular media).
1
2
12
@Hixie
Ian Hickson
15 years
W3C staff refuses to use HTML5 to publish the HTML5 spec. I couldn't come up with better symbolism for the W3C's fear of change if I tried.
0
0
11
@Hixie
Ian Hickson
3 years
I remember a time early on when I found myself the only person at the office, literally everyone else was on vacation or baby-bonding leave. At the time my role was spec writer but I figured if I was going to be the only one around I had better start coding...
1
0
12
@Hixie
Ian Hickson
3 years
There's something magical and very satisfying about programming with a feedback loop measured in seconds.
1
0
12
@Hixie
Ian Hickson
3 years
The experience of writing code with Delphi was _fun_, though. It abstracted away all the awkward platform details, it gave you a really friendly language, things just worked most of the time. This is what we've really aspired to create with Flutter.
2
0
11
@Hixie
Ian Hickson
1 year
@luke_pighetti For what it's worth we've been having a few discussions about what we can learn from Swift UI recently (we often look at other projects to see what we can learn). I'm trying to merge the threads into one on our Discord (in #hackers -framework); you are welcome to participate!
0
0
11
@Hixie
Ian Hickson
2 years
Looking for Flutter's DevTools to support exporting the network tab as a HAR file? A PR was contributed but needs just a little more work before it can land: If you're looking for something to contribute, this would be a great place to start!
0
1
11
@Hixie
Ian Hickson
3 years
A test that fails 2% of the time is a failing test, not a passing test. Corollary: To detect flakes, you should rerun passing tests, not failing tests.
0
1
11
@Hixie
Ian Hickson
3 years
@adambarth @lets4r @github Oh I figured out the right way to fix that a while back, I really should get around to making a patch for it...
1
0
11
@Hixie
Ian Hickson
3 years
@RydMike We regularly go through older bugs (though maybe not as thoroughly as we could). It's fun to look at these oldest bugs though... for example, #443 is an unsolved problem in computer science (people have literally written papers about the topic).
2
0
11