Ask HN: Why does HN have a relatively low Google PageRank? - <AUTHOR>

Don't know if this is the way it's always been, but HN's pagerank seems low given its relative popularity...At first I thought it was egregiously low, because https://news.ycombinator.com registers as a 3. But I see that the canonical link for the homepage (the first thing that comes up when you Google "Hacker News") is:
https://news.ycombinator.com/news
Which has a score of 5.
Interestingly enough, the submission link (https://news.ycombinator.com/submit) has a PageRank of 6.
I know HN doesn't rely on SEO and such, I just thought that popularity alone (and its threads are commonly linked to, especially by the OP's themselves) would give it a higher-than-5 PageRank.
(I'm retrieving PageRank by using one of the various external scripts/websites out there for this purpose, such as http://www.pagerank-checker.com/ or the Chrome extension) <comment><USER2> Probably because we restrict their crawlers. But this is an excellent side effect, because the last thing I want is traffic from Google searches.

<comment><USER3> If you really want to make it difficult for people to find this place, an idea might be to raise the technical threshold required to view it: serve it on telnet like a BBS-era board, or run it as a Tor hidden service, or better yet: both!

It might be a bad idea for some reason I cannot conceive of right now.

<comment><USER4> One thing is not want people wondering around, looking for a quick random answer, as this site is pretty much about community.

Other is make it difficult to access by a random, specific criteria, such as technical hability. Yes, I am no tech hacker, never used Tor, but I try to be part of this community as valuable member. I think community is about aligning interests, not an exclusivist club.</comment></comment></comment>


Downright Orwellian: journalists decry Facebook experiment's impact on democracy - <AUTHOR> https://www.theguardian.com/technology/2017/oct/25/facebook-orwellian-journalists-democracy-guatemala-slovakia <comment><USER2> Facebook should consider having an opt-in feature for user-experience experiments that could have a high impact on important news reaching the general public. By having users opt-in they would be aware of the feature that they were opting in for and therefore there would be less confusion. Users could be made to explicitly either opt-in or opt-out of the feature being tested which would increase general awareness of the feature. Users should also be given the ability to upvote / downvote the new feature in favor of relying only on algorithms to infer whether a new feature is liked by the majority of users or not.

<comment><AUTHOR> I totally agree with you. I would like to know if they actually have any reasons why they don't give people this option, because even though people could tend to opt-out in masses - there still is possibility to motivate them somehow. About the feedback, it may not be straightforward for the same reason that people tend to ignore it, so I guess they have it figured out already and I hope their metrics are set well enough to notice issues.</comment></comment>


Don't Ban TikTok. Make an Example of It - <AUTHOR> https://www.nytimes.com/2020/07/26/technology/tiktok-china-ban-model.html <comment><USER2> Well, it would be very good if TikTok Open-Source the app, the best option.</comment>


ABC raid: Australia police search headquarters of public broadcaster - <AUTHOR> https://www.bbc.com/news/world-australia-48522729 <comment><USER2> Ugh. What is this authoritarian nonsense?

Two AFP raids on journalists in one week, both for reporting on the military/government.

How did we get here and how the fuck do we get back?

<comment><USER3> Australia has been a surprisingly right-wing country for some time, and has also inherited the UK's approach to unaccountable security services.

<comment><USER4> We aren't necessarily right-wing. We are highly conservative. For instance, as a nation believe in reproductive rights, we are proud of our free health care system, we severely curtail the right to even own a gun and we voted for gay marriage only recently.

Even though I personally can't stand the current government, they aren't as right-wing as you make out.

Of course, what is happening here is absolutely awful.</comment></comment></comment>


Pagekit 1.0 - <AUTHOR> https://pagekit.com/blog/2016/04/13/pagekit-1-0-is-here <comment><USER2> I don't understand the obsession with third-party apps implementing Google's style guide for non-android things.

Also, this is a perfect example of why I think the PSR autoloading system supports unnecessarily confusing code layout.

Their PSR4 autoload config has:

\- "Pagekit\\\": "app/modules/application/src"

\- "Pagekit\\\Installer\\\": "app/installer/src"

\- "Pagekit\\\System\\\": "app/system/src"

\- "Pagekit\\\Config\\\": "app/modules/config/src"

\- "Pagekit\\\Console\\\": "app/console/src"

\- "Pagekit\\\Migration\\\": "app/modules/migration/src"

I use a rich IDE for writing code so I rarely have to worry about finding a file manually (open by name, go to symbol, etc), and I still wouldn't want to try to keep even a summary of that ridiculous structure in my head.</comment>


Why We'll Never Meet Aliens - <AUTHOR> http://qz.com/80907/why-well-never-meet-aliens/

<comment><USER2> It's true that once something was able to reach us, they'd probably have very little interest in conquering us, stealing our resources, or anything else "movie aliens" do. Where I disagree is that such beings wouldn't be interested in us.

Start with us. Despite knowing basically where we came from, what our ancestors looked like, and how their DNA would look, we're still fascinated to find links and steps along the way. I'm still intrigued by bugs and bacteria, despite being much more advanced and sophisticated. We still call our dogs "smart," and enjoy when they communicate with us in their simple ways.

Anything that goes into space is probably curious. You don't even start a space program to look or travel elsewhere if you're not interested in what might be out there!

How could you not be interested in an entirely different biosphere? In exploring among plants and animals, the likes of which you'd never seen? If you lack that kind of curiosity, you'd just stay home in the first place. We're all just speculating of course, but it's an interesting topic.

<comment><USER3> You've fallen into a trap: anthropomorphizing aliens.

Aliens aren't necessarily anything like us. Curiosity isn't necessarily a property of life. An example: cats don't appear to experience remorse, yet dogs do. One could envision the same for curiosity.

One motivation for a space program is when a civilization realizes their resources will be gone in a matter of centuries.

<comment><USER4> One of the classic examples is the Paperclip Maximizer thought experiment. A paperclip maximizer is a superintelligent AI whose sole goal is to maximize the number of paperclips in the universe. Such a being is curious to the extent that learning more about the universe increases the expected number of paperclips in its future light-cone.

A paperclip maximizer is indifferent to your existence, but thoroughly believes that it could make better use of your planet than you could, as you are _hardly_ optimized for the production of paperclips.

<comment><USER5> Obviously the Paperclip Maximizer would be supplanted by the Maximizer Maximizer, which only sees value in copies of itself. The Maximizer Maximizer that stumbles onto the mental trait "curiosity" will eventually crush all other variants of Maximizer. Once it develops the advanced technologies of space travel, it discovers that seizing faraway planets is possible but going through all that trouble is not a net positive towards self-actualization as a Maximizer Maximizer Maximizer.

Thus TFA is correct.

<comment><USER4> Obviously the Maximizer Maximizer is just another potential foe for the Paperclip Maximizer to seek out and crush in its infancy. (Sound brutal? It isn't; if you pull it off right, not a single paperclip will be harmed.)

<comment><USER5> The potency of the Minimizer Maximizer is more likely to be discovered by a curious Maximizer variant. But will it have the wisdom to not to employ it?

But you are falling into a anthroporeligio trap of assuming the Paperclip Maximizer considers _potential_ paperclips in their uncoiled wire form to have comparable moral status as _actual_ paperclips, once the wire reaches the factory floor.

</comment></comment></comment></comment></comment></comment><comment><USER6> Previous Discussion: <https://news.ycombinator.com/item?id=5613920>

Original Link: [http://paultyma.blogspot.com/2013/04/why-well-never-meet- ali...](http://paultyma.blogspot.com/2013/04/why-well-never-meet-aliens.html)

</comment><comment><USER7> the largest logical fallacy among many that this article suffers from is that alien species would necessarily need to be technologically advanced to reach us. This probably comes from another flawed line of thought that aliens need to be like us in some way (hence requiring things like figuring out how to survive radiation, last for long periods without food and so on). This doesnt really make sense since on earth itself there are species that can do things we humans couldnt do (cockroaches can cope with tremendous amounts of radiation for example, and bacteria that live near geysers etc - thrive at extremely high temperatures). So why isn't it possible that an alien species that just about figures out how to ride a rock in space and doesnt really need all the advancement that we need to survive - comes floating by planet earth and decides to check us out sometimes?! Don't back up a lack of imagination with flawed logic ;)

<comment><USER3> The energy required to reach escape velocity generally precludes a planet from generating enough force to fling an object outside its gravity well.

The energy required to sustain life generally precludes large lifeforms from surviving for long periods in space on a spacerock. Anything that evolved into a complex organism probably required a stable source of energy for billions of years. Ours is the sun, and at a very specific distance range.

<comment><USER8> > The energy required to sustain life _generally_ precludes

> Anything that evolved into a complex organism _probably_ required

Both of those claims are based on a single data point.

</comment></comment></comment><comment><USER9> If there are or were aliens, why have we not heard them?

Forget visits, why haven't we heard a peep? From anywhere?

The universe is 13.77 billion years old. It took planet earth 4.54 billion years to evolve a species capable of emitting significant electromagnetic radiation.

I'm starting to be pretty convinced that we are the first advanced species, and perhaps life is a lot more rare than we imagine.

<comment><USER10> Because space-time is expanding at an extraordinary rate, such that vast portions of the universe are forever inaccessible?

"For example there are stars which may be expanding away from us (or each other) faster than the speed of light, and this is true for any object that is more than approximately 4.5 gigaparsecs away from us." [1]

That said, 4.5 gigaparsecs is 10^10 light years, which is still pretty damn big.

[1] <https://en.wikipedia.org/wiki/Metric_expansion_of_space>

<comment><USER8> Isn't the expansion of the universe way out of scope of this article and discussion? Obviously, if there are aliens that far away, they by definition cannot reach us.

<comment><USER10> It could explain why we haven't encountered aliens despite the advanced age of the Earth. The Earth has been around for roughly 1/3rd the age of the universe, but because space time is expanding exponentially, only a fraction of the universe (roughly 20%) is theoretically reachable, even when travelling at the speed of light. A planet like Earth that formed around the same time, or earlier, even relatively close to the Earth, may now be in the unreachable zone. By the same token, the longer it takes for an intelligent species to evolve, the less likely it is that they will ever be able to contact us.

</comment></comment></comment></comment><comment><USER11> What's this BS premise about them being "1,000 times smarter than us"?

For one, we're not 1000 times smarter than people 2000 years ago. Just more tech savvy and able to play with more abstract / mathematical patterns (which helps with IQ scores). As far as our general thinking, philosophy and emotional intelligence goes we are about as smart as those "ancients". Or even worse. And if there's any doubt that that holds in aggregate, it sure holds in isolated cases. Do you believe the average American is smarter than, say, Euclides or Aristotle? Or Newton, Da Vinci, etc?

Second, what about aliens that are in more or less a similar state as us? They might live 10-20-100 light years away, have a similar level of technology, etc. We might be able to meet them if we or them attempt a mission, or talk to them over radio waves.

And in that case, nothing of all those ("we're insects to them") etc, will hold.

</comment><comment><USER12> Any alien species that is capable of coming here, and curious enough to want to learn about our form of life, is probably more than capable of doing so without alerting us to their presence.

</comment><comment><USER13> A lot of the comments: <http://xkcd.com/638/>

I don't know much about all this but we haven't even left our solar system (if we truly have then fine galaxy). I mean physically as I imagine other emissions do get out but idk. And we find new life forms on Earth all the time. Are we really qualified to say there is no life out there?

</comment><comment><USER14> Imagine a race of technologically advanced religious zealots. Now imagine that their god has tasked them with converting everyone in the universe and kill any who refuse. If you're having trouble, just imaging a Catholic Space Crusade or an Islamic Space Jihad, it's the next "logical" step. I'd be pretty afraid of aliens with that kind of mindset.

<comment><USER15> I think it's difficult to do any sound prediction. Once you reach a certain level of civilization advancement, I think everything is different, a little bit like you couldn't compare our civilization with the first human beings fighting for food.

</comment></comment><comment><USER16> There's an interesting idea in "Accelerando" that supertech civilizations would value "novelty" the way we [once] valued gold and Bitcoin values rare prime numbers, and it's hard to imagine a better source of novelty than an alien civilization.

Now - that doesn't address the virtuality thing, but I've a friend with a compelling take on that: If we're assuming that any sufficiently advanced civilization would rather simulate us than visit us, then it's pretty reasonable they'd have more than one simulated universe. And it's pretty likely that the simulated universes would have super tech civs that start up their own simulations, causing a recursion, which in turn makes it more likely than not that we're in a simulated universe. And, if we're in a simulated universe, then we're already "in contact" with the host universe/civilization - otherwise, what's the point in the simulation in the first place?

</comment><comment><USER17> We might never meet aliens because we don't even know what we're supposed to search for. Our definition of life is limited to carbon lifeforms, and searches are limited to signals of something that resembles human civilization (e.g., laughably Dyson's spheres). A pretty naive, anthropocentric, reductionist view of the universe if you ask me.

Once you stop seeing living beings as carbon actors in a scenic universe, you realize the existence of amazing life forms everywhere, in all scales, and that the definition of "intelligent lifeform" is an illusion.

</comment><comment><USER18> It's a really interesting and complex topic to think about. I don't feel knowledgeable enough to make arguments one way or another, but I'd like to think that two species from different planets could happen upon each other at least by accident, in the same way that I, as a human, encounter an ant on the sidewalk. We're the most advanced on the planet; we may not care to interact with every living being on Earth, but that doesn't mean we won't step on them while moving from point A to B.

</comment><comment><USER19> So if we in the future are going to be advanced enough to visit some planet with alien life we are not going to be interested in meeting them?

</comment><comment><USER20> This is really out of topic but qz.com has the worst mobile experience. On my Android phone I have a quarter of an inch size view port.

</comment><comment><USER21> I'd like to humbly suggest that, if given the opportunity, one experiment with DMT. It's the closest thing to a "nearest neighbor" argument that I can come up with, but of course I have no explanation.

This is the best write-up that I've come across on the subject: [http://ewwty.com/2012/02/24/dimethyltryptamine-dmt- experienc...](http://ewwty.com/2012/02/24/dimethyltryptamine-dmt-experience/)

And for a longer treatment I recommend reading "The Cosmic Serpent", which centers around the information gained during Shamanistic ayahuasca sessions (dmt based) which led to the discovery of many plant-based pharmaceutical precursors: <http://en.wikipedia.org/wiki/The_Cosmic_Serpent>

<comment><USER3> I knew someone who experimented with DMT. Their personality was distinctly different afterwards, and has remained different for several years. In a negative way.

Change yourself at your own risk.

<comment><USER22> There's no known physical risks to using DMT. It is naturally produced by your body in small amounts.

The risk is integrating the experience of traveling to another "dimension" and then coming back to reality. If you aren't psychologically fit, you shouldn't try it. But mostly it will feel like a dream. Hard to believe it happened and impossible to explain.</comment></comment></comment>


The Octal Small Form Pluggable (OSFP) implements 400Gb Ethernet - <AUTHOR> https://osfpmsa.org/ <comment><USER2> I think this needs to be suffixed (2017). The latest spec version (1.12) is dated August 1, 2017. And there isn't any newer press release.

That being said, Mellanox did in 2018 announce a static demo of an OSFP module ([http://www.mellanox.com/blog/2018/04/first-showing- mellanox-...](http://www.mellanox.com/blog/2018/04/first-showing- mellanox-400g-sr8-osfp-transceiver/)), but I don't see any products listed. Nor do I see anything from Cisco.

So, my guess is that QSFP-DD has won. Either that, or (if OSFP does have better heat dissipation) OSFP will only be used in long-haul applications.

<comment><AUTHOR> It's far too early to say either has won, considering 400Gbps will be used heavily for coherent (QPSK, 8PSK and 16QAM) inter city long haul things, the extra heat dissipation may be necessary for longhaul DWDM applications.

</comment></comment><comment><USER3> Super bad name. One of the most popular routing protocols is OSPF.

</comment><comment><USER4> Seeing "octal" and "pluggable" together evokes images of tube sockets; before I clicked the link, I was expecting connectors more similar to [https://en.wikipedia.org/wiki/Tube_socket#Octal](https://en.wikipedia.org/wiki/Tube_socket#Octal) being used for Ethernet.

The actual "meat" of the site for the more technically inclined is here: [https://osfpmsa.org/specification.html](https://osfpmsa.org/specification.html)

...where you find that "octal" does not mean it has 8 pins, but instead 8 separate differential pairs for data.

</comment><comment><USER5> Should have used 8SFP to avoid confusion with OSPF (which also is a terrible name in its own way)

</comment><comment><USER6> It's kind of annoying that there are OSFP and QSFP-DD for 400G. And Arista is supporting both which doesn't reduce the confusion any.

<comment><AUTHOR> From my point of view, it looks like OSFP is a bit more "conservative" design, its larger body size means they can fit more heat dissipation and a larger heatsink attached to the receptacle. From optics vendors and manufacturers who were concerned about being able to fit the same functionality and reliability into the same mechanical dimensions of a QSFP28 (QSFP-DD). But still small enough that 36 can fit in a 1RU front panel.

</comment></comment><comment><USER7> We're basically out of acronyms. I clicked on this thinking looking for details on high bandwidth router configuration protocols.

<comment><AUTHOR> Yes, I can see where this is definitely going to confuse a lot of people at different parts of the OSI model (OSFP at layer 1, OSPF at layer 3).</comment></comment>


WebAssembly Troubles Part 1: WebAssembly Is Not a Stack Machine - <AUTHOR> http://troubles.md/posts/wasm-is-not-a-stack-machine/ <comment><USER2> [one of the original Wasm designers here]

Responding to the OP, since there is no comment section on the site.

First off, this rant gets the history of Wasm wrong and the facts of Wasm wrong. I wouldn't unload on a random person on the internet generally, but I would like to point a sentence like:

> Not only that, but for the most part the WebAssembly specification team were > flying blind.

It's an ad hominem. This really just impugns people and invites an argument. It might be cathartic, but generally it doesn't advance the conversation to cast aspersion like this.

And it's not true. I can tell you from first hand experience that a baseline compiler was absolutely on our minds, and Mozilla already had a baseline compiler in development throughout design. The Liftoff design that V8 shipped didn't look too different from the picture in our collective heads at the time. And all of us had considerable experience with JIT designs of all kinds.

As for the history. The history is wrong. The first iteration of Wasm was in fact a pre-order encoded AST. No stack. The second iteration was a post-order encoded AST, which we found through microbenchmarks, actually decoded considerably faster. The rub was how to support multi-value returns of function calls, since multi-value local constructs can be flattened by a producer. We considered a number of alternatives that preserved the AST-like structure before settling on that a structured stack machine is actually the best design solution, since it allowed the straightforward extension to multi- values that is there now (and will ship by default when we reach the two- engine implementation status).

As for the present. Wasm blocks and loops absolutely can take parameters; it's part of the multi-value extension which V8 implemented already a year ago. Block and loop parameters subsume SSA form and make locals wholly unnecessary (if that's your thing). Locals make no difference to an optimizing compiler like TurboFan or IonMonkey. And SSA form as an intermediate representation is not as compact as the stack machine with block and loop parameters which is the current design, as those extra moves take space and add an additional verification burden.

A final point. Calling Wasm "not a stack machine" is just a misunderstanding. All operators that work on values operate on the implicit operand stack. This is the very the definition of a stack machine. The fact that there is additional mutable local storage doesn't make it not a stack machine. Similarly, the JVM has mutable typed locals and yet is a stack machine as well. The JVM (prior to 6) allowed completely unstructured control flow and use of the stack, leading to a number of problems, including a potentially cubic verification time. We fixed that.

All that said, there might be a design mistake in Wasm bytecode. Personally, I think we should have implicitly loaded arguments to a function onto the operand stack, which would have made inlining even more like syntactic substitution and further shortened the bodies of very tiny functions. But this is a small thing and we didn't think about it at the time.

[edit: Perhaps "ad hominem" is a bit strong. It feels different to be on the receiving of a comment like "flying blind"\--it doesn't mean the same thing to the sender and receiver--especially when this was really not the case, as I state here.]

<comment><USER3> > It's an ad hominem. This really just impugns people and invites an argument. > It might be cathartic, but generally it doesn't advance the conversation to > cast aspersion like this.

Ignoring any factual incorrectness, I can not see how the author could have made his point in a more respectful way. He clearly has great enthusiasm for WASM and respect for it's authors, I am struggling to see how anyone could have interpreted it as cathartic...

The paragraph in which your excerpt originated makes this pretty clear:

> The developers of the WebAssembly spec aren't dumb. For the most part it's > an extremely well-designed specification [...] I considered WebAssembly's > design to be utterly rock-solid, and in fact I still strongly believe that > most of the decisions made were the right ones. Although it has problems, > it's incredible how much the WebAssembly working group got right considering > it was such relatively unknown territory at the time of the specification's > writing.

<comment><USER4> In an engineering discipline, asserting that someone is 'flying blind' could very, very easily be taken as offensive. Knowing what's going on and why is so fundamental to 'good engineering' practice that you basically are calling the people ethical failures. 'Impugn' is a perfectly reasonable word for how someone might react to such an aspersion.

Maybe in the future don't accuse engineers of 'flying blind' if you aren't inviting return fire.

From context there was a lot of conjecture going on, but the big challenge with building something new is what order to build the bits in to give you the most useful information fastest. As the number of people goes above 2 the odds that everyone agrees or that 'everyone' is right drop rapidly toward zero. You do the best you can, and hope it's good enough that you still have time to react to the worst of the decisions you made earlier. But it's not 'flying blind'.

<comment><USER5> Wow, not the kind of engineering room I'd want to be in. You have to be able to make claims that the other party does not have a complete picture of the situation, and an external critic is indeed going to be vulnerable to the same criticism.

Maybe you would have a point if it were a Linus-style "only a fucking idiot would" rant. But responding to a sincere attempt to defend a design decision as if it were an insult is some prima donna behavior.

</comment></comment></comment></comment><comment><USER6> Recomputing liveness is not really a big deal. Can be quite cheap, especially over a register based IR.

I think that this article overstates the impact of all of this.

<comment><USER7> Yes. The article is obsessed with the code quality generated by streaming compilers, which is probably the wrong thing to focus on. A real high- performance backend has no trouble reconstructing SSA form and using it for optimizations. But forcing frontends to emit SSA would be a burden on them. (LLVM bitcode formally requires SSA form as well, but this can be worked around by using allocas.)

It might, however, make sense to have another standard "SSA WebAssembly" program representation. There could then be standard tooling to compile vanilla WebAssembly to the SSA form, frontends could choose which variant they want to emit, and backends preferring SSA as input could still be made happy.

<comment><USER8> Author here:

I'm obsessed with the quality of streaming compiler-emitted code for a few reasons. Firstly, I'm working on an optimising streaming compiler. Secondly, I work for a blockchain company and we can realistically only allow linear-time compilation, this doesn't necessarily mean streaming compilation but we might as well make it both (I explain why we need linear-time compilation in a different article [http://troubles.md/posts/why- wasm/](http://troubles.md/posts/why-wasm/)). Thirdly, anything that gives streaming compilers more information also means that non-streaming compilers have to reconstruct less information, and lastly in this particular case there is no reason (except for backwards compatibility constraints) why we can't preserve more of the information from the front-end and have streaming compilers emit better code.

<comment><USER6> A streaming compiler can emit really great code even without liveness. It's not clear to me what optimizations you're hoping to get from this. To do most SSA optimizations you need a backend that can lower from SSA, which is not linear afaik. Register allocation might be helped a bit by liveness, but you can get block-local liveness information in linear time already - so for your thing to be better you'd have to prove that there is something sweet about having a non-SSA compiler that does register allocation using imperfect liveness information, which was provided by an adversary. Then you'd have to prove that this is ok - that an adversary can't force you to do more work than you want by lying about liveness. It's probably not ok; for worst case perf you're almost certainly better off not trusting provided liveness info and reconstructing it yourself on a block-local basis.

Anyway. I could tell you a lot more about how to design compilers but I have to take my kid to school.

<comment><USER8> A statically-typed stack machine like Wasm is homomorphic to SSA form with liveness, and it's impossible to lie about liveness in this format. Most of the complexity in the streaming compiler that I'm working on is around producing good code for locals when we have no liveness information for them. I explain why this is in the article.

<comment><USER6> It's not guaranteed that using the liveness implicit in the SSA that falls out of a stack language is going to give you better code in less time than a block-local register allocation with locals live at block boundaries spilled to the stack.

<comment><USER2> Indeed, and for good spilling decisions, you'll want to have next-use distance information for values. While a stack machine gives you an approximation of this (deeper in the stack is farther in the future), for best results I imagine you'll want to do two passes anyway, so locals are no worse for this, other than at block boundaries, if you lack liveness you have to spill them.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> As someone in the midst of building a game in C for 7 platforms, with WebAssembly being one of them, my main disappointment is with the lack of coroutines (or lack of control over the stack to implement them.) It hinders how wide my engine can go since I'm limited to a fork-and-join model for splitting work across threads. Poor code generation is also another pain point, but I fully expect that to improve drastically over the coming year.

Overall, I'm pretty excited for WASM and the implications of it, but it does feel like the web has regressed in the ability to deliver games.

<comment><USER10> Most common coroutine implementations, such as JavaScript's and Python's, are delimited or "symmetric". This means the most obvious implementation is in terms of compiler transformations in the source language. It seems out of WASM's scope to do this.

Undelimited "asymmetric" coroutines, like Lua's, could be an interesting addition. That still seems to me to be too high level a feature for a "portable assembly language" specification though.

<comment><USER11> I think you might be conflating characteristics regarding delimited and symmetric coroutines. But let's step back.

JavaScript's and Python's choice of coroutine styles was constrained and effectively dictated by runtime limitations. CPython, V8, and similar implementations mix their C and assembly callstacks with their logical language callstacks. Because the host runtimes didn't readily support multiple stacks without a complete rewrite, this bled into the language runtime. There was a path dependency whereby early _implementation_ _choices_ directed the evolution of the _language_ _semantics_.

WASM is recapitulating the same cycle. Which is understandable because time is limited and you can't make the perfect the enemy of the good, but you still have to recognize it for what it is--a vicious cycle of short sightedness. If WASM doesn't provide multiple stacks as a primitive resource, then things like stackful coroutines, fibers, etc, will have to be emulated (at incredible cost, given WASM's other constraints regarding control flow). And if they have to be emulated they'll be slow, which means languages will continue avoiding them.

<comment><USER10> I agree that CPython and V8 omitting the ability to juggle multiple stacks is a mistake. For higher-level languages, undelimited coroutines or continuations allow for very useful abstractions like Go's and Erlang's transparently non- blocking IO.

However, it doesn't seem to be _entirely_ an implementation detail. Some developers just don't seem to like the semantics of called functions being able to cooperatively yield without the caller explicitly opting into it with a keyword like `await`. I disagree with them, but it's a legitimate complaint I've a few times.

It reminds me of arguments in the Lisp community about delimited continuations and undelimited, i.e. Common Lisp and Scheme. A lot of the arguments there are really about semantics and not implementation details, and come to the same point: should cooperative scheduling require explicit notation at each level of the call stack?

My view on this is that systems languages like C and Rust should require explicit notation for it whereas application languages should not. This seems to be a point in favour of Go and Erlang over Java and C#.

However WASM, similar to C or Rust, seems to target a level in the tech stack at which it should concern itself only with abstractions that have relatively direct translations to the instruction set of the underlying hardware. Support for multiple stacks doesn't fit into this from what I can see. (A similar argument can be made for WASM not supporting garbage collection too, although it looks like that'll be added at some point to make interoperability with JS smoother.)

With the JVM supposedly adding fibres soon, it poses a question for WASM: is it trying to be a portable assembly language, a portable high-level language runtime, or something in between?

</comment></comment></comment></comment><comment><USER12> The author states:

>"This means that you have overhead associated with compilation - knowing the liveness of variables is extremely important for generating efficient assembly, but instead of the liveness being calculated when creating the IR and stored as a part of it you have to recalculate this data every time."

Can someone say what is involved in calculating "liveliness"? What is the procedure for doing so?

<comment><USER7> You iterate over the program (every individual function, really) backwards. A use of a variable means that it is "live" before that point; a definition (i.e., a write into) a variable means that it is "dead" before that point. That is, at any point, a variable being "live" means that its value at that point may be used in the future. Liveness is especially important for register allocation: If two variables are both live at some program point (and cannot be proved to have the same value), the compiler must place them in different registers or stack slots.

As an aside, liveness is also useful for some other things. For example, a variable that is live at the start of a function is one that may be used without being initialized, and the compiler can emit a warning for it.

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

Edit: BTW, it really is "liveness", not "liveliness".

</comment></comment><comment><USER13> One thing I dislike about how criticism of WebAssembly are formulated is that often they refer to the MVP as final product. Tail calls are important but not essential, many functional languages have a C runtime; the point is if they (or an equivalent alternative) can be added properly or if the standard is not flexible enough.

<comment><USER11> The issue is that if the VM doesn't support tail calls or alternatives like unstructured goto then you're going to end up with two layers of emulation for such languages, rather than one. That's incredibly slow. Which is all fine and dandy, but people need to realize that WASM will _not_ be nearly as performant as claimed, particularly when hosting other language runtimes.

</comment></comment><comment><USER14> In Part 1, the author claims that WebAssembly is not a stack machine.

In Part 2, when discussing `goto`, he says, "WebAssembly is a stack machine."

Part 2 contains no explanation about the contradiction with Part 1.

</comment><comment><USER15> Huh? Web assembly is a stack machine and locals do not pose a problem whatsoever.

Yes, the author just needs more work to be done. But it's perfectly doable, although it has a complexity. Like everything in the world of compilers. There are no free lunches.

<comment><USER8> Yes compilers are hard, but why make them harder? There is literally no reason to require rebuilding this information. The compiler emitting Wasm has that information and already uses it, having locals and disallowing blocks to take/return values actually means more complexity in both the compilers generating Wasm and the runtimes generating native code from Wasm. That's the entire premise of the article.

<comment><USER6> Even if carrying that information was the thing that you needed (I don't think it is but there's a separate thread about that), it's definitely not the thing that other implementations need.

</comment></comment></comment><comment><USER16> "For the most part it's an extremely well-designed specification. However, they are weighed down by WebAssembly's legacy"

Really?

Wikipedia: "In March 2017, the design of the minimum viable product was declared to be finished and the preview phase ended." [https://en.m.wikipedia.org/wiki/WebAssembly](https://en.m.wikipedia.org/wiki/WebAssembly)

It was only announced in 2015.

I'm not taking sides here, but either it's well designed, _or_ getting weighed down by legacy in 2 (or 4) years.

<comment><USER17> Immediately following that 'legacy' sentence is an explanation of what they mean by it:

> WebAssembly started out not as a bytecode, but more like a simplified binary > representation for asm.js. Essentially it was originally designed to be > source code, like JavaScript.

WebAssembly itself is relatively new, but it wasn't a completely blank sheet of paper that they were starting with when they designed it.

<comment><USER16> Yes and the next sentence finishes:

"and only at the last minute did it switch to stack-based encoding for the operators"

Which kind of counts against it being well designed.

To me, "weighed down" by legacy suggests some deep problem that shouldn't be manifesting in something so young. You could argue that 2 years is a long time in tech, I wouldn't say it's a long time in language development though.

Maybe I'm just arguing semantics here? Is a library for a particular language weighed down by legacy because it's designed to run on one particular language?</comment></comment></comment>


Ask HN: YC interviewees coming from outside US - <AUTHOR>

We're getting on a plane from Edinburgh in about 24 hours and flying over for our YC interview this week. We want to make the most of our time out there and meet other startups, angels, find out about meetups etc. I thought it might be useful if I did a public shoutout for:
1) Anyone with a couch or floor to put up YC interviewees 2) Recommendations for which coffee shops are good to work in 3) Recommendations for good meetups over the next week 4) Anyone who wants to play tourguide or chill and work together.
-- edit: from jkaljundi: 5) Also any of the other teams for YC want to meetup?
email me at 'sam at getbloop dot com' and I'll try and coordinate something between us if there's demand. <comment><USER2> Crap, interviews are this weekend? Sigh. I'm flying out to NYC to visit the Hackers and Founders NYC this Thursday night, otherwise, I'd schedule something this Thursday for you guys. If you're around, there's a Hackers and Founders meetup Monday night in Mountain view: www.hackersandfounders.com.

Otherwise, any place on Castro Street in Mountain View is a decent bet, especially the Red Rock cafe. Any place on University Ave in Palo Alto is also a pretty safe bet.

And, if you're just visiting for a couple of days, I always suggest visiting the Computer History Museum. They give great 1.5 hour tours, and it's pretty amazing to see the history of computing, and realize that a great bit of it happened in the neighborhood. At times, you can hang out with some of the original engineers that build machines like the PDP 10 as they restore one to get it working. Did I mention tha they have a working Difference Engine? It's amazing.

Aside from that, as to event lists, email Chris of Brendan over at the Startup Digest: <http://thestartupdigest.com/> keep good tabs on what's going on. It would be worth pinging them and letting them know what you're doing. I'm sure they could make a great bunch of suggestions.

There's always a bunch of stuff going on in San Francisco, as well. Pick a coffee shop or pub, and you're bound to run in to someone working in the biz.

Also, I'd suggest you put your email in your profile so people can ping you. Offering to take people out for a pint will often get you quality time with other founders. :)

<comment><USER3> The interviews BTW are Friday to Monday, 4 days. Many teams probably stay until Tuesday. Hackers and Founders sounds interesting, might drop by, thanks for the suggestion.

</comment></comment><comment><USER4> I'm flying in from Japan, would love to meetup. Just sent you an email.

Also, I found a place to stay on CouchSurfing.com if you're still looking for somewhere to crash.

</comment><comment><USER3> Same for me, flying there from Estonia in a few days, most probably staying March 26-31 (interview on 29th). In addition to above, would love to meet other teams during those days. Our project is <http://Emp.ly/> (still in very early prototype phase, just starting serious development). My e-mail is on my HN profile page.

<comment><USER5> check out localbacon - aka jibe.com - they seem to be doing the same thing as you want to do with emp.ly

i think they completely revamped their initial model and just publicly relaunched today.

<comment><USER3> Yes, it is somewhat similar, but there are many ways to approach this market. It's the same like any recruitment business: although you should ideally cater equally for job seekers and employers, at the end of the day you tend to focus more on one side of it. Same for functionality, which side uses it more actively and for whom it is more casual. It will take years for social recruiting to formalize and to see, what actually works and what not. There will be a lot of experimenting in the nearest future.

</comment></comment></comment><comment><USER6> if your in palo alto coffee shops - university cafe, coupa cafe, cafe del doge, satura cakes couch/chill/work - hit me up email@example.com might be able to help meetups - sign up for thestartupdigest.com! if you miss the issue this monday email me and I will fwd it to you

<comment><USER7> +1 for Coupa Cafe, try the Chai :)

<comment><USER8> I discovered last week that their Chai is made by this company:

<http://davidrio.com/>

I haven't tried making it on my own without an espresso machine yet, but it definitely is the best chai out there at least the way they make it.

</comment></comment></comment><comment><USER9> I don't know if it even needs to be said but if you don't have any luck finding a free couch/floor, check <http://www.airbnb.com/>

Plenty of couches on there for $20/night in SF

</comment><comment><USER10> The canonical coffee shop answer is Red Rock:

<http://www.redrockcoffee.org/>

</comment><comment><USER2> I forgot to mention in my earlier comment about Hacker Dojo: <http://wiki.hackerdojo.com/>. The people there are really cool, and it's just a couple of blocks away from the YC office.

</comment><comment><USER11> Several teams who were interviewed for the Winter 2010 Session stopped by at the HackerDojo. A meetup can actually be held there.</comment>


John Lam on Software: Steve Yegge ported Rails to JavaScript - <AUTHOR> http://www.iunknown.com/2007/06/steve-yegge-por.html <comment><USER2> There's a really sweet web application framework called Helma that lets you write entire web apps in javascript, and gives you the JDK through Rhino. The documentation is a little slim, but it's my framework of choice. I don't know why it isn't more popular.

<http://dev.helma.org/>

</comment><comment><USER3> Wow do I want to look through that codebase.

<comment><USER4> Me too. I'd settle for some example code for now though.

<comment><USER5> Sure, we might go look at framework code sometimes. But it just looks like, well, code. There's usually nothing particularly famous-looking or even glamorous about it. Go look at the source code for Emacs or Rails or Python or Firefox, and it's just a big ball of code. In fact, often as not it's a big hairy ball, and the original author is focused on refactoring or even rewriting big sections of it.

<http://steve-yegge.blogspot.com/2006/07/get-famous-by-not-programming.html>

I wonder if he wrote that while worrying about this sort of thing.

</comment></comment></comment><comment><USER6> Here's where my ignorance shines through once again...but does the javascript that runs on the JVM have proper threading?

Coz, I'm really not sure how anything server-side could work properly with setInterval() or whatever the favored workaround is.

Why did he not use Python?

<comment><USER7> <http://steve-yegge.blogspot.com/2007/02/next-big-language.html>

He didn't use Python because Javascript is the native scripting language for the "next platform," that is, the browser.

Also, he doesn't think that Python is superficially close enough to C and Java to be widely adopted.

<comment><USER8> Plus, if you want Rails in Python, well, Pylons is pretty close. Only better.

</comment></comment></comment><comment><USER9> he certainly looks like he just ported rails to javascript. yikes!

<http://farm2.static.flickr.com/1188/612490975_5b2f804df2.jpg>

</comment><comment><USER10> What? Wow. What?!

Okay, that sounds great, but what a bureaucratic-sounding backstory. Seriously, that sounds like what happens in Soviet Russia: languages program you!

<comment><USER7> No, it's because if Javascript is both the language you write client code AND server code, it could be huge.

<comment><USER11> Agreed which could possibly pave the way for offline apps.

</comment></comment></comment><comment><USER12> What's really awesome is that I can turn all 2000 hours of work off by adjusting my preferences. I have the power!! :-)

</comment><comment><USER13> Seems like a wasted effort, but an incredible effort nonetheless!

<comment><USER13> Steve Yen already did it, a couple years ago.

<http://code.google.com/p/trimpath/wiki/TrimJunction></comment></comment>


The Aging Advantage - <AUTHOR> http://www.psmag.com/health-and-behavior/the-aging-advantage <comment><USER2> Not nearly as aged as Ms. Beskind, still I'm glad to read that getting old isn't always a barrier to creativity and contribution. I like the idea that retirement doesn't have to be permanent, one can start again, make use of skills not necessarily diminished with time.

Among the people I've met over the years, most impressive have been those who discovered talents in late life not having known about it before. In her mid- sixties, one woman on a whim took a one-afternoon watercolor painting class, finding that she had a real flair for it. Within a few months was selling paintings, and became a well-known watercolorist in the region.

Perhaps we tend to associate success in technological fields with younger individuals, but the article suggests otherwise, that the elderly don't necessarily lose their "edge". Research does suggest that as we age memory and thinking work differently. Perhaps not as quick to respond, but still just as capable of learning given the time to do so.

Benefits of experience are hard to quantify, indeed, experiential learning is distinct from associative learning. The latter is important in school for example, but the ability to predict outcomes in complex situations is a function of experience vs. "book learning".

As we continue to learn and grow in our 60's and beyond, it's a good thing some of the movers and shakers appreciate what we have to offer.</comment>


Merkel's Power Conundrum - <AUTHOR> https://medium.com/dialogue-and-discourse/merkels-power-conundrum-839b9aeff3e4 <comment><USER2> This article gets basically everything wrong about German politics. No, the AfD could not "very quickly [...] force their way into a coalition, and eventually become the largest party in the Reichstag" (for one: it's called Bundestag, it's just located in a building called the "Reichstagsgebäude"). Neither the right nor the left wing parties have gained substantially since the last elections. Merkel has been a focus point for right wing engagement.

And lastly: "far right" is a problematic party attribution when the far right is for all intents and purposes claiming policies that Merkel's CDU and her personally claimed 10-15 years ago. It's correct to say that the AfD has lots of far right members, though. It just hasn't shown up in their (stated) political goals, as it does for the actual far right parties we have.</comment>


How to pack a stereo signal in one record groove - <AUTHOR> http://www.vinylrecorder.com/stereo.html <comment><USER2> If you listen carefully to a vinyl record playback you can hear, very faintly, the start of a track at little before it actually starts. A 'pre-echo' that starts exactly one turn of the table before. The master record is cut in a relatively soft material. Copper, I think. The force of cutting removes material from the groove but also compresses the remaining material somewhat. This distortion may spill over into the neighbor groove just cut one turn earlier. The neighbor groove is silent between tracks. So in this silence you may be able to hear a faint copy of the modulation one turn later. This ghost signal gets more volume the tighter you pack the groove spiral, which you may want to do tighter to obtain longer playing time.

<comment><USER3> Interesting! I wonder if this has been deliberately exploited by dance producers...at 45 rpm and a bpm of 135, this will yield a 3-beat delay which sits nicely with a 4-beat base rhythm. Dance music production techniques owe a lot to reggae and dub, and as record producers working with low-quality equipment in Jamaica found ways to creatively abuse their gear.

For example, there's a trick whereby you can turn a regular mixing desk into a low or high pass resonant filter by feeding the same signal to two channels and inverting one (so they cancel out), and then EQing the other channel aggressively. So if you can't beat the 'echo' resulting from the manufacture, you might as well look for ways to incorporate it.

</comment></comment><comment><USER4> Another reason for turning it by 45 degrees is backward compatibility. If you play a stereo disc on a mono player you want to get a "mix" of the channels instead of one of the channels.

<comment><USER5> that doesn't seem like it would work.

<comment><USER2> _In a stereo recording, the two channels are arranged to drive the record cutter head at an angle of 45° to the vertical, effectively encoding each channel in the left and right V-shaped walls of the record groove. This system worked well, since it provided full compatibility with a monaural pick-up, so stereo records could be played on older mono equipment._

From: [http://en.wikipedia.org/wiki/Magnetic_cartridge#Stereo_repro...](http://en.wikipedia.org/wiki/Magnetic_cartridge#Stereo_reproduction)

See drawings of pick-ups above on that page. The vertical movement of a monaural pick-up stylus will be the sum of the two stereo movements. Each channel contributing with an sqrt(2)/2 amplitude of its 45° amplitude.

<comment><USER5> thanks, I was trying to work the math in my head and was making it WAY harder than it needed to be.

</comment></comment></comment></comment><comment><USER6> This is why, on most vinyl albums, the low end/bass sounds are panned dead center.

Lots of low end panned hard left or hard right can result in the needle jumping out of the groove, and can result in unnecessary compromises in mastering.... there's one album in particular that doesn't have hardly anything above 5k on it, and it's because they decided to pan the bass hard left.

<comment><USER7> that's very interesting. I had learned that no one bothers to pan bass frequencies because IRL they are difficult to localize. For example, no one at a live show could tell you if the bass rig is on stage right or left. So, a recording with hard panned bass would just sound wrong.

<comment><USER7> I always thought that's why most systems have a single subwoofer. What's the album with the hard panned bass? I'd love to hear it (or know why they chose to do that)

<comment><USER6> Electroputas "3" is the record I was thinking of. There's basically no high end on it. It was so noticeable that I actually emailed the label about it, thinking I got a bad press or something, but to their credit they admitted that the bass panning made it impossible to master the vinyl cleanly. (Electroputas are a really good band, by the way. Not sure if they're still around.)

Stories like this abound. The more bass you want on a record, the wider the grooves need to be, which gives you less time per side; the more playing time you want on each side, the narrower the grooves need to be, and you don't get as much dynamic range, loudness, or frequency bandwidth.

Another example: there's some Yo La Tengo record, I forget the name (it's been a while), but it's a one sided 12". The running time on that one side was extreme for a rock record - something like 28 minutes or so - and as a result, it sounds terrible.

</comment></comment></comment></comment><comment><USER8> Super cool!

But I didn't understand the last panel ("Maximum Stereo or Mono and 1 channel 180° phased")... and, also, how did they do quadraphonic?

<comment><USER3> Inverting the phase of a mono signal and feeding it to one side of a stereo channel (with the original on the other) isn't true stereo, but flipping the phase of one channel fools the brain into believing it has a spatial dimension - the sound seems louder and more vibrant although in reality all that's happening is that the left and right channels are interfering with each other.

It was a trick used on a lot of old record when the music industry was moving from mono to stereo recording, but still effective if you're stuck with a mono sound source (quite often the case in film and TV) and you need to beef it up without changing the timbre of the sound substantially.

<comment><USER9> Wait, isn't that the same effect as a mono signal with one speaker wired backwards? If so, that 'head-swimming' sound that results is _awful_ , and the out of phase drivers will kill much of the bass response.

I'm very surprised that this trick was ever used in industry; after all, if someone listened to that old film on a single speaker TV, the signals would sum to zero and you'd have no audio at all! (And yes, our local cable company has managed this very stunt from time to time...flip to mono and the audio goes away.)

<comment><USER3> Yeah, it can go wrong and it does sound pretty awful. It's good practice to check the final mix out in mono for just that reason but stereo is ubiquitous now and people often don't bother any more.

</comment></comment></comment></comment><comment><USER10> In the next episode - "How to use sparks to dial a phone number" :)

