A set of efficient persistent immutable data structures for Reason and OCaml - <AUTHOR> https://facebookincubator.github.io/immutable-re/ <comment><USER2> Oh, great, yet another library of data structures that introduce incompatible abstractions with both the standard library and the 3 other big libraries of data structures[1,2,3], that is exactly what the OCaml ecosystem needs! :D

More seriously, though, at least the naming convention is consistent. It looks a bit heavy on signature-indirection. I would really prefer if they used a standard iterator (gen[5] and sequence[6], for example, or the future one in the stdlib[7]) and settled for one serialization method (such as sexp) and get formatters everywhere.

Also, please use ocamldoc or odoc[4] for your documentation. The one generated here is really terrible, even for OCam^W Reason standards.

[1]: [https://github.com/c-cube/ocaml- containers/](https://github.com/c-cube/ocaml-containers/) [2]: [http://batteries.forge.ocamlcore.org/](http://batteries.forge.ocamlcore.org/) [3]: [https://github.com/janestreet/base](https://github.com/janestreet/base) [4]: [https://github.com/ocaml-doc/odoc/](https://github.com/ocaml-doc/odoc/) [5]: [https://github.com/c-cube/gen/](https://github.com/c-cube/gen/) [6]: [https://github.com/c-cube/sequence/](https://github.com/c-cube/sequence/) [7]: [https://github.com/ocaml/ocaml/pull/1002](https://github.com/ocaml/ocaml/pull/1002)

<comment><USER3> Hi Drup,

The intent of Immutable-re is to provide a complete set of persistent immutable collections that complement the standard library and core. The initial release is limited to common Map, Set, and Vector types, but we have intent to add additional collections such as BiMaps, Multisets, and Multimaps. There is of course some overlap with the stdlib collections (SortedSet vs. OCaml Set, SortedMap vs. OCaml Map) but even in these cases, the Immutable-re implementations have slightly different characteristics from their stdlib counterparts, which provide added value.

The public API is designed to be very Reason like, and familiar to web developers with experience in JavaScript, Java and C#, hence the naming conventions and camlCase. I've also considered adding an OCaml compatibility layer, which provides a more familiar API for OCaml developers. While the public API itself is heavily dependent upon signature indirection, these signatures are purely for documentation and not heavily depended upon within the implementation, which means the OCaml compat API may not include them at all.

Regarding the choice of APIs for sequences, the current Sequence type is intentionally opaque and is internally designed to be compatible with the proposed standard OCaml Sequence ([https://github.com/ocaml/ocaml/pull/1002](https://github.com/ocaml/ocaml/pull/1002)). If/when, that PR lands, we will switch our internal implementation to be compatible with OCaml's while maintaining the same public API.

Finally you are completely correct regarding documentation generation. Unfortunately refmt does not currently support outputting OCaml mli files including comments. This left me with the choice of hand rolling docs as I did or shipping ocamldocs lacking any comments explaining the types and functions. I chose the former.

Thanks for your feedback.

<comment><USER2> Well, multisets, multimaps and a lot of other things are also provided in containers and core. It's nice that you (already!) adopted that style of iterator.

I'm not sure what an "OCaml compatibility layer" would mean. It's already OCaml-y: it's referentially transparent and full of functors and signatures! The main weird thing is that the type of compare is not the same (I understand why, but I find compatibility more valuable). The naming convention matters little, as long as it's clear, readable and consistent (OCamlers are not going to boycott a library because it uses camlCase).

I don't think the signature indirection is a real problem, you just need a good tool for documentation generation that inlines signatures. You can ask the odoc people, I'm sure they would be happy to help you. I'm surprised there is no "reasondoc" tool just yet. :)

</comment></comment></comment><comment><USER4> Question for jordwalke or any Facebookers around: how's Reason's adoption inside of Facebook relative to OCaml? The hypothesis around the syntax seems to be that it's more approachable for Javascript programmers – are you noting a significantly faster onboarding time?

<comment><USER5> The feedback we've gotten from web developers is that it's easier to learn, and the integration that we've done for web makes it much easier to be instantly productive. Many say they would have not even taken a look at OCaml if there wasn't a group of developers caring about improving the overall ergonomics and front end experience.

"relative to OCaml".

Many people don't know, but a ton of Facebook's critical infrastructure has been developed on OCaml for a long time: projects such as Infer, Hack, Flow and many others. So there's a ton of existing projects that might be hard to catch up to in the short term and thats okay in my mind, because those projects are using the right tool for the job at hand. Even though the syntax they use might be a little more off-putting to new contributors, I think they're getting the big things right. One benefit to Reason is that it stands to make sure that more developers who are starting new projects, get the big things right - syntax is just one of many means to that end.

We want to fully interop with the OCaml ecosystem and we go through great lengths to ensure that Reason can be used with any OCaml project. I would love to focus even more on that once the ReactJS story is in a really good place.

<comment><USER5> The most common (constructive) feedback we currently receive is that once people want to dive into some advanced stuff, they need more material than the brief tutorials, and the primary book is written in OCaml syntax / toolchain. I would love it if we could have custom Real World OCaml "renditions" that allow custom automated presentation of syntax in the online book, as well as some focus on web development workflows.

<comment><USER6> Isn't there a Chrome extension that automatically converts OCaml snippets to Reason syntax?

<comment><USER5> I believe so, but IIRC, it's not possible to use it on Real World OCaml. Also, for something as core as a book, it's worth being able to custom tailor some things including the code generation, and some extensions to the book that focus on specific use cases like getting setup for web development etc.

<comment><USER7> Maybe they'll consider forking the book into "Real World Reason"? It's quite a great name for a book.

</comment></comment></comment></comment></comment></comment><comment><USER8> Is anyone here using Reason in any meaningful way? Even just a side project.

If so, what are you using it for and how do you like it.

<comment><USER4> Not using it, but jumping in to share an anecdote –

I saw the Reason announcement months and months ago and decided to use it as a jumping-off point into the OCaml ecosystem. It took about a week of writing Reason before I realized I was spending so much time reading OCaml (all the libraries were written in it) before I just switched to OCaml proper. Haven't looked back - the syntax takes a few days to pick up, but is hardly the most difficult part of writing a program.

Hopefully they can capitalize on the "Build" and "Share" part of their value prop [0] because "Syntax" appears (to most) to be the least valuable improvement. As a disclaimer, I could be totally wrong, never having worked at a FB-size organization – that onboarding time probably adds up quickly.

Come to think of it: can anyone think of a successful transpiled language that doesn't actually provide new semantics? Coffeescript is the closest thing that comes to mind, but it's dying out as ECMAScript absorbs its most appealing features.

[0]: [http://facebook.github.io/reason/#reason](http://facebook.github.io/reason/#reason)

Edit: forgot about Elixir, which seems to be doing quite well – but that introduces new semantics like homoiconicity + macros and protocols.

<comment><USER9> There's some neat stuff in the Reason syntax, apart from the make-it-less- weird-for-those-coming-from-JS/Java/C#/etc., for instance: JSX[0] and named curried functions[1]. Both are fitting in really nice when doing FE dev't like with `react-reason`[2].

If you are interested in this, I recommend some talks. First one by Cheng Lou, a main contributor of Reason and FB employee on React Conf 2017[3]. And a talk by Sean Grove[4] on Reason in general.

With the power of FB behind this new techonolgy (they have currently written 25% of messenger.com in Reason), this might well become very big. A general purpose strongly typed functional prog lang, that has a vast ecosystem, now an approachable syntax, and compiles to both native and JS. Sounds good nuh?

[0]: [https://facebook.github.io/reason/#diving-deeper- jsx](https://facebook.github.io/reason/#diving-deeper-jsx)

[1]: [https://facebook.github.io/reason/#diving-deeper-curried- fun...](https://facebook.github.io/reason/#diving-deeper-curried-functions)

[2]: [https://github.com/chenglou/reason-react- example/blob/master...](https://github.com/chenglou/reason-react- example/blob/master/src/todomvc/app.re)

[3]: [https://www.youtube.com/watch?v=_0T5OSSzxms](https://www.youtube.com/watch?v=_0T5OSSzxms)

[4]: [https://www.youtube.com/watch?v=8LCmLQ1-YqQ&t=517s](https://www.youtube.com/watch?v=8LCmLQ1-YqQ&t=517s)

<comment><USER10> Can you explain how named curried functions differ from ocaml's named arguments? It looks exactly the same, other than the syntax.

<comment><USER11> They are the same. I don't think cies was implying they were different.

<comment><USER10> The wording seems to pretty clearly say otherwise, but I appreciate the confirmation that I'm not missing anything.</comment></comment></comment></comment></comment></comment>


Why is the gradient either +ve or -ve when we use sigmoid activation function? - <AUTHOR> whenever i ask this question people tell me something like
""Gradient of W = X * gradient of Function Now, from the above equation, since all X values are positive, therefore gradient of all W's could either be all positive or negative, depending on the gradient of function.""
i get it but i think they are missing a point.
consider the multi-class setting - if there are 10 classes, and we use a softmax output. The NN makes a prediction C1, whereas the true class is C2. Now our gradient of the ouput layer(from the loss function) will be a vector which will have one positive term, and another negative term (for C1 and C2). When this vector is multiplied with positive gradients during backprop. Since error gradient has both positive and negative numbers, the gradients of W should also be a mix of positive and negative.
NOT JUST THAT...
also the gradient over the hidden vectors dhidden when backpropagated will be multiplied by weights which can have positive and negative signs.
I am i right? <comment><USER2> Of course it's a mixture of positive and negative values. Why would you think otherwise?

<comment><AUTHOR> [https://stats.stackexchange.com/questions/237169/why-are- non...](https://stats.stackexchange.com/questions/237169/why-are-non-zero- centered-activation-functions-a-problem-in-backpropagation)

[https://www.quora.com/What-is-the-issue-with-back- propagatio...](https://www.quora.com/What-is-the-issue-with-back-propagation- in-Neural-Networks-when-the-Activation-function-only-outputs-Positive-values)

<comment><USER2> Oh ok, I see. He was talking about only the gradients of weights all going to the same, single neuron. Then yes, the gradient of the loss in respect to the output of that neuron is a single value, which will be multiplied by x vector. So w_grad vector of weights going to that neuron will have a sign of dL/df, which again, is a single value. Hopefully this is clear.</comment></comment></comment>


Show HN: Convert your LinkedIn profile to a PDF resume - <AUTHOR>

I hate writing resumes. It's a chore. There is very little creativity involved in most cases. So, why not make it easier?
Either convert your LinkedIn profile or manually enter the data. Either way, you'll have multiple themes to choose from.
I'd love to hear your feedback (good or bad, you won't hurt my feelings) ;). It's still in beta, so I'm sure there are a few bugs.
www.resumebeacon.com <comment><USER2> I like the layout of final PDFs, well designed. I have a few suggestions.

1\. After importing data from LinkedIN, it only picked up the current job. I expected it to import my previous jobs too.

2\. My connections have endorsed me for ~35 tech buzzwords. When I include all of them, the buzzwords spill over to 9 pages with 1 buzzword per page.

3\. If I keep Education or Employment section completely empty, then don't include that section in the PDF.

4\. In the Employment section, it would be awesome if you could include a small description of the linked company.

<comment><AUTHOR> Thanks for the feedback, I appreciate it!

1\. That's strange. I just tested it and it picks up my past jobs. I'll look into it more.

2\. I've seen this bug in the past and thought I fixed it. I guess not. Damn HTML to PDF conversions. ;)

3\. True. I do need to add more checks

4\. Good idea. I'll think about adding that.

<comment><USER2> You're welcome Paul. For #1, see if you can look up my profile in the datastore. My LinkedIN and HN handles are similar.

</comment></comment></comment><comment><USER3> I like it. One minor bug I noticed. It grabbed the info for my current employer, and placed the end date as the Unix Epoch time of 1970-01-01.

<comment><AUTHOR> Thanks for checking it out and thanks for the bug report. I'll get that fixed.

</comment></comment><comment><USER4> i like the idea but you didn't take into consideration other countries, for example i worked in Jordan and Saudi Arabia i can't fill it anywhere in your form.

wish you all the luck

<comment><AUTHOR> Yeah, multi-country support is on my to-do list. I wanted to start here in the U.S. then add to it as needed.

Thanks for taking a look!

</comment></comment><comment><USER5> Checkout [http://ars.io/](http://ars.io/) \- it does this and incorporates many more profiles as well as LinkedIn.

<comment><AUTHOR> It doesn't do anything. There is a pretty basic landing page with some random footer links, but nothing else. Am I missing something?

<comment><USER5> Sorry, our landing page was broken, it's been updated.

</comment></comment></comment><comment><USER6> clickable - [http://www.resumebeacon.com](http://www.resumebeacon.com)</comment>


Show HN: Random country web site - <AUTHOR> http://random.country/

<comment><USER2> Nicely done. I'm curious about how do you make this.

<comment><AUTHOR> The list of all countries is available at Wikipedia, they allow to use their data. On backend I used php (php random function) and sqlite as database. For maps I used Google Maps javascript api.

</comment></comment><comment><AUTHOR> Hit reload page!</comment>


EU confirms all new cars will be fitted with breathalysers from 2022 - <AUTHOR> https://uk.news.yahoo.com/eu-ruling-new-cars-breathalysers-2022-183855720.html <comment><USER2> Try this article instead. You wouldn't think they were talking about the same law. Totally different story.

[https://news.motors.co.uk/news/all-new-cars-to-require- breat...](https://news.motors.co.uk/news/all-new-cars-to-require-breathalyser- and-speed-limiter-tech-by-2022/)

All new cars will be required to have the wiring, but the actual breathalyser will only be installed for drink driving offenders.

The speed limiter will also be voluntary and have an override allowing you to go over the limit in an emergency. My issue with it would be how it works as there's nothing worse than people using their brakes to slow their speed on open roads or motorways.

</comment><comment><USER3> Holy shit, as someone who drinks zero alcohol when I have to drive even many hours later, this is such a stupid idea. So now many responsible (and non- drinker) drivers have to pay for that crap when buying their new car? Good move to make your citizenry hate you even more, EU.

I dislike the EU from a leftist point of view, since their elite is a corrupt network of incompetent backslappers who seemingly don't care about their citizens. Juncker? Von der Leyen? Barf.

</comment><comment><USER4> The article also mentions speed limiters that use gps to determine the speed limit of the road you're on and prevents the vehicle from accelerating beyond that limit.

</comment><comment><USER5> I wonder what people will have to blow into next. Europe was already one of the safest places to drive.

</comment><comment><USER6> >Details of how the breathalyser systems will work are yet to be revealed but it is thought they will be aimed at tackling repeat offenders.

That doesn't make any sense. If it's aimed at repeat offenders, then why are you putting on every single car sold? Put an aftermarket system on cars of repeat offenders. Or, better yet, if you are a repeat offenders, revoke their license permanently.

</comment><comment><USER7> The other day I brought a large furniture and no other option but to transported with the trunk of my car open. The car has "protective" beep system whenever the car drives with the trunk open or with seabelt off. So my car was beeping the trip...it almost drived me insane.

It is so sad that I can no longer control what my own car does. This is only about to get worse as tech improves.

Heck our phones and computers are probably sending thousand of telemetric information right now and we don't know or control. It just a matter of time until cars do that to, and we cant not longer control who to utilize our own cars.

</comment><comment><USER8> Sounds like I'll be able to put a fake 1kph speed limit sign on a stick and cause everyone to hear terribly annoying warnings to slow down? I look forward to it.

</comment><comment><USER9> Breathalyzers and speed limiters? Goodbye freedom.

<comment><USER10> Europe has already been almost entirely unfree for a good little while now.</comment></comment>


Getting Color Output out of a TI-99/4A - commons-tragedy https://netzhansa.com/ti99-4a-color/ <comment><USER2> Not to denigrate the post, but the TI-99/4A did color out of the box; this post is talking about a modern adapter board to work with a modern display instead of TI's proprietary monitor or a TV. I know because I first programmed on a TI-99/4A and we didn't have the space nor free connection to hook it to the living room TV, so I used a 13" B&W TV in my room for years before ever seeing the color that it was capable of.

<comment><USER3> My father owned a TI-99/4A and used it to teach me some programming. Afterwards I mostly just copied listings from the TI-jdingen magazine (published by the Dutch TI users group TIGG [0]). Together with my dad I also made a small game. Nothing to impressive. Basically just a ship that automatically moved from the left to the right side of the screen. The player could press a button to shoot a projectile on randomly generated airplanes that would fly from right to left.

I know Edsger Dijkstra considered the BASIC language to cause brain damage [1], but still at times I feel like it would be nice to program in a language like TI-BASIC again, just modernised a bit.

\---

[0]: [http://www.ti-99.nl](http://www.ti-99.nl)

[1]: [https://programmingisterrible.com/post/40132515169/dijkstra-...](https://programmingisterrible.com/post/40132515169/dijkstra- basic)

<comment><USER2> What sorts of modernizations would you like to see? Things removed (GOTO) or things added?

<comment><USER3> Mostly stuff you see in other modern BASIC variants. Like line numbers removed. Labels for GOSUB. Multiline scope for things like IF THEN ELSE, etc... GOTO should be removed as well. And I'd like to see a BASIC specifically developed for making games and also working for iOS, Android, ... Perhaps such a BASIC language already exists by the way, I haven't done a whole lot of research on this.

<comment><USER2> I'm curious, then: why not use the modern variants? What is it about the TI BASIC experience that you'd rather have?

Reason I'm asking is I'm working actively on a TBA project around retro-ish BASIC hardware/software as a learning / confidence-building tool. I'm genuinely curious.

Related: have you seen the PICO-8 system? It's Lua, but it's specifically designed for games, has some nice constraints that encourage a certain retro look & feel, and is pretty approachable.

<comment><USER3> I kinda like to see the same kind of environment I guess. But somewhat improved for the modern age.

Recently I was discussing with my brother that I got kinda annoyed that software got so complex these days. The simplicity of the TI-99/4A stuff was kinda nice. It was pretty easy to get some nice results quickly. The language was quite limited which made it easy to learn. For games I guess it's kinda nicer to work with PNGs these days then to figure out what HEX codes to use to draw a sprite, but with tooling that could be eased a bit. The resolution of the TI-99/4A made this stuff more manageable as well I guess.

Yes, I find the PICO-8 charming, perhaps that's kinda what I'm looking for. But PICO-8 might maybe be too limited. If I'm not mistaken the screen resolution seems lower than what the TI had, causing the graphics to become quite ugly (imo).

Actually I've been contemplating on creating my own TI-BASIC interpreter as well. And after finishing the interpreter, my goal would be to modernise the language for my purposes. But I haven't really started on that yet (and not yet sure I will, since there's other stuff I work on as well). Another area that I would improve upon would be sound generation, since the sounds of these machines aren't too easy on the ears.

</comment></comment></comment></comment></comment></comment><comment><USER4> I had such great times with mine, aside from the games.

I remember the first game I programmed on it, sort of a cross between Pac-Man and Berzerk, so walls and pits and various things chasing you. Due to the doubly-interpreted BASIC, it was quite slow and I was vexed; checking motion into walls and pits got more and more slow with each obstacle. Eventually I hit on, rather than a series of IF statements defining a wall that one might not move onto, I could simply _draw_ my walls and pits, then check the video array directly! Suddenly, my game was so much faster.

It was the first time I had an optimization that relied on knowing _something_ about the hardware.

</comment><comment><USER5> Props to you. The TI-99/4A was my second -- and longest childhood -- computer. Getting one working again so perfectly warms my heart.

Fun fact about the TI-99/4A: It was actually _fast_ , sporting a 16-bit CPU in an 8-bit era. The BASIC interpreter was slow because it, like many TI-99/4A programs, was written in a sort of interpreted bytecode that could live in video RAM/ROM. The CPU itself had access to only 256 bytes of system RAM; all other RAM in the system was video RAM that had to be accessed through the video chip. The slowness of the video RAM access, coupled with the fact that the interpreter for your BASIC ran on interpreted bytecode instead of native CPU instructions, meant that your BASIC programs would crawl, but give that 16-bit chip a chance to open up and it can do some amazing things. The game _Parsec_ has a smooth scrolling playfield, which the TMS9918A wasn't able to achieve on its own. The CPU is shifting the scenery graphics "by hand" as part of the main game loop.

<comment><USER6> You sound like you know a bit about TI-99s, so let me ask you this: Do you have any idea why they made the lower case character set be small upper case letters instead of real lowercase like the Apple II or C64? A couple of years ago I did a Sunday morning project of inserting the Apple II font into the TI-99 ROM to run on an emulator, and other than having to shift the j's and g's up a pixel or two it worked beautifully.

<comment><USER7> The TI 990/10 DX 10 minicomputer was exactly the same. The teacher at my old school actually picked the TI990/10 over the PDP/11 because the PDP11 did not have "true descenders". The 990 didn't either but avoided the problem by having miniature capitals for lowercase.

He was a strange guy. Long since departed.

<comment><USER7> additional: His name was Billy Boyd. And he pronounced it: "TWOO descenders"

</comment></comment></comment></comment><comment><USER8> I had a TI-99/4A when I was 6 or 7. I remember playing Parsec, and typing in BASIC programs from the manual.

</comment><comment><USER9> I was a young adult when the TI-99/4A hit the market. I worked in the digital communications industry and considered getting one, but I ended up waiting for something better and comparably priced. I put together a Ferguson Big Board II a few years later. Many of you might say the TI was "better", and you would be right about the CPU and the color graphics, but not about the software availability. CP/M was the best "business" OS of the day until MS-DOS eventually overtook it. It still makes me sad to think about what Bill Gates did to Gary Kildall.

[https://www.theregister.com/2007/07/30/msdos_paternity_suit_...](https://www.theregister.com/2007/07/30/msdos_paternity_suit_resolved/)

[https://www.embedded-computing.com/embedded-computing- design...](https://www.embedded-computing.com/embedded-computing- design/software-forensics-lay-ms-dos-cp-m-controversy-to-rest)

[https://spectrum.ieee.org/computing/software/did-bill- gates-...](https://spectrum.ieee.org/computing/software/did-bill-gates-steal- the-heart-of-dos)

</comment><comment><USER10> In my last year of primary school a teacher brought in a mate he had to give the class a lesson on computers for an hour or two. He brought in a TI99 and we spent the afternoon learning about programming, graphics and 'sprites'(yes he had the expansion)

..after the lesson, I went up to him (Graeme) and asked if he would tutor me after school.

I then spent the rest of the year - (two afternoons a week) learning programming - and have been doing it ever since.

Graeme wasn't what I would call a great teacher - but he gave me the opportunity.

I remember my first program was a copy of a game called something like 'Wild Gunmen' where one or two players tried to get into a situation to shoot each other.

I eventually got a TI99/4a a few years later (as it was selling for $99(AUD). Wrote a flight simulator (dials only) and something that I really loved - <AUTHOR> almost perfect copy of Frogger including music! The most annoying problem with the TI99/4a (apart from loading from tape) was that it _hated_ running out of memory - and when it did would just crash. That always meant a reload from tape, optimize something, save to tape, and try again. Lots of fun.

</comment><comment><USER11> Unfortunately the US variant of the VDP, the 9918, only outputs composite.

</comment><comment><USER12> When I was a teenager with a TI-84 calculator, I used the trick of blinking the screen quickly at a fixed duty cycle to get "grayscale" from the black and white screen. Good times...

</comment><comment><USER13> fond memories -- spent couple years coding away on that :)

</comment><comment><USER14> I really enjoy the little mod PCB "TMS-RGB"[0] that makes this possible. Takes me back to my modchip days. I'd like to find a project that needs one of these designed - always wanted to make one myself but never had a reason.

[0] [https://github.com/npiegdon/tms-rgb](https://github.com/npiegdon/tms-rgb)

</comment><comment><USER15> I am confused, just get a scart cable and a scart to hdmi. Done. Scart supports a bunch of TV image formats (composite, svideo, rgb etc..). In

All the TIs, Amiga, Amstrad, etc... Work ootb. You can find those converters for a few bucks on ebay. If you want to get fancy buy yourself an OSSC to get a really good image quality.

<comment><USER16> this wouldn't work fine with a Amiga. It supports some video modes that can be displayed on a TV. So needs a Commodore monitor or a scan doublet.

Also, the video output of some computers barely get in the standard. Yes, an analog TV can handle it fine, but try again on digital. I have a composite/SCART to VGA and can't sync correctly the composite output of my Spectrum +2. However, the same output it's handled correctly on my Commodore monitor

</comment></comment><comment><USER7> the TI99/4A is a beautiful machine.

The first computer I ever used back in 1982 was Texas Instruments 990/10 minicomputer (384K) running an operating system called DX10, based on the same instruction set as the 99/4A.

That system was originally built for a US Motel operator reservation system. Back in the days when you would quote for developing not only the software but the hardware too!

Today if you are interested you can download a 990 emulator and experiment with DX10/DNOS for yourself</comment>


What Would Jesus Disrupt? - <AUTHOR> https://www.bloomberg.com/news/features/2017-04-05/what-would-jesus-disrupt <comment><USER2> umm... the modern-day money changers? That would be banks and banking, I think. But he might do it with the modern day equivalent of a whip and upturning all the tables. Don't really know what that might involve.</comment>


An Embeddable PHP Interpreter - <AUTHOR> http://ph7.symisc.net/intro2.html

<comment><USER2> Genius or madness? I can't tell.

The lack of a formal spec for the PHP language makes me think it's more the latter, though.

<comment><USER3> Certainly genius

</comment></comment><comment><USER3> Great great stuff.

One thing that i would love to see is the ability to run the embeded php web server with something like

ph7 scripts/hello_world.php -h localhost:80</comment>


Was LinkedIn Scammed? - <AUTHOR> http://www.nytimes.com/2011/05/21/opinion/21nocera.html?_r=1&hp <comment><USER2> The underwriters also have a responsibility to all involved not to over price the ipo to take advantage of transient demand. If they do, and the stock ends up under water within a few days to months they run a serious risk of pissing off both their investing clients and the newly public company. Opening down or trading below what the stock priced at in the short term has a strong stigma attached to it and can make retail and institutional investors think there is something systemically wrong with the company regardless of the fundamentals.

There was an editorial in the WSJ on friday that strongly suggested the price action in LNKD has to do with the current easy credit environment driving money into riskier assets. I agree this seems likely. Certainly it seems difficult to justify the valuation on any traditional metric. If when pricing the ipo Morgan also felt that any frothy demand was based more on the easing environment than real interest in LNKD as a company, perhaps they were right to hold the pricing a bit more conservative than the market was suggesting.

After all, they already had increased it by almost 33%, and the current QE program is scheduled to shut down in June. Many smart people appear to be betting on interest rates climbing after the program ends, that may take enough money out of the market to cause someone like LNKD to correct.

Another thing to keep in mind is that LNKD offered a relatively small amount of stock as compared to many offerings. This kept supply low and could have contributed to the large pop, but also means that they probably have plenty available for a potential secondary offering, which could allow them to profit from these very price moves down the line,

<comment><USER3> _Opening down or trading below what the stock priced at in the short term has a strong stigma attached to it and can make retail and institutional investors think there is something systemically wrong with the company regardless of the fundamentals._

I understand there's a stigma, but why does the stigma exist? Let's just assume that the investment bank's only goal is to accurately predict the demand for a new IPO, and to set the offer price accordingly; why is overpredicting demand stigmatized whereas underpredicting is not?

<comment><USER4> "Let's just assume that the investment bank's only goal is to accurately predict the demand for a new IPO"

I'd say that their main goal is to make sure that the shares are all sold at a price that everyone is happy with - the management team of the company going public is _heavily_ involved in all the steps on an IPO.

Like taking VC money, nobody _makes_ you go public and both are things to do with your eyes wide open.

<comment><USER5> Well, there's the SEC.

<comment><USER6> technically speaking the SEC does not force you to go public.

The problem most people refer to: if you have over 500 shareholders of record, you have to make a lengthy filing which is almost as onerous as going public. Hence, since the incremental effort isn't that much, most companies in that position go public. There's technically no compulsion to do so.

</comment></comment></comment></comment></comment><comment><USER7> Having worked in the industry for a long time I have no doubt that Invest Banking Firms are greedy fucking bastards.

However, in this situation it is more a case of damned if they did and damned if they didn't.

Before the IPO there was a fair amount of nervousness about a big launch of yet another dot com. It is easy to look at this with the benefit of hindsight and say - they should have known the share price would more than double but I doubt they purposely got it that wrong.

</comment><comment><USER8> Am I the only one who feels that if I'd put in the blood, sweat and tears to build a company to the point where it could be IPO'd I'd be more likely to gouge my eye out with a rusty spoon that open it to the sharks, sociopaths, speculators and manipulators of wall st and the open market?

<comment><USER9> You're probably not along. At the same time, I believe significant number of people (myself included) will respectfully deem this view too gloomy and pessimistic. One could probably use the same logic arguing about the first (or second, ...) round of VC financing.

In each case, you are relaxing some control of your company in exchange for something else valuable: other people's money. Whether such exchange is fair or not depends on specific circumstances; each side can always ask for more (money, control) to make the exchange fair.

I don't know of any company of any significant size (e.g. with >$100M of annual revenue) that hasn't made such an exchange at some point in its history.

<comment><USER8> There's a big difference between a VC round and the open market. The markets are often not driven by anything even related to the companies whose valuations fluctuate wildly by billions of dollars in under a second. They don't open to you (to same degree) to hostile takeovers, pump-dump schemes and naked short attacks. They force companies to kowtow to the opinionated whims of unaccountable analysts and focus on short term profits over long term strategy.

<comment><USER10> I'm sorry, but I don't see why people are so hostile to trading in the open market.

The public stock market is a real-time debate about valuation in the open. The VCs do it behind closed doors. Being critical of the markets for being divorced from reality is fine, but surely having a public stock price is better than having it all hidden from view?

If you're not a fan of more openness, maybe you are hoping to 'pick off' a VC who over-values your company, away from a public analysis of its actual worth?

As for having a public listing forcing a company to do anything - it's not true at all (except for publishing audited accounts). The company is free to ignore the gyrations of the market, and keep its plans secret too.

</comment></comment></comment></comment><comment><USER11> One of the reasons LinkedIn's share price jumped so high from its IPO price of $45 was because of a very low float. There are too few LinkedIn shares trading on the public market. It is not that easy to get your hands on LinkedIn shares right now, even if you are willing to pay market price. This artificially raises the stock price.

I believe 7 million shares were floated out of ~94 million outstanding shares. If more shares are floated, the price per share should go down (not considering other factors) as there will be a larger supply of shares in the public market. The assessment that the investment banks that the IPO should be priced at $45 sounds more reasonable had all 94 million shares been floated (speaking hypothetically; this never actually happens).

For this reason, valuing LinkedIn by multiplying 94 million (total outstanding shares) by the current stock price on the NYSE (as most news articles have been doing) is probably not a very accurate measure.

<comment><USER12> But that would mean that the investors didn't know how to do math. Everybody that buys knows what percentage of the company they're supposedly are overpaying for.

</comment></comment><comment><USER13> _The fact that the stock more than doubled on its first day of trading — something the investment bankers, with their fingers on the pulse of the market, absolutely must have known would happen..._

No, this is an absurd claim. Investment bankers are not clairvoyant.

<comment><USER14> Right. This is reminiscent of the famous line about what your accountant is supposed to say when someone asks him about profit.

      Profit? Who's askin'?

      - If it's a customer, you're making a little bit of profit.
      - If it's an investor, you're making a LOT of profit.
      - And if it's the government, you're making no profit at all.

Joe Nocera wants everyone to make just a little bit of profit. If they make too much, he's calling for a Congressional investigation. And if they make too little...he's calling for a bailout:

      http://www.nytimes.com/2009/01/24/business/24nocera.html

      Most important, the government has made clear it will not
      allow a major bank to default, to avoid the replay of the
      Lehman catastrophe.

Nocera is one of the guilty parties in the prestige press who propounded the "too big to fail" mythology. Now sovereign defaults are on the horizon, in part because we didn't let banks that made bad bets simply go into bankruptcy. His observations about banks should therefore be taken with a grain of salt.

<comment><USER15> Too big to fail is _ _not_ _ a fallacy. The knock-ons from the failures of Lehman and Bear Stearns were very visible. In Europe, the knock-ons from the failure of Kaupthing and Landsbanki were too, and they only ended up affecting insitutional investors as retail depositors got government protection.

AIG failing would have caused an investor panic across banking as a whole due to their position as the leading insurer of investment risk.

In the UK, Lloyds TSB and RBS (two of the 'big four' UK banks) both very nearly collapsed; the smaller Northern Rock bank did collapse and had to become 100% government owned. The alternative in each case was depositors having their assets frozen for a long period with only the promise of pennies on the pound a long time later, with a knock-on loss of confidence for the sector, combined with a large compensation bill for the taxpayers. Would you _really_ like to see what that happens when 20% of the banking market suddenly freezes?

<comment><USER14> Yes. Because the alternative -- which we are currently seeing unfold -- is a wave of sovereign default, starting with the PIIGS and ultimately taking out the USD as the world's reserve currency.

...I should add that Northern Rock did not have to be nationalized, nor should taxpayers be obliged to pay any kind of compensation bill. Bankruptcies can and must happen to clean out the dead wood.

<comment><USER15> UK law provides taxpayer backed guarantees to a fixed balance per saver per bank; if NR had been allowed to collapse the UK taxpayer would've been on the hook for that amount.

And I agree that bankrupticies must be possible and are a good thing for businesses as a whole; Too Big To Fail explicitly works against this. NR was big enough regioinally that it'd have caused major economic damage to that (already fragile) region had it been allowed to go down.

</comment></comment></comment></comment></comment><comment><USER16> Prior to the IPO, everyone was saying $45 was absurdly high. Now it's absurdly low.

<comment><USER17> This is a good point. Of course - for a banker it is not an opinion it is a full time job and at 7% they are very well compensated for it.

<comment><USER16> Goldman evidently thought it was overvalued, too. They sold all of their stock at the IPO price. So if their goal was to "scam" LinkedIn, they didn't do a very good job of it. [http://finance.fortune.cnn.com/2011/05/19/goldman- leaves-lin...](http://finance.fortune.cnn.com/2011/05/19/goldman-leaves- linkedin-party-early/)

</comment></comment></comment><comment><USER18> Who do the company's financial executives serve during an IPO, when the identity of the investors is changing fast?

Let's not forget that the point of an IPO is to (a) provide an exit for the startup investors. (b) raise funds for the company's future operations (c) make the company's financial executives and founders rich.

Who loses when the offering price is lowballed? Everybody who sold shares into the offering. That's the first two of my list. Usually the insiders have a six-month lockup; usually they can't sell their own shares until six months after the IPO. So, if the shares hold their price the execs will do well.

There's a big PR penalty if the stock drops below the opening price. That will turn into a money penalty on the execs in six months unless the company can overcome it.

So, the smart bet for self-interested execs is to lowball the offering price. As long as the startup investors don't call foul, the only loser is the company itself.

If I were an investor, I'd insist on the execs giving me (selling me cheap) options to buy half their shares at the opening price, as an incentive for them to price the offering right.

</comment><comment><USER19> I like Henry (Joe...not so much), but they are being idiots. Pricing an IPO is not quite that easy. And a 100% pop is not the end of the world for the company. In fact it is pretty neat.

Henry's analogy is asinine. Better is the owner of a 10 unit building renting to a tenant for $1000 who turns around and rents for $2000. The owner, without doing anything, has just increased the value of his building by 90%.

</comment><comment><USER20> Google's Dutch auction IPO pricing looks even more appealing after seeing this. Too bad it took a recession for them to get the bargaining power to demand a Dutch auction.

<comment><USER21> I do not think it is a matter of LinkedIn lacking bargaining power. It is a well known company and it is the first social company to go IPO, so every bank will be eager to underwrite them so that they can say they are the experts of social. They could have had a dutch auction if they really wanted one.

I think the reason they did not go with a Dutch auction is they lack the confidence of Larry and Sergey. What if it fails? What if the bankers get pissed off and sabotage it by not working hard enough to sell the issue.

Having the price jump by 100% may be leaving money on the table but it is not a disaster. Having the IPO fail would be a disaster, and the management of LinkedIn would be personally blamed for it.

<comment><USER22> _What if the bankers get pissed off and sabotage it by not working hard enough to sell the issue._

Have things become so bad that companies must ingratiate themselves with 40-50% tributes to the banks?

<comment><USER23> _Have things become so bad that companies must ingratiate themselves with 40-50% tributes to the banks?_

I hate investment wankers with a passion and would love to see the people involved in IPO spinning get the Paris 1793 treatment. But the "40-50% tribute" claim is not correct. LinkedIn only offered about 7% of its stock, so it was only a 3-4% tribute.

Knowing how scummy banks are surrounding IPOs, this was a very intelligent strategy. Now the stock can trade to a fair level and then they can do a secondary offering at a real price.

<comment><USER21> I think the grandparent was referring to the theory that bankers may intentionally underprice the issue so that they could extract some of the benefit from the underpricing.

So for example, in the case of LinkedIn, the theory is that the bankers knew that the shares could go for 100% higher price than the IPO price and sold those shares to their buddies at a much lower price with the understanding that their buddies would pay them back a percentage of the money they make flipping the shares by doing various other business with the banks.

Of course none of this is proven, but it is a theory many serious people have.

</comment></comment></comment></comment></comment><comment><USER24> Seems like a great topic for a NYTimes business-section infographic:

Which underwriters price IPOs most accurately and which ones leave huge amounts of their clients' money on the table?

</comment><comment><USER25> Not a scam. Inflammatory banks are evil stuff with little to no support.

In hindsight it's easy to say they should have known it would get to this price but in the weeks leading up to the IPO it would have been pretty difficult to justify pricing at 80. The current price _is_ difficult to justify and may not hold beyond this initial frothy period.

Add to that the greater downside of underpricing and I just don't think the author is really making much sense.

</comment><comment><USER26> I was initially on the "scammed or at least poorly served" side, but then someone with more experience in these things than me pointed out that the shares the traded hands in the IPO were a smaller fraction of the company. If you sell 10% of the company at at 50% discount, you've actually only given away 5% of the total value of the company, and you've gained a huge marketing win.

Also, for reasons that seem irrational to me, I'm told institutional investors consider it a strong indicator things are going downhill if a stock ever trades below it's offering price.

</comment><comment><USER27> It is also possible that no matter how the opening price was, people were going to gobble it up anyways.

Like others pointed out, the price slowly grew from $25, $35 and finally $45. I had placed a limit buy order for $47, and it opened at $85.

If there are any finance folks here, I have a question - who set the $85 price? Was it the underwriters? It could not have been the market because the stock started trading at $85. Also, I could not get any stock data from any of the sites (NYSE, yahoo, google, ameritrade etc) untill past 10:15am EST or so. Is this delay normal for IPOs?

<comment><USER28> I think they way they set the price is to take the number of shares available, subtract out the number for which there are market orders (i.e. orders to buy at the market price, i.e. non-limit orders), then take the remaining shares and the open limit orders, and find the highest price that gets all the shares sold.

So if it opened at $85, that means there were limit orders placed at that level and higher.

I don't know why there was a delay in the price reporting.

</comment></comment><comment><USER29> Break out the Adam Smith?

 _"People of the same trade seldom meet together, even for merriment and diversion, but the conversation ends in a conspiracy against the public"_

</comment><comment><USER30> I don't know very much about the stock market, so forgive my stupid question... but couldn't you circumvent this problem by not selling all the stock at once, but rather sell it in packets of a few percents at a time?

Then you'd get a feel for an appropriate price on the first few trading days, so you can't get scammed except for a few percent of the stock.

<comment><USER31> Companies do do that. The first sale is called the primary offering, and ones that come after are called secondaries (or follow-on).

I'm not sure if LinkedIn will do that, but it's common among small companies that are capital intensive.

Usually the goal is not to capture the fluctuation in short-term price, but rather the long-term appreciation from demonstration of potential. For example, if Tesla sold everything when it IPOed, it would be unlikely to get a good price for it, not to mention it doesn't need all that cash now so it's somewhat wasteful. But if it sold half then and sold half in early 2012 or so, it will be able to (hopefully) get a better deal in the second chunk.

Back to the issue of short term mispricing, companies like Google hold open Dutch auctions so the actual price is very close to the fair market value. I don't know why LinkedIn didn't do that but I suspect it's because it wants to keep good relations with bankers.

I hope that answered your question.

<comment><USER30> > I hope that answered your question.

It did, thank you.

</comment></comment></comment><comment><USER32> If I recall correctly, didn't the IPO of Google use some unconventional structure, like a reverse auction or something? Anyone remember the details?

Anyone know why this isn't done more often?

</comment><comment><USER33> This is just my theory, but saying LinkedIn was scammed because the IPO was underpriced is like saying Sony or Nintendo were screwed by shortages on the PS2 or Wii. LinkedIn sold a tiny fraction of its shares, far less than the market would bear. The IPO was oversubscribed and artificially doubled in price.

Instead of selling a bunch of shares at the "fair price" up front, LinkedIn created the perception that LinkedIn is undervalued, desired, and worth more than it really is worth. All it had to do was sacrifice a tiny portion of the shares in the IPO and it's the new hot money maker.

Now the company and its investors have created an environment where they can unwind more of its shares at a hefty premium, more than making up for the IPO "loss."

Maybe LinkedIn didn't plan this out so perfectly. But it probably saw this as one possible result of the IPO strategy it chose.

<comment><USER34> I saw this same story a while back right after the Zipcar IPO. Seriously I expect better from the NYTimes. Especially considering that everywhere else is reporting this as a bubble.

Which is it, did LinkedIn scam investors or have investors scammed LinkedIn?

</comment></comment><comment><USER35> The story on MSFT's IPO was fraught with uncertainty and concern over who- gets-what in the pricing scheme:

[http://features.blogs.fortune.cnn.com/2011/03/13/inside- the-...](http://features.blogs.fortune.cnn.com/2011/03/13/inside-the-deal- that-made-bill-gates-350000000/)

</comment><comment><USER36> Can anyone explain why a company has to dump all their shares at once? It seems like it would make sense to just offer, say 1% of the shares every five minutes at whatever the previously issued shares are trading at. I'm sure there's a good reason, I'm just curious.

</comment><comment><USER37> These kinds of articles are seriously insulting to the leadership of the companies involved in the IPO. I seriously doubt that the board of LinkedIn would let themselves be scammed by a bank. If the article is true and this scam has been going on for years and LinkedIn allowed it to happen to their company then that would send me a signal not to invest. However, I think they knew the risks and choose a lower IPO to ensure upward price movement on the first day.

There are many ways to IPO (auction, etc) and you have to keep in mind that a big IPO pop makes everyone feel good about the stock. Yes, perhaps LinkedIn possibly _could_ have made an extra $352 million, but if that strategy resulted a $70 IPO with no pop then they would have lost $1 billion in market cap. Pricing and seeing an upward trend have a big impact on the perception of value. Stocks are not priced according to some logical rational algorithm, it's about perception of value and big returns and amazing articles about how it doubled in value on it's first day help fuel those perceptions.

</comment><comment><USER38> The headline can be summaries as 'no' since his only counter-argument seems to be 'the banks should have known better'

Pricing for a listing is a very complicated process. The underwriters, along with the company executives, go out on a very long roadshow and book orders well before the listing date. It is through these orders, not some magic made up numbers, that the final price is determined from.

In the case of LinkedIn, they changed their list price no less than 4 times between the time they filed their S1 with the SEC and the time they finally listed. Initially it was $31, and the last hike to $45 only happen the night before the listing.

LinkedIn management are professionals who understand their business and understand the process, they have a choice of underwriters to work with and a choice of investors to take orders from. This isn't a single bank taking them for a ride - to suggest that is offensive to those who run LinkedIn

Where the real problem lies, and a problem that was not raised in this criticism, is in how orders are taken. This is what Google attempted to solve with their Dutch Auction system. The claim is that the banking community is so tight-knit that they collude with each other to keep the book price down. So what Google did was to hold a silent auction on bids and allotments, only to find when the process was over that most banks essentially bid around the same mark anyway.

Paying out 6.5% of your company to go public does suck - but it is the cost of creating a viable and flowing public market for your stock. You can't just sell that part of the company to 4 or 5 banks and then ask them politely to pass it on - you may as well just raise another private round in that case. The point of the IPO is to diversity ownership as broadly as possibly and to engage firms that would be willing to take on and trade the stock so that a market is created.

None of the alternate mechanisms work, and you need to be a very large and hot company to even challenge the status quo in the way Google did (and in a way LinkedIn did as well - with their two classes of stock). Note that the underwriters are taking a risk since they end up holding a lot of stock, and in the event of the list price dropping there would be a lot of questions asked about the prospectus and roadshow and potential lawsuits. Also on the other hand, there are not a lot of IPO's that take place, so the underwriters need to make the most of the business they do get - they are the ones with the connections to the large funds that purchase stock, so acting as a risk- bearing agent in that capacity does deserve compensation.

LinkedIn didn't help their cause by listing so few shares. When there is scarcity in the market and so much demand, then there is only one way that the list price would go - and that is up. If they listed twice the number of shares to meet demand then there definitely would not have been so much volatility on the opening day (a lot of which was caused by 'market' orders - which means 'buy at any price').

tl;dr: creating a free flowing and liquid public market for your stock is a very complicated, highly regulated and risky process and nobody has figured out a better way to do it

<comment><USER39> _The claim is that the banking community is so tight-knit that they collude with each other to keep the book price down. So what Google did was to hold a silent auction on bids and allotments, only to find when the process was over that most banks essentially bid around the same mark anyway._

Your tone seems dismissive of the claim, but finding out that a bunch of people all bid about the same amount when they only way they could find out what each other were bidding is collusion doesn't exactly count as evidence _against_ collusion, does it? It's not great evidence _for_ , but at least if bids were all over the place it would be evidence that many banks don't have an informal cartel or whatever.

<comment><USER38> > Your tone seems dismissive of the claim

I didn't mean it to come across that way, because I totally believe that they do collude. If they didn't then that entire part of the industry would become hyper competitive, unstable and probably a zero-margin (or even loss-leading) business.

These conglomerates in investment banking could handle the business and not make anything on it, they just don't like that. There also _is_ a lot of work involved, so the fees are somewhat justified (see the Microsoft IPO article for an idea of how much work goes into it) - this wasn't helped by Sarbanes Oxley which added a whole new layer of pain-in-the-ass to the process, that only a select few hold the cure for.

There is also an element of this only being a problem when there is a significant first-day rise. You don't hear anybody complaining about it when stocks tank or run level on the first day (if you look at all the tech IPO's from past few years - opentable, rackspace, netflix, renren, etc. most have not done too well in short term).

What would improve the situation would be the companies being able to raise more of the money overseas and thus introducing more competition into the process. Atm overseas funds can buy in after a listing, but for some reason a lot of the pre-listing sales tend to take place in the USA and amongst the usual suspects.

<comment><USER40> > If they didn't then that entire part of the industry would become hyper > competitive, unstable and probably a zero-margin (or even loss-leading) > business.

Well, that's what all colluders and monopolists say. I don't see any problem with this outcome. The inefficient get out of the business, and margins settle back to what the market demands.

</comment></comment></comment></comment><comment><USER41> Why couldn't the shares have been offered in 2 classes: one with voting rights and one without. Offer more of those without. Lots of companies do this e.g. Berkshire Hathaway, Google etc. That would solve the "mispricing" problem.

<comment><USER18> Many institutional investors won't touch two-class shares. It's an inherently rigged model. But at least you know it's rigged, and the rigging rules are transparent.

</comment></comment><comment><USER42> It wasn't a scam, just take the fact that "[LinkedIn] became the first major American social media company to go public" and you should notice that it happened due to (1) managing an IPO is HARD (2) web social media is young.

</comment><comment><USER43> Why can't the new shares sell in a uniform price auction the way treasuries are sold? Per wikipedia (article on auctions):

 _Debt auctions, in which governments sell debt instruments, such as bonds, to investors. The auction is usually sealed and the uniform price paid by the investors is typically the best non-winning bid._

The underwriting bank would just take bids for a set period of time, and then the winning bidders would pay the highest losing bid. This would help ensure no first-day price spike since any buyer who wanted shares could have bid his top price for them in the auction.

</comment><comment><USER44> I am going to get slammed for this but I really doubt if they care. 7.84M shares was the IPO makes a total of 94.5M shares outstanding. That's less than 10% outstanding if I am reading the press correctly. The other 90%+ shareholders will want the IPO to pop just so the market impression of the company is positive so they can sell their shares at a good price when their holding period ends. Like any investment, I would look at the current position of the company and it's long term prospects before investing.

</comment><comment><USER45> The real question is why more companies don't follow Google's lead and use an auction for their IPO. That lets anyone buy if they want to and lets the market decide the price.

<comment><USER28> Agreed. Maybe it just takes a certain amount of chutzpah to buck the system like that. Or, maybe some of the VCs are in bed with the investment bankers.

It surprises me, though, considering that Google has blazed the trail, that others wouldn't be eager to follow, if only to encourage people to think of them as "the next Google".

</comment></comment><comment><USER46> I miss the Google/WR Hambrecht style auction priced IPOs. Hopefully, after a couple more companies IPO, the big fish (Facebook, maybe Twitter) will IPO using an auction to allocate and price.

</comment><comment><USER47> It should also be considered that the underwriters gets paid on the amount raised (7% according to the article), so the underwriters also "lost" money from that perspective.

</comment><comment><USER48> One thing is clear: Speculation is playing an enormous role in LinkedIn's valuation and capitalization.

<comment><USER10> Aside from all the investment banker bashing, is the valuation of Facebook and Twitter being more rationally set away from the public by the VCs?

</comment></comment><comment><USER49> can someone explain why the middle man is needed? Why can't a company apply for a listing on the exchange. Then disclose how many shares they will be selling , then start accepting bids on the exchange?

Obviously you would need regulations around this but why is there a middle man at all?

<comment><USER50> As usual, the middleman is not really needed. Or they wouldn't be if a new stock exchange was designed to make this process easier. I guess this is essentially what Second Market is trying to circumvent. If the shares of companies can be traded even in small amounts before going public the companies have a better idea what they are worth on the open market.

<comment><USER10> No! A thousand times no! Second Market's bid/offer spreads are enormous compared to the public stock market. Second Market is a web facade on a straight-forward over-the-counter trading operation.

While the idea of doing a 'soft launch' IPO by building up from a toe-in-the- water market makes some sense, the reason that Second Market is being looked at hard by the SEC is because it's doing something that should be regulated far more than it is (because they're using accredited investor exemptions to get around the various disclosure/oversight rules).

</comment></comment></comment><comment><USER51> This is a red flag for Facebook.</comment>


Football player convicted of murder based on text messages and surveillance - <AUTHOR> http://espn.go.com/boston/nfl/story/_/id/9424056/aaron-hernandez-new-england-patriots-arrested

<comment><USER2> Charged, not (yet?) convicted.

</comment><comment><USER3> convicted?</comment>


Perfect Viewing for Wednesday's Total Lunar Eclipse - <AUTHOR> http://blog.wired.com/wiredscience/2008/02/perfect-viewing.html

<comment><USER2> so the full eclipse is at ~10pm EST? Now to find a good viewing spot in Atlanta..</comment>


Ask HN: is it ok to ShowHN my closed beta startup? - <AUTHOR>

I've been working hard on a new startup and would really like to get feedback from people here. The thing is, it's currently in closed beta. Is it ok to ShowHN what I'm working on? I can post a beta code for people here to be able to sign up to the beta and experience it. Thanks <comment><USER2> I'd be OK signing up with a given code and give feedback.

</comment><comment><AUTHOR> I posted it: [https://news.ycombinator.com/item?id=7225103](https://news.ycombinator.com/item?id=7225103)

</comment><comment><USER3> You lose nothing!</comment>


What BMW's turn signals tell about application design - <AUTHOR> https://www.rypple.com/blog/2009/08/14/turn-signals/

<comment><USER2> I've never understood why you throttle a motorcycle by twisting the handle. It's not a particularly comfortable or natural motion, and it's relatively easy for external factors (shifting in your seat, a bump, etc.) to affect the amount of gas you're giving the bike.

Seems like it would be a lot better to map the throttle to a thumb trigger, like on a jet ski.

Edit: also, I just remembered those various videos we've all seen at one time or another where someone is riding a motorcycle at low speed, loses his/her balance, and can only manage to hang onto the bike by the right grip. That's a moment when you _really_ don't want the throttle mapped to the grip.

<comment><USER3> _it's relatively easy for external factors (shifting in your seat, a bump, etc.) to affect the amount of gas you're giving the bike.

Seems like it would be a lot better to map the throttle to a thumb trigger, like on a jet ski._

Those two statements seem to conflict IMO. There is usually less play in a thumb throttle, so external factors are more likely to have a larger influence than they would on a twist grip.

A thumb throttle is also more likely to accidentally slip to 0% than a full handlebar. With motorcycles, suddenly losing all power can be just as if not more dangerous than too much power. If you're not prepared, the rear wheel can lock up and cause you to lose control of the bike. It's very dangerous because you lose all steering, and if the tire engages while they aren't lined up with the direction of travel, the bike will flip, usually throwing you in front of it.

</comment></comment><comment><USER4> Yesterday's discussion: <http://news.ycombinator.com/item?id=768137>

</comment><comment><USER5> On powerful bikes, just a few millimetres of grip twist provides a huge amount of accelleration/decelleration. It's not the big kind of twist that you do with a boat outboard engine, but a small movement. I can't think of any time in all my bike riding when I've inadvertently 'given it the nuts'.

There's something particularly Teutonic about that thing with the turn signal switches. It's the same with how Mercedes always try and keep their car switches and buttons in the same position, and with the same design. I suppose the psychology is, we make the best machines, so why would you ever want to buy anything else. If you only ever drove a Merc or a Beemer, why would it bother you?

</comment><comment><USER6> It's Mack truck, not Mac truck.

<comment><USER7> Man, here I was thinking that Apple was branching out yet again.</comment></comment>


Creative thinking: Researchers propose solar methanol island using ocean CO₂ - <AUTHOR> https://arstechnica.com/science/2019/06/creative-thinking-researchers-propose-solar-methanol-island-using-ocean-co%e2%82%82/ <comment><USER2> It would be an overwhelmingly better idea for these islands to make ammonia, and release that into the sea. That would enable surface algae to bloom over a widely dispersed area, far from land, which would absorb huge amounts of carbon and reduce acidity. They might need to introduce small amounts of iron and other minerals along with the ammonia.

They could also gather carbon -- ideally from up-current water -- for (un-)natural gas, but it is clear which contribution would have the larger effect, on atmospheric CO2, per joule of solar energy.</comment>


Free Email Client for Business - <AUTHOR>

As Google has shutdown free productive apps for business how many have been affected by this decision. What are the other best productive apps of Google that you will be missing? Is there any other player who provides free service for small business? <comment><USER2> Google has always been a sweet solution for small business. I was hoping that there was another free service out there also. At the moment it looks like there is no way around paying for it, unless you're using your server for emails.

Even ymail is charging for businesses.</comment>


Nodejitsu joins GoDaddy - <AUTHOR> http://blog.nodejitsu.com/nodejitsu-joins-godaddy/

<comment><USER2> Damn, well good for them. Hope they made out with some profit from that and it wasn't an acquihire. I like those guys.

We've been using their private npm registry at Brightcove. Time to try out npm proper and it's newer features. We were having too many automated builds break due to npm flakiness before. But it's been 6 months at least since we went off of it and a lot has changed.

</comment><comment><USER3> How disappointing that GoDaddy chose to shut the PaaS offering down, just to have these folks dedicated to working on a website builder for the lowest end sites on the web. Seems like a waste.</comment>


Why YC Is Worth 7% [pdf] - barry-cotter http://faculty.chicagobooth.edu/workshops/orgs-markets/pdf/LearningtoManage_September7th2017.pdf <comment> barry-cotter we show that founders who received advice from other founders with more "hands-on" management styles were more likely to reorient their own management activity, and subsequently experience lower employee attrition and higher rates of firm survival eight months after the intervention. For founders who already had a more hands-on management style themselves, these interactions also increased their rate of hiring. Our study demonstrates management skill can be learned by young firms via networks and subsequently influence performance.

<comment><AUTHOR> What has this got to do with YC?

You don't need to take a 7% investment from YC to learn from other founders management styles. You could learn the same lessons by having a mentor or a good network of advisors. The study does not investigate or draw any conclusions about YC or about the scale of the investments they make in companies.

Seems like you put YC in the title as clickbait. Not cool man. Not cool.</comment></comment>


Biggest Virus Yet Found, May Be Fourth Domain of Life? - <AUTHOR> http://news.nationalgeographic.com/news/2013/07/130718-viruses-pandoraviruses-science-biology-evolution/ <comment><USER2> As I study biology and microbiology in college, the more I realize that taxonomy and phylogeny classification schemes are essentially bullshit. Bioinformatics and evolution research have shown "life" to be much more ambiguous and mysterious than we could have ever imaged. Modern classification schemes are so arbitrary and error-prone as to be essentially just a painful way to satisfy scientists' compulsion to shove things into neat little cubbies and has the negative side-effect of scaring students away from an otherwise fascinating subject. The professors I've spoken with tend to agree.

Edit: added "classification schemes" after taxonomy and phylogency to clear up confusion

<comment><USER3> So how do you classify life?

<comment><USER4> > ...compulsion to shove things into neat little cubbies...

> So how do you classify life?

I believe that's the point.

<comment><USER3> I'm sure the author means dislike for the current system for trying 'too hard' to classify life, not dislikes it entirely, or out goes our ability to describe life with words entirely, which I think you'll agree is a pretty important faculty.

</comment></comment></comment></comment><comment><USER5> Discoveries such as this just go to show how arbitrary the definition of "life" is.

One might argue that viruses are not life because they are obligate intracellular parasites - but many species of bacteria are too. It used to be that size was the distinction: viruses as small, simple particles and cells much bigger, but large complex viruses also blow this argument out of the water.

The only thing left that really distinguishes the "life" of cells and the "maybe-not-maybe-life" of viruses is the presence of ribosomes to synthesis proteins. Maybe one day we'll find a virus-type replicator that also contains ribosomes - and what then?

Then there is also the issue of simulating life _in silico_ \- at which point does it stop becoming just a simulation and can be considered 'actually' alive?

Personally I think these questions are best debated in the context of philosophy and ethics rather than taken as something that the domain of science ought to provide conclusions to.

<comment><USER6> My favorite exploration of this topic is found in Maturana and Varela's "Autopoiesis and cognition: the realization of the living". Cells have to "work" to preserve their ability to go on preserving their ability to ... (etc. recursively). Viruses don't.

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

</comment></comment><comment><USER7> "Each about one micron—a thousandth of a millimeter—in length, the newfound genus Pandoravirus dwarfs other viruses, which range in size from about 50 nanometers up to 100 nanometers."

That is a horrible use of units.

<comment><USER8> I thought the same thing exactly. I usually convert everything on molecular scales in terms of proportions to the nearest tangible entity. (I find nm too abstract and harder to remember)

A single hydrogen atom has diameter of about 10e-10 meters.

A single nanometer is 10e-9 (i.e. about 10 hydrogens stacked)

Viruses are on order of 50-100 nanometers => ~500-1000 hydrogens across.

These viruses are 10e-6 meters, or 10,000 hydrogens across.

That's too many to imagine and hard to remember, so other useful dimensions I sometimes use are

diameter of DNA helix is about 2nm (20 hydrogens across)

the size of X chromosome, which is roughly 7um.

the size of a cells in our bodies vary around 10-100um.

so, the best way to get a sense of scale for this particular virus (imo) is to imagine it as 1/7th of size of an X chromosome. Or as 10x bigger than an average virus.

</comment></comment><comment><USER9> "93 percent of pandoraviruses' 2,500 genes cannot be traced back to any known lineage in nature. In other words, they are completely alien to us."

Is this as significant as it sounds? Did they just find life that may have origins different than anything else on earth?

<comment><USER10> Absolutely, there are 2,500 genes that we didn't know about.

Now it could be that if any one of these genes shows up in any of the "known" lineages (as it might if a retro-virus carrying it injected it) that it causes the host to die before reproducing. It could be that they are pandemics waiting to happen, it could be that they are code for additional eyeballs.

The challenge is that we do not yet (as far as I can ascertain) have a way to looking at a gene and identifying all of the effects that gene has on a cell or an organism. What we have are organisms with genes, that we are 'debugging by printf' by essentially commenting them out and seeing what happens.

Once our knowledge base flips, and we understand genetics at a information/programmatic level, we would be able to evaluate these 2500 genes and see if there is anything useful here.

<comment><USER11> 93% of 2500 genes, so ~2325 we didn't know about.

</comment></comment></comment><comment> guard-of-terra Maybe it was once an unicellar predator that hunted bacteria which during evolution gained the "idea" of using prey cells' machinery to do some of its biochemistry. So it didn't eat bacteria, rather plundered those.

Then during evolution it eventually lost every other piece of own biochemistry, eventually becoming a virus.

<comment><USER12> I read about the mimivirus it mentions in the article a few years ago, and it mentioned that was one hypothesis. Another is that it went the other way around; before cells were invented life was just increasingly complicated self-replicating molecules and cellular life evolved out of them. In that case the virus-like ancestors would have evolved to prey on their self-sustaining descendents.

I think the uniqueness of this virus' genes suggests that whichever direction it happened, it happened very early in the history of life.

</comment></comment><comment><USER13> Whenever I read about findings like this, I'm reminded of just how much our requirement that microbes need to grow on a piece of glass distorts our view of them. If we could observe them as easily as animals in the wild, that would open whole new avenues of research.

<comment><USER2> Very relevant xkcd comic: [http://xkcd.com/1217/](http://xkcd.com/1217/)

</comment></comment><comment><USER14> "An image of a Pandoravirus particle, created using an electron microscope."

An image without a scale it worthless..

<comment><USER15> > An image without a scale it worthless..

Not so. If you read the article, it says each is about one micron—a thousandth of a millimeter—in length.

</comment></comment><comment><USER16> why even call it a virus, if it shares so little in common with what we know as actual viruses?

<comment><USER17> It's a wall of protein with nucleic acid inside that reproduce by exploiting other organisms' cells. Don't get blinded by the differences, the similarities are much bigger.

</comment></comment><comment><USER18> I think technically, it's a worm, not a virus. :)</comment>


After the Fire: HP Archivist Pledges to Rebuild - <AUTHOR> https://www.spectrum.ieee.org/view-from-the-valley/geek-life/history/after-the-fire-hp-archivist-pledges-to-rebuild-what-she-can <comment><USER2> "Many archives of that age and size don't get digitized because the papers are of different sizes and thicknesses. It is expensive and it is difficult to make sure you have the necessary accuracy."

I don't buy this. I've archived a lot of family documents. Putting them on a flat bed scanner and pushing the button works just fine - it is not expensive nor difficult nor inaccurate.

When I was on a trip and had only brief access to a big pile of old letters, I simply took out my phone and took photos of the papers, one by one. It took literally a few seconds a page. I wasn't sure how it would turn out, but later going through the photos, I was very pleased with the results.

I suspect that sometimes archivists get obsessed with perfection, and wind up with nothing as a result. What's really valuable about the HP archive was the text, not the coffee stain on the paper. The archive copy only has to be good enough to read the text, and for that a common handheld phone camera is way more than adequate.

<comment><USER3> Well,

The way I read the article, apparently copies do exist of all or most of the documents.

        Putting the rest together is going to be like making a
        patchwork quilt out of scraps. Fortunately, annotated
        indexes of the Packard and Hewlett—box by box, folder
        by folder—exist, with copies stored on a variety of
        computers, both personal and corporate.

So the problem is that these are piecemeal copies scattered around the various pieces of HP.

<comment><USER4> ...and hopefully they also salvage as much as they can from the remains of the fire --- paper is flammable, but from what I've read, densely-packed documents can char on the outside but remain intact on the inside, since the carbonised layer can act as an effective protective insulator.

(Anyone who has tried to roast thick pieces of meat may have seen the same effect --- burnt on the outside, but bloody raw on the inside.)

</comment></comment></comment><comment><USER5> How many different models of scanners have they made over the years?

<comment><USER4> And backup solutions too:

[https://www.hpe.com/us/en/storage/data-protection- solutions....](https://www.hpe.com/us/en/storage/data-protection- solutions.html)

</comment></comment><comment><USER6> "I don't have funding at this point" \- seems strange when it's a corporate asset. Should a University take over the archive?</comment>


The AtomicMap Challenge - <AUTHOR> http://blog.boundary.com/2011/04/18/atomicmap-challenge.html

<comment><USER2> Here's a good solution:

[https://github.com/clojure/clojure/blob/master/src/jvm/cloju...](https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentHashMap.java)

<comment><USER3> +1 for the troll! subtle until you see who committed the challenge ;)</comment></comment>


Long Names Are Long (2016) - <AUTHOR> http://journal.stuffwithstuff.com/2016/06/16/long-names-are-long// <comment><USER2> This touches on one of my least favorite things when reviewing code: "stutter".

A common example is what happens when you have an object that should just be a function (or static in javaland):

        from io import reader

        reader = reader.Reader()
        reader.read(file)

Oof. Just

        import io
        io.read(file)

Similarly when you have method names that share information with the class and arguments.

        BufferedReader bufferedReader = new BufferedReader()

        bufferedReader.readBuffer(buffer)

Now languages support stuff to reduce this, like `val`, but still! When designing apis/interfaces, consider what they'll look like to a user and don't force your end users to stutter.

<comment><USER3>
        from io import reader

        reader = reader.Reader()
        reader.read(file)

Isn't this why you can say:

      from io import reader as r

And then:

      reader = r.Reader()
      reader.read(file)

    ?

<comment><USER2> Sure but you still have `read` 4 times (down from 6), while I have it only once. And that comes at the cost of forcing your users to alias a variable which can be a maintenance burden long term.

<comment><USER3> Fair enough. Though two of the "read" are "reader" and "Reader" and you can tell them apart easily from the capitalisation. But I don't completely disagree with your point.

</comment></comment></comment></comment><comment><USER4> Unfortunately I don't think this is particularly complete advice, because it totally ignores the question of scope.

Yes, variable names serve to disambiguate. But at what level -- function? File? Component? Business process? There's no clear rule here. And are they disambiguating merely between other variables that have already been defined, or from the wider scope of _potential_ variables that a programmer might likely otherwise accidentally confuse them with?

If I have 20 different functions that all deal internally with only a single "price" variable, it may be legitimately helpful in preventing bugs to explicitly name these "priceWithTax" and "priceWithoutTax", or "priceLocalCurrency" and "priceForeignCurrency", or "priceList" and "priceSold". Or even use "priceWithTax" even if I never once use or define a "priceWithoutTax", because I _know_ from experience that people are going to make a mistake otherwise.

In the end we're all trying to balance brevity with descriptiveness that prevents someone from accidentally misinterpreting and therefore misusing the variable when calling or modifying later on.

Sometimes I agree that yes variable names seem too long... but then I realize it may well be worth the peace of mind knowing that it's reducing chances of mistakes and bugs.

<comment><USER5> The article is explicitly about object oriented code, which pretty much tells you exactly how scoping will work, and in which contexts you drop parts of a name because they're contextually obvious.

If you have 20 different functions that all internally deal with `price`, then either you're not writing OO code, or each of those functions is in its own object type, providing a clear context on what your code is talking about.

<comment><USER4> > _The article is explicitly about object oriented code_

You're wrong, it's absolutely not.

It never once mentions being about objects, and the first half of examples don't involve objects at all.

I don't know where you're getting that from.

And even if it were, it has nothing to do with my point. Different objects could use different standards for a price variable. You claim that objects would provice a "clear context", but if it's not through variable names, then how? Just through comments around the variable names?

<comment><USER6> From TFA:

"Obviously it's an object. Everything is an object. That's kind of what "object-oriented" means".

So ... TFA is perhaps not explicitly, but _implicitly_ about object oriented code?

</comment></comment></comment></comment><comment><USER7> While I certainly think that naming is important, I don't quite agree with all the improvements suggested here:

> // Bad:

> List<DateTime> holidayDateList;

> Map<Employee, Role> employeeRoleHashMap;

> // Better:

> List<DateTime> holidays;

> Map<Employee, Role> employeeRoles;

I'm not sure this is better. Yes, it's obvious that both are _collections_ , but it's not obvious what you can do with them. Is `holidays` a map of date to information about the holiday? Is `employeeRoles` a set of all possible roles?

And once you remember that `employeeRoles` is a map, you're still a little lost about how to look into it. Is the key the employee id? Email?

Perhaps it could be called employeeToRoleMap? That distinguishes it from employeeIdToRoleMap, or possibleEmployeeRoles.

Maybe this is me disagreeing with a later statement by the author:

> Some people tend to cram everything they know about something into its name. > Remember, the name is an identifier: it points you to where it's defined. > It's not an exhaustive catalog of everything the reader could want to know > about the object. The definition does that. The name just gets them there.

I don't know if I want to know _everything_ , but I think I lean towards _more_ than the author does. A variable name I changed today was originally called `initial-points`. It designated the set of intermediate points directly from a source to a destination, which would later be offset randomly (example: [https://imgur.com/a/UxkGPfX](https://imgur.com/a/UxkGPfX)).

While refactoring related code, I realized that although it was descriptive, it was descriptive _temporally_, rather than describing the identity of the points. I ended up changing it to `points-in-direct-line`. It still feels subpar to me, but at least it's clearer: the points exist not because they'll be changed later (initial-points), but as a direct line between the source and destination.

<comment><USER2> In a strongly typed language, you shouldn't encode type information in the name, it's statically derivable. Holidays isn't a map, it's a list. The name doesn't need to tell you that, you already know and the language will prevent you from misusing it.

With employees, you might be right. The comments on the original article give two suggestions:

1\. `employeesById`. This may imply a mapping type, but you aren't stuttering (saying map twice in the decl) at least.

2\. Create an employee ID type and make the type declaration Map<EmployeeId, Employee>. (Where your id type might just bsubclass int) This way the semantic information is encoded into the type, and the type system prevents your from misusing things. For example you'd need to explicitly cast from int to employee ID.

<comment><USER7> > In a strongly typed language, you shouldn't encode type information in the > name, it's statically derivable.

This is completely true!

> The name doesn't need to tell you that, you already know and the language > will prevent you from misusing it.

I think this is where we differ! I prefer to know what I can do with something without having to ask a compiler or IDE. This helps, for example, when looking at a pull request -- you don't have the code easily accessible for the compiler or IDE.

Possibly a difference is that I prefer to use languages that are more dynamically typed -- Clojure, Emacs Lisp, etc. And so you don't _have_ `Map<EmployeeId, Employee> employeesById`; you only have the variable name.

But I do wonder -- even in the most explicitly typed, statically typed languages, what is the eser experience for finding this out? It seems that unless one is looking at the declaration, there must be at least one level of indirection to find out what the type of something is.

Say you're looking at a use of the variable `employees`. Here's the ways I can think of that would let you know what the type is:

1\. Scan upwards until you find the declaration, if it even is on screen. Then look back to where the use was.

2\. Move the cursor to the variable, and use the "go to definition" functionality built into the IDE. Then look at the declaration, and use the "go back" IDE function.

3\. Move the cursor to the variable, and the IDE has somewhere that tells you the type. This is relatively simple, but still requires you to move to the variable, and to look somewhere else and back.

On the other hand, with a name like `employeesById`, all you need is in that thirteen characters.

<comment><USER8> > I think this is where we differ! I prefer to know what I can do with > something without having to ask a compiler or IDE. This helps, for example, > when looking at a pull request -- you don't have the code easily accessible > for the compiler or IDE.

I think, in accordance with "variables won't and constants aren't", I would propose the less pithy: "any invariant that is not enforced is broken". The compiler doesn't check that the capabilities or roles advertised by your variable names are actually present, so eventually they won't be. That means that you _can 't_ just check the variable name when reviewing code, must _must_ check the declaration (as well as possibly elsewhere) in case the variable names lies; and, once you're checking that, what have you gained in reviewability?

<comment><USER7> Nothing can prevent all errors. Having explicit typing does not prevent `List<Users> bankAccount`, but almost all programmers prefer variable names that encode things not in the data types.

So I disagree that you must check that `employeesById` or similar are still a map type if a PR uses it. If it wasn't a map type, I would have expected that to be flagged in the PR that introduced the variable.

</comment></comment></comment></comment></comment><comment><USER9> Personally, working in a variety of python and javascript shops, I have seen problematically-short variable names way more often than problematically-long variable names, probably on the order of 10:1.

</comment><comment><USER10> I've been burned far too many times by ambiguous names. The edict on hashmaps in here is a particular one that has gotten me more than once, so i always name them "ValuesByKey" style. Alike "AccountsByID".

It's a risk/reward thing. Overlong names are annoying. Brief names are destructive. So I always err on the side of length.

<comment><USER11> This is one of the pros of using a strictly typed language: there errors like these can only go unnoticed if the other object has the same type. And in languages like Rust with a concept of ownership even those might be cought in compilation..

Naming things is hard. But it is a lot easier if you can rely on it not breaking things all the time.

<comment><USER10> Hashtables full of record-like objects are the usual problem. I often find myself throwing records into a hashtable and then keying it by one of its properties, and that means it's a simple primitive and there may be many of the same type.

If I've a record with a half-dozen int properties that are semantically IDs, I have to clarify which is the key for this hashtable.

</comment></comment></comment><comment><USER12> This is a symptom of OO languages. You don't nearly get as much word soup in good functional languages.

People really diss Erlang for its syntax but I find it to be extremely readable and understandable in most cases because pattern matching is a first class citizen in the language. Humans are excellent at recognizing patterns.

Same goes for the ML family.

<comment><USER13> Interesting observation. Do you have some real world DP codebase examples where one can see how they avoid word soup (without sacrificing understandability)?

</comment></comment><comment><USER14> FWIW, and definitely somewhat off-topic, when they say code is reviewed "twice," they don't mean necessarily literally. When someone gets "readability" in a language, they can approve changes in that language for readability; if neither the reviewer nor the person writing the code yet have readability in a given language, they will need someone who does to approve it in addition. The idea is to have someone who has pretty good knowledge of the style and conventions used for a given language to have reviewed it.

More information is available on the net if you're curious. A cursory Duck Duck Go leads me here: [https://www.pullrequest.com/blog/google-code-review- readabil...](https://www.pullrequest.com/blog/google-code-review-readability- certification/)

</comment><comment><USER15> I personally rather like the idea of making type names long but variable names short.

Instead of

        DockableModelessWindow window;

I might write

        DockableModelessWindow dmw;

if this is a local variable whose type is nearby. Using acronyms also help people remember its type.

For global variables, though, it would not be appropriate.

<comment><USER16> If abbreviating, why 'dmw' and not 'win'? Is the fact that it's dockable and modeless really important enough to use two-thirds of the variable name on a cryptic abbreviation? (And if it is, why not call it by what it _is_ rather than how it's _shaped,_ like 'toolbar' or 'tbar'?)

<comment><USER17> I agree (at least as far as function/block local variables are concerned), except that I'd probably just name it w. If it's not obvious from context that w stands for window, then the function probably needs to be refactored anyway. That said, dmw is fine if the function needs to deal with more than one type of window.

</comment></comment></comment><comment><USER3> That's why I like Prolog:

      factorial(0,F,F).
      factorial(N,A,F) :-
          N > 0,
          A1 is N*A,
          N1 is N -1,
          factorial(N1,A1,F).

Because 90% of variables in 90% of the Prolog code I've ever read __* are named A, B, C, D, H, I, J, K, L, M, N, P, Q, R, S, T, U, V, W, X, Y or Z. Or with an "s" (as in Xs, Ys, Zs...) to denote a list. Or a number to denote a new version (where you'd like to put a "'" but syntax doesn't let you).

Theeere you are. No need to think hard.

:dusts hands:

(Tail-recursive factorial predicate from here: [https://www.cpp.edu/~jrfisher/www/prolog_tutorial/2_2.html](https://www.cpp.edu/~jrfisher/www/prolog_tutorial/2_2.html))

______________

 __* Including my own code that I 've written before reading it.

</comment><comment><USER18> [https://talks.golang.org/2014/names.slide](https://talks.golang.org/2014/names.slide)

Very cool presentation by Andrew Gerrand, with the following rule of thumb:

The greater the distance between a name's declaration and its uses, the longer the name should be.

</comment><comment><USER19> Funny that three are so many typos on a treatise about short precise names.

</comment><comment><USER20> > _We have rightfully abandoned Hungarian notation. Let it go._

Earth to FreeRTOS ...

<comment><USER21> I had a look at FreeRTOS for a project, and liked the architecture with support for concurrent tasks and all the tooling included in Atmel Studio... I would not let something as superficial as the naming conventions influence my tooling choice, but for sure was left wondering who and why in the world would opt for such awkward and (almost objectively) ugly names for their rtos project.

Seems like if they tried hard to join all the worst things from all worlds: mix your ALLCAPS with lower case, add a pinch of CamelCase mingled with some snake_case, and top it with a confusing blend of semantic + sintactic prefix notation.

Seriously wtf were they thinking about?

EDIT: Adding the first example that I could find, which already shows all of the mentioned "features" (scroll down for the code): [https://www.freertos.org/Hardware-independent-RTOS- example.h...](https://www.freertos.org/Hardware-independent-RTOS-example.html)

</comment></comment><comment><USER22> Well, Google must've changed course, seeing as Go made keyboard farts fashionable again. I guess that's where Go's C heritage comes in.</comment>