Rust: Not So Great For Codec Implementing - <AUTHOR> https://codecs.multimedia.cx/?p=1246 <comment><USER2> Personally, I've been happy with Rust for writing an MPEG-2 subtitle decoder. I posted about this earlier here: [https://news.ycombinator.com/item?id=14753201](https://news.ycombinator.com/item?id=14753201)

For me, the biggest advantages over C/C++ were:

1\. Rust's compile-time checks, run-time checks and fuzzing tools make it much easier to write secure code. Since decoders are a notorious source of bad security bugs, this is a big plus in my book.

2\. Rust's dependency management makes it rather pleasant to rely on 3rd-party libraries. The combination of an immutable package repository and semver makes it easy to trust that things won't break. And in my experience, the number of 3rd-party libraries is relatively small compared to more popular languages, but the quality tends to be fairly high (especially relative to npm).

3\. The tooling is surprisingly nice for a young language. cargo has solid defaults, Visual Studio Code provides auto-completion and tool tips, and there are good libraries for basic logging, argument parsing, etc.

4\. Rust makes it relatively easy to write fast code, as long as you use references and slices when appropriate.

Downsides include the learning curve (about a week or two for a C++ programmer to start feeling semi-comfortable), and slower compile times for large modules or ones using lots of parameterized types. My coworkers will write Rust, but they tend to say things like, "Rust is _intense_."

</comment><comment><USER3> > And that's why C is still the best language for systems programming—it still > lets you to do what you mean (the problem is that most programmers don't > really know what they mean)

Honestly after a ~1yr of embedded C co-op/intership experience, I'm familiar enough but not too entrenched to say that C is not that great for embedded/systems. When you're dealing at the hardware architecture level you need more detail than C (or any PL) can reasonably provide.

C doesn't "let you do what you mean", it has no knowledge of special registers, interrupts, timers, DMA, etc. Companies have coped with a slew of macros that are just ugly to write with and make testing much more difficult than need be. If the language had actual support for embedded you'd see support for architecture strictly as libraries (which may be possible in C but certainly not ergonomic or supported by the culture around the language). Library architectures would make writing simulators and embedded unit tests __MUCH__ simpler.

Not to mention the minefield that is the undefined sections of the C spec. A lot of people "mean" for an integer to rollover, but that's undefined and the C spec doesn't care about what you "mean". [1]

Just today I meant for a constant lookup table not to be overwritten by the stack (I had plenty of unused RAM), but unfortunately C doesn't care what I meant. I had to dig around and find an odd macro to jam that data into program space--effectively hiring some muscle (gcc) to break the spec so it behaved the way I wanted. [2] I run into this sort of thing all the time. I know the C spec. I know my hardware. C doesn't care and needs to be beaten up. The only real benefit of C in these situations is that it's a huge sissy and people are really good at beating the piss out of it now.

I'm not very familiar with rust, but if it makes an honest effort to be ergonomic for embedded (might need to be forked). It will eventually crush C.