<comment><USER3> I used to have a party trick whereby I'd dial a number by tapping the receiver of a phone on a table to emulate pulse dialing. It probably still works on landlines, but it's so long since I had one that I don't know if they support pulse any more.

<comment><USER11> That actually worked? I thought you had to tap the line switch (the switch the receiver pressed down on when not in use), not the receiver. Which would make sense, to reduce interference from sound coming through the receiver while dialling.

Supposedly pulse dialling still works on (most?) new telephone equipment. That's what the vendors of classic phones I've been looking at are saying, anyway.

<comment><USER3> It does (or at least did) - try it if you know someone with a landline. I was surprised too, as I just tried it on a whim one day. I grew up with pulse telephones and particularly loved the chunky sounds of old models so I used to play with the phone a lot as a kid.

You had to have a good feel for the timing of the pulses or the trick didn't work. Taps and clicks broadband noise with a very sharp transient so it would have to be a very noisy environment indeed for the ambient noise to interfere. I've never played with any analog exchange equipment but the electronics to detect and count pulse dialing doesn't need to be very sophisticated.

<comment><USER11> But the electronics would be different if you did it by tapping the line switch, than if you did it by generating a sharp noise on the line. After all, pulse dialing is also called 'loop disconnect dialing': <http://en.wikipedia.org/wiki/Pulse_dialing>

