Crank.js – Write JSX-driven components with functions, promises and generators - <AUTHOR> https://crank.js.org/ <comment><AUTHOR> Here's [1] a blog post introducing Crank.js. It goes into detail as to why the library exists. The main motivator for the creator seems to be that they really disliked the suspense API and wanted to offer a better way using JS generators and async/await.

[1] [https://crank.js.org/blog/introducing- crank](https://crank.js.org/blog/introducing-crank)

<comment><USER3> I enjoyed reading this blog post, and the perspective that the author brings. The notion that a cache is a big ask is novel to me, but I think it is a good point that it does complicate things more for simpler cases.

However, I would like to hear the author's thoughts on Concurrent Mode in general, and how Crank.js addresses the same issues. There's no mention here of time slicing, which is what Concurrent Mode really unlocks. IIUC Suspense was discovered, not invented, after implementing React Fiber and exploring the knock-on effects of being able to restart rendering from a place in the component tree.

React's insistence on rendering being "pure" is not dogma; it is an attribute that unlocks the ability to pause and resume rendering at any node in the component tree... like if an important update from a keyboard press comes in that you need to handle right now. This means that when CPU is scarce, jank can be alleviated by prioritizing user input and other high priority updates.

There's a tweet out there by sebmarkbage that gives a slightly cryptic response to using generators, but the gist that I remember is that because generators are mutable, you don't get the properties you need to arbitrarily pause and resume a component just like it was when you paused rendering it.

The author claims that this is just dogma, but I believe (and the React team believes too) that time slicing provides a measurable benefit to the user experience. This point is contentious still; Rich Harris of Svelte fame claims that _doing less work_ is more important than prioritizing it. But the author here doesn't address this at all, instead claiming architectural simplicity is its own goal.

I'm excited to see alternatives to React come out and generate excitement, and I'm very interested to see where Crank.js continues to evolve. My hope is that in 5 years we'll know way more about all of these questions than we do now, and we'll be able to put those into practice in better frameworks, delivering better applications.

<comment><USER4> As an outsider, I honestly feel that there's a strong difference in opinions between Dan and Sebastian. One doesn't need to reason too hard about the purity thing: Dan himself admits hooks were criticized (accurately) for being impure.

On the other end of the discussion, the claim about impurity preventing prioritization is very weird, because simply going async will shuffle the rest of your rendering further out in the microtask queue, giving the opportunity for event handlers to fire half way through a vdom render pass, effectively prioritizing user input.

<comment><USER5> The React team has been pretty clear that Concurrent Mode needs rendering to be pure, as render methods may get called multiple times but have the results thrown away if the render pass isn't completed and committed to the DOM.

The case of user input is particularly relevant here.

Say React starts a render pass for a relatively low-priority update. It walks through the component tree asking components to render themselves, runs out of time on this tick, and pauses the half-calculated render pass. While paused, the user types a key in a text input or clicks a button. That will be treated as a much higher priority update, so React sets aside the half-calculated render tree, does the complete render pass based on the input event, and commits it to the DOM. It can then "rebase" the half-completed low-pri render pass on top of the new tree that resulted from the input update.

If components go kicking off side effects while rendering, whether it be as simple as mutating a React ref object or more complex like an async request, those side effects will likely result in unwanted behavior because they might happen multiple times or happen at the wrong time.

<comment><USER4> Yes, I'm aware of the concurrent mode contract. But do you see the Stockholm syndrome here?

If I were to tell you that in order to use a hypothetical Floober framework, your code must be tail call optimizable or else the framework has undefined behavior, surely you would think the author of Floober framework was insane.

It seems strange, for example, to dismiss async functions on grounds of function coloring when the alternative is coloring functions with a conceptual requirement of "purity". Or to ignore the opportunity for a paradigm shift to something more naturally reactive (e.g. a la s.js) considering how there was already an API shift when going from OOP components to functional + hooks.

</comment></comment></comment></comment></comment><comment><USER6> I don't get the whole trend of jamming state in functions. hooks use closures for state and if you call hooks in wrong order you get the wrong values back. In this instance, this.refresh is magical.

One hard lesson I've learnt after doing 15 years of frontend is to avoid too much magic. As you build more complex things, it should be easy to bring in new devs and they should be able to simulate the system in their heads without expecting too many surprises. Or being laser diligent that a silly mistake could blow things up.

That's what I like about original react. It was super duper simple idea. Classes are meant to have state. The state object is called state. Render function returns a view of state.

While generators are cool, all of this could be simply achieved with existing paradigms. That's why I prefer preact over react. It's way smaller than react, less bloated and equally fast.

<comment><USER7> Generators will likely be a new paradigm. They are too powerful for senior devs to ignore. And so the junior devs will be taught. Like promises were taught.

<comment><USER8> Wait that doesn't make sense, was generators in the language before Promises, actually isn't await based on generators? How is that a new paradigm?

<comment><USER7> Promises and generators were ES6, so around the same time. Although people were using promises long before it became an official feature in ES6. I remember using promises as far back as 2012 or earlier - jquery had them. ES6 was 2015.

Await and async came after in ES7 and can be considered to use yield[1]. So there you go - that's a perfect example of the power of generators. Promises used to be more difficult until they were simplified using generators.

[1] [https://stackoverflow.com/questions/36196608/difference- betw...](https://stackoverflow.com/questions/36196608/difference-between- async-await-and-es6-yield-with-generators)

</comment></comment></comment></comment><comment><USER9> Fully on board with this newer trend (Svelte also comes to mind) of using only native JavaScript language features to accomplish what other frameworks do using abstractions. It seems like the natural next step as JS matures, as it's my opinion that old frameworks that made up for JS's shortcomings by abstracting them away and designing around the language's limitations are intrinsically unable to natively and sensibly integrate new native language constructs after the fact without somehow changing the core framework itself (e.g. Suspense to integrate async/await in React).

Angular and Ember eventually gave way to Vue and React once dealing with the framework over the language became too cumbersome, and I would imagine Vue and React will eventually give way to "lighter" frameworks once they too become too bloated.

<comment><USER10> How are React and Vue grouped together in that regard? More specifically, how is Vue less of a framework abstraction than Ember or Angular?

<comment><USER9> If I remember correctly, React and Vue started off as more view-layers than anything else, and popularized the idea of 1-way, isolated components. Angular and Ember had always been all-in-one-heavy frameworks with 2-way bindings by default, and "partials" similar to components but state was intrinsically shared in a MVC paradigm.

</comment></comment></comment><comment><USER11> This is spot on. I've been slowly switching from class based React to hooks based with Suspense, and a couple of things have become super clear.

1) hooks are magical, finicky, abstraction that don't play well with promises. They save code at a cost of understandability, subtlety, and new rules. I wrote a ton of Perl, and fundamentally believe that 1 line is better than 2 lines, weirdly hooks are making me rethink that belief.

2) Throwing promises is super tricky... I just wrote a class based component to cache the results of a hook, so I could wrap it into a function that would throw. I am not proud. 5 layers of abstraction needed where the same thing in a class based structure would be 2.

3) The hard part of UI is and always will be state. React (initially) got it mostly right. Redux was a detour, and this seems a much better way forward.

Best of luck with this, I'll be rooting for you.

</comment><comment><USER12> I love this. Vjeux, seemed excited about it, which gives the project some immediate credibility IMO.

[https://twitter.com/Vjeux/status/1250687160237211649](https://twitter.com/Vjeux/status/1250687160237211649)

I've been using hooks since they came out and doing things with generators and async looks to be more intuitive to me. Instead of a language on top of a language, you just use JS, which has always been what made React great.

I also now have a reason to look for more places to use generators :) I didn't realize they could be so helpful

<comment><USER13> I really like the way redux-sagas uses generators to represent side effects a values that get interpreted by the redux middleware they provide.

<comment><USER14> This is the comment I've been looking for.

I've been writing exclusively React for 3 years and the majority of react community are ill informed as to the origins of React.

Originally an OCAML implementation, there are clear benefits from pure functions, immutable data structures, and representing views declaratively in a DAG. I am simply restating the motivations and characteristics of React.

Then Redux comes long, inspired by Elm and it's immutable update cycle, and the React community proceeds to spend the next two years utterly confused as to why anyone would want to use Redux. Followed by an onslaught of "You might not need redux" and "How I built my react app without redux" articles by shortsighted developers who merely reimplement Redux. :facepalm:

Redux-saga is the desired solution to handling async rendering while also staying true to the core properties of React. I'm glad you mentioned it in your comment.

I find the React community to be largely defined by its misunderstanding the core design and goals of React.

I find Crank an interesting and clever application of async generators.

However claiming that the core properties principles of React - <USER2> properties, DAGs, and priority scheduling - are "dogma" is a shameful misunderstanding.

The correct criticism is of the behavior of the React team in their community response and the Suspense API alone - rather than the intrinsic properties of functional user interfaces.

Nonetheless, I am impressed by the technical effort in creating a new async generator API for rendering JSX. This project is no easy undertaking. Sincerely hoping for its future success (and self reflection).