[1]: [https://blog.regehr.org/archives/213](https://blog.regehr.org/archives/213) [2]: [https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Named- Address-S...](https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Named-Address- Spaces.html)

<comment><USER4> > And that's why C is still the best language for systems programming

I think the only reason C is very popular for systems programming is that it allows you to do most of what you could do in assembler, but in an easier-to- work way. So basically C is an "acceptable, easier-to-use assembler", but far from ideal, because of the reasons you point out.

Honestly, the popularity of C itself is due to the success of UNIX, not due to any particular quality. On the other hand, the K&R "The C Programming Language" book is a classic, a well written book which surely does a great job of introducing the language.

But back then in the late 1960s, a new language called ALGOL-68 was specified, back then a _very_ advanced language which had powerful features even for 2017. The problem is that nobody dared to implement the full language. CPL was a stripped down implementation of Algol-68, this was then stripped down even more to BCPL; then it was extremely stripped down to B (only one datatype), then Dennis Ritchie kept most of the syntax and added other data types and C was born. C was never designed from the ground up to be the best systems programming language possible; only to be able to work for Dennis Ritchie & friends' "toy" operating system, UNIX, a very stripped-down MULTICS.

I think the "UNIX-Haters Handbook" has a section devoted to C criticism.

<comment><USER5> > Honestly, the popularity of C itself is due to the success of UNIX,

I beg to differ. C was a fairly obscure language until MS-DOS came out. C turned out to be ideal for programming on DOS, and DOS programming was far and away the most programmed system in the world for a decade and a half.

MS-DOS also made C++ into a major language (via Zortech C++). When ZTC++ came out the penetration and popularity of C++ went through the roof.

(Yes, I'm tooting my own horn a bit here. But I honestly believe it is ZTC++ that got C++ its critical mass.)

MS-DOS made C and C++ into the juggernauts they became.

<comment><USER6> In my part of the world, we used the Borland compilers for MS-DOS, Turbo C and Turbo C++. Turbo Assembler and Turbo Pascal was also popular. Never heard of Zortech C++ before

<comment><USER5> Borland decided to develop TC++ because of the success of ZTC++. (I know some of the people involved.) Before ZTC++, C++ was a niche language, and Borland was having great success with Turbo Pascal. ZTC++ came out in 1987, and TC++ in 1990.

After the success of ZTC++ and TC++, Microsoft changed direction and decided to develop a C++ compiler, too. I heard (but was never able to confirm) that Microsoft had earlier been developing their own object oriented extensions to C called C*.

<comment><USER7> Coming from Turbo Pascal TC++ was a bit underwhelming. When I tried it didn't colour syntax, there was those weird #include and compin=ling felt so slow. So my first contact with C was pretty negative :\

</comment></comment></comment></comment></comment></comment><comment><USER8> Whilst unrelated to the article, my complaint about codecs in Rust is that they seem to be slow. Whilst the reason for this might be the immaturity of the libraries that I've used, but they've always been slower than their C counter-parts. The native JPEG decoder spins up 4 threads to decode the same amount of frames at 3x the time as the libjpeg-turbo does. There's a similar story for the FLAC decoder.

I don't think that any of this has anything to do with the language itself, it's just that it takes time for things to mature. As for the issues outlined in the article - the language is different enough from C and C++ that one just has to accept the fact that you cannot write idiomatic C and C++ in Rust and expect it to be comfortable, performant or safe. However, with Rust, I'd say, that one can achieve 99% of what one can achieve in C today. The only thing that Rust is missing currently is the ability to arbitrarily jump around the call stack due to the way destructors are implemented, but there's a way to mitigate this and it's being worked as far as I was aware.

<comment><USER9> Decoding in libjpeg-turbo is mostly implemented in ASM. Rust, like C, is slower than hand-optimized SIMD ASM.

<comment><USER10> If anyone's interested, this is the (epic!) discussion thread for "Getting explicit SIMD on stable Rust":

[https://internals.rust-lang.org/t/getting-explicit-simd- on-s...](https://internals.rust-lang.org/t/getting-explicit-simd-on-stable- rust/4380/334)

It still wouldn't compete with really good hand-tuned asm, but it might help reduce the perf/usability tradeoff a bit.

<comment><USER11> I'd just like to see 2,3, and 4 element vectors as a first class citizen in C, C++, or Rust. These are incredibly common for so many things it's hard for me to understand this omission. I want to be able to pass them by value and as return values from function. I want to do operations like a=b+c with vectors without creating classes or overloading operators. For a lot of people the SIMD instructions are about parallel computation, but for me they represent vector primitives.

<comment><USER12> It doesn't really make sense in C as any modern optimizing compiler will turn it into SIMD. IIRC rust needs explicit SIMD due to bounds checking.

<comment><USER13> There are thousands of vendor intrinsics and no compiler that I'm aware of is able to just automatically use all of them in a reliable way. The idea that "Rust needs explicit SIMD due to bounds checking" is very wrong.

<comment><USER12> Because SIMD ins throughput is highly processor specific? Rust will also not 'automatically use all of them' there is no magic abstraction would make any compiler use some of the really fancy and useful SIMD ins.

<comment><USER13> I don't know what you're talking about unfortunately. My statement about compilers and SIMD isn't Rust-specific. My point was that "rust needs explicit SIMD due to bounds checking" is factually wrong.

<comment><USER12> No it isn't, it is one of the reasons that rust is getting SIMD, if it cannot eluide the bounds checking then obviously it will not vectorize the code in question.

<comment><USER13> I'm one of the people working on adding SIMD to Rust, so I'm telling you, you're wrong. If you want better vectorization and bounds checking is standing in your way, then you can elide the bounds checks explicitly. That doesn't require explicit SIMD.

<comment><USER12> How do you safely elide bounds for something the compiler cannot reason about? How would Rust handle SIMD differences when trying to generate specific code as you would in C?

<comment><USER13> > How do you safely elide bounds for something the compiler cannot reason > about?

Who said anything about doing it safely? You can elide the bounds checks explicitly with calls to get_unchecked (or whatever) using unsafe.

> How would Rust handle SIMD differences when trying to generate specific code > as you would in C?

Please be more specific. This question is so broad that it's impossible to answer. At some levels, this is the responsibility of the code generator (i.e., LLVM). At other levels, it's the responsibility of the programmer to write code that checks what the current CPU supports, and then call the correct code. Both Clang and gcc have support for the former using conditional compilation, and both Clang and gcc have support for the latter by annotating specific function definitions with specific target features. In the case of the latter, it _can_ be UB to call those functions on CPUs that don't support those features. (Most often the worse that will happen is a SIGILL, but if you somehow muck of the ABIs between functions, then you're in for some pain.) The plan for Rust is to basically do what Clang does.

The question of _safety_ in Rust and SIMD is a completely different story from auto-vectorization. Figuring out how to make calling arbitrary vendor intrinsics safe is an open question that we probably won't be able to solve in the immediate future, so we'll make it unsafe to call them.

And even that is all completely orthogonal to a nice platform independent SIMD API (like you might find in Javascript's support for SIMD[1]), since most of that surface area is handled by LLVM and we should be able to enable using SIMD at that level in safe Rust.

And all of that is still completely and utterly orthogonal to whether bounds checks are elided. Even with the cross platform abstractions, you still might want to write unsafe code to elide bounds checks when copying data from a slice into a vector in a tight loop.

[1] - [https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/SIMD)

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> Since the link is a bit slow, here's an IPFS version:

[https://www.eternum.io/ipfs/QmYrdKpWbHCuNPUrBd6MPFrcTqPBW55w...](https://www.eternum.io/ipfs/QmYrdKpWbHCuNPUrBd6MPFrcTqPBW55w1AFHdw4toUt8MM/)

<comment><USER15> Nice to see IPFS links popping up

<comment><USER14> I agree! Are you running a local node? I was thinking that a browser extension that automatically redirected URLs like ".*/ip[fn]s/\w+" to the local daemon address would be pretty useful.

<comment><USER16> Check out ipfs station if you use chrome.

[https://chrome.google.com/webstore/detail/ipfs- station/kckhg...](https://chrome.google.com/webstore/detail/ipfs- station/kckhgoigikkadogfdiojcblegfhdnjei)

<comment><USER14> Fantastic, that's exactly what I wanted, thank you. It doesn't seem to like my remote node, but I'll figure it out.

</comment></comment></comment></comment></comment><comment><USER17> The only legitimate complaint there is that it's tough in Rust to get two arbitrary mutable slices into the same array. Rust wants to be sure they're disjoint, to prevent aliasing. For some matrix manipulation, this is inconvenient.

It would be easier if Rust had real multidimensional arrays. If the compiler knows about multidimensional arrays, some additional optimizations are possible. For example, if you want to borrow two different rows, that's fine as long as the row subscript is different.

<comment><USER18> > The only legitimate complaint there is that it's tough in Rust to get two > arbitrary mutable slices into the same array. Rust wants to be sure they're > disjoint, to prevent aliasing. For some matrix manipulation, this is > inconvenient.

I've only looked into Rust briefly, but I thought this was the point of unsafe blocks? You can roll your own multi-dimensional array data structure using unsafe blocks if you're certain what you're doing is actually safe.

<comment><USER19> Unsafe allows you to dereference raw pointers and foreign-function calls, but you cannot go around the borrow checker, which is what's causing annoyance.

That said, you can create raw and dereference raw pointers, which lets you to do the above.

<comment><USER20> If you take a ref into a pointer that lets you work around the borrow checker(and I've bitten myself just about every time I've done it now that I'm used to the borrow checker).

</comment></comment></comment></comment><comment><USER21> _> And don't tell me about Bytes crate—it should not be a separate crate_

I'd be interested to hear the author's reasoning behind this, if it does what they want then why not use it? It's small and well written, so I don't think vetting it should be a problem.

The rest of the article seems quite sensible, that comment just strikes me as a little odd.

<comment><USER22> There is a real change in mentality you have to go through if you transition from a fairly strict C/C++/ even Java background to trying out Rust. In the former languages, adding dependencies rapidly becomes a painful experience, whereas Rust does much better dependency management and automatic building than even Python (where you need a requirements file or something similar to go pull down all the deps).

With Rust, you really should just use crates. The std is meant to be limited to just the most used code and that which should not change for the sake of keeping the ecosystem stable.

<comment><USER23> > even Python

Off topic, but it shouldn't be better than "even Python", because Python has a really, really broken dependency system. Far more so than Java, which has Maven/Gradle which are both infinitely better than the pip/virtualenv disaster.

People complain about things like shading in Maven being complicated. What they might not realize is that pip doesn't even try to address conflicting dependencies, it will just silently give you the wrong version! You ask for A==0.2 and it will give you A==0.1 if another dependency asked for A==0.1 first. And it won't even warn you even though it's straight up broken behavior. Virtualenv makes packaging annoying since it's almost vendoring but not quite. To totally understand the packaging system forces you into the world of eggs, wheels, disutils, conflicting versions, condas, etc.

Sorry for tangent, just thought it was funny you would hold Python up as a standard of dependency excellence when it's probably the worst overall ecosystem of major languages.

<comment><USER22> My language development went from C -> C++ -> Java -> Python. So when I got there and figured out pip was a thing (or easy_install back in the day) it was a major innovation at the time.

Additionally, for anyone coming from almost all compiled native languages, a native environment like Rust with better dependency management than Python (which, as you say, and in retrospect, is pretty broken) is a bit of a mind screw.

<comment><USER24> The Python devs I worked with always envied me for npm. I asked them if they don't have something similar with pip, but seems like npm is a whole different level.

Cargo should even be better than npm.

On the other hand I always asked myself if they couldn't simply use Nix?

<comment><USER25> I can't simply use Nix; it doesn't support Windows.

<comment><USER24> It doesn't run on the Linux subsystem?

<comment><USER25> I hear it sorta works, but nix-shell doesn't.

Regardless, while it's cool and useful, it's not really actual Windows support.

<comment><USER24> true.

Didn't take you for a Windows guy, hehe

<comment><USER25> Historically not! If you managed to dig up my old /. account you'd see "M$" and all that. Lots of growth and change since then, ha!

It's due to video games... but I'm actually enjoying Windows 10.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER26> Codecs are actually a wonderful test-case for Rust: they're a frequent source of vulnerabilities because they have to deal with arbitrary input, they usually have to perform fiddly sub-byte and/or array manipulation, and their pressure for maximum performance mean they have to make as efficient use of the hardware and memory as possible (and any mistake lead back to the first point)

So even if you don't agree with some of the author's points, his use-case is a good test for the suitability of Rust as a Systems Programming Language.

<comment><USER27> Yes, let us never forget how many exploits there are in _trivial_ codecs like ICO and BMP, because they're written in C(++): [https://bugzilla.mozilla.org/show_bug.cgi?id=775794#c0](https://bugzilla.mozilla.org/show_bug.cgi?id=775794#c0)

<comment><USER28> BMP isn't so trivial, largely because it's been extended multiple times while never having a proper spec.

[http://searchfox.org/mozilla- central/rev/bbc1c59e460a27b2092...](http://searchfox.org/mozilla- central/rev/bbc1c59e460a27b20929b56489e2e55438de81fa/image/decoders/nsBMPDecoder.cpp#10-83) has some of the gory details.

<comment><USER29> And .ico is just .bmp with some extras.

</comment></comment></comment></comment><comment><USER25> A lot of good comments on Reddit, with answers/solutions/discussion of the points brought up here: [https://www.reddit.com/r/rust/comments/6qv2s5/rust_not_so_gr...](https://www.reddit.com/r/rust/comments/6qv2s5/rust_not_so_great_for_codec_implementing/)

These kinds of experience reports are _so_ valuable. (I've been following the whole series and they're very interesting.) Even if solutions to these issues do exist, if people can't find them, well that's a problem too.

<comment><USER30> Seems like (from that Reddit thread) a lot of the things are in progress in the nightlies. I wonder if that means the nightlies are holding Rust back (because it relieves the pressure to actually ship features for use by normal developers).

<comment><USER25> Trust me, being available only on nightly does not reduce pressure :)

Most of our users use stable, and want to stick to stable. There's just some use-cases that need features we haven't finished designing yet, such is life.

<comment><USER30> Might very well be; I have the luxury of not looking a nightlies at all :) it's just been frustrating how often problem reports get a response that the solutions are in the nightlies. I suppose it's possible that it's more meant as "it's being worked on" rather than "this is not a real issue, stop complaining", but the acknowledgement that it's actually an issue for people using release builds seem to be missing whenever nightlies are brought up in these sorts of responses.

Contrast this with other languages (C++, Python, Ruby, Go) where I have no idea what features are under development until they hit a stable release. Compare to JavaScript, where stable releases are so slow people built transpilers ;)

This could also be because I'm interested enough in Rust to occasionally land on the first-party discussion forums, of course (probably helped by how open the language development is). I'd say it's also young, except that it now has a release number much larger than 1.0 and doesn't really get to claim that anymore.

<comment><USER31> > I suppose it's possible that it's more meant as "it's being worked on" > rather than "this is not a real issue, stop complaining", but the > acknowledgement that it's actually an issue for people using release builds > seem to be missing whenever nightlies are brought up in these sorts of > responses.

I think that's the right assumption, because it's an acknowledgement that the issue actively being worked on to the degree that they have at least a partial solution implemented, as opposed to the "someone is working on that" response language developers sometimes give which usually predates that and could mean someone is reading literature and surveying the field and no code has actually been written.

As you note, because development is so open, nightlies are easily accessible, so people might incorrectly infer that they are being recommended to use them, or that the problem is solved. I think what the devs are attempting to communicate is that it's close, and if you want you can test it out to see what it's like and give feedback. This might be a case of similar groups with _slightly_ different context (lang devs / lang users) interpret a statement differently. From what I've seen, the Rust devs see fairly responsive to communication issues when pointed out, so maybe this will result in some change (or perhaps they are acutely aware of the issue already and instituted changes have not shown benefit, at least yet).

<comment><USER30> Yeah, I appreciate that nightlies are an option. It's just frustrating how often that option is trotted out without the caveat that it isn't a real solution. (This is again basically reacting to a particular Reddit comment linked above, but those sorts of comments are things that are more memorable.)

Actually interacting with rust-related people, whatever their capacity (developer, user, etc.) tend to go pretty well; it's just that once in a while a random comment shows up that seems dismissive of actual problems people are reporting.

You're probably right though, it's just that people have different contexts and I'm reading more into things than intended. Again, rust development is extremely open (which is great) and these things just tend to not be visible for other languages, rather than not happening.

</comment></comment></comment></comment></comment></comment><comment> ainar-g The link doesn't seem to work for me at the moment. Here is Google Cache: [http://webcache.googleusercontent.com/search?q=cache:qOUhWkj...](http://webcache.googleusercontent.com/search?q=cache:qOUhWkjzMY0J:https://codecs.multimedia.cx/%3Fp%3D1246&num=1&lr=lang_de%7Clang_en%7Clang_ru&hl=ru&gl=ru&tbs=lr:lang_1de%7Clang_1en%7Clang_1ru&strip=1&vwsrc=0)

</comment><comment><USER32> Not a Rust expert, but some thoughts on the negatives.

> Compilation time is too large

Can you try compiling incrementally? [https://blog.rust- lang.org/2016/09/08/incremental.html](https://blog.rust- lang.org/2016/09/08/incremental.html). Might still only be on nightly.

> And, on the similar note, benchmarks.

I agree, profiling as well isn't as full featured as in more mature languages. Clojure, incidentally has great benchmarking due to being on the JVM.

> Also the tuple assignments.

Can't you just do

        fn main() {
            let (a, b) = (5, 2);
            println!("{}, {}", b, a);
        }

>There are many cases where compiler could do the stuff automatically.

I think this will be solved with the new non-lexical lifetimes RFC. Also a problem I had when starting, I generally assume referential transparency.

<comment><USER33> > Clojure, incidentally has great benchmarking due to being on the JVM.

Eh? Benchmarking on the JVM is notoriously difficult bordering on impossible. There's things like Google Caliper but test runs take forever due to attempting to force JIT warmup and doing GCs after every run. And the project's own wiki tells you the results are basically meaningless for a variety of reasons.

Benchmarking things like C++ or Rust are trivial by comparison since when you call method foo() it's gonna do pretty much the same instructions every time. Highly consistent, highly repeatable, highly benchmarkable. Call method foo() in a JVM language and there's not a single person on the planet that can reliably tell you what's going to get executed on the metal.

That's why you typically profile JVM languages rather than benchmarking them.

<comment><USER34> Benchmarking is pretty meaningfree in the best cases. The JVM isn't any worse in this regard.

The JVM is slow in many regimes due to things like JIT warmup. Rather than accepting that many JVM people are hypersensitive: thou must only benchmark in the JVM's best case scenario.

<comment><USER33> > Benchmarking is pretty meaningfree in the best cases.

That's completely false. Benchmarking is a core staple of building & evaluating performance-sensitive libraries or other routines. It doesn't work (well) in non-deterministic languages which reduces its usefulness scope, but in things like C++ it's highly useful and reliable for evaluation of libraries and monitoring for regressions.

> The JVM is slow in many regimes due to things like JIT warmup. Rather than > accepting that many JVM people are hypersensitive: thou must only benchmark > in the JVM's best case scenario.

Well it's not _just_ the JIT that's a problem. It's also things like GC passes. Does that get included in the results or not? Do you force GC passes between runs? How about finalizers? The answers to those questions depends on the state of the rest of the system and the expected workload, it's not something you can just trivially answer or even accommodate in a framework since most of the behavior is up to the particular implementation, which can then further vary based off of command line flags.

</comment></comment></comment></comment><comment><USER35> None of these seem related to codecs as opposed to the author's preference for how s/he likes to code.

Not that this isn't super valuable feedback, but the title is misleading.

</comment><comment><USER36> I tried Rust for the first time a few months ago. One of the things that really impressed me was that it was very easy to just get started. Even though the language is very different than I'm used to, I was able to "just jump in" without jumping through a lot of hoops. I was working with 3rd party crates very quickly.

One thing that I think does need improvement is the error handling. Far too many idiomatic examples just panic for error handling. There's no good way to just group errors by a higher-level classification and fall through to a generic error handler. As a result, the choice is between panic on error, or very detailed and verbose error handling. There's no middle ground.

<comment><USER37> > There's no middle ground.

Not at all. This is what the ? operator is for (was try! before).

The idiomatic rust way is to have your own Error type that implements From for other Error types that you may encounter (io::Error, Utf8Error, etc.).

Then you can simply just write let result = dosomething()?; for any operation that may fail. If an error happens, function will return with the error.

I don't think you can do it any cleaner, given the constraints Rust is operating under.

<comment><USER38> The From is The Right Thing, but it can be hard to convince people used to unchecked exceptions and costless casting of this. (I say costless, you pay for it every time you don't cast...)

</comment></comment></comment><comment><USER39> Some of the complaints are perfectly fair (compile time, powerful but unwieldy macros). Other complaints seem a bit odder to me:

> _While overall built-in testing capabilities in Rust are good (file it under > good things too), the fact that benchmarking is available only for limbo > nightly Rust is annoying;_

Okay, but what are you comparing it against? Neither C or C++ have builtin benchmarking or even tests.

> _If you care about systems programming and safety you'd have at least one or > two functions to convert type into a smaller one (e.g. i16 /u16 -> u8) > and/or check whether the result fits._

I don't understand this one at all. What's wrong with "as"? And if you need a checked conversion just write a small wrapper function? Again, if you're comparing to C or C++ I'd argue that Rust's semantic are friendlier and a lot less error prone at the cost of increased verbosity. C will implicitly cast and promote integer types without asking any questions, Rust makes it explicit.

I understand C promotion rules and I've still managed to get it wrong on occasions, to the point where I now force myself to make all casts explicit in C like I would in Rust. At least this way the intent is obvious, as I think it should be.

> _Also the tuple assignments. I'd like to be able to assign multiple > variables from a tuple but it's not possible now. And maybe it would be nice > to be able to declare several variables with one let;_

So unless I'm missing something something like:

        let (a, _, b) = (1, 2, 3)

> _Same for function calling—why does bitread.seek(bitread.tell() - 42); fail > borrow check while let pos = bitread.tell() - 42; bitread.seek(pos);_

Yeah, that's always been a minor annoyance of mine too. I intuitively think that

        a(b());

should be treated like

        let tmp = b();
        a(tmp);

That is b() would terminate and release its borrows before a is even considered and "tmp" would live until the end of the block.

I'm guessing that there must be a good reason why it isn't so however.

Note that in C and C++ parameter evaluation order is unspecified so calling functions with potential side effects in parameter lists should be done very carefully. The compiler won't ever stop you though, don't worry. I'm sure the foot will grow back eventually.

> _Borrow checker and arrays._ [...]

Now this whole section feels a lot like "I'm trying to code in Rust like in C and it doesn't work and it frustrates me". Which is fair, messing around with arrays in C is a lot easier than Rust, there's no doubt about that. C also makes it massively easier to spectacularly shoot yourself in the foot if you mess up.

Yes, if you need uninitialized arrays and these sorts of things you need to use unsafe. But that's mostly optimization and you probably don't want to start implementing your codec with that type of code. After all maybe the compiler will be clever enough to see what you're doing with the buffer and not actually run the init code. And if it doesn't you're free to add the unsafe code later, once your codec works, you have good tests and it's time to optimize more aggressively.

>And that's why C is still the best language for systems programming—it still lets you to do what you mean (the problem is that most programmers don't really know what they mean)

Ah, so after the Sufficiently Smart Compiler we have the Sufficiently Smart Coder. That seems like quite a definitive claim for somebody who didn't know about "split_at_mut" in Rust a few lines earlier. Maybe the author should experiment a bit more with the language before making bold statements like these?

It's not rare to find security vulnerabilities in codecs and they tend to be extremely exposed. Maybe it's worth the hassle of making array manipulation slightly less convenient for the sake of security?

>type keyword. Since it's a keyword it can't be used as a variable name and many objects have type, you know.

All languages have reserved keywords, that's strictly in bikeshed territory. Of course when you get to a new language with a new set of reserved keyword you have to learn new habits. You never name anything "struct", "class", "switch" or "break" in C or C++ because you're used to have these keywords removed. Rust lets me name variables "class" but not "type". Oh well.

>Not being able to combine if let with some other condition (those nested conditions tend to accumulate rather fast)

I tend to agree with this one, although I guess it could become messy quickly if you mix refutable lets with regular boolean conditions.

<comment><USER40> > Now this whole section feels a lot like "I'm trying to code in Rust like in > C and it doesn't work and it frustrates me".

Who's fault is that?

Rust seems like an attempt to take a lot of foreign concepts to C/C++ programmers and dress them up in ALGOLy syntax. If you look at Rust's influences page[1], there's stuff from ML, Haskell, Erlang... and yet Rust code examples I've seen all look like "slightly weird C++." If Rust wasn't meant to be written like C/C++, it could spend less time aping it and more time looking like languages where you expect to come across ADTs and the like.

1) [https://doc.rust-lang.org/reference/influences.html](https://doc.rust- lang.org/reference/influences.html)

<comment><USER41> Well, like it or not, one of the primary audiences of Rust _is_ C and C++ programmers. They're the people who write low-level code. There's not much we can do about that; we might as well serve our customers as well as we can.

<comment><USER40> > we might as well serve our customers as well as we can.

Sure, but what part of serving them involves dragging them on Hacker News when they try and write C-like code in Rust?

<comment><USER41> I don't think we should be upset with people for their legitimate frustrations. But I do think we should be honest with the basic limitations of what we set out to do. A safe language that has dynamic allocation without GC simply has to have a borrow checker, and as far as we know that borrow checker has to have some limitations. Those limitations prevent some kind of code from being written in the same way it was written in C.

</comment></comment></comment></comment></comment><comment><USER42> This article is practically selling Zig. It has all the good stuff mentioned sans traits, and none of the bad stuff. The only new bad thing Zig brings to the table is immaturity. Zig is a much more modest incremental improvement over C whereas rust is trying to introduce this new big idea of the borrow checker.

<comment><USER43> Watch out for the inevitable copycat product called Zag that steals all your users by saying they zigged when they should have zagged.

</comment></comment><comment><USER44> Site is down for me. Mirror?

<comment><USER25> [https://news.ycombinator.com/item?id=14901856](https://news.ycombinator.com/item?id=14901856)</comment></comment>


What Dexter teaches us about startups - <AUTHOR> http://vincentjordan.com/2011/12/what-dexter-morgan-teaches-us-about-startups/ <comment><USER2> Not sure a i would want to have anything with a startup that model its self on Dexter - even as a fluffy guardian reader there are some cases where a Red stop is appropriate.</comment>


Facebook's stock should trade for $13.80 - <AUTHOR> http://www.marketwatch.com/story/facebooks-stock-should-trade-for-1380-2012-05-25

<comment><USER2> _The researchers found that the revenue of the average company going public between 1996 and 2010 grew by 212% over the five years after its IPO._

 _Assuming that its five-year return is equal to the stock market's long-term average return of 11% annualized, Facebook shares currently would need to be trading at just $13.80._

I'm as bearish as anybody on FB but this seems like extremely lazy analysis. FB may be many things but average is certainly not one of them.

<comment><USER3> _FB may be many things but average is certainly not one of them._

Several of the other comments you have received relate to this idea, so please allow me to ask a specific question (directed both to you and to onlookers). What is not average about Facebook? For some commenting here, the specific question I have is what is above average about Facebook, related to its revenue, to suggest it will overperform the average of historic experience of companies that have IPOed? As an investor, interested in a non-lazy analysis, what should I look for to decide whether or not Facebook is a good investment at the current price of its stock? I note that you wrote,

 _I'm as bearish as anybody on FB but this seems like extremely lazy analysis._

so I'm not specifically asking you for a rationale for buying Facebook. Other comments at this comment level or below imply that there may be a rationale (perhaps unconvincing to you, but perhaps convincing to some onlooker) for buying Facebook's stock at today's price. What rationale is that? If I had some extra money, would I be well advised to invest it in Facebook stock? Why or why not?

I'd appreciate hearing from anyone who has an analysis that goes deeper than the news headlines of the last week since the Facebook IPO. Thanks.

<comment><USER4> Well, the analytical question here is: what is the appropriate sample for comparison?

The article uses US IPOs 1996-2010 as the initial sample. I'd like to know how sensitive this is to expanding or narrowing that range. How does that average change if you adjust the range? (The academic article may have some note of this.)

Then, the article makes comparison to Google's current price-to-sales ratio as a benchmark (5.51-1). The analytic justification is nothing more than "[s]ince Facebook FB -0.64% is most often compared to Google GOOG -0.66%..."

Some questions I'd ask about this:

\- What did Google's P/S ratio look like at IPO, and what was its growth?

\- What does Facebook's P/S ratio look like compared a broader sample of tech companies' P/S ratios? Or including non-tech companies?

\- Why not use price-to-earnings ratio? (I'm not a finance guy, but the subtle difference in wording here gives me pause to at least investigate the question.)

So what you're hearing me say is: we need sensitivity analysis. The assumed benchmarks appear arbitrary enough that we have to see how the results change when you adjust the inputs.

Lastly, there's the age-old fundamentals versus intangibles question: investors make their decisions based on both. The fundamental analysis (of earnings, etc., like the article does) is not deterministic: it just gives you context. Intangibles (faith in management, broader understanding of how the market will shift and affect the firm's competitive position) matter, too. They're just, well, intangible.

But also included under the umbrella of intangibles is how _investor sentiment_ toward the company may change. If people think FB is going to make some huge announcements in the next year that will send the share price skyrocketing for a short (but not sustainable) high watermark, then that potential short-term return is worth buying.

[Edit 5/25 6:57a PT - changed range from 96-00 to 96-10 based on correction. Thanks!]

<comment><USER5> The article says the analysis uses the 1996-2010 timeframe, not 2000, so that is a few more IPO's.

</comment></comment></comment></comment><comment><USER6> Facebook should trade for what Facebook is trading at at the moment in time Facebook is trading.

The end.

<comment><USER7> Wow. That's so insightful, I think you've single-handedly rendered every research division at every investment bank obsolete. Consider switching careers.

"This company is trading at this price, which is appropriate because this price is what the company is trading at. My recommendation is to purchase shares in this company then sell them at a higher price later on. Alternately, we can short this company's stock, and then profit when the price falls."

<comment><USER8> I think he's pointing to <http://en.wikipedia.org/wiki/Efficient- market_hypothesis>

<comment><USER9> Yes, but as someone said, "the market can stay irrational longer than you can stay solvent".

<comment><USER10> John Maynard Keynes said that.

<comment><USER9> Thanks for the heads up! I thought it was some anonymous on Twitter ;)

</comment></comment></comment></comment></comment></comment><comment><USER11> A quick collapse of the price would be best for everyone, except for the "muppets" who bought FB shares in the IPO. Especially for Facebook, who would otherwise see an exodus of employees who can make more in terms of vesting credit at companies whose share price does go up. I do think a market cap of >$50 billion is sustainable based on the size of the warchests at Microsoft and Apple. If they could only ever buy one company, it would be Facebook.

</comment><comment><USER12> Ive never seen so many bearish articles about a company before. That's probably a good sign if you are bullish on FB... Here in Sweden we have brokers who market how to short FB big-time!

<comment><USER13> with P/E at ~100 there's no way to be bullish if you've got anything resembling a brain... yeah, i don't have amazon either.

<comment><USER14> Google went public in 2004 at ~200x earnings and is up 457% since then.

Apple went public in 1980 at ~100x earnings and is up over 15,000% since then.

I'm not saying that Facebook is Google or Apple, but there's a lot more to analyzing a company than looking at P/E and calling it a day.

<comment><USER15> Google's revenue growth for the year prior to IPO (2003) was 234%. Facebook's was 88%. Sorry, but Google was a massively better business.

<comment><USER16> Doesn't that just support the point that looking at P/E alone is useless?

<comment><USER9> No, that supports the point that looking at P/E alone is not enough. Searching for a spouse? Maybe you should not only look at her/his diplomas or music tastes alone.

</comment></comment></comment></comment></comment></comment><comment><USER17> If Facebook was $14 a share, I'd sell everything else and buy nothing but FB.

<comment><USER18> If fb was down to 14, many things about the company fundamentals would be different. There'd be a reason for it to have dropped by more than 50%.

Instea of going all in and buying the stock, consider options.

<comment><USER19> I think that the GP's statement was made ceteris paribus.

Naturally, if there was some new information available about the company fundamentals that caused FB stock to drop to $14, it would only be a good buy if you could determine that the market overreacted.

<comment><USER20> I admit I needed to google your Latin. For anyone else, ceteris paribus: "all other things being equal"

</comment></comment></comment></comment><comment><USER21> The author is assuming that stock performance is inherently linked to internal company metrics, which is simply a naive assumption. P/E ratio is not the holy grail of valuating companies, there are countless other stocks other than GOOG who have been growing for years despite having a huge P/E ratio.

<comment><USER22> for example?

</comment></comment><comment><USER23> Maybe they should charge users fees to protect their privacy rather than focus on charging advertisers? 10 dollars a year to not sell your data to advertisers. 20 dollars a year to not allow law enforcement to view your data without a court order signed by a judge, etc.

</comment><comment><USER24> There have been so many articles speculating on the true value of Facebook shares. The truth of the matter is that the market sets the value - and it's just adjusting Facebook's, and other people's expectations at the moment. $13.80 is pretty good value for a share - it gives plenty of space for bumps upwards in the market (key sales, acquisitions and appointments).

The only way to go after an IPO like Facebook's is down. Look at the way the UK market contracted after Lastminute.com's IPO. These are more mature digital times, but there are still lessons to be taken from it.

</comment><comment><USER25> Of course, this is all based on current information of revenue... but people don't pay for current business, they pay for potential of business (research), and FB seems to have some decent research.

</comment><comment><USER26> Key fallacy in the argument: Revenue growth is compared to the average IPO.

If anything, Facebook is not the average company. It's not the average company that's gone public either.

That's not to say they won't have challenges growing revenue. I think that a company that's been around this long should've figured out how to mint money by now. But I think this analysis is wrong.

</comment><comment><USER27> People have lost fortunes betting that things are under- or over-valued, screaming all the way down that "I'm riggghhhhhtttt!"

</comment><comment><USER28> Because of the greater fool theory and the random walk theory I can not take any analysis seriously.

</comment><comment><USER29> So if we apply industry standard valuation techniques, tested against an existing listed tech company Facebook is valued at $13.80. Why did everyone buy it at more than double the price? Ouch.

<comment><USER30> Basing a valuation on IPO statistics is not an industry standard valuation technique. For an industry standard valuation technique, check Damodaran's analysis made well before the IPO: ([http://www.aswathdamodaran.blogspot.pt/2012/02/ipo-of- decade...](http://www.aswathdamodaran.blogspot.pt/2012/02/ipo-of-decade-my- valuation-of-facebook.html))

His price was $28.

</comment></comment><comment><USER31> Remember, all Facebook has to do is figure out how to get each user to give it $100/year.

</comment><comment><USER32> I was hoping $6.00

</comment><comment><USER33> Now this is just silly. Stock prices are a bet. Sometimes they are more of a sure bet, sometimes they are more of a risk. But the idea that anyone can know exactly what a stock should be priced at for a company in a very dynamic field like facebook is just silly. It's better to point out that facebook's current valuation seems quite high and the risk of investing in facebook right now also seems quite high. But beyond that there are no certainties. Facebook could end up with a trillion dollars a year in net revenue in 10 years, or it could go end up sold to a 3rd party company for a tiny fraction of it's current market cap. We don't know and nobody can know.

<comment><USER7> You really think companies investing billions in things like Facebook are just throwing money at whatever they fancy and hoping it all works out? Investment banks employ thousands of people who do nothing but sit in their office and calculate if a certain security's price is off by fractions of a percent. Virtually everything that bank does is based on that analysis. They are very well-paid and a good market researcher is worth 100x his weight in gold- pressed latinum. They do fuck up, often publicly as it turns out, but that does not make their science any less refined.

<comment><USER34> _but that does not make their science any less refined_

science? I wouldn't call it that...

<comment><USER35> Better hire some... Data Scientists!

</comment></comment></comment></comment><comment><USER36> Facebook was pushing really, really hard for a higher IPO. Why? Why would the company WANT to sell off at 50, 100, or 150 price per earnings, higher and higher? This is setting unrealistic expectations and setting themselves up for failure. Does anyone know?

I have one theory: they need the money. Perhaps Facebook has some really audacious plans that it is confident in, and simply needs that many bilion dollars to do it (and even more).

From their execution on their audatious plans to date, this would be not be out of character, nor would I completely lack faith in their ability to do so. Any other ideas?

 _I mean, at the end of the day, wouldn't you rather have a billion in the bank after IPO-ing at 25 price per earnings and ending up fizzling, than have 3 billion in the bank after pushing really, really hard to IPO at 75 price per earnings and ending up fizzling? Personally, 1 billion is the same as 3 billion to me, but the latter scenario is not very pleasant, including plenty of possible lawsuits, etc. It's a lot easier to fault and deride a company in the latter scenario if it doesn't quite live up to expectations.._.

<comment><USER37> An IPO is firstly here to make money for the company. FB masterly made the maximum money they could, they sold as high as possible. It was a perfect IPO for FB. Nothing more.

<comment><USER36> I don't know. I'm pretty sure they wouldn't have wanted to raise $100billion. What would they do with it except buy back stock after a crash? Apple can't think of any use for _their_ $100b in cash, and they're a hardware company with sprawling operations on three continent, and a capital-intensive retail division on four! (They're doing buybacks and dividends with their cash.)

By contrast, the amount FB actually raised, which is considerably less than that, they're acting like they need or have good use for.

 _This is just a theory, of course, and perhaps you are right that Facebook would have been HAPPY to raise a hundred billion dollars it has no use for. (Perhaps as part of stock dumping by big shareholders, who don't care what happens after this.) The above is just a guess. But I want to repeat my reason for it, which is that I have been extremely impressed by the expansiveness of Facebook's vision to date, and its execution on it. If they do have something big in mind, it's not unprecedented for them to be able to execute on it; I have some faith in their ability to do so, versus lots of other companies that suddenly realize they can think a lot bigger now that they have all this cash, but have no record of doing so. We'll find out if there's anything like this that Facebook has in mind soon enough..._

</comment></comment></comment><comment><USER38> I think this analysis ignores the marketing potential of facebook's user data. No one has even scratched the surface of targeted marketing with such data. An obvious thing to try would be to tailor the presenter of a product based on the personalities the user seems to defer to in facebook conversations. But I haven't bought any FB stock, I just think the analysis is facile and the real picture is much murkier.

<comment><USER39> Odd that a lot of people think that "No one has even scratched the surface of targeted marketing" for years and years on while no great improvements are made.

It looks more and more like natural intelligence in the 80's. Promised to be just around the corner, but never came.

<comment><USER38> No one has scratched the surface of what could be done with data like facebook's. The example I gave in the grandparent is something that just couldn't be tried in a meaningful way before.

</comment></comment></comment><comment><USER40> I don't get the negativity towards FB that seems to be an undercurrent in these threads. This is Hacker News. If FB IPO'ed too high, that's good for the hackers. That means they got more money to build the business. If some investors lose a lot of money in the process, who cares?

<comment><USER41> Yes, because evil investors are not real people like us techies!

<comment><USER40> No, but investors have their own sites, their interests are not completely or even mostly aligned with those of techies, and it's silly for tech-focused sites to be preoccupied with their well being in a transaction that benefited a tech company at the expense of a bunch of institutional investors.</comment></comment></comment>


DNA could help solve mystery of the Indus Valley civilization - <AUTHOR> http://www.businessinsider.com/dna-could-solve-mystery-of-indus-valley-civilization-2016-2 <comment><USER2> Glad to see this getting press. The Indus Valley civilization was something I first learned about in college. I think the concept of a large civilization we know little about is fascinating!

<comment><USER3> Check out Angkor, Champa, Srivijaya, the (early, pre-Han) Shu Kingdom, Nanzhao, Pala, Pyu.

</comment></comment><comment><USER4> Original article on the Guardian [http://www.theguardian.com/world/2015/dec/30/rakhigarhi- indi...](http://www.theguardian.com/world/2015/dec/30/rakhigarhi-indian-town- unlock-mystery-indus-civilisation)

</comment><comment><USER5> How long does it take for researchers to extract DNA samples and compare it against the current population's samples? Maybe I'm being naive here but shouldn't that be a quick enough analysis? This research is going to help answer some very interesting questions.

<comment><USER6> I just heard a program on Public Radio yesterday about the possibility of using a USB DNA sequencer to map the Zika virus like they had Ebola. They said they could get the results in a day.

I can't find the PR source but here it is on The Guardian [http://bit.ly/1PfrACL](http://bit.ly/1PfrACL)</comment></comment>


Show HN: Great tool for creating loading 'spinners' - <AUTHOR> http://loading.io/ <comment><AUTHOR> I am not connected/affiliated with this website.

<comment><USER2> for the future: then don't submit it as "Show HN:", which is specifically for things the submitter personally made: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)</comment></comment>


You Can Donate Protective Equipment to Help Hospitals Fight Coronavirus - <AUTHOR> https://www.wsj.com/articles/how-you-can-donate-protective-equipment-to-help-hospitals-fight-coronavirus-11585323638 <comment><USER2> The easiest way to donate is to not buy equipment hospitals are in or at risk of shortage. Like respirators (not masks).</comment>


Ask HN: Will YC ever fund a time travel startup? - <AUTHOR> <comment><USER3> They already did, back in 2023.

[EDIT}: I meant they _will_ in 2023. Maybe. We can't possibly tell, of course.

</comment><comment><USER4> The problem with time travel is that when a single person can do it than we can all do it. And none of us will get ahead.

Every time a startup tries to predict the stock market, they are investing in a time travel startup. And that's why they say the market is efficient - <USER2> one can predict when the next crash will come.

</comment><comment><USER5> What would be the closest parallel to not just YC, but any venture backed idea which you would you say is similar to 'chasing the impossible'?

I think that would expand the scope of a question like this. Functional quantum computing comes to mind, but I can't think of too many examples...

<comment><USER6> Funding a startup whose goal is to break out of, assuming we are in one, a simulation.

<comment><USER7> if that were the case, it would suck if we got rebooted or worse case had a fatal kernel issue. Imagine its like that old device in the TV show "lost" sitting in a tower for 20 years being played over and over again. It works fine until someone touches it, then blam!

</comment></comment></comment><comment><USER8> Blue sky research may well be funded by govs for military purposes, other than universities employing phd students.

</comment><comment><USER9> If they funded one, and it succeeded, it would've already happened, so no.

<comment><USER10> Not true at all. It could very well be that when you time travel you go to another version or branch of that space-time brane. Or perhaps the past you visit is purely holographic and read-only in the causal sense.

<comment><USER9> Out of all the branches of the space-time continuum, what's the chance that we are on the original one? Either we are improbably exceptional, or time travel is never invented. (This is the same argument as the "we are probably in a simulation", BTW.)

And if the past you visit is read-only, then you've invented history, not time-travel.

<comment><USER11> >Out of all the branches of the space-time continuum, what's the chance that we are on the original one?

None, because there's an infinite number of branches. And every time someone travels back in time, it creates a new branch.

What'd be interesting is to do an experiment to disprove this: invent a time machine that allows traveling both backwards and forwards in time. Use it to send two people back in time. Person A goes first, and the person B warps back to a time an hour later in the same place, and tells person A a secret. Then person B comes back, then person A comes back an hour later. Have person A repeat the secret, and see if they met each other in the past. With a new universe created every time someone goes back in time, will person B go back to the same new universe that was created when person A went back in time, or will they go back to the original universe that person A tried to go back to, and which still exists without person A which would change the course of history there? Does person B create a new universe? Will person A have met person B, and will they have seen person B go back to the future before them?

</comment></comment></comment></comment><comment><USER12> IMHO if reverse time travel were possible, we'd be up to our ears in tourists from the future already, so it's not.

However maybe forward time travel (faster than usual I mean) could be possible. But... how would it make any money? As soon as you've delivered the service, the deadbeat customer may not be back in town to pay his bill for decades or centuries! And 30-day jumps just seems silly.

<comment><USER13> Not necessarily. Consider: [https://www.quora.com/Why-are-people-from-the- future-not-tim...](https://www.quora.com/Why-are-people-from-the-future-not- time-traveling-to-our-period/answer/Yishan-Wong?srid=3dKC)</comment></comment>


Wayback Machine points to pro-Russia rebels in downing of MH17 - <AUTHOR> http://www.csmonitor.com/World/Europe/2014/0717/Web-evidence-points-to-pro-Russia-rebels-in-downing-of-MH17 <comment><USER2> It's interesting how the right to be forgotten seems so desirable, yet when something like this happens it's great that no one can cover up their tracks. Now the pro-Russian separists are trying to delete all sorts of info.

We have this tweet about them getting a bunch of anti-aircraft missiles ([http://webcache.googleusercontent.com/search?q=cache:NF6E5FC...](http://webcache.googleusercontent.com/search?q=cache:NF6E5FCKFNEJ:https://twitter.com/dnrpress/status/483248037629018112)), showing off their new toys ([https://twitter.com/grasswire/status/489823087190224897/phot...](https://twitter.com/grasswire/status/489823087190224897/photo/1)) and the most important one of the day of the rebel leader (or whoever manages his Vkontakte account) bragging about downing planes before he knew that one was civilian ([http://webcache.googleusercontent.com/search?hl=en&q=cache%3...](http://webcache.googleusercontent.com/search?hl=en&q=cache%3Ahttp%3A%2F%2Fvk.com%2Fwall-57424472_7256)).

The [http://grasswire.com](http://grasswire.com) users keep finding more and more of these - It seems desirable that we can delete stuff online and have it go away, but sometimes the Streisand effect ([http://en.wikipedia.org/wiki/Streisand_effect](http://en.wikipedia.org/wiki/Streisand_effect)) is a great thing.

<comment><USER3> > It's interesting how the right to be forgotten seems so desirable, yet when > something like this happens it's great that no one can cover up their > tracks. Now the pro-Russian separists are trying to delete all sorts of > info.

Are war crimes what 'right to be forgotten' is all about?

<comment><USER4> > Are war crimes what 'right to be forgotten' is all about?

Of course not. I think OP is just pointing out that there are pros and cons.

OTOH, if I were leading a technologically sophisticated country to war and had the ability, I might look for ways to make my opponent look bad- say, by posting to internet forums using their hacked accounts- and trust that the internet would not forget.

<comment><USER5> And how exactly would you get the video of the plane being shot down? The stupidity of the rebels is explanation enough.

<comment><USER4> I'm certainly not saying this was a fake post. Though it's possible, I guess. I'm just saying that the internet is a tool of war. And for those purposes, it's helpful that information can become rapidly-propagated Truth.

</comment></comment></comment></comment></comment><comment><USER6> You can donate to the Internet Archive here: [http://archive.org/donate/](http://archive.org/donate/)

<comment><USER7> It's always worth a reminder that the Archive is run on donations, and is a rare, precious resource. Someday I hope it's use as an Internet log file of public record continues to help.

Privacy is a big deal, but we also need to combat the memory hole effect. Hopefully a good balance can be struck!

<comment><USER8> Presumably google and bings records are already being examined by the FBI.

</comment></comment></comment><comment><USER9> Worth noting: Two days ago, an actual AN-26 cargo plane was shot down [1]. At the time, Ukraine assumed it had to be a Russian missile, because they did not think the rebels had the ability to shoot anything above a ceiling of about 2.5 kilometers. This seems to be confirming that the rebels are the ones doing the shooting. The intelligence agencies of the world are having a busy day, I'm sure.

[1] [http://www.nytimes.com/2014/07/15/world/europe/ukrainian- mil...](http://www.nytimes.com/2014/07/15/world/europe/ukrainian-military- plane-is-shot-down-as-russia-adds-to-presence-at-border.html)

<comment><USER10> This is just brilliant.

AN-26 shooting, allegedly by rebels, proofs that malaysian boeing was shot by rebels.

By that logic UA did this because it shot down russian civil plane in 2001, admitting it after months.

<comment><USER9> You have it backwards. All the piles of evidence that they shot down the MA flight indicate they probably also had the capability two days ago to shoot down the AN-26, and therefore probably did.

<comment><USER10> UA has the very same capability since USSR days and therefore probably did.

<comment><USER9> Let me spell it out for you then - Ukraine had no interest in shooting down it's own cargo plane. Russia would not likely risk firing a missile from within it's own territory. Who does that leave us? Maybe the people who claim ownership of the space, have the means, and are tweeting about their supposed AN-26 shootdowns? If this is trolling, it's bad trolling.

<comment><USER10> > Ukraine had no interest in shooting down it's own cargo plane.

Cargo -- no. MA plane -- very much.

Their so-called ATO (in reality, genocide) failed just recently. Some of their troops were surrounded at UA-RU border by rebels, they are desorganised, some are fleeing into Russia even.

At this point Kiev needs something.

<comment><USER11> and shooting down civilian plane helps them how?

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> I was following the news from the conflict in Ukraine and when the plane got downed, pro-Russia rebels were celebrating all over the internet (thinking that they'd downed a Ukrainian supply plane). When it became obvious the plane was civilian, the celebratory posts and videos started to disappear with blazing speeds.

<comment><USER13> "posts from pro-Russian rebels...on the internet..."

You maybe mean posts ostensibly from pro-Russian rebels appearing on the internet?

</comment></comment><comment><USER3> Look at how many versions the WM has for that page - this seems to be a case where the recently unveiled 'on demand' archiving may have _massively_ paid off.

</comment><comment><USER14> Does VK not block spiders like Facebook does? This makes a compelling case against Facebook's policies. If it had been posted only to a Facebook page, WM couldn't have archived it. Somebody else could have, but chances are they would be less impartial about the material they were scraping.

<comment><USER15> It's a public page, not a profile. The posts are visible to everyone including web crawlers. (I'm using VK)

</comment></comment><comment><USER16> There are claims that the BUK was geolocated via video footage before the plane went down:

[https://twitter.com/djp3tros/status/489848712450277376](https://twitter.com/djp3tros/status/489848712450277376)

<comment><USER10> There are also claims that UA was really trying to shoot Russian Plane #1 which was flying close to malaysian boeing both in time and space

There are many claims.

<comment><USER17> Why on Earth would Ukraine try to shoot down Putin? To get absolutely sure they'll be annihilated by Russia??

<comment><USER10> Since the beginning of the conflict UA did everything they can to provoke Russia into crossing border.

Well, almost everything.

<comment><USER18> A curious statement. How were they doing that? By letting the rebels take over their cities and airfields? By letting Russia have Crimea?

<comment><USER10> People burned alive in Odessa.

Many people (noncombatants) killed in Lugansk from BM-21 "Grad" bombings.

Artillery shooting near UA-RU border, killing two soldiers.

Shooting over cross-border stations while refugees were trying to escape into Russia.

Many episodes.

Kiev declared that 'terrorists' (familiar word, isn't it?) are in Lugansk and Donetsk and started shooting over whole population regardless.

<comment><USER19> > People burned alive in Odessa.

That was interesting incident.

There was a peaceful protest, that was attacked by (pro-)Russian militants with guns. Then the crowd started to defend itself, the attackers retreated and barricaded themselves in a wooden building. They were still shooting into the crowd and throwing Molotov's cocktails. The crowd was was mostly unarmed save for it's own Molotov's cocktails.

Barricading inside wooden building and throwing fire around is not especially smart idea. That's how it ended, also.

</comment></comment></comment></comment></comment></comment></comment><comment><USER20> I don't want to get into the politics, but I wonder about the algorithm the Wayback Machine uses to decide what to cache and if intel agencies manipulate it so the WM can be used for PR purposes.

"It is possible that the WM website could have been spoofed somehow to create these records, but it would not be easily done. To do so would either require hacking WM and creating the new records within its system, or spoofing the records by tricking WM into thinking it was accessing Girkin's page when it was actually accessing a third-party site. Both possibilities would be difficult to carry out."

Would it really be that hard?

<comment><USER13> Their explanation seemed a bit too quick. And did I miss something or is there a reason the actual account couldn't possibly have been hacked or spoofed before being stored on wayback?

No, I don't think it would really be that hard for an actor the size of... well, some of the parties involved in this debacle.

The rebels probably accidentally shot the plane down. Most likely explanation. But, if someone tries to make hay with this event however, for example using it in public speeches to justify further military aid, advisers or intervention... I'm going to begin wondering about that.

</comment></comment><comment><USER21> Verifably timestamped information is becoming more and more important.

<comment><USER22> Worth noting that one of TIA's revenue sources is providing notarized sampled for court evidence.

[https://archive.org/legal/](https://archive.org/legal/)

</comment></comment><comment><USER23> There was also this news article from just before reports of the plane crashing arose. I noticed it this morning right away because they were in the same area at the same time on the same day.

[http://en.itar-tass.com/world/741164](http://en.itar-tass.com/world/741164)

</comment><comment><USER24> I wonder if we will witness first information and propaganda conflict between two super powers taking part in internet.

This can be huge - apparently the ones responsible for the shooting will do everything they can to cover it up. Will Putin cut his ties off and leave Ukraine to itself or will he start his propaganda machine?

Its a huge loss - people that have nothing to do with this conflict died just because they were in wrong place in wrong time...

</comment><comment><USER25> Let's not be blinded by bloodlust. Let me walk past all of the flamebait and caution that amateur detectives should heed caution before they start pointing fingers everywhere. This wouldn't be the first time that people were certain of guilt only to be demonstrated otherwise later.

Let's not make people causalities until the dust settles at the very least.

</comment><comment><USER26> As someone who is working for one of the travelling agencies who had people on board (and I'm 99% sure one of my previous employers also had customers on that aircraft), could we please wait with all the speculation? Querying the database to see who might have been on board was no fun. I think that our customer rep's had an even harder time to answer questions. The suffering of relatives and friends must be much worse. I'm pretty sick of all the speculation in Dutch media right now, let's wait for some kind of official investigation and in the mean time light some candles for the deceased.

</comment><comment><USER27> [https://www.youtube.com/watch?v=V5E8kDo2n6g](https://www.youtube.com/watch?v=V5E8kDo2n6g)

</comment><comment><USER28> Why was the previous thread about this killed? I know it's off topic for HN, but it _is_ pretty major fucking news.

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

 _edit_

honestly, if you're flagging this story, you may as well turn in your human card

 _edit2_ so this has stirred up something since I'm watching my karma flutter up and down like a butterfly's wings.

<comment><USER29> Most off-topic major news ends up being flagged. There are two main pieces of world news today: 1) Malaysian airlines plane downed in Ukraine; and 2) Israel launches ground invasion of the Gaza strip. I would guess stories about either one are likely to be flagged here.

<comment><USER28> Yeah, but you've been on here long enough to know that _major_ off-topic news won't get flagged/will be forced up on the front page for a while. HN understands that sometimes our tech news bubble has to be popped with a little dose of the real world every once in a while.

This isn't just a plane crash, this was an aircraft that was _shot down_ while on a perfectly normal commercial flight between two major international hubs. This could have very serious, long-term global ramifications and every person who comes to HN should be aware it happened.

<comment><USER30> From HN guidelines:

"Off-Topic: Most stories about politics, or crime, or sports [...]. If they'd cover it on TV news, it's probably off-topic."

Source: [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER28> [https://news.ycombinator.com/item?id=8050351](https://news.ycombinator.com/item?id=8050351)

<comment><USER30> Fair point. However, for this specific event other news channels are good enough. More importantly posting politically charged stuff on HN may over time increase the incidence of this:

[https://news.ycombinator.com/item?id=8042471](https://news.ycombinator.com/item?id=8042471) ;-)

</comment></comment></comment></comment></comment></comment><comment><USER31> The also invented time machine:

[https://twitter.com/vesti_kpss/statuses/478926313831792640](https://twitter.com/vesti_kpss/statuses/478926313831792640)</comment>


Microsoft is forcing Edge and Bing on Windows 10 S users - <AUTHOR> https://betanews.com/2017/05/02/microsoft-edge-bing-windows-10-s/ <comment><USER2> The Windows 10 seems to be flipping the emailer away from Thunderbird over and over, since each time I open Thunderbird it asks me if I want to set it as default, again.

<comment><AUTHOR> Old habits die hard

</comment></comment><comment><USER3> With this kind of PR coming from MS it really tells volumes about it's mindset, it's futures, and it's morals</comment>


Travis Kalanick reportedly plans to sell about 29% of his Uber shares - <AUTHOR> https://techcrunch.com/2018/01/04/travis-kalanick-reportedly-plans-to-sell-about-29-of-his-uber-shares/?ncid=rss&utm_source=tcfbpage&utm_medium=feed&utm_campaign=Feed%3A+Techcrunch+%28TechCrunch%29&utm_content=FaceBook&sr_share=facebook <comment><AUTHOR> Does this mean Kalanick is giving up on Uber or not planning to come back?</comment>


Show HN: A Reddit reader that looks like the frontpage of a print newspaper - <AUTHOR> https://unim.press/#dataisbeautiful <comment><USER2> It's very interesting from a psychological standpoint: the current front page headline (for me?) is "Planets and dwarf planets to scale in size, rotation speed, axial tilt and oblateness (numbered in distance order from Sun)"

If I were reading this on /r/dataisbeautiful, I'd immediately parse and grok the headline just fine. But with this, my mindset was on the reporting of actions or events and I read "to scale" as an infinitive (verb/action), almost like the intro to a sci-fi novel that starts with a stunning declaration that in x days, all planets will actively shrink by y% in some never before seen cosmic event.

If you'll allow me to use a programming analog, it wasn't until my tokenizer hit the first parenthesis that my lexer switched to the correct track.

<comment><USER3> You're right. It works great with NotTheOnion for example: [https://unim.press/#nottheonion](https://unim.press/#nottheonion)

<comment><USER4> Good choice. The headlines look great, the pictures look great, but unfortunately the text for every article is just "lorem ipsum...". If there has to be text there for the layout to work, in cases where the post is only a headline and image then blurred unreadable text would look better there.

<comment><USER5> Actually the headlines are painful to look at - they should not be adjusted to the column's width like they are.

</comment></comment></comment></comment><comment><USER6> It hangs on "reading stories".

Web app authors can be very creative, but one thing I don't like about web apps is that often their error handling is nonexistent. It's not about individual authors; behemots like Microsoft also do this in an irritating way: "Something did not work. Reload the page please" \-- Is this really the best a billion dollar company can do? Well, I suppose this is still better than no error at all, which is a default error handling method for big chunk of web apps.

I think (but can be wrong) that by using such a dynamic environment like JS is the culprit for lack of good error checking mechanism.

Also one thought of mine for the reason why even big companies are unwilling to provide good error messages is that it's impossible to get the real reason. There may be so many moving parts that even the developer isn't able to handle it all. Which sparks a doubt in my mind if this environment is really fit enough to provide high quality software. Since it's so popular it's obvious that it has some aspects that it does right, but it seems that the web app environment could benefit from some fundamental changes.

<comment><AUTHOR> It actually does handle errors properly -- the reddit api is probably blocked for you, which is why it hangs and can't do anything. I suppose I could have added a "it seems we can't reach Reddit" kind of message, but that would still have been an error state, and in rushing this out in an afternoon it wasn't much of a priority.

Didn't realize until posting here that apparently Firefox blocks the reddit api from the browser in certain common configurations. So maybe that would have been useful.

<comment><USER7> It doesn't load for me in Chrome either.

In the function _fetchRedditStories_ , it looks like that the callback param in the catch is named `e`, but it tries to log `error`.

Checking the network panel I'm getting a 200, but I'm pretty sure it's failing anyway because of the ReferenceError

<comment><AUTHOR> Darn, can't believe I didn't catch that typo until now. I don't think that was the issue -- unbound variables don't cause exceptions in JS until that variable is dereferenced -- but not sure what else it could be if the reddit api hit is succeeding with a 200. Maybe a wonky JSON Decode?

<comment><USER8> > Darn, can't believe I didn't catch that typo until now. I don't think that > was the issue -- unbound variables don't cause exceptions in JS until that > variable is dereferenced

The underlying problem here is using Javascript instead of TypeScript.

And of course under that problem there's the problem of Javascript bit being TypeScript in the first place.

(Not a bad word about Brendan Eich though, considering that the language was created by one man in three weeks it is amazing, but it is still sad that we ended up with an untyped language in such a critical place.)

</comment></comment></comment></comment></comment><comment><USER9> I went back reading a printed newspaper a few months back and the speed in which I get my news now is astonishing. It feels like the web is not made to update oneself on news efficiently. To skim and zoom in and out of articles. I think part is the display format, part is the organization. A physical newspaper has a very predictable structure and does not change while you are reading it. (I.e. no need to come back to the same section once you read it).

Typography and layouting of a newspaper is quite complex. If you look at a printed newspaper, the stories are arranged and cut to size with images, captions and inserts to fit neatly into the grid.

Depending on the newspaper the information flow from headline, subheadings, article is strict, optimizing for allowing for fast skimreading or to grab your attention.

To do this "right" on challenging unedited reddit posts will be a lot of work, but an interesting challenge.

<comment><USER10> It's so much slower then using a rss reader and swiping through thought.

I have seen plenty of people struggling when reading relatively large newspaper. Most of them are.

And then I also need to wash my hands afterwords

<comment><USER11> The ink on one's hands after reading the newspaper is the best part! Obviously an inconvenience, but it does bring a bit of nostalgia for me.

</comment></comment></comment><comment><USER12> The Same Origin Policy disallows reading the remote resource at [https://api.reddit.com/r/dataisbeautiful/hot?limit=25](https://api.reddit.com/r/dataisbeautiful/hot?limit=25). (Reason: CORS request did not succeed).

The resource at "[https://api.reddit.com/r/dataisbeautiful/hot?limit=25"](https://api.reddit.com/r/dataisbeautiful/hot?limit=25") was blocked because content blocking is enabled.

ReferenceError: error is not defined

MacOS, Firefox 77.0.1

<comment><USER13> I had to disable Firefox's Enhanced Tracking Protection for the site in order for it to work. (GNU/Linux, Firefox 77.0.1)

<comment> mike-cardwell Same here. Probably would be a good idea to proxy the api.reddit.com requests through the same origin. Maybe even just as a fallback if the direct request didn't work.

</comment></comment></comment><comment><USER14> Cool! Another suggestion: why not extract and show the text of the leading comment (or maybe some other metric) of the articles in question rather than lorem ipsum filler?

And an option to "turn the page" for more content from the select subreddit would be even cooler!

</comment><comment><USER15> A note to those using Firefox who get stuck at "Loading stories...": Enhanced Tracking Protection (on by default?) blocks the request. To disable it for this page, click the little purple shield next to the URL.

<comment><USER16> The Firefox tracking protection is blocking [https://api.reddit.com](https://api.reddit.com) classified as "may external ads, videos and other content with tracking code". Odd.

</comment></comment><comment><USER17> The hyphenation on the center-spread column doesn't look great, leaving big whitespace gaps in justified text.

In my experience, "hyphens: auto" in browsers doesn't work well at widths smaller than 80ch. The "center-spread" column is currently set to width: 600px, approximately 67ch. Changing it to width: 80ch looks much, much better, in my opinion.

I also suggest adding the Safari variant, "-webkit-hyphens: auto", and add the lang="en" attribute to your <html> tag, to enable hyphenation in Firefox.

<comment><USER2> It's really sad how much typesetting and font rendering has taken a backseat since the 80s and 90s. It seems like just yesterday the race was about finding the optimal algorithms for typesetting text to avoid rivers, have aesthetically pleasing ragged or justified text, tweak word breaking heuristics to avoid local optima that give poor overall results, etc and coming up with fonts that were hand-hinted and carefully designed to display as correctly as possible on the output devices of the time.

Now, we're lucky if we get an option to manually specify hyphenation points for line wrapping, we have horribly thin and broken "web fonts" that supersede even locally installed versions with correct hinting of the same typeface, have disabled subpixel rendering so we can play nicer with animations, transitions, and useless effects, and consider ourselves incredibly lucky if we get real italics rather than oblique versions of the Roman typeface *for fonts with italic versions around since the early '90s.

<comment><USER18> That is _only_ an issue on the web. Any half decent typesetting program should have no issues at all doing it right.

And even then it is getting better, the modern CSS can do things Word can't (notably all small caps and old style figures).

<comment><USER2> > That is only an issue on the web

After championing it and spending 13 years adding it to the OS and getting it supported everywhere, Microsoft removed ClearType subpixel rendering from Windows 8's UI framework for those same reasons, went on to ship Windows 10 without it, and only went back on that decision with the Creator's Update and are still working to correct that mistake and its fallout.

</comment></comment></comment></comment><comment><USER19> My first reaction to this was, "why?" The skeuomorphism of the low-res paper background and ugly type is horrible. But, reading the comments here, apparently some people like it, so ok.

But you can see all the CORS issues this is throwing up. Rather than a 100% js app, why not call a function which fetches the content and caches it too? CORS issues begone, and caches too! You don't need an expensive server setup, have a look at AWS Lambda or Azure Functions.

</comment><comment><USER20> Would be cool if there was one of these for the front page of HN. Pretty challenging to parse though. Headlines and comments should be simple enough, articles and images not so much.

<comment><AUTHOR> My thoughts too! Hacker News was actually in a prototype of this and you can try it by going to [https://unim.press/#hn](https://unim.press/#hn) \-- but indeed, it didn't look great without pictures. Might be able to scrape linked articles and such, but I didn't get that far in an afternoon hack.

<comment><USER21> Text alone can be beautiful.

As one example, the front page of the _Wall Street Journal_ in 1987 was predominantly text. [1]

[1]: [https://wsjshop.com/products/framed-reprint-crash- of-1987-st...](https://wsjshop.com/products/framed-reprint-crash- of-1987-stocks-plunge-508-amid-panicky-selling) "Black Monday Crash of 1987"

</comment></comment></comment><comment><USER22> Please do not use justified formatting for text unless you can hyphenate it. Otherwise you end up with large chunks of white space between the words, especially in narrower (then 6070 characters) columns.

Browsers don't hyphenate, so avoid justified text on the web.

<comment><USER17> Browsers do hyphenate, and this page enables it, with the "hyphens: auto" CSS rule. [https://developer.mozilla.org/en- US/docs/Web/CSS/hyphens](https://developer.mozilla.org/en- US/docs/Web/CSS/hyphens)

In Google Chrome, you'll see that it hyphenates "profes-sional" in the second story of the center column. It's still not enough, though, because it still leaves huge gaps in the justified text; it works best when you use width: 80ch. The page is currently using width: 600px, which is approximately 67ch.

(If you don't see hyphenation in Safari, that's because the developer didn't enable -webkit-hyphens. If you don't see hyphenation in Firefox, that's because the page's <html> tag doesn't have a lang="en" attribute.)

<comment><USER23> And if you _do_ see hyphenation in Chrome, that's a Chrome bug ([https://bugs.chromium.org/p/chromium/issues/detail?id=676270](https://bugs.chromium.org/p/chromium/issues/detail?id=676270)), because the spec says the browser must only do this if the content language is known.

</comment></comment></comment><comment><USER24> This is amazing! Like the newspapers in harry potter. You've closed the loop on automating a dynamic, crowdsourced, curated front page. The meta paper.

Now do hackers news. It'll be like the WSJ, a nice counterpart to this, which is a little more like US Weekly.

<comment><USER25> From the OP in another comment, it was used as a prototype:

[https://unim.press/#hn](https://unim.press/#hn)

</comment></comment><comment><USER26> Very cool idea, since this is a niche product why not adding a small qr code for the articles? By this way this could totally be printable. You read articles from paper while commuting etc. Mark the ones you find interesting. At the end of the day you could visit them via you phone if you really want to see them live.

</comment><comment><USER27> Very cool -- looks like the dev (@thesephist) is using Torus, a minimalist front-end framework they themselves are also developing:

[https://github.com/thesephist/torus](https://github.com/thesephist/torus)

Nice showcase of the tech! Now I want to tinker with the Torus framework as well.

<comment><AUTHOR> Yep! It was one of my main side projects earlier last year and these days I consider the library itself "done", using it for most of my side projects if I need something more robust than vanilla JS. Just drop in a <script> tag and go for modern browsers -- makes it easy to prototype really quickly. It's not superlative at anything (except maybe prototyping speed) but I know it inside and out, and its no-build/no-config nature makes it well suited for weekend hacks like this.

</comment></comment><comment><USER28> A long time ago, when I was more of a news junky, I wrote some scripts to pull from various RSS feeds (BBC, Financial Times, Jane's, and one or two others), crack out the text of recent items, and format into a five-column, landscape- oriented PDF, with nice headlines, table of contents, etc. A cron job would see to running the pipeline every morning and emailing the result to me. When I got to work, I would print it out and read it on breaks throughout the day, crossing off items once I read them or decided they weren't relevant. With a red pen, I could also mark it up and make small notes on interesting items.

Curl, BeautifulSoup, and Latex. Great fun.

</comment><comment><USER29> The best thing about old fashioned newspapers is how much information you can fit on the page. I would consider smaller fonts. [https://imgur.com/a/Ys1EyAf](https://imgur.com/a/Ys1EyAf)

</comment><comment><USER30> My print newspaper doesn't say "Loading stories"...

How about doing the page generation on the server-side? That way a static page could be served.

... actually, in that case, maybe a _PDF_ could be served, and that's really more like print :-)

</comment><comment><USER31> I didn't know I wanted this

</comment><comment><USER32> Imagine that combined with this: [https://onezero.medium.com/the-morning- paper-revisited-35b40...](https://onezero.medium.com/the-morning-paper- revisited-35b407822494)

<comment><USER33> Yes, and a more natural subreddit to do it with:

[https://unim.press/#worldnews](https://unim.press/#worldnews)

</comment></comment><comment><USER34> I love this. There's a weird bug though when you try to zoom in on mobile safari. It jumps back out again and makes it hard to read the smaller articles. Fantastic idea and execution though. Nice.

</comment><comment><USER35> Yep, fully justified text in a browser still looks like dog shit.

edit: clarity

</comment><comment><USER36> It's just awesome! I'm so tired of feed-like layouts, they are not for humans.

<comment><USER37> I'm beginning to feel this fatigue also, is there anything you've discovered as an alternative? Am tempted to start just picking up a newspaper.

</comment></comment><comment><USER38> This doesn't work with Enhanced Tracking Protection and/or uBlock Origin enabled in Firefox. I wonder if there's a way around that server-side.

<comment><USER39> Nor does it work with Brave's built-in ad/tracker blocker.

</comment></comment><comment><USER25> This is superb, a very cool idea! Congrats.

<comment><AUTHOR> Thanks! Always fun when a showerthought turns out to be something interesting for more than just me.

<comment><USER40> Yeah very cool. I'd say it qualifies as even artistic in aesthetics and meaning. Bravo.

</comment></comment></comment><comment><USER41> turn off enhanced tracking protection in Firefox if the content doesn't load

<comment><USER42> And here I thought it was just the app doing a faithful reconstruction of the reddit experience.

</comment></comment><comment><USER43> Bug: manually change the URL with a different sub and then press enter doesn't work (it does nothing). You have to refresh afterwards.

</comment><comment><USER44> Several years ago there was an extremely popular app that was an RSS newsfeed aggregator for iPads with an unfortunately very generic name called "the magazine" that did this exact same thing, it embedded the articles in a newspaper aesthetic. Great stuff.

I used it extensively on an iPad first generation but unfortunately it's no longer available on the App Store.

</comment><comment><USER45> How long did it take for you to build it?

And did you already know the backend tech in order to speed up development?

<comment><AUTHOR> 6 hours -- I had the idea this morning and started at around 2PM (first commit on GitHub). Finished at around 8PM. The app is all client-side, so I didn't have any backend need.

The app renders using a UI rendering library I wrote ([https://github.com/thesephist/torus](https://github.com/thesephist/torus)), so I knew the tools I was using inside out, which helped with speed.

<comment><USER46> same day ships... kinda super impressive

</comment></comment></comment><comment><USER47> Looks great. You could add /r/popular (the default front page) to the dropdown, though it seems to work if I edit it into the URL.

<comment><AUTHOR> Good idea -- just added it, update rolling out now! Thanks.

<comment><USER47> Thanks! Here's another fun idea (sorry I'm not implementing this myself and submitting as a pull request; do feel free to ignore me): For the ones that have lipsum because they don't have text, you could use the top comment. Something like:

"COMMENT CONTENT," USERNAME said when prompted

USERNAME had this to comment: "COMMENT CONTENT"

We interviewed USERNAME, who said: "COMMENT CONTENT"

etc.

</comment></comment></comment><comment><USER48> If you want to check out another Sub-Reddit, open the console and type:

app.subreddit = "nameofsubreddit"; app.fetch();

</comment><comment><USER49> Wow. This is great.

Only one thing, an old news paper format won't have images on all stories which is bit awkward to look at.

</comment><comment><USER50> Also would be cool to have some sort of ML NLP that makes the headlines 'read' more like a newspaper.

</comment><comment><USER51> Looks good. But I find it hard to read in that form. Cool project. It works on nsfw subreddits too.

</comment><comment><USER52> That's cool. Although there are some kerning issues... And the lipsum might be a bit much :D

<comment><USER53> You could replace the lipsum with the top comment (or few) from the post!

</comment></comment><comment><USER54> Very cool. I think filtering tags like "[OC]" could make it look even better.

</comment><comment><USER55> How is this related to [https://news.ycombinator.com/item?id=23669650](https://news.ycombinator.com/item?id=23669650) ?

</comment><comment><USER56> Text always says lorem ipsum. It could be composed of comments in the thread.

<comment><AUTHOR> Depends on the type of the post. I suppose I could have fetched comments, but for now, it uses lorem ipsum if the post isn't a text post. If it's a self/text post, it uses that text as the article body.

<comment><USER57> I think using top comments to fill this up instead of using Loren ipsum would greatly improve it.

</comment></comment></comment><comment><USER58> This would be cooler if there were an option to export to pdf and epub

<comment><AUTHOR> A close alternative right now is to print the page with the right amount of zoom, but yeah that's not a bad idea actually. Print it out on newsprint paper.

</comment></comment><comment><USER59> This does some fascinating things to my brain and I think I want a Reddit front end that lets me put in my username to see my own front page as an auto- generated Newspaper.

</comment><comment><USER60> This is really cool! As a suggestion, you may want to add in a toggle for zoom. On my computer the site looks perfect at 67%.

But this is really great work! Great idea and really cool! Good work!

Regards, Peter @ Oeck.

<comment><AUTHOR> Yeah, the zoom definitely changes the experience. I tried to strike a good balance between the layout being big enough to read somewhat comfortably, while small enough to see the overall "newspapery" layout, and 1200px wide by default is what I ended up settling on. Of course users I think can zoom in and out on their own if they prefer another size, like you did.

<comment><USER61> The implementation is buggy though. Trying to zoom in on iOS Safari reshuffles the content around and keeps it at its original size. It might be fine on desktop

</comment></comment></comment><comment><USER62> I really like the feel of reading textual posts here, if there was an option to actually read whole posts I'd be sold.

P.S. I think special characters need to be unescaped (> → &)

<comment><AUTHOR> Yep, you're right -- I didn't realize Reddit encoded their string values as HTML in their JSON API. Fix rolling out! :) Thanks.

</comment></comment><comment><USER63> I can't explain why I love this so much. And I never read traditional newspapers, so I'm not nostalgic.

</comment><comment><USER64> Wouldn't it be cool if you could replace the "Lorem ipsum..." with first lines of the link?

</comment><comment><USER65> I like it. Although I wouldn't use justified text for headlines. Makes it really difficult to read, at least for me.

</comment><comment><USER66> Just throws a CORS error in FF for me.

</comment><comment><USER67> Woah. This is actually so good. Kinda give me a "digest" vibe of a subreddit.

</comment><comment><USER68> I think you could find lots of stuff on Reddit that could go on page 3

</comment><comment><USER69> Amazing! Any plans of adding reddit login / user home feed ?

</comment><comment> Matt-Gleich Awesome job! Super cool.

</comment><comment><USER70> It says Sunday June 2020. It's Saturday isn't it?

<comment><USER71> Depends where are you in the world. In NZ it's already Sunday.

EDIT: just checked the date is wrong.

<comment><AUTHOR> I somehow missed in rolling this out that JS's `new Date().getDay()` returns a Sunday-based week, not a Monday-based one. Thanks for pointing it out! Fix rolling out now :)

<comment><USER70> No problem. I had just woken up and looked at this so I was confused thinking did I sleep through Saturday?!?!?

</comment></comment></comment></comment><comment><USER72> People built things like this 10+ years ago and they were awful, and ridiculed by people in places like HN etc.

This format looks good on paper, but on screens its a mess and poorly formatted one at that.

Can we stop re-inventing bad UX all over again?

<comment><USER73> I would much rather see someone experimenting than see the same Bootstrap-like landing page over and over again.

</comment></comment><comment><USER74> Looks cool. Superb!

</comment><comment><USER75> It's still got lorem ipsum in its teeth.

</comment><comment><USER76> Great work!

</comment><comment><USER77> Not loading on FF mobile</comment>


Larry Page and Sergey Brin are actually pretty lousy coders - <AUTHOR> http://www.businessinsider.com/larry-page-sergy-brin-are-lousy-coders-2013-10

<comment><USER2> I always assumed because they were so smart, they were excellent coders.

They don't have to be excellent coders. They need to be excellent thinkers. They've found two very innovative solutions to problems which ended up being very successful (PageRank and AdWords).

However, would they have been successful at all if they weren't able to create the initial prototypes and get Google to the stage where they were able to get excellent coders involved?

I don't consider myself an amazing coder either, even though I want to be, but I'm often finding simpler solutions to problems people are struggling with, or recognize struggles before people realize their could be a simple solution.

</comment><comment><USER3> The video of Virgin's founder Richard Branson is never the less interesting.</comment>