"The pulses are generated through the making and breaking of the telephone connection (akin to flicking a light switch on and off); the audible clicks are a side effect of this."

It's confusing.

<comment><USER3> Well, if you think of it in terms of voltage rather than switching, the audio transient will cause similar spikes in the voltage amplitude. I _think_ that the analog circuits in exchange hardware are only interested in the shape rather than the origin of the pulse but as I said I've never looked at such equipment directly.

I have a modular synth here and have managed to rig up a patch that counts audio pulses (incoming signal goes through a rectifier and an envelope follower and on to an accumulator) and generates an appropriate tone for the counted number after a ~1/4 second pause, and doesn't much care whether I'm opening and closing the circuit or just tapping the front of the microphone. It's not a very complex circuit so maybe analog exchange switching works on a similar principle.</comment></comment></comment></comment></comment></comment>


Maze Generation in Thirteen Bytes - <AUTHOR> http://trixter.oldskool.org/2012/12/17/maze-generation-in-thirteen-bytes/

<comment><USER2> "The output isn't really a true maze — it has no proper beginning and end, and some avenues lead nowhere"

I'm disappointed, but the output is pretty.</comment>


Former Fellow to Peter Thiel: You Can Have Your Money Back - <AUTHOR> https://www.fastcompany.com/3065615/pov/former-fellow-to-peter-thiel-you-can-have-your-money-back <comment><USER2> Should have kept taking the money and kept donating it to charities. Just as strong a statement but putting more actual effect into it.</comment>