</comment></comment></comment><comment><USER15> I'm thrilled to see this, because I have been experimenting with using async functions that directly render their own DOM trees in between awaits, and I recognize a lot of the sentiment in the "Introducing" blog post, but I didn't have the insight of using generator yields with DOM trees, instead I had async functions that did this.draw(tree).

I had a different way of dealing with events. Basically I was seeing an app as a process hierarchy of self-drawing widgets that communicated via channels. I ended up wanting to make my own language to get decent pattern matching and the possibility of preemptible processes...

And for example instead of the Timer example which uses this.refresh in Crank, my version would have something like:

        let s = 0
        while (true) {
          this.draw(
{s}
)
          await sleep(1)
          ++s
        }

Then to deal with buttons, something kind of like:

        let i = 0
        let increase = channel("+")
        let decrease = channel("-")
        while (true) {
          this.draw(

              {i}
              <button onclick={increase}>
                Increase
              </button>
              <button onclick={decrease}>
                Decrease
              </button>

          )
          switch (await pick([increase, decrease])) {
            case "+": ++i; break
            case "-": --i; break
          }
        }

</comment><comment><USER16> I'm learning Ember at work and there's a lot of "plain" JS floating around (async / await, generators).

One thing I've really missed is JSX. I wasn't a fan when I first heard of it in... 2014?... but I went in on it and it really does make sense and save time IMO. I've been playing with Mithril after a post here the other day and now I'm going to add this to my list to toy around with!

</comment><comment><USER17> Okay this is very interesting, I love React but I'm also worried about the "complexity explosion" that is going on. As an example look at this "zombie children" article that has bitten me when trying to build a library:

[https://kaihao.dev/posts/Stale-props-and-zombie-children- in-...](https://kaihao.dev/posts/Stale-props-and-zombie-children-in-Redux)

Curious about Crank.js, would this timer be valid as well (it works on codesandbox)? How does it stop/unmount?

        const delay = t => new Promise(ok => setTimeout(ok, t));

        async function* Timer() {
          let seconds = 0;
          while (true) {
            await delay(1000);
            seconds++;
            yield
Seconds: {seconds}
;
          }
        }

<comment><USER18> Hi! Author here, thanks for the interest.

Your example will just work! The only thing to worry about when using `while (true)` with async generator components, is that Crank will continuously pull values from the generator even if the renderer or a parent isn't updating it, so if you forget to await something you'll end up entering an infinite loop (which starves the microtask queue so it's even worse than regular infinite loops).

> How does it stop/unmount? Generators have this nifty feature where you can > stop or `return` it from the outside. What this does is it resumes your > generator at the most recent yield, but rather than continuing execution, it > "returns" the generator at the point of execution. In other words, it's > almost like it turns your yield into a return statement. This is what breaks > out of the `while (true)` and prevents your code from continuing to run when > unmounted. The cool thing is that you can also then wrap the loop in a > try/finally block, and execute some extra code when the generator is > unmounted.

If you have further questions let me know!

<comment><USER17> I didn't know you could forcefully end a generator from outside. IMHO generators are overkill 99% of the times. This is one of the biggest issues I had with the PREVIOUS Koa.js' documentation[1] and why I decided to launch Server.js with plain async instead of trying Koa. I had been doing JS for ~6 years by then and I could not tell how the simple "hello world" worked.

[1] [https://koajs.com/](https://koajs.com/)

[2] [https://serverjs.io/](https://serverjs.io/)

</comment></comment></comment><comment><USER19> I prefer LitElement; no reinventing of the wheel like JSX etc. do and no build required. Plus you get browser supported CSS scoping and life cycle support.

<comment><USER20> I didn't go full LitElement because I didn't want to add build steps (I'm waiting till they figure out ES6 module path resolution) but I found that the templating/rendering library LitHTML is great and easy to seamlessly and incrementally integrate in any webapp. It's just plain html, it's very fast and it just works. Javascript literal templates are a very elegant solution, turning strings and statements into lists of objects which can be efficiently cached, diffed and recursively traversed a la Lisp. To me JSX felt like a crutch to compensate for browsers being behind the curve. We no longer need a second html.

</comment></comment><comment><USER21> This is what I wanted React hooks to be like. They are a huge hack and it shows every time you need to call on conditionally. But I guess if React never comes around to this generator idea I'll never get to use this, because we rely on many React libraries... Maybe crank could support compatibility with React components somehow?

<comment><USER22> What would be more likely is to use a codemod[0] to convert react libraries into crank, or close enough that only a few further manual changes are needed.

[0] [https://github.com/facebook/codemod/blob/master/README.md](https://github.com/facebook/codemod/blob/master/README.md)

</comment></comment><comment><USER23> It's great to see people experimenting with different tradeoffs. One thing I wanted to mention is that I don't believe the author's claim that React sees purity as an end goal is accurate. I wrote my thoughts here, hope they're of some use: [https://www.reddit.com/r/javascript/comments/g1zj87/crankjs_...](https://www.reddit.com/r/javascript/comments/g1zj87/crankjs_an_alternative_to_reactjs_with_built_in/fnkkgg3/)

</comment><comment><USER24> This looks great. I really like the idea of component changes just being a series of yielded updates. Really tidy API too.

</comment><comment><USER25> The way the generators appear to work reminds me a lot of Concur: [https://github.com/ajnsit/concur- documentation](https://github.com/ajnsit/concur-documentation)

But controlling or understanding the control flow in Crank generator components, ie. when does 'yield' return, looks like a bit of a nightmare!

<comment><USER16> Which part looks like a nightmare to you?

I wasn't quiet sure what you mean by "when does yield return"?

<comment><USER25> "Nightmare" is too strong, but it looks from the simple example that generators are managed by jumping between coroutines, and one of the coroutines is the renderer? (Sorry, I'm on my phone and probably not conveying my point very well)

I'd be interested in seeing this hooked up to Xstate.

</comment></comment></comment><comment><USER17> I tried to make a library as a workaround with async treatment in React which I also don't like, but besides it being a library (already a -1) it also didn't allow you to have Hooks inside these async components, which was a showstopper for me. But still a fun experiment! This is how it worked:

        // Books.js
        import React from 'react';
        import pray from 'pray';

        // Wrap the async component in pray:
        export default pray(async () => {
          const books = await fetch('/books').then(res => res.json());

          return (

              {books.map(book =>
{book.title}
)}

          )
        });

Would love to see good support for Async in React without the complexity that Suspense seems like it's going to bring.

</comment><comment><USER26> This is terrific! I have always wondered why people don't use async generators more as they are the perfect fit for react like use cases: what is a react component if not "something" that generates new values asynchronously over time?

I really hope this idea makes it into the mainstream react community and even blend with it. Let's call this react 2.0 and start building on it, while keeping it compatible with react 1.x for now!

</comment><comment><USER27> This looks really interesting. I love the use of generators! Currently using redux saga so something like this would tie in very nicely.

</comment><comment><USER28> This looks very interesting but I have one concern: Wouldn't code where the "view" part and application logic are tightly coupled be way harder to test than an architecture that renders the view in a pure function and does state management somewhere outside entirely? (Which is not what React is today but might correspond to the original idea.)

</comment><comment><USER29> The author does not mention solidjs ([https://github.com/ryansolid/solid](https://github.com/ryansolid/solid)) in his apology for yet another js component library blog post. From a cursory glance, solidjs & crank.js seem similar in motivation & api...

</comment><comment><USER30> I love the blog post. Great to see some people out there that are still questioning the status quo and not simply giving in to appeals of authority. The author saw things they disliked about React and didn't let the hand-wavy reasoning silence those criticisms.

Well done

</comment><comment><USER31> I'd love to be able to use this with just a browser side script tag and no build step.

</comment><comment><USER32> It looks like surplus which also support jsx/tsx. Both of them compose a dom element as oppo to vdom object

</comment><comment><USER33> this is amazing and just what i've been looking for. thanks my man!

</comment><comment><USER34> Are there any benchmarks somewhere?

<comment><AUTHOR> As I understand it, this is extremely early and shouldn't be used in production, so there are no benchmarks.

What's interesting are the ideas of using native JS constructs where React opted for implementing things like hooks, refs, suspense, etc.

<comment><USER35> When I read that bit about "No [hooks] are needed" I did a double-take. IMO once you get the hang of hooks, React suddenly starts to look somewhat sensible… but anyway the Crank sample code looks promising.</comment></comment></comment>


OneDrive has stopped working on non-NTFS drives - <AUTHOR> https://arstechnica.com/information-technology/2017/07/onedrive-has-stopped-working-on-non-ntfs-drives/ <comment><USER3> It would be really nice if Microsoft kept some of their products in a consistent working, high-quality state.

As a long-term OneDrive (SkyDrive, Windows Live Mesh, FolderShare) user, it has been really disappointing to see features come, go, then come back. I can't upgrade operating systems or even update the app without fear of losing critical features.

For example, being able to transparently access networked (not locally downloaded) files used to be super easy, then it went away, and is now apparently coming back.

Similarly, Windows Live Mesh had really good versioning, a really useful remote access service, and really cool collaboration tools. Then it went away and has never been replaced.

OneDrive used to have 25Gb storage for free; that was a really good deal. Then it went to unlimited storage for Office users, but then they stopped that for no good reason.

tl;dr I'm not going to be a OneDrive customer for much longer. Microsoft makes it really hard to be a fan of their products. :(

<comment><USER4> There was abuse of the "unlimited storage", by the data hoarder subreddit. This gives yopu an idea of how much they stretch the definition of "unlimited":[https://www.reddit.com/r/DataHoarder/comments/5s7q04/i_hit_a...](https://www.reddit.com/r/DataHoarder/comments/5s7q04/i_hit_a_bit_of_a_milestone_today/)

<comment><USER5> > stretch the definition of "unlimited"

You can't stretch the definition of unlimited. There is literaly no amount that would stretch it. If you advertise unlimited storage, you are bending the truth, since there is no such thing as unlimited disk space. I don't see how anyone can blame the data hoarders here. Where I live, if you advertise for something that you cannot deliver, it's called fraud and you can get sued for it. I just don't see why they feel the need to lie to customers like that.

<comment><USER6> I blame them just like most of the other data hoarders are blaming them. One or two guys shit in the pool and got the whole thing canned. You can certainly qualify unlimited service for reasonable use.

<comment><USER7> _You can certainly qualify unlimited service for reasonable use._

There was some UK court case where the ruling agrees with what you said. However, both then and now I disagree with it.

The reason is it is absolutely wrong in terms of language:

      unlimited - without limits
      reasonable use - use limited to a reasonable amount

The other problem is that reasonable is not a number. Everybody has a different reasonable. This is the same as saying a service has a secret limit which you won't be told about.

Why not just say there is a 5GB limit? That would be clear, fair and not at all misleading.

<comment><USER8> UK: What 'reasonable' means is decided by a court when there is a case. They do take circumstances into account (e.g. domestic user or business &c)

I do think that there should be segmented contracts with numerical ranges in to avoid idiots.

</comment></comment></comment></comment></comment></comment><comment><USER9> I have much more trust in a company's product if it's their main source of revenue. Dropbox would probably die if they lost all their desktop users, but there's really no reason Microsoft even cares about this.

Anecdotally, OneDrive lost my changes to an essay twice, so I will certainly never use it again.

<comment><USER10> OneDrive - or DropBox - is no backup solution and also doesn't relieve you from backups.

<comment><USER11> I have relied on Dropbox as a backup solution for years. Never had a problem.

<comment><USER12> Originally you had no backups OOTB. Now I think you can restore deleted files for a month, or longer if you upgrade. This might be enough for your use case.

Otherwise it is purely sync (not backup).

</comment></comment></comment></comment><comment><USER13> This can't be. OneDrive loves me!

I know because it keeps starting up whenever I transfer files from a Centos Samba share despite every restraining order I've tried to issue.

Of course only the Group Policy editor can stop it and that did't come with the forced Windows 10 Home edition update shoved up my hard drive.

So now, in a complete turning of the tables, I'll have to wait for it to start up and then it will tell me to go f*ck myself.

<comment><USER14> You can upgrade Home to Pro for about $15 by buying the license from eBay. Not that you should have to but there you go...

<comment><USER15> They're also likely to be OEM licensing with questionable legality regarding resale

</comment></comment></comment><comment><USER16> onedrive, onedrive for business, onedrive app - Same name not the same product!

every one of them with different UI, different settings and never works without a failure. Try sharing a folder between team mates in office365. In dropbox it just appears to every team member. In office365 you need onedrive for busines (the regular onedrive that comes with Windows 10 won't show it) and then it appeas as a sharepoint folder the user. So confusing, So not working.

<comment><USER17> > onedrive, onedrive for business, onedrive app - Same name not the same > product!

They did that with Visual Studio too. On Mac it's basically some IDE to develop Ios and Android apps, while on PC you're getting the actual IDE.

And they do that with Skype too, where "Skype for business" is a completely different product that has barely anything to do with Skype.

<comment><USER18> And there is Visual Studio Code which is totally unrelated code editor available on multiples platforms which add more to the confusion.

</comment></comment></comment><comment><USER19> I just did a greenfield deployment of Windows Server 2012 R2 for a big virtualization environment, and ReFS was supposed to be ideal for that kind of application. Everyone I talked to about it told me it was a bad idea, mostly because the supposed gains in certain virtualization operations wasn't worth risking being the first sucker to find a corner case in refs.sys. Also, no data recovery tools support it outside of experiments.

Does anyone actually use ReFS in production?

<comment><USER20> I don't use ReFS in production, only for personal use, but Win 8.1/Server 2012 R2's version of it should never be deployed in production.

If you're interested in ReFS, use Win 10/Server 2016 instead. Microsoft has made a lot of updates and changes to the codebase, including ones to prevent data loss. They're now essentially pitching Storage Spaces+ReFS as a Microsofted ZFS.

</comment></comment><comment><USER21> NTFS has all the advanced folder and file features like Junction Points and Hard Links.

> The FCU includes a huge revamp of OneDrive's functionality to make the use > of local and remotely stored files virtually seamless.

I'm assuming it makes heavy use of that.

</comment><comment><USER22> I don't want to keep paying Onedrive any longer. But Dropbox is very expensive (becuase the only plan is 1TB). I want to avoid google drive because I know they will kill it randomly. What else is there?

<comment><USER23> Why do you think Google will kill Google Drive randomly...?

There's no precedent for something like that, and I can't see what motivation there would be to do such a thing either.

(Disclaimer: I work for Google).

<comment><USER22> Plenty of Google services have been killed/deprecated, even when they were widely used and popular. Google reader, hangout, gtalk, come to mind. I'm wary of getting burned again.

So I have decided I will never use any google service for something that I really need to rely on. I have a throwaway gmail for giving out to all kinds of spammy websites. I use google photos for backup but also do a full backup on Onedrive. I have a play music subscription but that's not very sticky anyway, I can switch to Apple music at the first sign of trouble.

Also, if you work for google, I'm surprised you think there is no precedent for google discontinuing stuff! It's literally a meme at this point.

<comment><USER23> It seems to be a bit of an internet meme, but as another poster noted, the original logic seems to have been lost, and it's now simply cool to quote the meme.

You say plenty of Google services have been killed - and you cite 3. But only 1 of those has actually been killed.

Google Reader _was_ shutdown - this is somewhat personal, as I was a bit lover of Google Reader as well. However, there was 12 months of notice for the deprecation, there were provisions for migration/exporting all your data - <USER2> there were reasons mentioned at the time for why it was deprecated. Basically, the writing was on the wall for RSS for a long time before that.

Hangouts wasn't discontinued...in fact, I use it as my main chat application currently (both in my personal life, and at work).

GTalk is basically Hangouts, with with improvements - same contacts, same chat history, same platform. Everybody was basically just migrated across wholesale, and got some nice new features to boot (e.g. group video calls).

<comment><USER22> > the original logic seems to have been lost

I don't know, Google reader is still not up. What logic is lost?

> Hangouts wasn't discontinued

It is abandoned, which is worse than dicontinued. No new features, some features have been removed. Apparently it's "enterprise" focused now.

> GTalk is basically Hangouts, with with improvements

Wrong. Read up about this tiny thing called federation. Hangouts is a small, walled-garden subset of gtalk. And even hangouts is deprecated now (at least for consumers). Now if you're a consumer and want to use a google service for chat, you have allo. Allo is a dumbed down subset of hangouts. No multi-device support, no web app, no voice, no sms integration, no video. It has stickers though. Guess some people are fine with that. I'm not.

</comment></comment></comment></comment></comment><comment><USER24> I flew the coup on OneDrive when they reneged on their promise to provide unlimited storage. They still charged me $50 for the months that I signed up on the basis of that false promise.

<comment><USER25> Speaking of reneging, remember the time they told their users that they would be lowering their storage to 5GB? Now, I'm not sure of the exact reason why they needed to do this, but you quickly lose confidence in their capability as a cloud provider when they need to start clawing back storage from users.

Meanwhile Google has been offering their users 15GB and additional storage bonuses for completing tasks such as your annual security checkup.

<comment><USER26> Weirdly, I got more space when they went free. I think I signed up on my Android for OneDrive to store my "camera roll" which gave something like 25GB free. I used that storage briefly to store/share .wav files for my band's EP, which took up a couple GB. When OneDrive announced their downgrade to 5 GB, they gave a free year of Office 365 to anybody that was currently using more than 5 GB. I think that expires later this month, at which point I will NOT be re-subscribing. It's miserable trying to maneuver around these cloud services; I'm sticking with Resilio Sync.

</comment></comment></comment><comment><USER27> I remember when people used to get mad at Microsoft because they supported legacy stuff for years and years and years.

<comment><USER28> Well they could made an announcement or email their user base letting them know of the breaking change.

<comment><USER27> This makes me wonder, do they have data on how many users are saving onedrive files on FAT? Is that info they could pull? I don't see why not...

<comment><USER29> That'll be Windows Telemetry story all over again: lots of people opting out or complaining everywhere they can.

<comment><USER30> They wouldn't need telemetry - they could have shown a local warning when the OD client detected a FAT drive.

</comment></comment></comment></comment></comment><comment><USER31> Those looking for alternatives should take a look at SyncThing - open, decentralised and open source.

I use it to synchronise files across a range of devices - home NAS, phone, and laptop - and love it.

[https://syncthing.net/](https://syncthing.net/)

</comment><comment><USER32> For reference on the ReFS part, everywhere I have read about it mentions it's for servers. Just like ntfs was when it started out. Guessing when it becomes more main stream, it will probably be supported then...

</comment><comment><USER33> The OneDrive syncing client has never worked properly for me since Windows 8. Just crashes and restarts, despite attempting all the fixes described online officially and non.

</comment><comment><USER34> Never change, Microsoft, never change

</comment><comment><USER35> You have to go with the times or you have to go in time.

</comment><comment><USER36> What else would you expect from Microsoft?

Last, I don't know, four releases of Windows were comically bad. This is when you no longer swear but just laugh in amazement.

I would argue that from their last 6 releases (starting with Windows ME) they only had one success, that is, Windows XP, and even that one they had to rethink with SP2.

(Just bought my wife a Windows 10 laptop... Sigh...)

<comment><USER37> The fact you brought your Wife a Windows 10 laptop and not a Ubuntu one kind of goes against the case that Windows is comically bad.

<comment><USER36> Ha-ha, you're not getting anywhere.

The fact that every laptop comes with Windows 10 proves that nobody cares anymore whether the produce is useful or not.

"You can buy a laptop. Whatever you get, it's with Windows. It's not very good but that's what you're getting. Are you buying or not?"

Come to think of it, Windows laptops are comically bad too by themselves. Wide screens that nobody asked for. Cheap plastic of casings. Unreasonable thickness. General ugliness.

<comment><USER38> > The fact that every laptop comes with Windows 10 proves that nobody cares > anymore whether the produce is useful or not.

Chromebooks are laptops. They don't come with Windows 10.

MacBooks are laptops. They don't come with Windows 10.

<comment><USER36> Guess what? Outside of USA and Europe, chance of having either one in a shop is exceedingly small.

I've not seen a single Chromebook in my life and Macs are exclusively for web programmers.

So Windows 10 is what you get, one might call it BrezhnevOS or PutinOS.</comment></comment></comment></comment></comment>


Paving the way for the new Node.js - <AUTHOR> http://blog.justonepixel.com/geek/2014/01/27/paving-the-way-for-the-new-nodejs/ <comment><USER2> A pity the title doesn't mention rethinkdb at all. A new driver with generator support is very exciting news.

By the way, for those that are interested, here's a link you can use to learn/understand how generators can help with async control flow: [http://blogs.atlassian.com/2013/11/harmony-generators-and- pr...](http://blogs.atlassian.com/2013/11/harmony-generators-and-promises-for- node-js-async-fun-and-profit/)

</comment><comment><USER3> I've come to be a big fan of async.auto which allows me to break a large task down into smaller functional steps, define their required dependencies on each other, and then just let async take care of the magic of executing the operations in the correct order, and parallelizing operations when possible.

Do any of you promise and/or generator users know of a good equivalent to async.auto?

I feel like promises and generators have potential but much of my code is based on async.auto and I feel like it would be complicated and painful to try to rewrite that with promises and generators.

<comment><USER4> Yet you still need to write callbacks.Neither async nor promises nor generators solve that issue.Afaik only fibers make the code lighter. ES6, arrow functions will make things less painfull though.

<comment><USER5> Generators actually solve the callback issue: [https://github.com/visionmedia/co](https://github.com/visionmedia/co)

</comment></comment></comment><comment><USER6> In the event that you find yourself wondering how these newfangled generators (used by the rethinkdash driver) work, see the following:

[http://blog.carbonfive.com/2013/12/01/hanging-up-on- callback...](http://blog.carbonfive.com/2013/12/01/hanging-up-on-callbacks- generators-in-ecmascript-6/)

</comment><comment><USER7> For anyone using Python who likes the look of this Twisted supports exactly this using their (rather awesome) inlineCallbacks decorator.

<comment><USER8> I had a really, really hard time using Twisted every single time I tried, over the last 5 years. It's a very opinionated framework that requires you to structure your code and business logic in a very specific way.

I'd love to see alternatives to Twisted that are built as a library rather than a framework.

<comment><USER9> check out tulip

</comment></comment></comment><comment><USER8> Serious question: What is the benefit of Node.js over other server-side platforms? Is it just because client-side developers are already familiar with JavaScript?

<comment><USER10> I have a very different view point than most about why I think Node.js is popular. Take it for what it's worth.

I've always sort of laughed at the idea of Front-End developers flocking to Node.js just for the fact that it is the same language. I actually really like Node.js but hardly ever use it for web apps. I think where it shines is as a platform for systems programming and I think when you look at Node.js systems programming was clearly at the forefront of the design.

I can't count how many Front-End-to-Node.js developers I've worked with that have been using Node for a year or more and have no clue about processes, sockets, streams and pipes. Perhaps that is a testament to libraries like Express that hide all of that, but in my opinion the beauty of Node.js is all of that "other stuff" Front-End people ignore. To each their own I guess.

Also, the myth of sharing Server and Client code is almost never done and even when it is, it isn't done well.

<comment><USER11> I'm curious as to what sort of things you are building with Node.js in the context of systems programming.

</comment></comment></comment><comment><USER12> >> Now look how wonderful the code looks with new driver.

Yikes. That is not so wonderful looking. But yeah, it's better than callback hell.</comment>


Kilo: A text editor in less than 1000 LOC with syntax highlight and search - <AUTHOR> https://github.com/antirez/kilo <comment><USER2> Massive discussion: [https://news.ycombinator.com/item?id=12065217](https://news.ycombinator.com/item?id=12065217)</comment>


Wrote a scraper for stock prices, what do I do with the data? - <AUTHOR>

So, as a side project, I wrote a scraper in nodejs to scrape for stock price information for all companies on the stock market. Now, I have a wealth of stock price information.
My original plan was to write a simple moving average analyzer that tells me when averages cross above or below each other.
What else could I do with this data? Any interesting analytics I could do? Just curious to see what other hackers might do with this information. <comment><USER2> Well, the truth is that predictive behavior stuff has been done before. So, maybe you could go another way; you could use it to track influence.

Say a NY Times article comes out about the american banking industry. You could track the price ripple from that back to the source article release time and check out how quickly it snowballs. You could probably actually use that over a series to find who is most influential and in what sector. That might be interesting.

<comment><AUTHOR> hmmm that sounds interesting... maybe i can get tweets or facebook updates and somehow track how social media may or may not affect stock price movements

<comment><USER3> I'd be very interested in following this project if you go ahead with it.

The value would be to identify how Tweets from major corporate and political figures affect related stock prices. For example, how Tweets from @benbernanke affect the trading price of ETF's. The goal would be to try and identify signals that provide statistical significance as well as a lag time from when Tweet was published and stock price reaction. If we can find these arbitrage opportunities we could use an API to auto-trade based on the Tweets...

<comment><USER4> me too! This idea could be very valuable!

</comment></comment></comment></comment><comment><USER5> I'm not sure what you'd do with the data itself, but if you want to build some interactive charts to show off your project, Highcharts[1] is a good way to go.

1: <http://www.highcharts.com/></comment>


Banksy and the Triumph of Banality - <AUTHOR> https://thecritic.co.uk/issues/january-2020/banksy-and-the-triumph-of-banality/ <comment><USER2> The author obviously holds a grudge because of Banksy's sympathy with Palestinians. Poor style.</comment>


Amazon Kindle store disables sales to America - <AUTHOR> http://www.amazon.com/The-Hunger-Games-ebook/dp/B002MQYOFW

<comment><USER2> Amazon glitch removes all BUY buttons <http://www.amazon.com/The-Hunger-Games- ebook/dp/B002MQYOFW>

</comment><comment><AUTHOR> As of 3:30pm EDT, no content is available for sale in the USA.</comment>


Some Thoughts on Forth Vis-A-vis Oracle and Java SE - <AUTHOR> http://sam-falvo.github.io/2016/12/18/thoughts-on-forth <comment><USER2> Circa 1983 I got hold of the paper FIG-Forth via snail mail. (Modems? none in my house those days.) I got a version going on my housemate's Apple ][+, which wasn't too hard as I'd learned 6502 assembly/machine language, and I understood the Apple's peripherals reasonably well.

I hacked together a boot disk which booted and presented the Forth REPL. One of my first projects was a text editor.

I probably still love Forth, and later on I sort of used the knowledge to learn PostScript. I went on to do a lot of work in PostScript and I definitely love that. And miss them both.

</comment><comment><USER3> _One of the reasons why Forth has suffered in the greater computing community is, "If you've seen one Forth, you've seen one Forth."_

I love Forth. One of the first things I do on any new machine is apt-get or yum it. But I have never managed to write an actually useful program in it. It just isn't well-suited to the use cases of the vast majority of programmers. And I say that as a guy who has shoehorned OCaml, Haskell and Elisp into "real work"...

</comment><comment><USER4> Previously posted

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

and

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

<comment><USER5> True, but those didn't get much attention, so a small number of reposts are ok: [https://news.ycombinator.com/newsfaq.html](https://news.ycombinator.com/newsfaq.html).

</comment></comment><comment><USER6> tldr; I hate cats, so let me tell you why i like flowers so much.

What has the whole Oracle/Java hate have to do with this article? Pointless, and distracting.</comment>


The one thing Apple can add to the iPhone to change the world - <AUTHOR> http://maxkle.in/the-one-thing-apple-can-add-to-the-iphone-to-change-the-world/

<comment><USER2> I'm not sure I want to use many of my iPhone apps without a touch screen.

I'm not sure I want to wave my arm around in front of my 27-inch Cinema display.

</comment><comment><USER3> Arthur C. Clarke pretty much predicted this in the 1970s (one of the Rama books, I think), except I think he said it'd be all done by infrared connection.</comment>


JavaScript is not a shit - <AUTHOR> http://blog.ideabile.com/en/2013/10/javascript-is-not-a-shit/ %22 <comment><AUTHOR> Sorry [http://blog.ideabile.com/en/2013/10/javascript-is-not-a- shit...](http://blog.ideabile.com/en/2013/10/javascript-is-not-a-shit/)

</comment><comment><USER2> Not a shit what, exactly?</comment>


Microsoft previews VM Depot, an app store for Azure - <AUTHOR> http://vmdepot.msopentech.com/

<comment><USER2> Without extensive documentation I'm not sure it's easier to carefully review these preconfigured images than it is to setup one yourself from scratch.

Instead of VM images I wish there was a modular, heavily documented and peer- reviewed script-based solution for turning e.g. an Ubuntu default install into a hardened LAMP server configured according to best-practices.

<comment><AUTHOR> It depends for what you want the images. In most cases, mainstream users don't care how the images are set up internally. They just want a Dokuwiki or Redmine instance and images like this allow them to quickly have one up and running that they can use right away, without having to read a lot of documentation or tinker with scripts.

</comment></comment><comment><USER3> These kind of quick-installs are nice as long as you double check that they meet all your needs. I'm not familiar with Azure, but I've used these on Dreamhost and Linode. I've noticed in some cases that the quick-install things can be out of date or set up with poor security practices, which is why you should double check them, but just to get up and going it's a great service.

One thing I noticed, and I'm not sure if this is intentional or due to technical reasons or what, is that all of these scripts are for Linux-based OSes. I'd expect to see at least a few Windows scripts in there too.

<comment><AUTHOR> Dreamhost, etc. use Fantastico-style scripts for shared hosting setup of apps. The Bitnami apps there are kept up to date and setup with best security practices in mind. BitNami also offers Windows and OS X apps at bitnami.org, but the focus of the VM Depot is on Linux (Disclaimer, I am one of the Bitnami developers :)

</comment></comment><comment><USER4> It was nice of them to provide an additional back button.

</comment><comment><USER5> So far none of the available images use Windows. All are GNU/Linux, most Ubuntu.

Since this is Microsoft I had expected to see some Windows VMs. I assume Azure supports Windows?

<comment><USER2> Is it legal to publish Windows VM images?

<comment><USER6> Certainly--there are several legal ones floating around to allow testing of the IEs.

Apple is the only company that forbids virtualizing its OS (unless you're virtualizing it on OSX).

<comment><USER2> AFAIK, the VMs for testing IE are published by Microsoft.

In general I don't think you're allowed to publicly redistribute Windows VM images. Publishing a customized VM image in the AWS or Azure image depots may be allowed though.

<comment><USER7> AWS has Windows images available for sharing.

[http://docs.amazonwebservices.com/AWSEC2/latest/WindowsGuide...](http://docs.amazonwebservices.com/AWSEC2/latest/WindowsGuide/Shared_WinAMI.html)

<comment><USER8> Dos anybody knows if AWS has some special arrangement with Microsoft? For example do they collect licensing fees on behalf of Microsoft when you run the WM and thereby are except from the normal licensing rules?

Or can I also make public available Windows WM images and publish them legally from my website?

<comment><USER9> Yes, they have a special arrangement with Microsoft. That is why you will see that it is more expensive to run Windows-based instances on AWS than it is to run the free Linux OSs (Amazon Linux and Ubuntu, for example.) You can put together and publish your own AMIs for Amazon based on Windows, but users can't download and use them (as with all AMIs) - they just deploy them to Amazon and then they would be paying the additional hourly fees.</comment></comment></comment></comment></comment></comment></comment>


SoftICE - <AUTHOR> https://en.wikipedia.org/wiki/SoftICE <comment><USER2> Ancient? Ughh. I remember using SoftICE to cheat in games back in the 1990's. Wonderful software, I wish I would've been knowledgeable to do something more useful than making myself invincible in Mortal Kombat or giving my characters super powers in UFO: Enemy Unknown (aka: X-Com outside North America).

This was a great learning tool to understand how programs actually allocate and use memory. Long before I had taken an architecture class and understood big endian and little endian, I had learned all about it by searching for values in memory. From there you could basically deconstruct the C structs used to handle the memory and then write a pretty simple TSR to cheat the heck out of DOS games. If I recall correctly, at least some of the time I was even able to use it to cheat at APCIDoom - which was a specialized launcher for Doom that let you play four player deathmatches through your local multi-line BBS.

<comment><USER3> Yup! Discovering SoftICE was a game changer. Various advanced SoftICE diablo 1 and diablo 2 multiplayer "enhancements" circulated back in the day... ones like bypassing the maximum level cap, making your user not render in multiplayer so you couldn't be clicked on during pvp, among others.

+orc and fravia +hcu stuff ate up loads of my free time in the late 90s and definitely helped later on once I got a formal computer science and engineering degree.

Thanks for the memories SoftICE!

<comment><USER4> Did anyone find out who +ORC really was? I rememember there were puzzles to solve to find his real identity.

<comment><USER5> I think it was just +Fravia's alternate ego for doing more legally questionable stuff

</comment></comment></comment></comment><comment><USER6> I used SoftICE to debug a multitasking IVR application I'd written in C/C++ with a stack-switching kernel on top of MS-DOS :) Great project, but it would crash once or twice a day on both the test machines we had. Couldn't figure out why. Went through the code with a fine-tooth comb, still at a total loss.

Enter Soft-ICE. Within a week I found that Soft ICE wouldn't interrupt in the hung state. That started making us suspicious that it might not be just our code.

What do you know -- both test machines (though otherwise completely different) had the same cheap $5 ripoff network card. These were causing the crashes.

Replaced those and the software worked perfectly -- ran 24/7 for 3 years without a hitch. The one time it did stop, was the NetWare stack crashing underneath.

So that's my SoftICE story :)

</comment><comment><USER7> For those that like the history of the Cracking scene - there was a set of binary-patching SoftICE extensions called "nticedump" and "icedump". They were pretty nuts, too - one reverse engineer got annoyed by his music playback stopping when he was in SoftICE, so he hacked an MP3 player into the SoftICE driver.

[http://n8on.free.fr/hackzines/bhz/7/crackingbeginner3.txt](http://n8on.free.fr/hackzines/bhz/7/crackingbeginner3.txt)

There was also in-SoftICE tetris.

I used SoftICE extensively from 96-00'-ish ... to the extent that as a teenager I had single-step dreams and dreams where I tried to hit CTRL-D.

<comment><USER8> "I used SoftICE extensively from 96-00'-ish ... to the extent that as a teenager I had single-step dreams and dreams where I tried to hit CTRL-D.".

That.

wrt everything stopping while using SICE, I remember looking at the windows clock and seeing 02:00AM , and thinking "I'm still on schedule", turning my head and seeing the sunrise from my window. Look at my watch: 06:20AM. Woops!

</comment></comment><comment><USER9> There is a similar approach for a modern age - use the hypervisor for the debugger agent. The application called HDBG[1]. It was never production-ready though, so not so famous. Another similar application is PulseDBG[2]. It's not exactly like SoftICE, but allows you to observe the execution process locally[3], which is sometimes enough.

[1] [http://fdbg.x86asm.net/hdbg/hdbg.html](http://fdbg.x86asm.net/hdbg/hdbg.html)

[2] [https://github.com/honorarybot/PulseDbg](https://github.com/honorarybot/PulseDbg)

[3] [https://github.com/honorarybot/PulseDbg/wiki/8.-Local- debugg...](https://github.com/honorarybot/PulseDbg/wiki/8.-Local-debugging)

<comment><USER10> If you're running your guest using qemu, you can also attach the gdb to that VM. It's essentially the same idea.

</comment></comment><comment><USER11> Oh man, SoftICE was the shit. It was a bit inconvenient to have to reboot with it enabled, but it allowed you to debug things no other debugger did.

I was equally impressed with OllyDBG later on, it was more convenient (if less powerful but always seemed like amazing software for just one author.

<comment><USER9> OllyDbg is dead too though, I recommend to use x32dbg/x64dbg[1]. It's open source and actively developed by a team of maintenances. And it's extendable with plugins and scripting.

[1] [https://x64dbg.com/](https://x64dbg.com/)

<comment><USER12> OllyDbg is technically dead but it still works as well as ever (for 32-bit software). I still break it out sometimes. I find it much smoother to use than x64dbg (maybe just due to using it more, but I do think OllyDbg nailed the debugger experience really well).

</comment></comment></comment><comment><USER13> This part of the explanation of what happened to it is extremely unsatisfying:

> _As of April 3, 2006 the DriverStudio product family has been discontinued > because of "a variety of technical and business issues as well as general > market conditions". Maintenance support was offered until March 31, 2007._

From reading about SoftICE, it seems to have been doing what other debuggers could not. So how could they not find enough customers to keep it going? Does anyone know what actually happened?

<comment><USER14> Former kernel developer here.

SoftIce was one of those "magical software" that made things possible. Before, you would need two computers connected via a serial port to do actual kernel debugging.

When VMWare arrived, SoftIce was becoming less useful, because a virtual machine offers better isolation and you can quickly revert to a previous state. When doing, for example, file system development, trashing a computer would not be rare.

By then, I know my setup was VMWare machines + MSFT WinDbg. Also, I could stop my VM and inspect the VM with a hex editor. Potent combo.

In parallel, during that time, I suspect the cost of developing SoftIce exploded: more updates from MSFT, a lot of security features that would prevent SoftIce from working, new features from the CPU like hardware protection of the RAM, etc.

Last, the most significant user base of SoftIce was broke hackers who would use it to crack protections. Unsurprisingly, those guys didn't have a license.

Awesome product, but makes sense it faded out.

</comment></comment><comment><USER15> I recall those lessons for script-kiddies "Crack [software name here] with SoftICE" in early 2000s.

<comment><USER16> Ha! I used to be one of those 90's skiddies. Nights of struggle with SoftICE eventually allowed me to crack some stuff "real time", although i failed to write functioning cracks using it. It was along this journey however that i arrived at the point where I started to understand how a PC & OS really functions. Unknowingly, SoftICE came to co-direct my life for the better.

<comment><USER11> I remember hanging out in #cracking4newbies on EFnet a lot. It was pretty toxic if you weren't part of the in-group, but I learnt a lot.

<comment><USER17> Ah efnet. That place was the wild west since they never adopted services. I remember channel takeovers and recoveries with extreme tactics like forcing netsplits with DOS attacks on the servers. Having to run an eggdrop bot to re- op people when they join a channel. Running your own bot to keep your nick from being stolen. Good times.

<comment><USER16> Your argument is invalid. Not the absence of services but rather the fact that back then you could crash a box by means of simply sending a single well crafted TCP packet to your adversary. It was adventure among the kids, and the "elders" did not really care plus no one in their right mind dared assaulting their source of knowledge. ( And shell accounts :P )

<comment><USER17> Wow more memories. Yes it was too easy to exploit the system for personal gain which was exactly the point of services. If someone managed to take over a channel, chanserv would immediately and automatically restore ownership. It's impossible to use someone else's handle when nickserv requires auth.

</comment></comment></comment></comment></comment></comment><comment><USER18> It was the Hercules monitor support that had those amber fossils still sitting on the desks of every video card driver authors desks (and games programmers too) into the late nineties. VxD dot commands allowed you to extend and use a plethora of debug commands beyond the built in. Once Windows had working multimonitor support, that crucial aspect of Softice's utility was no longer unique.

<comment><USER19> Right, I remember getting a cheap green Hercules monitor and graphics card just for SoftICE.

</comment></comment><comment><USER20> I used this, and you had that kind of power over the machine only in the low- end architectures, Z80, 6502 and on the enterprise, on IBM mainframes, to breakpoint and stop and look at what the processors was doing. Of course, you still can do the same thing on mainframes, but we are forgetting that in the end, on our X64 machines, that we are all running machine code.

</comment><comment><USER21> Oh my I remember friends debugging Windows device drivers with SoftICE, that was hardcore.

<comment><USER22> I did it on my first debugging project where I had to teach myself assembly. Had no idea it was a special task! Just knew it had to get done, got "some program called soft ice" to do it, got to work.

</comment></comment><comment><USER23> Who else had a monochrome monitor to display Soft-ICE info while debugging video-intensive programs? Text at B000:0000 instead of B800:0000.

<comment><USER24> I had always wondered about that feature. I reckon Turbo Debugger supported it too but MDA adapters were hard to find when I started my debugging adventures.

<comment><USER25> I didn't realize until now that a Herc was an upgrade over a plain MDA card. I'd forgotten how many discrete chips there were and the size of the board! [https://en.wikipedia.org/wiki/Hercules_Graphics_Card](https://en.wikipedia.org/wiki/Hercules_Graphics_Card)

edit: The herc being the MDA compatible card that I had to debug on.

</comment></comment></comment><comment><USER26> I used it for only one task but it was worth the price anyway--I needed support for both VGA and monochrome on the same machine. As the years went by there were fewer and fewer monochrome cards and the cards became worse and worse at playing nice together. It eventually reached the point where we couldn't find any that would behave--I ended up stepping through the initialization code for the monochrome (which was in ROM, no breakpoints otherwise) and noting exactly what it told the card and reproducing that in my code. (By then 100% of my screen writing was in my code, the lack of that capability didn't matter.)

</comment><comment><USER27> btw, there was also a Syser debugger, developed as a replacement for SoftICE, I never used it, except playing with it a little, few years ago, it was nice experience.

Although I heard they stopped the development, a little google -ing found a page with fresh release and win10 support claim, but I have no idea, how the legitimate is it [https://qpdownload.com/syser- debugger/](https://qpdownload.com/syser-debugger/)

also there is rewriting project on github, with last commit from 5th June, 2019 [https://github.com/marakew/syser](https://github.com/marakew/syser)

Would appreciate to hear any info about current status of Syser

UPDATE: Just FYI, after lurking a bit over the github repo and associated links, found that gihub repo maintainer seems to be a pretty qualified reverse engineer, for example, he made his own independent skype protocol reconstruction ([https://marakew.github.io](https://marakew.github.io)) and the README.md in gihub repo say, that Syser sources were lost due to the corrupt flash drive, so I guess he was one of the (author?) developers of Syser.

Still would be happy to hear more, if somebody know the full story.

</comment><comment><USER28> Nothing like a kernel mode mp3 player to listen to music while you step through assembly and see some very colorful symbol names of windows internals.

</comment><comment><USER29> If SoftICE, then not without its awesome addon IceExt - [https://sourceforge.net/projects/iceext/](https://sourceforge.net/projects/iceext/)

It had a kernel-mode mp3 player so that you could shred software protections while listening to your favorite music (among other cool features of course)

</comment><comment><USER30> What modern debuggers/tool can do what SoftICE did? How do you debug services and device drivers modern Windows?

<comment> emily-c You use WinDbg and do kernel debugging. The newer WinDbgX UI is quite nice lately. However, there's no replacement for live debugging on the same machine the way that SoftICE did it.

</comment></comment><comment><USER31> SoftICE being called ancient really amuses me. I recall my childhood in the 90s/00s learning how software and game activation codes work, and how to bypass them using SoftICE, it was really quite sad that it didn't go beyond XP.

</comment><comment><USER32> Periscope represent!!!

[https://corexor.wordpress.com/2016/03/01/periscope- manuals/](https://corexor.wordpress.com/2016/03/01/periscope-manuals/)

</comment><comment><USER33> Probably the best software I had ever used.

As a debugger you could automate everything and catch any error in existence. It made myself hundreds of times more productive.

I maintained a Windows partition just for using it. I used Linux and mac but I usually debuged my programs on SoftIce under Windows. I had to port all my programs to use it. It was that good.

I learned how to use it from a cracking group. It took a long time to be proficient at it, but even to this day lldb or gdb or anything in Windows can't come close of what SoftIce could do.

</comment><comment><USER34> Mucking around with SoftICE was essential to my understanding of reverse engineering and low-level programming. It was an amazing piece of software, as was all the other NuMega products!

</comment><comment><USER35> That feeling when you are pressing SoftIce popup hotkey and guessing will application survive or not. then your computer just freeze :D just old good times

</comment><comment><USER36> Learned SoftICE at my first job out of university, writing Windows device drivers. I also object to the "ancient" designation!

</comment><comment><USER37> Seriously the coolest tool to tinker with in my youth. Gave you so much control. It felt like magic to halt execution of a DOS program to inspect exactly what it's doing instruction by instruction, patching code or injecting chunks of self-modifying code.

</comment><comment><USER38> That was long time ago when NuMEGA was make really great software!

</comment><comment><USER39> This is a piece of computer history. They should release it as open source. Get some free publicity for whatever their actual revenue-generating products are.

</comment><comment><USER40> Not strictly related to SoftICE but those days make me reminisce about another useful tool, "Sourcer" from V Communications, anyone remember that?

</comment><comment><USER41> I still remember those times when I forgot to switch SoftICE off and whenever Windows fucked up I ended up in SoftICE's debugger.

</comment><comment><USER42> The good old days. SoftICE for me was essentially the OS, and Windows was just a GUI around it. Windows without SoftICE felt... empty

</comment><comment><USER43> A really nice tool for debugging Windows drivers. God knows you needed all the help you could get :-)

</comment><comment><USER44> I remember using it on the 90's to crack Space Empires III

</comment><comment><USER45> On the Amiga, hrtmon.

</comment><comment><USER46> Hmm...I remember a time before "realICE".

</comment><comment><USER47> Ancient? I'm feeling a little old now.

I've always felt like I have neglected debuggers to my own detriment. Print debugging is just very convenient and once you get in that habit it's hard to stop. On rare occasions where I didn't know where in the code or in the system to start they've always shined.

</comment><comment><USER48> Ancient!? shiiiit, im old ;-D how about AFD/SFD then? [https://vulms.vu.edu.pk/Courses/CS401/Downloads/AFD_Tutorial...](https://vulms.vu.edu.pk/Courses/CS401/Downloads/AFD_Tutorial.pdf)</comment>


Bricks out of wool - <AUTHOR> http://inhabitat.com/2010/10/06/researchers-develop-eco-super-bricks-made-of-wool/

<comment><AUTHOR> What I find most interesting about this is the combination of two materials which have a rich history. When I was visiting Tasmania ( below Australia ) they talked about the locals from there used to make items out of dried seaweed and how versatile it was. To think a combination of seaweed goo mixed with wool, to make bricks... Its like fiber glass but different.

<comment><USER2> Adding fibres to plaster and cement has a long history. Back in the days when horses were more common, horsehair was added to plaster to make it super strong. These days, you can get cement with plastic fibres mixed in.

</comment></comment><comment><USER3> This totally changes how I will play Settlers of Catan from now on.</comment>


How to Shave 73% Off of Your Load Time (It's Really, Really Easy) - <AUTHOR> https://www.netlify.com/blog/2017/02/15/how-to-shave-73-off-of-your-load-time-its-really-really-easy/ <comment><USER2> That 916 word article takes over 4.2MB to download. Over 1MB dedicated to some js file and nearly 1MB to a JSON file [1] containing indexes, the output of which I can't see in use on the page.

1\. [https://www.netlify.com/js/lunr/PagesIndex.json](https://www.netlify.com/js/lunr/PagesIndex.json)

</comment><comment><USER3> I ran the test about ten times and it only completed once.

The TTFB score it gives is the average score from around the world. Do I need to care that somebody in Brazil has to wait a _whopping 219ms_ to see my English language entirely UK-centric content? I don't feel this average TTFB is therefore very useful when my target audience will get my full HTML in less than 14ms as measured by this tool (this is actually the score from Germany as for some reason the site tests from London but doesn't display it in the results table).

I also disagree that "slow and expensive legacy dynamic" PHP sites are necessarily slow. My personal site built in Slim 3 executes in less than 10ms, thank you. The only optimisation I did was turning on opcache. You'd be surprised how fast PHP 7 actually is. If I wanted I could turn on nginx's caching and serve up thousands of requests per second.

Finally, this article doesn't explain how to shave off 73% of my load time without using Netlify, despite the author's claims that his "goal with this post [wasn't] to get you to use Netlify".

[Edit]

Their servers seem to be struggling with the tests. My site is now scoring over 1000ms which is not possible.

</comment><comment><USER4> I'm not impressed if you're making me download 4MB to see the 5kB of text in this blog post.

</comment><comment><USER5> The webpagetest of the blog post is pretty telling: [https://www.webpagetest.org/result/170215_26_MSDP/1/details/...](https://www.webpagetest.org/result/170215_26_MSDP/1/details/#waterfall_view_step1)

6.5 seconds to fully load the page in a desktop browser over cable modem. Over 18 seconds on a low-end Android phone. 9 web fonts loaded. Over 1.5 MB of javascript downloaded. Tracking beacons from ads-twitter, multiple "netlify.com" subdomains, addtoany, segment, intercom, mixpanel, twitter analytics, double click and GA, most of them blocking the load of the page.

TTFB is kind of a vanity metric. If you're serious about it, the way to achieve that is using varnish + edge caching rather than switching to static HTML pages. You can have good TTFB and still have a slow rendering page, as this illustrates.

(edit: spelling)

</comment><comment><USER6> They have a website speed test that they want you to try. That's the whole point of the post, but you have to read to the bottom to figure that out. I tried the speed test. After 6 minutes of "connecting to Sao Paolo" I lost interest.

</comment><comment><USER7> _With 441ms to fully download the HTML, HBR.org is already much, much faster than the average site._

Except it really isn't. They have a giant interstitial ad that takes up the entire page when you get there, so then you have to hunt down the link to close it. So they just wasted a couple of seconds. I don't care how quick it loads if the experience is that bad.

</comment><comment><USER8> Surprising result: news.ycombinator.com scored 0 out of a possible 100 points.

[https://testmysite.io/58a4993871e20a1fdab44dee/news.ycombina...](https://testmysite.io/58a4993871e20a1fdab44dee/news.ycombinator.com)

\-- edit - looks like time to first byte is what really kills scores

<comment><USER9> There is a 301 redirect from [http://news.ycombinator.com](http://news.ycombinator.com) to [https://news.ycombinator.com](https://news.ycombinator.com).

On a fresh VM, I get a TTFB on [http://news.ycombinator.com](http://news.ycombinator.com) of about 200ms, then another 200ms to retrieve [https://news.ycombinator.com](https://news.ycombinator.com). So maybe it's counting the TTFB of the final document.

<comment><USER8> As the speed test is going down its list of tests while you wait, you do see an "https" check - so I don't know if that 301 has any impact. I do notice that reloading the test yields varying results. I got as high as 11/100.

The dumb thing with the "Share your results" link is that that it appears to rerun the test instead of showing you a snapshot of the result from that test (so I guess it's not really sharing __results __, is it?).

</comment></comment></comment><comment><USER10> tl;dr: use a static site generator instead of dynamic pages when possible

</comment><comment><USER11> Maybe it's me but their test seems to hate sites hosted in europe. (Strato, Germany)

First I tested my site's landing page:

43/100 - ok, no SSL, so HTTP2 and 367ms TTFB - I also apparently committed the capital sin of including a 160kb CSS file (foundation) without stripping it. Serves those 5 visitors per month well! Comparison: 66(mobile)/77(desktop) of 100 from Google PageSpeed Insights (with more useful hints what to fix) and 75/100 from tools.pingdom.com (224kb incl JS and CSS is apparently still too big and missing caching/Vary header).

But now my gripe:

Same host, https, an empty page with 0b - only gets 72/100 because of missing HTTP2 and slow TTFB of 185ms.

Insights doesn't even render this page and it gets 83/100 from Pingdom. Faster than 99% of sites, 0B and still only 83/100\. I think most of these metrics are a bit off...

Edit: just amended my empty test page to be exactly 200 bytes and be real html. Insights: 100/100, Pingdom: 100/100, Netlify: 0/100 because 1067ms TTFB

<comment><USER12> Netlify's testing site is fraudulent — yeah, I said it, let me know if you need my legal contact.

a) they're testing from within their network (bullshit). b) they purport that you'll get 6ms ttfb if hosted on netlify. Dishonest.

I've intentionally imported sites to remote hosts, and tested them there — they performed better _away_ from netlify, and, netlify's speed testing tool gave them bad scores, despite them performing better than the same site hosted on netlify.

Oh well. They've got some nice tools, if it weren't for their fraudulent testing tool.

</comment></comment><comment><USER13> I read a rant about having to shift all my stuff to the "JAMStack", because what i'm doing is old fashioned or something, but I don't see how that will shave 73% off my load time. I also don't see how a static site generator is good for most of my sites, seeing that they extremely dynamic applications. Also, the site talking about big pages being bad is pretty big.

</comment><comment><USER14> Author here - cool to see our test on HN :)

We made the backend for the test open-source - it's a very straight forward Go binary that we run in several data centers around the world.

[https://github.com/netlify/speedy](https://github.com/netlify/speedy)

The test focus on global performance, which might not be relevant to everybody - but for ourself it really does! We have users all over the world and as we've been building out our product we've seen a pretty clear correlation between opening up a new PoP on our CDN, and starting getting clients from that region. The performance matters.

For the article itself - it's obviously not as lightweight as motherfuckingwebsite.com! That said, the 4.2MB download number is just plain wrong. We're currently transferring 1.2Mb on a page load when caching is disabled (everything is gzipped), but the critical path contents (the HTML + CSS bundle) is 68.5kb and once that's loaded the page starts rendering.

The lunr.js index is very nifty - click the looking glass in the corner to try out the instant search. It's of course cached between page loads.

<comment><USER15> > We're currently transferring 1.2Mb on a page load when caching is disabled > (everything is gzipped), but the critical path contents (the HTML + CSS > bundle) is 68.5kb and once that's loaded the page starts rendering.

1.2MB is still too much, even if it's deferred and compressed. For that, you should be blowing me away with your amazing multimedia blog post.

I'm on Firefox+Noscript, and it's 676k. That's more like it, and I don't feel like I'm missing anything, the least of which is that search index of your entire site.

</comment></comment><comment><USER16> Lol you have to download a huge file first, so it only works IF you site is already very large

<comment><USER17> I think either you're misunderstanding what static site generators do, or I'm misunderstanding your comment.</comment></comment>


Amon - server monitoring, simplified logging and error tracking for web apps - <AUTHOR> http://amon.cx <comment><USER2> Why is the trend today towards installations like this?

curl install.amon.cx | bash

I'm looking at you, rvm, npm et al. Yeah, I'd just love you to poop files randomly into my filesystem, with no tracking, and a completely non-standard uninstall process (if I'm lucky enough to have one at all).

We evolved package management for a reason - I know it's a pain to have to make a .deb, a .rpm and a .tar.gz - but is it really that much more work than making an entirely custom install script?

<comment><USER3> This, along with the dependencies (I don't like having to install MongoDB just for this), is the reason I don't want to try this.

I could probably deal with the installation, although I hate installing all those daemons and init scripts myself, but installing Mongo just for one thing, gah. Too bad there isn't an embedded version of Mongo, and my own goatfish[1] is still far from mature.

[1] <https://github.com/stochastic-technologies/goatfish>

</comment></comment><comment><USER4> I commend you for making something that isn't SaaS -- it seems to be rare to have one-off payments now, so this makes it more attractive.

Also, it seems that your demo (<http://live.amon.cx:2464/>) is down, which is a pity as I'd obviously like to try it before installing.

EDIT: And local monitoring is a big plus, too.

</comment><comment><USER5> Amon was discussed two months [0] and two weeks [1] ago.

[0] <http://news.ycombinator.com/item?id=3313991> [1] <http://news.ycombinator.com/item?id=3555916>

<comment><USER6> Amon Plus didn't exist at that time.

</comment></comment><comment><USER7> It looks like a great project. Some features I would like to see:

* Alerts via SMS (possibly by integrating Twilio / Tropo).

* API via zeromq instead of HTTP. Async logging via workers. This could become handy if you log lots of things. It would also prevent logging to become the bottleneck of my applications.

</comment><comment><USER8> Anyone done a comparison as to why I'd want a simplified tool like this vs. a more extendable tool like Zabbix or Nagios?

Yes, I realize that those and this probably don't perfectly overlap.

</comment><comment><USER9> This seems really interesting and I really like that the data would stay inside my firewall. Any comparisons to New Relic? Looks like ease of installation would be similar (except for setting up Mongo), but that it doesn't collect quite the same amount of data (yet).

</comment><comment><USER10> Why would I prefer this over a well-configured monit? <http://mmonit.com/monit/>

<comment><USER11> Amon appears to have a slightly different goal set than Monit. Monit is more of a "Is this process running and ok?" tool for keeping processes running as expected. Amon seems a bit more like Munin.

<comment><USER12> Monit is a bit more than that. You can also use Monit to check remote hosts. Not only can it check http, but ftp, ssh smtp and more. You can use Monit to test your web-application via the HTTP protocol (404 or 50x) and use regex to check if certain content exist (or not) on a web-page. Monit is free, open source and does alerts for free.

<comment><USER11> Thanks for the clarification, but my intent wasn't to describe the full feature set of Monit. All those things you described are still limited to the scope of "is X running?" type questions. Can Monit graph time series data?

EDIT: My point isn't that Amon is "better" than Monit, only that it's different. There is some overlap in feature set, but ultimately, the tools have different goals.

</comment></comment></comment></comment><comment><USER13> Please change the spelling of "straightfrorward" to "straightforward" on your home page.

<comment><USER14> Fixed. Thank you

</comment></comment><comment><USER15> It looks like it isn't possible to add multiple user accounts (in the free version). I tried browsing to /create_user myself to add a second account, but I get redirected to the /login page

Is that something that comes with the Plus version ?

<comment><USER14> That's something I've been working on for some time, but it's not ready for public release. As I see it - Amon Plus will have a fully featured ACL in a week.

</comment></comment><comment><USER16> Besides the fuzzy feeling of helping a open source project with comercial endeavors, how does it compare to services like Server Density, Nagios, Monit, etc?

<comment><USER11> I'm looking at replacing Munin with Amon. We used to use a pay-per-month monitoring service, but I find the setup and maintenance of many services to be equal to the headache of maintaining something like Munin.

The most obvious difference is that Amon runs on your hardware, so the data stays with you. The pricing model is fundamentally different than services like Server Density, New Relic, Scout, etc in that you pay per major version, rather than per-month.

Amon is currently pre-1.0, so it's hard to compare with a mature service like Server Density. They're (Amon) no where near feature parity with SD. Then again, SD will quickly cost you many times the licensing cost of Amon when you're monitoring multiple servers.

For me, the value judgement will have to wait. With services like Server Density you are (theoretically) offloading a lot of maintenance overhead to the SaaS provider. If Amon delivers on their "one line installer" promise, then it will at least have "effort parity" with many SaaS providers.

I have to wait because they're pre-1.0, so while their software is inexpensive and easy to use, there is a distinct lack of critical features. If I'm making the evaluation (whether to roll this in to production) today, I can't live without alerts, so Amon is out. Based on the way things are looking, I'd say that Amon has a bright future though. I might buy an early release, just to get up to speed on it.

Tangent: Where did you see that Amon is open source? I see that I can get access to the source by licensing it, but I don't see any mention of open source on the pages I viewed.

<comment><USER17> > I'm looking at replacing Munin with Amon

Amon Plus can monitor more than one machine.

Also, on the open source thing, it's closer to open-core. The single-server version is open, but, if you want to monitor more than one box, you'll need the Plus version, which, despite being distributed with source, is not, AFAIK, open.

</comment></comment></comment><comment><USER18> There's a typo on the Requirements page: <http://amon.cx/plus/requirements/>

Users are instructed to check their python version with `python -v`, but the correct command is `python -V` (uppercase).

</comment><comment><USER19> Just bought this, it might not be to everyones taste and it seems to be an early version but its exactly what I want..

Found a few issues so far and the response time on support has been pretty quick, I hope development keeps up :)

</comment><comment><USER20> Just wanted to let you know that in Internet Explorer 9 much of your page text is cut off. It seems to be positioned to the left of the browser so much of the text (mostly the code) is cut out.

</comment><comment><USER15> It looks rather straight forward to add a custom appender for log4j ?

</comment><comment><USER21> I couldn't find some comparison chart or anything that would tell me what extra features the pro version has.

<comment><USER14> The normal version can monitor only the server it's installed on. The Plus version has alerts and you can use it to monitor as many servers and apps as you like - there are no internal restrictions besides the memory of the VPS it's installed on. So if you want to monitor 10-15 servers - you will manage with a 128-256MB VPS, if you have more than that, all you have to do is to upgrade it to 512MB RAM or more.

<comment><USER22> So, is that something where the "central"/plus server polls the other servers that are running the normal Amon logger/monitor for their info then just displays it in one place?

<comment><USER14> It's the other way around. On the servers you install a 10KB agent that collects the data and sends it to the central instance

</comment></comment></comment></comment><comment><USER23> Looks great. It's a shame your live demo is down though.

</comment><comment><USER24> Any plans to get Solaris/SunOS support in the future?

<comment><USER14> No, only Linux at the moment. I am considering a FreeBSD support and probably Windows :)

</comment></comment><comment><USER25> Is application logging done via UDP?

<comment><USER14> It's only HTTP for now, but my plans are to extend it to support different transport protocols ( 0mq, UDP, TCP)</comment></comment>


Why Does My Chrome Have a 90GB PNG File in Virtual Mem for Whispernet Proxy? - <AUTHOR> http://imgur.com/qDPUvD6 <comment><USER2> Apparently that's a PNaCl program, that for some reason got a .PNG extension: [https://chromium.googlesource.com/chromium/src.git/+/master/...](https://chromium.googlesource.com/chromium/src.git/+/master/chrome/browser/resources/whispernet_proxy/whispernet_proxy.nmf.png)

and whispernet-proxy doesn't show in the list because it is a extension that ships with chrome.

[https://productforums.google.com/forum/#!topic/chrome/3qLYze...](https://productforums.google.com/forum/#!topic/chrome/3qLYze2nJ3Y)

It seems to have to do something with talking to nearby devices (by audio channels?) via the copresence API:

[https://developer.chrome.com/apps/copresence](https://developer.chrome.com/apps/copresence)

[https://codereview.chromium.org/438513002/](https://codereview.chromium.org/438513002/)

That's what I could glean from a quick google search...</comment>


Why Fascism Is Rising Again - <AUTHOR> https://medium.com/bad-words/why-fascism-is-rising-again-and-what-you-can-learn-from-it-d5b853a7dccc <comment><USER2> [https://news.ycombinator.com/item?id=10722907](https://news.ycombinator.com/item?id=10722907)</comment>