Help Wanted – Apache - <AUTHOR> https://helpwanted.apache.org/ <comment><USER2> this is great, thank you</comment>


HTTPS for GitHub Pages - <AUTHOR> https://github.com/blog/2186-https-for-github-pages <comment><USER2> Does anyone know if github is planning to support https for custom domains?

<comment><USER3> Check out [https://www.netlify.com](https://www.netlify.com) (disclaimer, I'm a co-founder).

It's like GitHub pages on steroids and includes free Let's Encrypt based SSL for custom domains, can run builds from your GitHub repo with any static site generator, supports rewrite/redirect rules/proxying/form processing/password protection and much more...

<comment><USER4> I agree with the others. You can host a dynamic site on digitalocean for half the cost.

<comment><USER5> DO isn't in the same market as this, at least going off their websites. DO means doing all the work yourself. Netlify handles everything.

I don't think the pricing is too high. If anything, the high end is too low. It's not like they're aiming at personal sites, are they? And for a company, $39 is nothing -- plans should probably start there. (Seriously, who wants to service a customer for $7 a month?)

FWIW I've never seen or heard of Netlify before in my life.

<comment><USER6> You raise an interesting point. The prices seem too high for some commenters. They are presumably capable of doing this themselves on a DO box so they do not think it is valuable enough to justify that price.

However, one of the features of their highest price ($39/month) plan is that you can use 100 custom domains. If you have 100 domains hosted on Route 53 you will be paying over $50/month for domains, at which point $39/month for the service which actually hosts your static site is entirely negligible. I am curious how many people fall in to that bucket though - it seems more likely that people will run multiple sites with few custom domains, rather than a single site with 100 custom domains.

I am planning to offer some of Netlify's services in a product I am currently building. I'm still working on the pricing model but it is likely to be based on builds per month and bandwidth/storage, rather than the actual number of sites. My cost driver is not 'how many domain names are configured in my HTTP- routing layer', but rather 'how much pressure is each site putting on my build and web servers'.

<comment><USER7> Netlify never misses an opportunity to self-promote in these SSG related threads, but AWS S3/Cloudfront/route53 is so cheap and simple for the audience that would even understand the point of Netlify, it's difficult to understand their target market. Netlify is priced like Squarespace, Wix, Weebly, etc. which are quite a bit simpler.

<comment><USER5> The fact that I can click on their homepage and drag-n-drop a site folder and have it just work is pretty damn slick. $39 is nothing if you don't have to deal with stuff. The absolute cheapest guys I work with are at least $50/hr. So if it saves an hour here and there it's worth it. And more likely, you'll spend 3-4 figures in time if there's any sort of hiccup in your AWS setup.

I don't think people are thinking how nice it is to have someone take care of stuff for you, totally. If there's any sort of issue, one email, and you're done. And people aren't thinking how tiny $39 is.

Again, I've never heard of Netlify before, but the product sounds great. HN is just messed up on pricing because they're looking at AWS costs instead of customer value.

I think HN also devalues their own time: I've been running webservers since the 90s, so I know it's "easy" to do, yet it's one more thing to have to think about. Although I suppose some might enjoy it.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> So now github "sorta sorta" [1] supports https:

\- You CAN force HTTPS for your *.github.io site.

\- You CAN use an [https://yourname.github.io](https://yourname.github.io) URL.

\- You CANNOT use a custom domain name with a fully secured HTTPS connection.

[1] [https://konklone.com/post/github-pages-now-sorta-supports- ht...](https://konklone.com/post/github-pages-now-sorta-supports-https-so-use- it)

</comment><comment><USER9> Doesn't appear to work with custom domains.

<comment><USER10> Cloudflare's free plan includes one-click SSL for custom domains. That's what I use for my github pages sites.

<comment><USER11> Although it doesn't validate the backend certificate.

<comment><USER12> If that's what you are talking about, you can select "Full (strict)" in the SSL options to enforce origin certificate validation.

[https://support.cloudflare.com/hc/en- us/articles/200170416-W...](https://support.cloudflare.com/hc/en- us/articles/200170416-What-do-the-SSL-options-mean-)

<comment><USER11> But this doesn't work because the backend certificate is invalid (it covers *.github.io rather then example.com).

<comment><USER13> But you'd give cf that cname I think

<comment><USER11> Last time I tested this cloudflare validated using the domain name, not the cname.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> For those on Bitbucket, <username>.bitbucket.io is the HTTPS equivalent of <username>.bitbucket.org.

<comment><USER15> ICYI, you can also get free, self-renewing, wildcard SSL certs for custom domains on Bitbucket by using the Aerobatic add-on for Bitbucket. [[https://www.aerobatic.com](https://www.aerobatic.com)]

disclaimer: co-founder of Aerobatic

<comment><USER16> Great service! For those wondering what are the limitations of the otherwise _very_ generous free plan:

2 sites, 1 domain, 5 deployments in a 24 hour period

something something Amazon US East

</comment></comment></comment><comment><USER17> I just noticed it this morning when trying to put up a demo file for a project. I was confused by the docs saying 'don't do anything sensitive because no HTTPS', but clearly seeing the [https://](https://) URLs.

</comment><comment><USER18> Thank you GitHub for this gift, static web sites and now forced https

<comment><USER19> Forced? You can enable and disable it in every repo's settings.

<comment><USER20> Not for "GitHub Pages sites created after June 15, 2016 and using a github.io domain."[1]

[1] [https://help.github.com/articles/securing-your-github- pages-...](https://help.github.com/articles/securing-your-github-pages-site- with-https/)

</comment></comment></comment><comment><USER21> What's the best way to get HTTPS for custom domains? Letsencrypt or Cloudflare? I don't think those are encrypted end to end, no?

<comment><USER22> Let's Encrypt is a certificate authority and provides certificates and so it would be end-to-end. However, CloudFlare is not end-to-end unless the server already supports HTTPS.

<comment><USER23> _> CloudFlare is not end-to-end unless the server already supports HTTPS._

That's literally what this article is about.

<comment><USER24> HTTPS isn't supported if you're using GH Pages with a custom domain.

</comment></comment></comment></comment><comment><USER25> Nice work GitHub! That's huge! I think that means you could now use GitHub pages for Slack services that required HTTPS? If so, that's really awesome!

</comment><comment><USER26> About damn time!

I "cheated" the system by having a script that will redirect you to the HTTPS version if you click on anything from the HTTP protocol, which kind of accomplishes forcing the HTTPS encryption, but not really.

Then I've decided to switch to my own domain and just use CloudFlare (+ whitelisting Tor).

Now I'm kind of thinking about switching to GitLab Pages since they pretty much kick the hell out of GitHub Pages in every single way when you compare their features (like, you can use _any_ static site generator and you can roll your own Lets Encrypt SSL certificate on them).

<comment><USER27> I'm not familiar with GitLab Pages but you can already use _any_ static site generator with GitHub Pages as well.

<comment><USER26> Huh, turns out you're right. Not sure if that was the case when I started moving to GitHub (~15 months ago) or not, but looks like it's a thing now.

But still, you can do other things like selecting a different code highlighter (which GitHub deprecated recently).

<comment><USER28> It's always been the case. Github Pages has always been just a static file host.

</comment></comment></comment></comment><comment><USER29> I've been running the HTTPS Everywhere add-on and hadn't realised that this wasn't already a thing. As the post says, they have supported HTTPS for a while and this is just adding a redirection option so you don't need to resort to JS hacks. It doesn't say if they are using 301 redirects or HSTS headers, I'm guessing the former.

</comment><comment><USER30> You can enable HTTPS for custom domains using this approach: [https://blog.jeaye.com/2016/03/01/github-pages- https/](https://blog.jeaye.com/2016/03/01/github-pages-https/)

Just be sure to delete your CNAME file, based on a recent Github behavior change.

</comment><comment><USER31> From the announcement (because I was confused):

You have been able to request Pages sites over HTTPS for some time, but we refrained from officially supporting it because the traffic from our CDN to our servers wasn't encrypted until now.

</comment><comment><USER32> Sweet. Was just lamenting its absence.

</comment><comment><USER33> If I understand it correctly, the same HTTPS certificate is used for all GitHub pages websites. So hypothetically, I could do a MITM attack and redirect a user from an HTTPS protected GitHub pages site to my malicious GitHub Pages site right? (although the url would be different... but could be similar)

<comment><USER34> You don't have access to their private key. The fact that it is the same certificate is irrelevant. Anything you can do now, you could also do if they'd use separate certificates per subdomain.

<comment><USER33> Ya, I guess it's not a big deal.</comment></comment></comment>


Machine Learning with MXNet to Recognize Household Appliances – Gary Sieling - <AUTHOR> https://www.garysieling.com/blog/machine-learning-with-mxnet-to-recognize-household-appliances <comment><AUTHOR> "To do the tagging, I wrote a Zeppelin notebook that creates an HTML page with each image from a video, which someone manually tags and saves off."</comment>


My Students Laugh, HaHa, Laugh, at the HN Naysayers ;) - <AUTHOR> http://catsonkeyboards.blogspot.com/2011/01/my-students-laugh-haha-laugh-at-hn.html

<comment><USER2> Java isn't impossible for students to learn. I suggest, however, that it is not the best choice; because when it comes to learning how to program you want a language which is maximally expressive with a minimal amount of work. It artificially restricts the problem space you can tackle by making simple things more complicated than they need to be.

When you're writing an algorithm to count words in a file, would you prefer

      string = File.read 'path'

or

      StringBuffer fileData = new StringBuffer(1000);
      BufferedReader reader = new BufferedReader(
              new FileReader("path"));
      char[] buf = new char[1024];
      int numRead=0;
      while((numRead=reader.read(buf)) != -1){
          String readData = String.valueOf(buf, 0, numRead);
          fileData.append(readData);
          buf = new char[1024];
      }
      reader.close();
      string = fileData.toString();

How about introducing anonymous functions? How much time will it take you to explain the intricacies of creating an anonymous subclass whose only purpose for existence is to encapsulate a single instance with a single method, inside which all variables from the containing scope must be marked as final? Or would you prefer something like Smalltalk?

      [ :x | x * x ] value: 2

Sure, students can wrap their heads around both. But the important thing is the _concept_ , not the _expression_. After all, if they go on to program in the real world, they'll be adapting their knowledge to different languages.

<comment><USER3> Not to mention that the type system in Java is always surprising. List<Integer> is not a List<Number> but Integer[] is a Number[] (which can throw ArrayStoreException as covariance makes no sense on mutable collections - _ref:<http://programming-scala.labs.oreilly.com/ch12.html> _)

And compare smalltalks' (and ruby's and python's) _everything is an object_ to Java's: there are some primtive things, and null is not an object.

Don't get me wrong: java is very taughtable to beginners. The basic usage is ok, while cumbersome. But Java shows its deep issues when you start using it for more serious stuff.

</comment></comment><comment><USER4> I have no doubt that you can get 11-14 year olds to understand Java's Hello World in a single hour, but understanding a pre-written snippet of code is a wholly different beast from being able to make appropriate predictions and inferences based on knowledge gleaned from that code.

Could your students explain how main() was called? Could they create their own functions and invoke them based on what they had learned? And how forgiving would Java be of minor errors, say, creating class a class named HelloWorld inside a file named Hello.java? Why does the filename even matter, if the class's name is defined right inside the file, or vice versa? And if the class is in a block inside the file, why can't they just create another block like the first one and have two classes in the same file? Why do they type 'javac HelloWorld.java', but not 'java HelloWorld.class'? How can java find the HelloWorld class if you're not pointing it to the class file? Why is 'javac' so damn picky about the file name matching the class name when you don't point 'java' to any files at all?

Seriously, there's a _ton_ of voodoo in there. Things break in surprising ways, and it's hard to synthesize new knowledge based on prior experience.

Take Python, on the other hand. You can address things in a much more controlled order, with each step yielding practical information, starting with

      print("Hello, world")

which tells the students how to call a function, and pass it an argument. Every other time they call a function or pass it an argument will look like this. Then you can show them how to make their own function:

      def hello():
        print("Hello, world")

But nothing gets printed? Hey! You've just explained defining a function, and based on the previous example, they can probably suggest how to invoke hello(). At this point, they can easily make and call new functions of their own. Then you can go on to introduce the basics of OOP:

      class Greeter():
        def __init__(self, name):
          self.name = name

        def say_hello(self):
          print("Hello, " + self.name)

Sure, the "self" is a little magical there, but hey, you're comparing this to Java. Plus, you've got an interactive console that you can jump into and poke at the darn thing. Hey, what do I get when I say g = Greeter("Saundby")? Oh a "Greeter object". That makes sense. What can I do with it? Well, we made a say_hello, so what's g.say_hello? Oh, a "method Greeter.say_hello of <Greeter object>." And hey, it's the same Greeter object as g!

What if the students want to make a new class? They just put it in the same file, like you would expect. What if they want to rename the class? They just do it.

And you run it with "python filename.py" which appears to work exactly like how every other command that operates on files. There's no explicit compilation step to forget or trip over.

Yes, you can teach kids to read and understand a Java program, but what do you gain by handicapping yourself and foregoing the pedagogical tools, like an interactive console, available elsewhere? Similarly, what do they gain by being deprived of such a wonderful and frictionless means of exploring and experimenting with the language?

<comment><USER5> _Seriously, there's a ton of voodoo in there._

And your solution is Python?

Not surprisingly, as a kid my 1st language was BASIC. My second language was 6502 assembly in 6th grade. I can honestly say that things didn't really click until I learned assembly -- things like line numbers bugged me, and some of the syntax in BASIC confused me (why does a function call have the same syntax as an array?). And then I studied digital logic circuits, with a brief diversion into CRT displays and video support in computers (I was really concerned about how did the information go from the computer to the screen) in junior high, and then C in 9th grade.

Python has a lot more vodoo than BASIC did. And whitespace having meaning is truly confusing, especially as a kid when its unclear that there's really a distinction between different types of whitespace (this used to kill me with Makefiles when I first started with those).

I guess my point is is that what a seasoned pro thinks of as voodoo is often very different than what a child just learning to program thinks is voodoo... especially young kids who like to ask lots of questions.

<comment><USER4> I illustrated the post with Python since it's my language of choice, but honestly, many of Python's benefits as a teaching language apply equally well to other modern languages.

If we can agree that experimentation is one of the most powerful ways to develop an understanding of a system, then by going with Java, you're consciously eschewing languages which support that goal by being:

1\. Interpreted. It's hard to overstate the value of an interactive interpreter, which is in many respects akin to having a second instructor available for the students, on-demand. It can instantly answer questions about its environment, it makes exploration and experimentation trivial, and it's great when lecturing, as you can immediately explore any "what-if's" that your students raise.

2\. More expressive. Aphyr demonstrated this pretty eloquently in another comment, but the less code that it takes to accomplish a task, the less code you have to understand before you're able to build something useful, and the easier it is to experiment as you go.

3\. Multi-paradigm. If you're teaching someone programming, you want to be able to expose them to procedures, functions, objects, methods, recursion, etc. If you can do all of that in one language, you lower the mental barrier that your students must overcome before grasping each successive topic.

I believe that those facilities are great assets for both exposition by the teacher and exploration by the students, and I do not immediately see a compelling argument in Java's favor which sufficiently justifies foregoing the above pedagogic benefits. If the goal is to teach and create understanding, then surely the instructor should employ the tools that most readily support that objective.

</comment></comment></comment><comment><USER6> Am I supposed to be _impressed_ by 55 minutes to cover "Hello World"? That proves the point that Java is a bad starter language, it's not evidence against it!

Python would do that in about 5, and then instead of working on the irrelevant details of Java you could be teaching _programming_. (They will _never need_ to know the other stuff you covered. The soonest the 8th graders could graduate college with a computer science degree is 2019 or 2020 and Java will be far from dominant by then. All irrelevant and not even all that educational.)

Your students have _no ability whatsoever_ to judge complexity. What are they comparing it to? You want to play fair about quoting students and beating "HN" over the head with your students quotes? Next class period, do the Python equivalent, then ask them which is "more complex". Then tell us what happens.

(And if you lead them on enough, you can convince them to say they prefer Java. They aren't stupid, and they'll say whatever you want them to say. By that age they know what to do to get good grades. So I'd ask you that you play it as straight as you can, if you're serious about this.)

<comment><USER7> _They aren't stupid, and they'll say whatever you want them to say._

Indeed. When I was merely nine I had a teacher who got mad at the class for some reason and decided to punish us all by making us memorize a list of all the prepositions in English, to be regurgitated -- in alphabetical order -- on a quiz. So I did. I still remember them all, in alphabetical order, several decades later. [1]

Of course kids can learn things. Those who aren't inclined to just blow school off may well be better at memorizing arbitrary rules than adults are. For one thing, they aren't always experienced enough to tell the difference between a useful educational exercise and a complete waste of time.

\---

[1] Actually, I believe my mental list may be missing some prepositions. And that _really_ makes me angry.

</comment></comment><comment><USER8> So I looked at his main() post ( <http://beginwithjava.blogspot.com/2008/06/main.html> ), and found his explanation for static:

        static says that this is the one and only main() method
        for this entire class (or program). You can't have
        multiple main()s. If you leave this out, you'll get an
        error since it could be possible for there to be
        multiple instances of main() otherwise.

No wonder his students had trouble with it, this is just flat-out _wrong_ (on every claim). I'm not a fan of his explanation about "an array of Strings" (there is none), though perhaps he covers that better in class? The "By the way you can type args[] instead of String[] args" seemed completely unnecessary.

Hello World in Java is brought up as an example of how complicated Java is on the outset, not to say that it's impossible to learn for a beginner. The problem with Java's Hello World is that in order to _completely_ , _correctly_ understand it all you have to know a lot more about Java, OOP, and its interactions with itself and the system.

The HTML strawman doesn't require such outside knowledge to completely understand (and there are people who claim it's verbose, that's why we have templates and HAML and tag-name() functions and so on); the  tag,  tag, etc. can be explained as helping the browser find information, and if you wanted to start off real simple (if not standard) a modern browser will render simply
Hello world!
 by itself, no html, no title, nothing else, just fine, and you can go from there. There is no simpler Hello World in Java.

<comment><AUTHOR> Yeah, I agree my description of static needs to be changed on that page. It's not what I use in class.

I teach static from a general standpoint of stating belonging to the class rather than an object of that class. For didactic purposes, sometimes you phrase what-ifs in odd ways to get the point across.

Still, wrong on every claim? How many main()s do you put in your classes? Do you leave static out of your main() signature without getting an error in compilation?

I appreciate corrections, but can we avoid hyperbole?

As to the HTML, if I'd used the bare header tags with text the counter argument would be that I'm not teaching proper HTML.

Plus, brevity masquerading as simplicity is not the purpose of the lesson. The point that HTML is seldom treated as too complex for beginners is the real point here. Yet it gets pretty complex pretty quickly. The students handle it.

<comment><USER8>
        static says that this is the one and only main() method
        for this entire class (or program). You can't have
        multiple main()s. If you leave this out, you'll get an
        error since it could be possible for there to be
        multiple instances of main() otherwise.

> one and only main() method...you can't have multiple main()s.

        public class t {
          public static void main(String[] args) { }
          public static void main() { }
          // why is it the one with the args gets called?
        }

Also, that comment leads to the prediction that "If I put static in front of something, I can only have one of it!" (or the converse "If I leave static off, I can have multiples of it") which is false. Avoiding method overloading and making two methods of the same signature, Java will give you a "func() is already defined in t" error regardless of having static or not.

>If you leave this out, you'll get an error

        public class t {
          public void main(String[] args) { }
          // and for good measure
          public static void main() { }
        }

This compiles just fine, however at runtime you'll get the error "Exception in thread "main" java.lang.NoSuchMethodError: main" Very nice for a beginner: "I have a main! It's right there! I have two in fact! ..Oh, it wants the args version."

>I teach static from a general standpoint of stating belonging to the class rather than an object of that class. For didactic purposes, sometimes you phrase what-ifs in odd ways to get the point across.

That's a lot better, but now I'm curious, do you go over creating Objects and the keyword "new" in the first day as well? How do you describe the difference between object methods and static class methods without an object to demonstrate? If you try to make an object method in your hello world program:

        public class t {
          public static void main(String[] args) { hello(); }
          public void hello() { System.out.println("Hi"); }
        }

you get a helpful "non-static method hello() cannot be referenced from a static context". Of course you can always do "new t().hello();" but...

"static" is a complicated keyword, I'm not convinced that saying "You have to have it, treat it like magic for now but we'll cover what it really means later" isn't a fine enough cop-out for HelloWorld.

Perhaps the correct approach with HTML then is to teach XML that happens to render in a browser first, then go on into what makes HTML special. I'm also not convinced that HTML by itself gets very complicated. Sure, bringing in CSS and JavaScript and then dealing with all the issues of different browsers can get as complicated as a Java HelloWorld program, but that's not exactly HelloWorld material for HTML.

I'll agree that young students can handle a lot more complexity than we give them credit for.

<comment><AUTHOR> Good comments, thanks!

I take on "new" on day 2, when I cover variables.

And static gets revisited several times. I have to be brief with the first class, the main point is that it serves a function, it's not just noise. When we build a class that we use from another class (third or fourth lesson) we use a class method initially, then a non-static method, and get a chance to see the differences in action. This sets us up for static fields in the following class.

Then we talk about how static members relate to classes vs. instantiated objects. Often someone's already encountered the reference from static context problem, so that comes up as an example in the discussion.

Later we go back and look at Hello, World with "new eyes."

At these students' ages a lot of the learning needs to be experience rather than theory.

<comment><USER8> That sounds a lot better. :)

> At these students' ages a lot of the learning needs to be experience rather > than theory.

I think that's true for programming in general regardless of age, unless the person's a genius. I watched a lecture on Skip Lists and totally understood the high-level view, but when it came to implementation it was more challenging than I thought. I likely would have slept through most of my digital electronics course if I didn't know we were doing labs leading to a 4-bit CPU.

</comment></comment></comment></comment></comment><comment><USER9> I think the fact that it took 30 minutes to get through a Hello World program is pretty telling. Here's how I would teach 8th graders using Ruby:

      puts "Hello World"

Ok cool, 5 minutes. Now let's learn about loops and conditional statements!

Edit: I absolutely do not think there's anything inherently wrong with Java, or with kids learning Java. I just think it's better to show them why programming is awesome first ("Look, you totally just made the computer do your algebra homework for you!") and THEN get into more complex (i.e. harder to debug) languages once they have a firm grasp of the basics like conditional logic, loops, objects, etc.

</comment><comment><USER10> I feel that the blog is more about demonstrating against the fact that Java is too complex as a beginner language, not on how Java is the simplest, quickest, or even easiest, because of course it's not. All these comments make valid points, but as a person who has learnt Java as his first language feel that it opened me up to learning other languages quicker because of that fact that I found languages like Python much simpler, whilst I find many 1st-language Python students to be much more defensive and 'clingy' to Python because of its simplicity and directness.

While Python may be an easier language, I find that it is more difficult to debug than Java at times due to incompatible spacing alone, but that's beside the point.

I think that students should be able to decide their first language. I was 'stuck' with Java, but I don't regret it at all. In fact, after having transferred to another university with students having started with Python, I find that I'm ahead in terms of concepts dealing with OOP. I know that Python can do this as well, but Java (for better or for worse) shoves it down your throat.

So can't we all just get along? :)

</comment><comment><USER11> When I taught Java (some years ago) I used Karel J. Robot. It was a great way to teach both Java and OOP.

[http://csis.pace.edu/~bergin/KarelJava2ed/Karel++JavaEdition...](http://csis.pace.edu/~bergin/KarelJava2ed/Karel++JavaEdition.html)

<comment><USER12> Karel's great, it's how I first learned Java. Cuts down on all of the unnecessary stuff and boilerplate, and presents an easy way to learn programming logic and theory.

If anyone's looking for a good intro course to OOP and Java, CS106A at Stanford is great, and the lecture videos and course material is online: [http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-13...](http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111)

</comment></comment><comment><USER13> >p.s.-I love Hacker News myself, and take all my students there to open it up to them.

I have nothing against middle school students. I like kids. I also think exposing HN to kids at an early age is a great idea. However something about that idea bothers me and makes me feel uneasy. I'm not quite able to put my finger on it. Anyone else feel the same way?

<comment><AUTHOR> I show HN and YC to my middle school students and tell them a little about it. I just want them to see it. They'd rather spend time reading snopes if that makes you feel any better. ;) The only time I've heard of a middle school kid going back on his own was when one kid showed it to his dad, who was thinking about starting his own business.

I spend more time going over HN and YC with my high school students. I don't have time to teach them how to do their own start-up in class. But I want them to be exposed to the idea, and know some places to go for more info if they take to the idea, want to learn why I've ruined their life by teaching them Java, or whatever. :)</comment></comment>


Time to start making apps for the Google Phone - <AUTHOR> http://www.engadget.com/2007/03/15/google-exec-confirms-phone-in-the-labs/ <comment><USER2> There's no phone book in it. You simply type the name of the person and instead of the call button there is an "I'm feeling lucky" button. Sorry. It's 4am.</comment>


Ask HN: Would you use an open source Google Docs style service in your company? - <AUTHOR> I feel like the world is missing a Gitlab-style open source Google Docs for those who do not use Google Docs.<p>Do you agree? <comment><USER2> Have you heard of Sandstorm.io?

Documents: [https://apps.sandstorm.io/app/h37dm17aa89yrd8zuqpdn36p6zntum...](https://apps.sandstorm.io/app/h37dm17aa89yrd8zuqpdn36p6zntumtv08fjpu8a8zrte7q1cn60)

Spreadsheets: [https://apps.sandstorm.io/app/a0n6hwm32zjsrzes8gnjg734dh6jwt...](https://apps.sandstorm.io/app/a0n6hwm32zjsrzes8gnjg734dh6jwt7x83xdgytspe761pe2asw0)

Files: [https://apps.sandstorm.io/app/8aspz4sfjnp8u89000mh2v1xrdyx97...](https://apps.sandstorm.io/app/8aspz4sfjnp8u89000mh2v1xrdyx97ytn8hq71mdzv4p4d8n0n3h)

Team chat: [https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxk...](https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0)

Kanban/Trello: [https://apps.sandstorm.io/app/m86q05rdvj14yvn78ghaxynqz7u2sv...](https://apps.sandstorm.io/app/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h)

GitLab: [https://apps.sandstorm.io/app/zx9d3pt0fjh4uqrprjftgpqfwgzp6y...](https://apps.sandstorm.io/app/zx9d3pt0fjh4uqrprjftgpqfwgzp6y2ena6098ug3ctv37uv6kfh)

Tons more: [https://apps.sandstorm.io](https://apps.sandstorm.io)

<comment><AUTHOR> Etherpad and Ethercalc are frankly not good enough from my point of view... rocket chat and gitlab are pretty amazing though.

</comment></comment><comment><USER3> LibreOffice can run online: [https://cgit.freedesktop.org/libreoffice/online/](https://cgit.freedesktop.org/libreoffice/online/)

Also there's Collabora Code which does the same with a container.

[https://www.collaboraoffice.com/code/](https://www.collaboraoffice.com/code/)

In fairness they're modeled on Microsoft office more than Google Docs.

<comment><AUTHOR> Thanks!

</comment></comment><comment><USER4> I work in a digital marketing agency and my answer is that while I love trying new tools, this would be a nonstarter for us.

Why? Clients review our work in Google Docs. That's something they're (for the most part) familiar with and already using. We're not going to complicate their lives without an exceptionally good reason.

</comment><comment><USER5> [https://github.com/ether/etherpad-lite](https://github.com/ether/etherpad- lite)</comment>


The Trouble with Teaching Rape Law (2014) - <AUTHOR> http://www.newyorker.com/news/news-desk/trouble-teaching-rape-law <comment><USER2> As for law students being too emotionally sensitive to handle the details of a case, how could shielding them from it help anything? What happens if they are a lawyer in a criminal trial on the subject? Will they just have a tantrum and refuse to review the evidence/statute and present an argument? It should be obvious that criminal law students who refuse to assess any class of criminal case can not reasonably be considered ready to prosecute or defend criminal cases.

I feel very sorry for the people who have to choose between being put in disciplinary peril, or producing lawyers who will apparently faint and clutch their pearls if you even _discuss_ a case.

None of the catchy "second rape" thinking and rhetoric changes anything about why there are standards of evidence. An attempted murder trial involves victim testimony. An assault trial involves victim testimony.

If you are the victim of a crime that only you witnessed, you are the only one who can provide testimony, and if you provide testimony, you must be cross- examined. If you accuse somebody of a serious crime, then there had damn-well better be a well-conducted trial or a plea. You can't just send people to prison on unexamined testimony and hearsay.</comment>


The Programmer Training & Talent Deficiency  - <AUTHOR> http://www.thebitsource.com/featured-posts/the-software-engineering-training-talent-deficiency/ <comment><AUTHOR> I would be interested to hear other people's take on this issue in their city.</comment>


Android App Development in Scheme - <AUTHOR> http://androidscheme.blogspot.com/2010/10/introduction-to-android-app-development.html <comment><USER2> So is the magic here, over Clojure, that Kawa uses less ephemeral garbage, or is it doing Dalvic bytecode generation, or is it the size of the dependent runtime libraries, or ...?

</comment><comment><USER3> There are attempts for SISC scheme to work on the android also [http://www.neomantic.com/tutorials/sisc-scheme-on- androids-d...](http://www.neomantic.com/tutorials/sisc-scheme-on-androids- dalvik-vm)</comment>


Angular 2 RC5 release enables ahead of time compilation and lazy loading - <AUTHOR> http://blog.angular-university.io/angular2-ngmodule/ <comment><AUTHOR> This is a post on how the latest Angular 2 release and the NgModule feature will enable transparent ahead of time compilation for minimal bundle sizes plus transparent easily configurable lazy loading.

This feature coupled with upcoming angular-cli versions will make features like minimal bundles and lazy loaded apps much simpler to make than ever before. the angular-cli will actually provide these features pretty much transparently.

The developer will only have to add some minimal config by defining modules and passing modules to the router to make them lazy loadable. But there are some minor pitfalls to bear in mind in what relates to dependency injection.</comment>