Presenting the Most Over-Engineered Blog Ever - <AUTHOR> http://jlongster.com/Presenting-The-Most-Over-Engineered-Blog-Ever

<comment><USER2> The most over-engineered blog that I know of is Casey Muratori's at [http://mollyrocket.com/casey/](http://mollyrocket.com/casey/) . "View source" and you'll see a long list of auto-generated variables and function calls, unlike anything else you've probably seen for any website.

Casey attempts to explain what he did in a podcast[1]. Apparently, he was frustrated enough with CSS's margins that he built a layout engine in C that calculates offsets for every piece of text in the page, then generates hundreds of lines of Javascript that apply fixed positioning to arrange the text.

[1] transcript: [http://mollyrocket.com/jacs/jacs_0004_0010.html](http://mollyrocket.com/jacs/jacs_0004_0010.html)

<comment><USER3> To be fair, the most over-engineered blog I know of is anything hosted on top of this: [http://arxiv.org/abs/1312.7152](http://arxiv.org/abs/1312.7152) ;)

"This paper proposes a new microblogging architecture based on peer-to-peer networks overlays. The proposed platform is comprised of three mostly independent overlay networks. The first provides distributed user registration and authentication and is based on the Bitcoin protocol. The second one is a Distributed Hash Table (DHT) overlay network providing key/value storage for user resources and tracker location for the third network. The last network is a collection of possibly disjoint "swarms" of followers, based on the Bittorrent protocol,..."

(and I am sure someone will come up with an example of a blogging platform that starts at the level of specialized mesh networking hardware or something like that...)

<comment><USER4> This isn't quite as crazy, but in the spirit of overengineered blogs, this guy tried to make every single element of his blog optimized by automatic A/B testing: [http://www.metamorphosite.com/about](http://www.metamorphosite.com/about)

</comment></comment></comment><comment><USER5> It might be worth turning your GitHub links in the article into permalinks (hit 'y' in the GH interface once you've targeted the file and line) so they don't fall out of date.

Nice work!

<comment><AUTHOR> Oh man, I did _not_ know about that shortcut. Thanks!

<comment><USER5> The first time someone pointed this shortcut out to me I thought they were pulling my leg. I never expected GitHub to have shortcuts, somehow.

Glad to help and again, nice work. :)

<comment><USER6> On that note, go to GitHub.com and hit the "?" key -- it will show you the full list of available shortcuts (there are a lot!).

</comment></comment></comment></comment><comment><USER7> Great stuff!

You're correct about it being sort of awkward at first when you are figuring out how to structure an isomorphic applications. It gets even weirder when you only use JavaScript as a compilation target.

I created an example isomorphic Clojure and ClojureScript application ([https://github.com/domkm/omelette](https://github.com/domkm/omelette)) and wrote about how it works ([http://domkm.com/posts/2014-06-15-isomorphic- clojure-1/](http://domkm.com/posts/2014-06-15-isomorphic-clojure-1/)). It was an interesting experience. I wouldn't recommend it for production quite yet but I'm looking forward (and working toward) the day when we can easily deploy isomorphic applications that are not written in JavaScript.

<comment><AUTHOR> I've seen that! I'm happy to see other languages do this as well. I love Clojure(Script) and there are several things I've borrowed from it (if you look in my code, I use CSP channels and transducers). :)

The more examples we can get of this the better.

<comment><USER8> So I'm curious, why didn't you wrote your blog in Clojure(Script)? (I'm new to the scene)

EDIT: Ok, I see Javascript is your thing ;), do you think doing it in JS has strong advantages over Clojure(Script)?

<comment><AUTHOR> No, I will readily admit Clojure(Script) is a better language. The only concern might be getting all your team on board with a Lisp, but if that's not a problem, go for it.

If you are not entrenched in the JS world, I would look into Clojure(Script). They've got a lot of really cool stuff going on.

I have significant mental investment in JS, and I work on the JS debugger for Firefox, so I feel like I need to be a heavy user of JS. Also I know so much about all the little corners of server/client JS, package management, how to deploy, etc. I don't think the return would be great enough to re-learn all of Clojure's tools.

If I were to start on certain types of apps (high-performant data modeling, or anything that requires special care about complex flows), I may look into Clojure. But honestly I'm interested in starting to write games so I'm probably going to spend mental energy learning Rust.

<comment><USER9> If you come from a JS world and like the code->refresh->code->refresh workflow (I do) Clojure is hard adjustment because it requires a lot of boilerplate code up front and you have to remember to run a slow leiningen daemon for each project you're working on.

<comment><USER10> This largely goes away with [http://boot-clj.com/](http://boot-clj.com/) \-- a much better build tool for clojurescript - includes live reload of clojurescript and css.

</comment></comment></comment></comment></comment></comment><comment><USER11> I'm also experimenting with isomorphic React apps. I'll be presenting some of my work at React Conf at the end of the month (so this isn't yet as well documented as it should be), but here's what I'm trying to handle async data with ReactRouter:

\- Have the data your view depends on expressed as a named parameter in routes.jsx: [https://github.com/appsforartists/ambidex-example--bike- inde...](https://github.com/appsforartists/ambidex-example--bike- index/blob/master/application/routes.jsx)

\- Use those named parameters to resolve which stores need to be populated before rendering: [https://github.com/appsforartists/ambidex-example--bike- inde...](https://github.com/appsforartists/ambidex-example--bike- index/blob/master/application/bike-index/reflux/actionsForRouterState.js)

\- Don't render the page on the server until those routes are populated: [https://github.com/appsforartists/Ambidex/blob/master/src/ca...](https://github.com/appsforartists/Ambidex/blob/master/src/callActionsForRouterState.js)

In that example, the editBike view depends on bikeID. actionsForRouterState makes sure that the viewBike action is called to populate the CurrentBike store before any route that includes bikeID is rendered.

<comment><USER12> That's interesting - so the named parameter for required data in routes.jsx is something you're planning to add? (I can't see it, just has the standard name/route/handler at the moment)

I've been trying to do the same sort of thing - currently I'm parsing the routes separately in koa and setting data directly on the stores before the React components load, so they're pre-populated with data. Seems a shame to do all the routing twice though.

<comment><USER11> In my system, the data and routes aren't coupled. Here's the flow:

\- ReactRouter figures out which routes are being rendered. It yields routerState, which includes a dictionary of all the active parameter names and their values.

\- The actionsForRouterState dictionary declares which actions and stores are correlated with a particular route or parameter name.

\- callActionsForRouterState filters actionsForRouterState to include only the actions that are relevant for the routes and parameter names dictated in routerState.

\- It calls these actions, returning a promise that resolves when all their stores are filled.

\- After that promise resolves, it's safe to call React.render. Any calls from the active components to Store.listen will be resolved with the prepared data during mounting (e.g. immediately before the render pass).

Is that helpful?

</comment></comment></comment><comment><USER13> More over-engineered than [http://ponyfoo.com](http://ponyfoo.com)?

[https://github.com/ponyfoo/ponyfoo](https://github.com/ponyfoo/ponyfoo) has over 2k commits

<comment><USER14> That's easy when 95% of your commits are 100% noise minor bump of versions in the dependency manifest: [https://github.com/ponyfoo/ponyfoo/commits/master](https://github.com/ponyfoo/ponyfoo/commits/master)

bevacqua, I don't know what you are trying to achieve by that, but if this is an actual serious project, know that this commit log is unreadable and would repel any potential contributor to the project you might find. And I don't mean to offend because, going by your profile, you're obviously a very active open source contributor - but I also found the exact same log quality issues in all your other projects.

If you truly care about them, you should care about that too.

</comment></comment><comment> iso8859-1 Would this make it possible to have the whole page in <noscript> tags to make it crawlable by all bots and browsable in Links, Lynx, Dillo, w3m and offByOne?

<comment><USER15> Yes, that's a good idea. You'd just need to introduce a little wrapper around the client-side rehydrate to move the contents of the <noscript> tag out of the <noscript> before calling React.render.

Then again, you don't really need <noscript> in that case. It's rendering server-side, so the page already displays correctly, you just need to make sure all your links work.

<comment><USER16> I've been burned by trying to read the contents of noscript nodes before. Some browsers don't support that at all.

<comment><USER15> Oh wow that's annoying.

</comment></comment></comment></comment><comment><USER17> I've been doing something similar using Backbone and Ezel[1] (I first started using Rendr[2], but couldn't get into it): As the OP says, it can be a bit confusing to get your mind around. Particularly the routing; part of my intention was to use the "isomorphic" technique -- btw, as a mathematician, I _really_ hate that this term is used...but I digress -- to create a SPA that falls back to a traditional multipage site if/when JavaScript is disabled. It was a bit of a hurdle, but ultimately proved possible.

I might give React a closer look, having read this.

[1] [http://ezeljs.com/](http://ezeljs.com/)

[2] [https://github.com/rendrjs/rendr](https://github.com/rendrjs/rendr)

</comment><comment><USER18> I'm also experimenting with "isomorphic" apps. I wrote a router with an expressjs/hapijs like API (middlewares included). The main point is handling the state _before_ choosing the view. The concept is general enough to avoid being tied to React although React makes things easier. Once you have such a router, handling nested views (a la react-router) is a trivial particular case.

Here's my lab [https://github.com/gcanti/tom](https://github.com/gcanti/tom)

<comment><USER19> I'm interested! I can't find your main point back in your examples, however - I need to be able to asynchronously get data from all kinds of places before I can even think about calling React.renderToString. Does tom allow that? If so, what am I missing?

<comment><USER18> > I need to be able to asynchronously get data from all kinds of places before > I can even think about calling React.renderToString

You can define middlewares, as you would do server-side with expressjs:

        router.route({
          method: 'GET',
          path: '/users/:userId',
          handler: function (ctx) {
            // load user async
            getUser(ctx.params.userId, function (err, user) {
              ctx.user = user;
              ctx.next(); // exec next middleware
            });
          }
        });

There is a `demo` folder with a detailed example. The main entry point for the client is here [https://github.com/gcanti/tom/blob/master/demo/client.js#L21](https://github.com/gcanti/tom/blob/master/demo/client.js#L21)

<comment><USER19> Thanks! No express experience so the term didn't mean anything to me. My understanding of the word "middleware" is "well, it has no UI and it isn't a database or robot arm either, but we don't really know what it is either".

</comment></comment></comment></comment><comment><USER20> Nice writeup. I can definitely see "isomorphic" or client/server frameworks (React and Ember especially) being the go-to choice for new sites.

I guess an exception would be richer "experiential" type of apps and toys, where some DOM might be replaced with Canvas/WebGL, and transitions/animations/etc take precedence over SEO and initial load time. I haven't seen much innovation in terms of MVCs or frameworks that target these types of sites.

<comment><USER11> I'm interested to see this talk:

[http://conf.reactjs.com/schedule.html#beyond-the-dom-how- net...](http://conf.reactjs.com/schedule.html#beyond-the-dom-how-netflix- plans-to-enhance-your-television-experience)

Jafar is already a great presenter, and seeing someone using React without a DOM should be inspiring.

<comment><USER20> That sounds pretty great, actually. Would love to see an example project that uses React without a DOM.

</comment></comment></comment><comment><USER21> Great job! Also love the write up you gave and that you shared the code. I tried doing something similar a while back but never got around to finishing it, so I'll definitely dig through this source for some inspiration. I'm very curious how you'll develop the integration between webpack and gulp (or whatever you plan on using) as I tried doing something similar with Grunt but eventually gave up. Having only one build step would be awesome.

<comment><USER22> Here at Hootsuite we just finished rolling out webpack, and we're using it with grunt. If there is interest, I could probably get the project lead to do a writeup on our code blog.

<comment><USER21> That would be appreciated for sure. Or even just a quick gist of the setup files. I can probably figure it out, just haven't had enough time to play around :(

</comment></comment></comment><comment><USER23> Yes, yes, yes. At my company we've been switching everything over to React for both client/server rendering using our own ExecJS rendering engine for Ruby on Rails. It certainly adds a bunch of complexity to the stack, but every improvement we make provides new benefits in terms of the ease with which we can keep the API stack we like while cranking out rich UI while worrying much less about the client/server distinction.

Needless to say, I am a React fan.

That said, here are some things you will run into as you build more complex applications with this architecture. Some are related to shared browser/server JavaScript and some are React in general:

* You will find that some JavaScript libraries you want to use should not be loaded into the server context.

* On occasion, you will need to add server-vs-browser conditionals. And creating components to deal with browser-focused JS libraries (think Google Maps) will require some liberal and sometimes awkward use of React component lifecycle methods.

* Until there's a nice, agreed-upon open-source layering library for React out there, or you make your own, things like click-based (not hover-based, which can work with just CSS) dropdowns and non-modal dialogs are weirder to get to dismiss (when clicking outside of them) than they should be. Just because of the way React events happen and are bound.

* Also because of the way events are bound, it's awkward to write nice reusable form components. Without some trickery, you can only bind events from the component you're writing to its descendents. You can't bind events from one descendent to another. You end up writing a new component for each form every time, which isn't necessarily terrible until you want to make a fancy form builder like Rails provides in ERB. I've tried every which way around this, and I've had some success, but the solution always feels wrong and ugly no matter how I do it.

* This is really more of a good thing, but it's so enabling that you'll never really be done adding convenience features. There are just so many "Wouldn't it be nice if ____ just worked?" scenarios that get you thinking about the next reusable tool you want. I spend a LOT of time trying to create the "perfect" browser-side data store abstraction and the "perfect" lazy loader/renderer component for not-yet-fetched models.

The tradeoffs thus far have been worth it, but we haven't yet found or built the holy grail. So many things are so much easier than the old ways, but sometimes they're harder.

<comment><USER24> Do you have some example use cases for your form descendants vs. event bindings issues? I'd like to see how they could possibly map to React form libraries.

<comment><USER23> It's kind of an abstract problem to describe without code examples or without diving pretty deep into React, but let me see if I can just make something up without getting too far in the weeds. Imagine you're trying to make a ModelUpdateForm component that you can just drop in, which manages all its own state:

      var ProfileUpdateForm = React.createClass({
        render: function() {
          return <ModelUpdateForm email@example.com}>
            // I don't actually have a reference to `form`.
            // I can't have a reference to `form`.
            // But I need to link state between the ModelUpdateForm and its inputs.
            // Anyway, this is never going to work.
            <ModelInput type="text" valueLink={form.modelValueLink("name")} />
          </ModelUpdateForm>;
        }
      });

Weird workaround that I'm not sure is an officially sanctioned way to deal with it and fear might break in future React versions or have unintended consequences:

      var ProfileUpdateForm = React.createClass({
        render: function() {
          return <ModelUpdateForm
            firstname.lastname@example.com}
            do={function(form) {
              // Instead of taking children, ModelUpdateForm takes a `do` function prop.
              // It passes itself to `do` which give you a reference to which you can link its inputs.
              return <div>
                <ModelInput type="text" valueLink="form.modelValueLink("name")} />
              </div>;
            }}
          />;
        }
      });

Another idea I've been kicking around and haven't tried would be to create some sort of linker object. Here's the hypothetical end result:

      var ProfileUpdateForm = React.createClass({
        render: function() {
          var valueLinker = new ModelUpdateForm.ValueLinker()
          return <ModelUpdateForm firstname.lastname@example.com} valueLinker={valueLinker}>
            <ModelInput type="text" valueLink={valueLinker.linkState("name")} />
          </ModelUpdateForm>;
        }
      });

tl;dr - The way React typically wants you to do things, ProfileUpdateForm would have to manage the state. But what I wanted to build was a reusable model-bound form component. If I have to write a lot of model-binding code every time I write a new form, then there's no point to trying to make a reusable component at all. So you start having to try weird-ish ways to get it to become feasible.

<comment><USER24> It looks like this could make use of React's context feature once #2112 [1] lands.

I have similarish form components [2] which need to do this the hacky way in the meantime (cloning [3] their children in order to pass the form prop they need all the way down):

        <forms.RenderForm form={ProductForm} initial={this.props.product} ref="productForm">
          <Container>
            <Row>
              <Field name="productName" md="8"/>
              <Field name="tags" md="4"/>
            </Row>
            ...

[1] [https://github.com/facebook/react/issues/2112](https://github.com/facebook/react/issues/2112)

[2] [https://github.com/insin/newforms- bootstrap](https://github.com/insin/newforms-bootstrap)

[3] [http://facebook.github.io/react/docs/clone-with- props.html](http://facebook.github.io/react/docs/clone-with-props.html)

<comment><USER23> So are you traversing the entire tree of children here? I'm familiar with cloneWithProps, but I've been wary about this technique because of how deep the components I actually want to bind could be and how much traversal it could take to find them.

</comment></comment></comment></comment></comment><comment><USER25> This is awesome. I've played around with React's server-side rendering [1] and was really impressed once I'd hooked it all up. To see React hook up the event handlers and render nothing at all was really satisfying.

I haven't had a chance to use react-router, but it's great to hear that they've put in the work to make server-side rendering a reality. I only hear positive things. Kudos.

[1] [http://www.crmarsh.com/react-ssr/](http://www.crmarsh.com/react-ssr/)

</comment><comment><USER26> Very cool, I haven't ready looked into react. I have just started with meteor and it's been fun and a big learning experience. My previous background was all with php and traditional client/server nteractions. It's quite hard overcoming that way of thinking. Not really sure if it's relevant but my first meteor app was completely built with calla & methods rather than realising the client/server boundary isn't what it used to be...

</comment><comment><USER27> Awesome stuff James :) I've been having a lot of those weird client vs. server realizations myself. Still getting used to thinking about stuff that renders in both places.

I'm particularly interested in hearing about your ansible + docker setup. I've been using both a lot lately, and trying to figure out the best way to use them together.

<comment><AUTHOR> Definitely worth another post for that! I'm still an amateur with these server ops tools, but I like what I have so far.

</comment></comment><comment><USER28> Cool stuff. Was planning to do something similar but never got around to implementing the client-side rendering bit ([http://www.jbernier.com](http://www.jbernier.com)). The codebase I work on at work is also isomorphic JS with React. Sharing client/server code is definitely the way to go.

</comment><comment><USER29> Yes it is over-engineered. Heck, even WordPress is engineered. Blogs are essentially static pages with the comments as a moving part (i.e. dynamic). Most blogs can happily leave on a static web folder if bound to something like Disqus or whatever you decide to use.

<comment><USER30> It's true. I've over-engineered my blog as well to be isomorphic, but then I realized there was zero need for client side functionality so I've rendered it all static via a simple crawler. Much easier to deploy and serve with NGINX. Comments are powered by Disqus.

<comment><USER31> Even better: host it on S3 for a few cents per month.

</comment></comment></comment><comment><USER32> This is very nice! A question though: it does need a knowledge of client state right? How big is that data per session? Is it viable to keep the data on client and send with each request via a cookie so that you don't need more server resources?

<comment><AUTHOR> Which client state? The only penalty is that the server needs to send a "payload" of data to the client on the initial rendering, which is all the data that the server used to render the initial HTML. Once the client picks up this payload, from then on it just uses normal REST patterns to query APIs for data.

You may need a session for authentication, but that's it.

</comment></comment><comment><USER33> Wow, JavaScript is approaching science fiction levels of sophistication! Love the idea of moving functionality from client to server or reverse. Knew about Docker but not Ansible, thanks for that. Now we need some Sweet Macros to help too.

</comment><comment><USER9> > Unfortunately, full client-side apps (or "single page apps") suffer from > slow startup time and lack of discoverability from search engines.

This is simply not true. Google announced that they can crawl single page apps just fine nearly a year ago ([http://googlewebmastercentral.blogspot.com/2014/05/understan...](http://googlewebmastercentral.blogspot.com/2014/05/understanding- web-pages-better.html)) and although Bing hasn't announced anything they are likely working on the same thing if it's not already rolled out.

Google does this already; it works. Rendering on the server has little actual value in 2015 but it some how became a critical feature all of the JS frameworks are fighting for without proper explanation of its benefit.

EDIT: It's fine if you disagree and I don't even mind being downvoted, but please do explain.

<comment><USER34> _Rendering on the server has little actual value in 2015_

There is life outside of Google, you know. There are other search engines, other crawlers that are not search engines, other programs people use on your website that are neither browsers nor crawlers.

<comment><USER9> Can you be more specific? If I'm going to spend a great deal of money on compute and tailor my library decisions based on this feature, I need to know that it is really important. Alluding that Yandex might not have this technology yet is not good enough for me.

<comment><USER35> There are thousands of pieces of software that hit a URL and attempt to do something useful with the contents. Just try linking to a page on your own site on Twitter and tail your logfiles to see all the interesting bots that show up.

A couple of examples off the top of my head:

If you link to a web page on Reddit, they run a simple crawler to try and extract an image they can use as a thumbnail representation: [https://github.com/reddit/reddit/blob/af09fa8dee69bef4f65a16...](https://github.com/reddit/reddit/blob/af09fa8dee69bef4f65a1662d9ad91c2329946e1/r2/r2/lib/media.py#L470-L523)

If you link to a URL in Slack, they do something similar: [https://api.slack.com/docs/unfurling](https://api.slack.com/docs/unfurling)

</comment></comment></comment></comment><comment><USER36> My god so many incredible links of crazy blogs here...

I took a certain pleasure in the opposite recently, by writing on a few simple .html files on an Apache server with headers in <h\d> and content in either <p> or <ul>

</comment><comment><USER37> In addition to server-rendered blogs and this isomorphic blog, I wrote a client-side blog called "Jr" ([https://github.com/Xeoncross/jr](https://github.com/Xeoncross/jr))

</comment><comment><USER38> I've been doing this for a private project, and a LOT of my time is sunk into thinking how my app should be structured. It's an absolute nightmare, but also great fun!

</comment><comment><USER39> this is a really cool idea, however I can see how some people would try to abuse the app playing pranks on other people and the like.. I don't have an iphone so I can't check if there are some ways that the users are verified (basically a test to see if they are really blind) seems extreme but this might be better to help grow a more 'healthy' community

</comment><comment><USER40> And I was thinking using Plone for my blog was overkill...

Wel... "If it's worth doing, it's worth overdoing".

</comment><comment><USER41> Great post. Why didn't you use JSX?

</comment><comment><USER42> Add some immutable data and sweet.js macros and you've nearly got ClojureScript!

</comment><comment><USER43> haha, this is awesome!</comment>


Show HN: A fish plugin for when you're stuck on an error. perfect for newbies - <AUTHOR> https://github.com/adgelbfish/imstuck-fish <comment><USER2> ???

What does it do? Your README isn't very descriptive. Is it just an alias for `man`?

<comment><USER3>
      function imstuck -d "for when you're stuck on an error"
        set err (eval $argv 2>&1)
        open "https://google.com/search?q="$err
      end</comment></comment>


Offer HN: I want to do QA/testing for your web app - <AUTHOR>

Hey HN! I've wanted to do QA for a while now but have had some problems getting into the field. I never finished my degree and don't live in a big city, so there aren't that many opportunities for me. I've decided to teach myself selenium recently since it seems popular for testing. I'm still a novice at it, but I'd like to have the opportunity to learn/use it in a more realistic setting.<p>If you have a web app or open source project that needs testing please send me an email. Alternatively, if you work in QA and have any advice for me I'd also love to hear from you too. This is a no strings attached offer. I'd just like to volunteer for you in my spare time for several weeks or possibly longer if we're a good fit. <comment><USER2> If you don't get enough responses here, you could always try offering this to any popular open-source project on Github.</comment>


The Pharmacy School Bubble Is About to Burst - <AUTHOR> https://newrepublic.com/article/119634/pharmacy-school-crisis-why-good-jobs-are-drying <comment><USER2> The other issue is how much of it can be readily automated. Managing drug interactions will likely be able to be handled by AI software. Even dispensing can be done more tightly and efficiently with an automafed process. The medical lab tech field is going the same way.

</comment><comment><USER3> Need to turn those PharmD programs into DEVOPS bootcamps.

<comment><USER4> I want to make a Breaking Bad joke here but it is too sad.</comment></comment>


When Linux required installation parties - <AUTHOR> https://opensource.com/article/18/12/my-open-source-story <comment><USER2>
      So I dragged my tower PC to a "Linux installation party."

Is that what they were called in other places? In SV, we had "copyfests", where people brought computers with diskette drives to help replicate the many disks needed to install the current distro, and "installfests", where novices could bring their desired target computers to have access to distro files and install/diagnosis help from others.</comment>


Controlling the terminal from Common Lisp (part 2) - <AUTHOR> https://turtleware.eu/posts/Charming-CLIM-tutorial-part-2--Rethinking-The-Output.html <comment><USER2> Interesting. Lisp is hard not because of the language. I read the source code and unlike python etc it is straightforward.

but the setup is hard. Clojure setup is still a bit hard. But at least package management is Easy. Asdf ...

The most difficult issue is it is more or less pure. Whilst the c external interface seems easier. But it is not designed from ground up as one of the language in a system. JavaScript sort of work with HTML and CSS and not dealing with this. You do have canvas. But not for simple terminal io like this.

Somehow it is kind of lost on space experience. Great language and great ecosystem. Just out there, alone and for their own kind.

But nice to read. Still find it hard to read python after writing. Even there is only one way to do so.

<comment><USER3> TXR Lisp setup is easy. If you have to build from source (not a user of a distro that has packaged it like Guix or Void, then:

      ./configure && make && sudo make install

Then there is a txr executable with some auto-loaded library files in /usr/share, and that's it. The txr executable performs all the sysrooting calculations so you can move an installation of it anywhere, as long as you keep the relative locations of the files the same (the installation tree shape). If you have a tarball of it, it will unpack and run from anywhere.

The documentation is all in a single man page, covering everything.

TXR is designed from the ground up as a system utility integrated well into a POSIX environment.

TXR requires no package management or build system because the _load_ function behaves sanely. If you load a file that is located in path/to/dir, and that file itself does a (load "foo") at its own top level, then that top-level load look for path/to/dir/foo.tlo (compiled file) or path/to/dir/foo.tl (source): i.e relative to the same directory as the parent file that is being load-ed.

There is no need to mess around with irksome path schemes (look for stuff here, look for stuff there, ...). You're in the driver's seat: put the pieces you need where you want, load each of their main files, and that's it.

We can make a package just by putting some files into a directory, and documenting which one is the main one that is to be loaded. That one loads the others using relative paths, and that's that.

A module/program's main file can rebuild itself and the others like this:

       (defvarl myfiles '#"main foo bar baz xyzzy") ;; word list lit, same as '("main" "foo" ...)

       (each ((f myfiles))
         (or (compile-update-file `@f.tl` `@f.tlo`)
             (load f))

_compile-update-file_ checks the existence and time stamps, rebuilding the .tlo if it is missing or older than the .tl file. Compilation usually has the same effect as loading, so in that case we don't have to load. If compile- update-file returns nil, then it means it did nothing; we load the existing compiled file then.

> _But it is not designed from ground up as one of the language in a system._

I know exactly what you mean there; that is why I designed TXR from the ground up in the form factor of a utility that fits into the surrounding OS environment instead of being a kind of immigrant from a Lisp planet. It's Lisp, for Unix and C people -- with a decent Windows port.

<comment><USER3> Speaking of controlling the terminal, TXR Lisp has a built-in comprehensive wrapper for termios.

[https://www.nongnu.org/txr/txr- manpage.html#N-0260AE30](https://www.nongnu.org/txr/txr- manpage.html#N-0260AE30)

It even supports the coreutils "stty -g" string format for saving and restoring termios settings.

</comment></comment></comment><comment><USER4> How does one go about unit testing those terminal controlling functions?

<comment><USER5> If you're not using much system calls, one simple way is to capture the byte sequences that would be sent to the terminal, and simulate the byte sequences that would be received.

(A terminal library I wrote, which doesn't do as much as this CL one, uses byte stream I/O almost entirely. [https://www.neilvandyke.org/racket/charterm/](https://www.neilvandyke.org/racket/charterm/) )

Another option might be to connect it to `screen` or `tmux`, and scrape the characters and attributes from there, or feed it to a terminal GUI program like `xterm` and scrape the pixels from there. And synthesize the input to the terminal emulator.</comment></comment>


Show HN: MatchPact – Aggregator for offers to match donations BLM - <AUTHOR> https://matchpact.com/?ref=hn <comment><USER2> Great idea! Anyone who itemizes in a high tax bracket and can also get an employer match (assuming an eligible charity) could use this to almost quadruple their donation (as opposed to merely tripling it).</comment>


Ask HN: What small webapps do you know that have a large audience? - <AUTHOR> <comment><USER2> [http://preev.com/](http://preev.com/)

[http://gifcountdown.com/](http://gifcountdown.com/)

[http://www.convertico.com/](http://www.convertico.com/)

[http://pastebin.com/](http://pastebin.com/)

[http://www.bustaname.com/](http://www.bustaname.com/)

<comment><USER3> +1 to Bustaname.com, it's a great tool for finding domain names and one I have found to be invaluable.

<comment><USER4> Bustaname is pretty nifty and useful. I'm also a fan of Namebird, a name generator that uses probability algorithms to make names that are catchy and memorable [http://shobia.com/namebird](http://shobia.com/namebird) (and only partly because I made it!)

<comment><USER5> I keep seeing this plugged (by yourself actually.. :P )

I think it definitely needs a tutorial or walkthrough of some sort. I only ever get dodgy looking words that aren't memorable in any sense, in fact would be extremely difficult to say over the phone. I am guessing it's the way I'm using it but I don't know any better! :)

<comment><USER4> Hehe, launching something new you made is hard/takes persistence. Hope I'm not being annoying; seemed to be appropriate here and the other time I mentioned it in a comment on HN.

Sorry to hear that. There actually is a tutorial/guide referenced a bit lower on the page but not many people seem to see it, may need to emphasize it more!

Maybe try the basic word maker to make words starting with 'arb,' 'orb' or 'mar'? I've found the words those generate are fairly nice as an idea for what it can do. Also maybe try shorter words?

Dunno. To be honest, having used the other name generation tools, this is the one I'd use to get a new domain name and a good amount of people have found names they like through Namebird (someone put in starts with 'pay' and got paydrow for instance and I used it to name itself too :P).

<comment><USER5> No no not annoying at all! If anything I'm annoyed (extremely mildly, mind) at myself because I'm not managing to get it :)

It looks like a really good tool if (and I'm assuming it does for others) it works nicely, I'm just missing that moment of 'click' right now where I grasp how it works. Going by what you've said I think I was more using it as "here's a word, do more with it please website robot" \- I'll have another play! :)

</comment></comment></comment></comment></comment></comment><comment><USER6> [http://ipinfo.io](http://ipinfo.io) API gets ~300M requests per month

</comment><comment><USER7> [http://pinboard.in](http://pinboard.in)

<comment><USER8> I love pinboard! I started out with delicious until it got bought and got weird, then I moved to Google bookmarks but it's so crude. I need something that follows me on every machine. The magick is in being able to add tags.

<comment><USER9> I'm so curious.. I don't use pinboard, but everyone says it's awesome. What's so good in it?

<comment><USER10> I've wondered the same.. I actually subscribed to see what the hype was about; after using it for a few weeks I found it hard to justify the cost for such a simple and relatively featureless webapp

<comment><USER11> I actually gave up just a few weeks ago on Delicious (I have 15k+ bookmarks there, but it gets too slow too often) and moved to Pinboard.

Exporting from Delicious into Pinboard was done in a few minutes.

Pinboard is just like Delicious but faster and more responsive, I am willing to pay $10.61 for that.

And I actually paid for archive option not because I particularly need it but because I like the idea of supporting a lean one person operation.

Only thing Pinboard is missing(just like Delicious is missing) is quick filling in of suggested tags.

Also, for some reason Pinboard suggests IFTTT tag almost every time. I only use IFTTT sparingly.

</comment></comment></comment></comment></comment><comment><USER12> [http://www.pogdesign.co.uk/cat](http://www.pogdesign.co.uk/cat) is a TV calendar I have been using for like 7 years, damn thing is great.

Not sure of their exact traffic but it's pretty popular.

<comment><USER13> It's pretty neat :) I'm building one myself, about 20k users atm. (more targeted at getting to the content though)

[http://schizoduckie.github.io/DuckieTV/](http://schizoduckie.github.io/DuckieTV/)

<comment><USER14> I'd host those images on something other than Imgur, some of the images there are missing.

<comment><USER13> Thanks for the heads up! We recently swapped out some images that are now not under my private account

</comment></comment></comment></comment><comment><USER15> [http://strawpoll.me/](http://strawpoll.me/) \- create simple straw polls that anyone can answer at a unique link. Every game streamer I watch uses it daily. Dead simple to use and a memorable name.

<comment><USER16> I like that... and I would use it if it allowed the voter to enter their name so I could see who had chosen which response.

</comment></comment><comment><USER17> [http://pythontutor.com/](http://pythontutor.com/) (my webapp) very small footprint ... just a single simple CGI script. but pulls in 6,000 - 10,000 uses per day. not "large" by commercial standards, but not bad for a free tool made by a single person.

<comment><USER18> Cool! This reminds me of an object graph visualizer my friend Martin have written for SharpDevelop long time ago: [http://community.sharpdevelop.net/blogs/martinkonicek/archiv...](http://community.sharpdevelop.net/blogs/martinkonicek/archive/2011/06/04/debugger- visualizers-for-sharpdevelop.aspx)

</comment></comment><comment><USER19> [http://sleepyti.me](http://sleepyti.me) \- simple concept, simple implementation, lots of users.

<comment><USER20> Shameless plug, [http://jollynap.com](http://jollynap.com)

It's the same formula SleepyTime uses, in a mobile friendly format.

<comment><USER21> The two appear to get different results. To get up at 7:00 AM, sleepyti.me says to go to sleep at 10:00 PM, whereas jollynap says to go to bed at 10:45 PM. Obviously the latter is taking 15 minutes into account for falling asleep, but it's still an hour difference.

<comment><USER20> SleepyTime mentions, "The average adult human takes fourteen minutes to fall asleep..." so I compensate with 15 minutes in the calculation. There shouldn't be any major variance. Perhaps an odd calculation with Daylight Savings?

</comment></comment></comment></comment><comment><USER22> [http://www.worldtimebuddy.com](http://www.worldtimebuddy.com)

<comment><USER23> Use it all the time. Great tool!

<comment><USER24> This would be great if it worked on mobile (I.e not desktop optimized)

<comment><USER25> I agree about the lack of mobile web site, but I broke my resistance and the official iOS app is good (there's an Android one too)

</comment></comment></comment></comment><comment><USER26> [http://mathb.in](http://mathb.in)

Math pastebin with LaTeX/HTML/Markdown mashup.

</comment><comment><USER27> [http://www.workflowy.com](http://www.workflowy.com) is very popular and one of my favorite apps

<comment><USER28> I love workflowy, but it's definitely not a "small" web app.

</comment></comment><comment><USER29> [http://everytimezone.com](http://everytimezone.com)

<comment><USER30> Maybe not as pretty, but more customizable [http://www.worldtimebuddy.com/](http://www.worldtimebuddy.com/)

</comment></comment><comment><USER31> [http://ip-api.com/](http://ip-api.com/) ~400m requests/month

<comment><USER32> What technique do they use to obtain "Internal IP"?

<comment><USER33> It's done using WebRTC: [https://github.com/beefproject/beef/wiki/Module:-Get- Interna...](https://github.com/beefproject/beef/wiki/Module:-Get-Internal-IP- WebRTC)

</comment></comment></comment><comment><USER34> [http://doodle.com](http://doodle.com)

<comment><USER35> [http://when2meet.com](http://when2meet.com) as well

<comment><USER36> I've been looking for a Doodle replacement. This looks promising.

</comment></comment></comment><comment><USER37> Productivity web apps that I have used:

\- Carbon Fin Outliner (Outliner) - [https://cfoutliner.appspot.com/](https://cfoutliner.appspot.com/)

\- Writebox (Dropbox Text Editor) - [https://write- box.appspot.com/](https://write-box.appspot.com/)

\- Toodledo (Tasks, Notes, etc) - [http://www.toodledo.com/](http://www.toodledo.com/)

\- Textdrop App (Dropbox Text Editor)- [https://www.textdropapp.com](https://www.textdropapp.com)

</comment><comment><USER38> [http://sebastianpontow.de/css2compass/](http://sebastianpontow.de/css2compass/)

Nice tool to convert css into scss, a bit like [http://js2coffee.org](http://js2coffee.org) (which has probably even more audience)

Would be nice to see css2compass as a node module like js2coffee does, we should tweet the author about this.

Very usefull tool. I dont know the analytics for those, but I use them almost everyday ;)

</comment><comment><USER39> Launched [https://passwds.io](https://passwds.io) a few days ago and it's gotten 500 uniques every day since it's launch. By no means large, but growing every day. :)

And just made a new blog post about plans for passwds.io, like opening up the source: [https://longren.io/introducing-passwds- io/](https://longren.io/introducing-passwds-io/)

</comment><comment><USER40> I'd love to know what kind of numbers [http://bigassmessage.com/](http://bigassmessage.com/) sees.

<comment><USER41> That Magic theme is going to kill someone with epilepsy.

<comment><USER42> Jesus Christ, there really needs to be a warning on that.

</comment></comment></comment><comment><USER43> [http://idonethis.com/](http://idonethis.com/) is a simple idea that lots of people use.

<comment><USER44> Their [integrations][1] are pretty nice, too. Command line support! :)

[1]: [https://idonethis.com/apps-integrations/](https://idonethis.com/apps- integrations/)

</comment></comment><comment><USER45> Cookie Clicker

[http://orteil.dashnet.org/cookieclicker/](http://orteil.dashnet.org/cookieclicker/)

</comment><comment><USER46> [http://meyerweb.com/eric/tools/dencoder/](http://meyerweb.com/eric/tools/dencoder/) \- URL encoder/decoder

[http://jsonformatter.curiousconcept.com/](http://jsonformatter.curiousconcept.com/) \- JSON formatter

[http://www.colorzilla.com/gradient- editor/](http://www.colorzilla.com/gradient-editor/) \- Gradient generator

[http://mp3cut.net/](http://mp3cut.net/) \- MP3 cutter

[http://ipinfo.io/](http://ipinfo.io/) \- Geo from IP as JSON

[http://www.usdebtclock.org/](http://www.usdebtclock.org/) \- US Debt clock

[http://ifttt.com](http://ifttt.com) \- General purpose web robot

</comment><comment><USER47> What counts as a large audience?

100k monthly uniques? 1 million? 10 million?

<comment><AUTHOR> I would think that for a small web app 100K a month would probably be the starting threshold. (maybe even 50K if it's < 6 months old)

</comment></comment><comment><USER48> [http://naymit.com/](http://naymit.com/)

In many regions of the world, navigation devices only locate a fraction of buildings by their street address. Naymit lets you mark, share and find exact locations.

<comment><USER49> I'm intrigued -- what countries are we talking about?

<comment><USER48> From my own experience at least most countries in Western Balkans and Middle East. I imagine things are even worse in Africa or India.

</comment></comment></comment><comment><USER50> not huge but jsonprettyprint.com gets 20k hits a month. [http://www.similarweb.com/website/jsonprettyprint.com](http://www.similarweb.com/website/jsonprettyprint.com)

</comment><comment><USER51> I'd imagine jsfiddle.

<comment><USER35> I'm not sure what counts as "small", but I can't imagine they have very few LOC...

</comment></comment><comment><USER52> [http://imgur.com/](http://imgur.com/) comes to mind, though its scope has obviously seen a vast increase from when it first appeared

<comment><USER53> Given that they raised $40mm[1] earlier this year not sure they really fit in this list.

[1] [http://venturebeat.com/2014/04/03/imgur-the-startup-that- doe...](http://venturebeat.com/2014/04/03/imgur-the-startup-that-doesnt-need- funding-closes-40m-from-reddit-andreessen-horowitz/)

</comment></comment><comment><USER54> [https://minotar.net](https://minotar.net) does about 4 billion requests every month. About 15 million unique "visitors".

</comment><comment><USER55> Etherpad : real-time collaborative text editor. Readable URLs so great for instantly getting people together on a doc. [http://etherpad.org/](http://etherpad.org/) is the project site but a commonly used hosted one is at [https://etherpad.mozilla.org/](https://etherpad.mozilla.org/)

</comment><comment><USER56> [http://www.ranksignals.com](http://www.ranksignals.com)

Used by over 50,000 internet marketers every month.

</comment><comment><USER57> [http://www.smitecamp.com/](http://www.smitecamp.com/)

A really simple Rails CRUD app where 90% of the time was spent inputting data and making it look nice. We average about 500 daily uniques and pay for it purely by advertising revenue (lol - "revenue"). It pays for itself and is a nice resume-booster.

</comment><comment><USER58> Interesting to consider that the vast majority of these apps could be implemented as well or better as mobile apps. I'm on record as being a skeptic of the "mobile is eating the world" meme but I do expect a lot of these kinds of smaller, more specialized apps will migrate to the computers we carry with us everywhere.

<comment><USER59> Looking at the top-voted examples here, I would entirely disagree. They seem to mostly be utilities that would be used while in the process of doing other, more involved work.

For those apps that are useful on mobile, what advantage would they gain by being developed as mobile apps? In their current states they work on nearly every system commonly in use in the world, including all of the popular mobile platforms.

</comment></comment><comment><USER60> [http://jsonip.com/](http://jsonip.com/) has quite a bit of traffic

</comment><comment><USER61> [http://www.metronomeonline.com/](http://www.metronomeonline.com/)

</comment><comment><USER62> [http://www.leandomainsearch.com](http://www.leandomainsearch.com)

</comment><comment><USER63> [http://www.boomeranggmail.com/](http://www.boomeranggmail.com/) I feel like half the people I talk to at work use Boomerang for gmail. They seem small because I don't see a footprint online or much marketing from them.

</comment><comment><USER64> [http://scrumy.com/](http://scrumy.com/) \- scrum board

<comment><USER65> I keep reading this as "screw me"

which, you know, with scrums, kind of makes sense

</comment></comment><comment><USER66> [https://targeted.io](https://targeted.io) \- Email testing, made by two developers. 200% growth per month. Not large in commercial standards but still large amount of users for a two man team.

</comment><comment><USER67> [http://devdocs.io/](http://devdocs.io/)

</comment><comment><USER68> DoCapture got 20,000 uniques the first two days. Not much but still hitting a few hundred daily [http://skakunmedia.com/docapture/](http://skakunmedia.com/docapture/)

</comment><comment><USER69> [http://timertab.com](http://timertab.com)

</comment><comment><USER70> [http://aboutbrowser.com](http://aboutbrowser.com) \-- share browser details via a link or email. Enables better troubleshooting than "What browser are you using?"

</comment><comment><USER71> [http://birthde.com](http://birthde.com)

</comment><comment><USER72> [http://utm.io](http://utm.io)

url shortener with builtin support for google analytics link tagging utm parameters. time saver for marketers creating tracking links for google analytics.

<comment><USER73> Seems like a cool idea, though all I'm getting is a directory listing when I visit the site.

<comment><USER72> sorry about that I thought sun night would be a good time to move to heroku. should be resolved now.

</comment></comment></comment><comment><USER74> [http://codepen.io](http://codepen.io)

</comment><comment><USER75> [http://ownzee.com](http://ownzee.com)

</comment><comment><USER76> [http://yipgo.com](http://yipgo.com)

<comment><USER23> This looks intriguing, but as usual not enough information on the site. And I'm not willing to sign up after having seen only 2 tiny screenshots.

</comment></comment><comment><USER36> [http://www.gistboxapp.com](http://www.gistboxapp.com) \- lets you add metadata to your GitHub gists (e.g. labels) and the search is much better

</comment><comment><USER9> SunCalc is a little app that shows sun movement and sunlight phases during the given day at the given location.

[http://suncalc.net/](http://suncalc.net/)

</comment><comment><USER77> Umap: [https://umap.openstreetmap.fr/](https://umap.openstreetmap.fr/)

Easily create custom maps showing distances, areas, points/pins, heatmaps...

</comment><comment><USER78> Open source mobile analytics & push notifications - [http://count.ly](http://count.ly) \- more than 2000+ servers running worldwide

</comment><comment><USER79> [http://socialairways.com/](http://socialairways.com/) Is a nice application that connects people who are on the same flight.

</comment><comment><USER80> [http://standardjavascript.info](http://standardjavascript.info)

Great when I just cant remember the syntax for non-jQuery things in pure javascript!

</comment><comment><USER81> [http://universalscrobbler.invitationstation.org](http://universalscrobbler.invitationstation.org), a manual scrobbler for last.fm

</comment><comment><USER82> [http://www.sharedcount.com/](http://www.sharedcount.com/)

According to their Twitter, their API serves more than 1 billion requests per month.

</comment><comment><USER83> [http://www.tubalr.com/](http://www.tubalr.com/)

Probably not a large audience but very useful: one mouse click and you are listening music.

</comment><comment><USER84> [http://feedbin.me](http://feedbin.me)

As with Pinboard, it became popular in the vacuum following the implosion of a large, centralized service.

</comment><comment><USER85> Would be interesting if we could share some actual numbers.

[http://www.music-map.com](http://www.music-map.com) has about 100k monthly users.

<comment><USER86> What this app suppose to do ? And from where you take the data ?

<comment><USER85> It shows bands on a map. Organized by taste. The data comes from [http://www.gnoosic.com](http://www.gnoosic.com)

</comment></comment></comment><comment><USER87> [http://www.checkiday.com/](http://www.checkiday.com/) shows you what obscure holidays are happening every day.

</comment><comment><USER88> Craigslist.

</comment><comment><USER89> [http://escaladenotas.cl](http://escaladenotas.cl)

300K users per month, 600K in June and November, mainly Chilean teachers.

</comment><comment><USER90> [http://tweetd.com](http://tweetd.com)

[http://fa2png.io/](http://fa2png.io/)

</comment><comment><USER91> [http://doodle.com/](http://doodle.com/) \- Very simple way to pick a time for a meeting

</comment><comment><USER92> Not sure if it's small enough: [https://www.toggl.com/](https://www.toggl.com/)

</comment><comment><USER93> Interesting, how do you explore these apps? Personally, I've never heard about any of apps mentioned so far.

EDIT:

>You mean how do people find out about these apps?

Yes.

<comment><USER29> What do you mean by "explore"? You mean how do people find out about these apps? Usually word of mouth, online forums, stuff like that.

Even five years ago, the global programming community wasn't that large. If someone built something small and useful, and they promoted it in their local community (like at a LUG, Perl Mongers, other meetup) they gained decent usage and exposure.

</comment></comment><comment><USER94> [https://clippod.com](https://clippod.com) \- Great social plugin for Google Calendar.

</comment><comment><USER95> [http://fridaysuntil.com](http://fridaysuntil.com)

Not really a large audience. :)

</comment><comment><USER96> [http://img42.com](http://img42.com) (temporary image hosting)

</comment><comment><USER97> [http://www.joesgoals.com/](http://www.joesgoals.com/)

</comment><comment><USER98> [http://www.yamllint.com/](http://www.yamllint.com/)

</comment><comment><USER99> [http://getbarometer.com/](http://getbarometer.com/)

</comment><comment><USER100> [http://isebolanear.me/](http://isebolanear.me/)

<comment><USER101> I'm in Houston and it's only 250 miles to Dallas and yet,

"You are 706.93 miles away from Ebola at Emory University Hospital! Stay safe!"

<comment><USER102> That's 100% correct, eight days ago there were zero active cases of Ebola in Dallas. The two active cases since the first one had been shipped out to other cities and they were just on watches for the remaining exposures.

</comment></comment></comment><comment><USER103> [https://jamaicanize.com](https://jamaicanize.com)

</comment><comment><USER104> [http://pininthemap.com](http://pininthemap.com)

</comment><comment><USER105> [http://www.hurl.it/](http://www.hurl.it/)

</comment><comment><USER106> [https://icomoon.io/](https://icomoon.io/)

</comment><comment><USER107> [http://cssdeck.com](http://cssdeck.com)

</comment><comment><USER108> [http://time.is](http://time.is)

</comment><comment><USER109> What can we consider a large audience? One million users?

<comment><AUTHOR> 100K bottom threshold, 50K if < 6 months old

</comment></comment><comment><USER110> [https://bufferapp.com/](https://bufferapp.com/)

[https://knowyourcompany.com/](https://knowyourcompany.com/)

</comment><comment><USER111> Cool list of small webapps.page bookmarked.

</comment><comment><USER112> newguid.com

</comment><comment><USER113> dinopass.com

</comment><comment><USER114> teuxdeux

</comment><comment><USER115> doodle.io

</comment><comment><USER116> Any.do

</comment><comment><USER117> twitter

</comment><comment><USER118> Yo

</comment><comment><USER119> The only example I can think of is HN.

It's probably the only example I can conceive of existing, too, since it's in a pretty unique position of being cheap to serve and indefinitely funded (hence not under pressure to grow, monetize, or advertise to cover costs).

<comment><USER120> nemcv.com

<comment><USER121> bookmarking this</comment></comment></comment>


The future of search will be visual - <AUTHOR> http://www.psykosoft.net/blog/?p=203

<comment><USER2> I tried it. Looks pretty cool. It really helps people with the perception of the product and information. I think it's a nice improvement of the existing search engines.

From UX perspective, if you can make the preview as mouseover with the content being displayed on a separate layer using iframe maybe much more convenient than open a new page and come back.

<comment><AUTHOR> hey dclara. Actually we've tried that but put it on the side for the moment. Certain sites had iframe buster and it would swallow the whole page, which was irritating. Actually we solved that issue recently so we might as well get it back. Thanks for the tip!

<comment><USER2> That's great. I guess there might be some bumps. It's unbelievable to see that you have made the changes so quickly overnight?

Now when I search for "keyboard", I saw totally different thing from last night. This time, I do see the preview for each site instead of big pictures. But I cannot say it's better to see the vague website page is better than see the clear product picture. I'm sorry to downgrade your hard work. Maybe other users think it's better. I only speak my mind.

How about using <jsp:include> for each preview page? The code looks like:

 <jsp:include page="xxx.jsp" />

#xyz_div { background- color:#000;background:rgba(0,0,0,0.95);display:none;position:absolute;left:0;top:0;width:100%;height:100%;z-index:2; }

<a href="#" onmouseover="javascript:showDiv('xyz_div'); <img title="Like to take a peek on the site? Click on it!" src="<%=asdf.gif %>">

This code definitely will not work, but just a hint. Check out Google image, when you click on a certain image, it expends to the details of the image. But still different I know. The rest is your job. But don't be hurry. Let me know if you have an update or need more feedback, email danmark.clara -at- yahoo.com.</comment></comment></comment>


Show HN: Award Street – Oscar history, movies/people, and live notifications - <AUTHOR> http://awardstreet.com/

<comment><AUTHOR> A couple of us movie buffs got together to build this app ahead of the event this Sunday. Appreciate your suggestions/feedback!</comment>


AdBlock browser extension starts showing *certain* adds by default now - <AUTHOR> https://adblockplus.org/acceptable-ads <comment><AUTHOR> AdBlock just got sold. I got this message in my browser today. [http://imgur.com/Pt0YfLk](http://imgur.com/Pt0YfLk)</comment>


Lessons Learned Launching a Side Project in 48 Hours - <AUTHOR> https://medium.com/learning-new-stuff/creating-a-two-sided-marketplace-in-two-days-4482dfc1ead8 <comment><USER2> Some ideas (take it with a grain of salt)

1) You should have a rating system for experts and award different level of badges and users should write reviews also experts with high scores should have a higher pay rate

2) interviewing experts is not going to scale not only you will not have the time but you also need internal experts to interview the Become an expert" applicants (you need some fast vetting process or rely on the rating system)

3) You should collect data from StackOverFlow and other sites and see which questions novice folks are having a hard time getting answers to and try to get experts on those topics (this could become your competitive advantage)

4) You can scale this to businesses - they would certainly appreciate the on- demand help aspect of this thing. Businesses specially small ones may have support account subscriptions with vendors like Red Hat, IBM, etc...which can be costly for them. If your experts are reliable they would rather pay you only when they need help instead of paying the vendors monthly/yearly.

5) As your experts are working the problems you should keep a very organized knowledge base of the issue and resolution (maybe you can monetize this data later on or it maybe useful somehow)

<comment><USER3> Thanks for your input! The are a ton of challenges ahead, and scaling experts is one of them. But as for now, getting demand is harder than supply. Although the demand is surely affected by the quality of the experts.

</comment></comment><comment><USER4> Nice. So how do you handle scaling this up? Working a full-time job, how would you expect to give this the man hours it needs, in order to determine if this is a viable business model? This is the main issue facing my side projects.

<comment><USER3> That remains to be seen! Depends on the growth, definitely.

</comment></comment><comment><USER5> I think you should simplify the service and make it strictly about fixing bugs in small programs. Why: because information is essentially perceived as worthless by the majority and almost any question a person could hope to ask is already one Google search or Stackoverflow question away from being answered. This pervasiveness of information contributes to the assumption that a person is entitled to it all for free (and that the person producing it ought to do it for free) - which is one of the main reasons businesses models built on content are so shitty.

"Please help me fix a very specific bug that's only in this one implementation in this current universe" is a lot easier to monetize than "please teach me how a for loop works." See what I mean?

<comment><USER6> I disagree that any question can be found on stack overflow. I see this service as filling the niche of answering questions I have that stack overflow ISN'T for. For example, when learning a new framework: "What's the idiomatic way to do _____?", or "From the documentation, it seems like [this feature] was accomplished with [this line of code], but in other tutorials, there's [this line]. What's the difference?", or "This paragraph in the get-started tutorial makes no sense. Could you explain this to me?" Just small lapses in understanding for subtle concepts, or practices in the real-world.

This site is actually something I've wished for in the past, while reading and learning new things online. I think the article explains it very elegantly: the service is like raising your hand to ask a question. I'll bet I'm not the only one who's wanted to raise their hand while learning by reading a guide or documentation before.

</comment></comment><comment><USER7> I like this idea. I personally think you are charging too little though. I know you want to make it affordable even for students but I feel that may only open it up for lower level programmers who are okay with working for low rates.

There is already a ton of help available online for low prices or free. I would like to see a service that focuses on instant help like this but with very experienced developers. I would have no problem paying over $60/hr or even a $100+ per hour for a guarantee that my problem will be solved. I would even fork out that kind of money for my employees to use a service like that. Something that I can deposit a certain amount of money per month into my employees account wallet which they can use towards live support issues and it only gets deducted if the problem was solved.

I may not be the norm though so take what I say with a grain of salt ;)

<comment><USER8> I came here to say this as well. I could see enterprise uses for companies with smaller budgets who can't hire a full time senior engineer but might need or make good use of one's time for an hour.

You could potentially even add scheduling, so Dev X could be scheduled for an hour every week with Client Y.

There's a lot of neat paths you could take, and there's some decent theories about the science of choices and human decision making you could read up on if you're interested.

Enjoyed the article, as someone with a near constantly full plate it's nice to read about a very substantial start in a bite sized time frame and makes me want to try to set aside a weekend as well.

<comment><USER3> Interesting idea regarding scheduling. That would require a bit strickter rules for our experts though. As for now, one of the benefitd the experts like is that it's 100 percent flexible. You answer chats only when your'e interested.

Would love to hear about those human decision theories, got links?

</comment></comment></comment><comment><USER9> Congratulations, a great example of MVP. Thanks for sharing learnings. very helpful.

</comment><comment><USER10> Yes, /r/programming is much more ruthless and honest in my experience. Listen to their comments and give them a bit more weight than most other forums.

</comment><comment><USER11> I'm confused -- does the hired developer make the $10/20min or does the site creator get it? Or what's the split?

</comment><comment><USER12> Nice! I hope this project goes somewhere.

Me and a friend of mine built something similar a while back but never really got to push it more. ([https://www.ladr.io](https://www.ladr.io))

We always thought there was a gap between Upwork and Stackoverflow.

</comment><comment><USER3> Hey, author of the article here. Let me know if you have any comments.

<comment><USER13> What an odd coincidence? I had a similar idea yesterday. Except, I think your solution should be more general; A site that lets anyone pay to talk to an expert on any topic. The user should post their question and the experts compete to be selected; it is important that only the experts that care about the question are selected. Kind of like uber for conversations. I don't think it should be a TaskRabbit clone. The experts only provide information; they don't do the work.

For example, I want to talk to someone about selecting an alibaba manufacturer for a specific niche. I also want to talk to someone about how to get products into retails stores. And so on.

There are many related services. For example, you can have translators connect people. I think there is also a need for translators for people with poorly formed ideas; the translators would communicate with the experts who don't want to deal with those people directly.

<comment><USER3> Great input!

However, it's quite hard to get that kind of product off the ground. Easier to start with a niche and work our way out to broader subjects.

We actually started with ReactHelp.com, then went wider to HTML,CSS and JS. And now, we have Ruby, Python & Java experts as well, so it's going in the direction of more subjects.</comment></comment></comment>


Amazon Takes Sales Tax War to California  - <AUTHOR> http://www.nytimes.com/2011/07/14/technology/amazon-takes-sales-tax-war-to-california.html?hp <comment><USER2> I found this quote hilarious:

"I don't think we want to send the message that companies can fund a political campaign for a referendum and maybe your customers won't be subject to sales tax."

Because it's not like some companies funded political campaigns to get this measure passed in the first place. ([http://online.wsj.com/article/SB1000142405274870439650457620...](http://online.wsj.com/article/SB10001424052748704396504576204791377862836.html))

Heaven forbid another big company ask what the citizenry thinks...

</comment><comment><USER3> It's really patently unfair for purchases from Amazon.com not to require sales taxes while purchases from BarnesAndNoble.com do require sales taxes. That's what this all boils down to. Amazon is not, on some level, competing directly with your local friendly indy bookshop (if you still have one), and that's not the right direction to look for a comparison... but they are competing with other online booksellers, who have to pay sales tax on their online book sales if and only if they _also_ have a bricks-and-mortar business. That's dumb.

<comment><USER4> Sales taxes fund local infrastructure. Why should Amazon have to pay for a fire department that it will never possibly need?

In regards to the "fairness" question, put it a different way: It's unfair that brick and mortar companies can offer their customers immediate gratification and the ability to physically inspect items before buying. Amazon can do neither.

<comment><USER5> _Why should Amazon have to pay for a fire department that it will never possibly need?_

It's certainly in Amazon's interest that their _customers_ have access to those local FD's. Even if one doesn't agree with the FD example, those sales taxes also pay for local roads and surely Amazon makes use of those.

(Lest I be accused of being a hypocrite, I do pay the local sales tax for internet purchases via the Massachusetts 'safe harbor' provision for small purchases and itemized listings of my larger purchases with my state tax filings)

<comment><USER6> Amazon doesn't use local roads. Fedex, UPS, etc do.

Those companies all have a local presence and (presumably) pay their taxes to the state in which they operate. The taxes are then passed on to Amazon or the consumer in the form of higher prices on shipping.

As for local fire departments, I use Pivotal Tracker. Should Pivotal Labs be forced to pay Maharashtra taxes since it's in their best interest that my company not burn down?

</comment></comment></comment></comment><comment><USER7> With 2 day shipping through the prime service, they pretty much emulate a local retailer. The prices are awesome but I can see how their tax advantages give them an unfair advantage on local competition.

<comment> X-Istence Because the user that is receiving the item is tax dodging Amazon should be punished?

<comment><USER7> I wasn't aware anyone actually declared their Amazon purchases at tax time.

<comment><USER8> I do as well. I sum up my online purchases from Amazon, add my wife's in, and pay the money. It goes to funding the things I use: Roads, firefighters, the library, the park next to my house. Heck, there was a fire two weeks ago in the apartment building next to where I live-- we sure as hell appreciated the firemen who came at 4:00am to prevent a catastrophe.

The argument above about how it's impossible/expensive/complicated/etc. to collect sales tax seems exceedingly bogus to me especially given the nature of HN: Sounds like a business problem to be solved, not some byzantine task. Someone should go make an online sales-tax-computing web service and be done with it.

Oh wait, someone did: <http://salestaxwebservice.com/>, <http://www.avalara.com/products/avatax/calc>, et cetera.

</comment></comment></comment></comment><comment><USER9> What's even more annoying is amazon damn well does have a large physical presence in CA:

a2z: <http://a2z.com/> : SF, OC, and San Luis Obispo;

A9: near caltrain, and from their page, "As A9 is a wholly owned and operated subsidiary of Amazon.com, we have the strength that comes from being part of a Fortune 500 company, and the flexibility and energy of a Silicon Valley start- up."

I'm ambivalent about the exception to collecting taxes for companies without an instate presence, but this is pure bullshit. Amazon operates multiple companies with hundreds of employees in CA. Just like other companies that take advantage of what CA has to offer, they should be forced to pay the tax man.

<comment><USER10> It's not as if Amazon is arguing that if the subsidiaries sell products in California they wouldn't be subject to sales tax. If you (earl) bought stock in a company in another state, does that give you a physical presence there and make whatever you sell subject to their sales tax? That company you are a partial (or full) owner of already pays sales tax in its state.

<comment><USER11> a2z makes the Amazon Appstore and Android MP3 player. So who gets taxed on those digital purchases?

<comment><USER10> Appstore apps are sold by Amazon Digital Services Inc. They also sell all the downloadable games and such on Amazon.com. I don't know what state that company is in, but that'd be the state that gets taxed.</comment></comment></comment></comment>


First video game on TV (1969) - <AUTHOR> http://pogpog.com/v/pong-demo/

<comment><USER2> Interesting how the interface on that version of "tennis" has a user interface sophisticated enough (3 analog knobs for both players) that it would be hard to emulate the game in a playable manner even on a modern pc. (I guess a gaming console with an analog knob and two analog triggers could do the job reasonably well- I think all three current-gen consoles have this.)</comment>


Ask HN: Are Google Glasses the Next Segwey? - <AUTHOR>

Cool technology is not always commercially successful. Very Cool, yes, but will it be as widely adopted? <comment><USER2> The current incarnation isn't going to go anywhere much, but as a precursor of what's coming they're significant.

I could be wrong on this, but I'd say that the current startup-stage competitor to Google Glass (or to where Glass will go) is actually the Pebble watch, and if they can manage the technical hurdles and acceptance Glass will probably be the winner.

The other notable thing that's wandered across my screen recently is Thalmic's Myo armband. THAT'S a company that's ripe to be acquired. Consider a mobile computing device (call it a "phone" if you prefer) with a remote display ("Glass") and an invisible input method that can be controlled just by unobtrusively moving your fingers while holding a loose fist (Myo). It's the kind of thing the MIT augmented reality folks have been working on for years, but where the only visible piece of it is a bit of facial bling that will soon just be integrated into hipster glasses (or BCGs).

</comment><comment><USER3> They are aesthetically obtrusive, so I doubt they'll have any kind of mass adoption.

</comment><comment><USER4> Segway did solve a problem for many people, but I don't see what Google glasses solves. It sure solves several Google problems (more ad displays) but that isn't the users' problem.

I also agree with Brin, not using Google Glasses is emasculating, it turns you into a know-it-all, jackass.</comment>


Groupon's Andrew Mason To Charlie Rose: "We Are The 'N Sync Of Websites" - <AUTHOR> http://techcrunch.com/2010/12/10/groupon-mason-charlie-rose/ <comment><USER2> Thus dividing the audience into two categories: "too old to remember 'N Sync" and "too young to remember 'N Sync".

</comment><comment><USER3> "I think that we'll continue to see more companies like [Groupon] who will put us to shame a couple years from now with their rate of growth."

I firmly believe that this is correct. A lot of product pitches from current or previous Google employees start with the words, "there are 6.8 billion people in the world and this product solves a problem the majority of them have".

I think that in developing new products, we get so wrapped up in current trends and crazy valuations that we loose sight of just how quickly the majority of people continue to jump on the Internet bandwaggon.

A good number of folks will complete their first purchases online this holiday season, this realization alone makes me confident that the web is far from over and that there is room for a lot of bands beside 'N Sync and The Beatles.

While I may be tired of hearing about Groupon and their clones, I know that there are more companies just around the corner that will blow 6 Billion dollar valuations out of the water.

</comment><comment><USER4> While trying to weasel info about the Google offer:

CHARLIE ROSE: So therefore, why did you choose to eliminate a Google-like proposition and incline yourself toward other propositions?

ANDREW MASON: It has to do with whether or not I would beat my wife.

<comment><USER5> To be fair this makes sense in context...sort of. He is dodging an answer and he does so more articulately a few moments later.

Also - reading through the transcript this is possibly the most serious he's ever been in an interview. He actually talked about facts, answered questions, etc. instead of running on about how he likes to build doll houses.

<comment><USER4> I meant that Charlie Rose was trying to weasel information out of him, not that Andrew was weaseling away from the question.

</comment></comment></comment><comment><USER6> "So we've put all these small kind of niche businesses on the map, whether it's a — whether it's a helicopter club that's offering flying lessons, and we sell 2,500 coupons"

They're talking about Philip Greenspun's [1] encounter with Groupon, about which he says: "I think what this shows is that we were much worse at marketing than even we could have believed." [2]

[1] <http://philip.greenspun.com/panda/>

[2] [http://blogs.law.harvard.edu/philg/2010/03/19/groupon- market...](http://blogs.law.harvard.edu/philg/2010/03/19/groupon-marketing- results/)

</comment><comment><USER7> I love this guy. One of my favorite startup CEOs at this point. He has a vision for splitting the world with Google and just might actually pull it off now that he's dodged the acquisition.

I'm just really worried he's going to get the axe. I hope his board isn't stupid.

<comment><USER8> He has a very close relationship with the largest investor, he won't be getting the axe anytime soon. They also have a "President" who in reality is the one running the company.

</comment></comment><comment><USER9> This guys sells Groupon so well, he must be a great sales guy.

</comment><comment><USER10> He brought in a capuchin monkey to the office on his birthday.

(I work in the same building)

</comment><comment><USER11> No asterisk allowed in URLs...</comment>


Be Over Flickr, But The Alternatives Aren't Much Better - <AUTHOR> http://talziv.me/be-over-flickr-but-the-alternatives-arent-bet

<comment><USER2> I recently moved out of Flickr, and into Dropbox. The only feature I miss from Flickr is tagging, but Dropbox does give me the following:

      * Control of Folder/Sub-Folder organisational structure
      * Automatic web galleries, which don't look that bad, for a secondary feature
      * Easy sharing of the files/galleries with family and friends
      * Full control of my data - i.e. I can take it where I want, when I want
      * I can use Picassa (or a choice of tools) on my Mac to do any of the fancy edits/face recognition/etc Flickr built into their UI, or as an alternative GUI. For anything more substantive I can use Pixelmator
      * It works well on my mobile devices, including simple and automatic uploading

Sure, it's not free, and space isn't "unlimited"; I pay for a 50GB Dropbox account, but between referrals and other bonus space accrued over the years I'm approaching 90GB on my account. Of that I use ~15-20% for my photo library (including HD videos).

For me, the hard part was getting everything out of Flickr/iPhoto, and "de- duping" my data to make sure I wasn't uploading a bunch of duplicate files.</comment>


Why do people buy virtual goods? - <AUTHOR> http://lsvp.wordpress.com/2009/01/13/why-do-people-buy-virtual-goods/ <comment><USER2> ... and how to sell more of them.</comment>


Introducing Matcha – Watch Instagram Stories Around the World - <AUTHOR> https://watchmatcha.com/ <comment><AUTHOR> Hey Hacker News!

Together with my partner in crime, Freddie Iboy (@freddieiboy), we set out to build the next step of a product that I launched 4 months ago. Matcha is the culmination for my extension, Chrome IG Story. Quick re-cap of the hack:

We invented our own mechanism of pseudo-fetching Instagram Stories from a particular location. There doesn't exist an API or a way to get a story from a location so we had to be creative and pioneer one. By expanding the reverse engineering of the private stories API used by my extension, we built a process that searches media on Instagram posted at a particular location, then we look to see if any of the users who posted that media have a story. We rely on the fact that someone posting a photo at a location within the last 24 hours probably has a photo on their story taken near that location as well.

It's definitely scrappy but this means that we can potentially show Instagram Stories from any part of the world but technology is rarely enough--a great product can profoundly touch people around the world.

Freddie's day job is a product designer at Tinder so he's deeply fascinated by how technology can shape human behavior. He pushed for creating a new addictive TV product for a new generation. You can read more of his thoughts on his Medium article: [https://medium.com/@FreddieIboy/introducing-matcha- watch-ins...](https://medium.com/@FreddieIboy/introducing-matcha-watch- instagram-stories-around-the-world-bc1ab6783c04)

We both deeply respect the product team at Instagram and we're big fans of how much they've pushed the Instagram product in the past year. This is our small contribution.

Btw, this is a beta launch so if some countries take a while to load, wait a minute, reload, or surf other countries. Also, performance might not be the best. We're working on optimizing everything since the browser is loading tons of stories. If you are in the US and have Top Live Videos enabled in your Instagram app, you can also watch (stream) Live Videos within Matcha - realtime comments and hearts coming soon.</comment>


John Deere's Promotional USB Drive Hijacks Your Keyboard - <AUTHOR> https://www.vice.com/en_us/article/pajv5k/john-deere-promotional-usb-drive-hijacks-your-keyboard <comment><USER2> >Don't muck around in our firmware/hardware!

>But hey, it's totally cool to hijack your hardware though! Aren't we witty and clever?

John Deere, this is the definition of tone deafness. Just throwing that out there.

In a single move, you have become what you protest everyone else being.

A tinkerer of someone else's equipment.</comment>


Rust 1.34.0 - <AUTHOR> https://blog.rust-lang.org/2019/04/11/Rust-1.34.0.html <comment><USER2> The history of TryFrom/TryInto has spanned 3 years, from when it was originally proposed as an RFC in 2016. For a seemingly simple API, it's gone through a lot. Especially unusual was that it was stabilized a few releases ago and then had to be destabilized when a last-minute issue was discovered with the never type (`!`). The never type had been the primary blocker for stabilizing these APIs for the last year or so, but it was finally decided to simply use this temporary `Infallible` type, which would be mostly forwards compatible with the never type itself.

I've followed the issue closely because it's one of the features used in Ruma, my Matrix homeserver and libraries. In fact, for the library components of the project, it was the last unstable feature. With the stabilization of these APIs, I'll finally be able to release versions of the libraries that work on stable Rust. This will happen later today!

<comment><USER3> Here's a funny quote about that...

>> Can you eli5 why TryFrom and TryInto matters, and why it's been stuck for so long ? (the RFC seems to be 3 years old)

> If you stabilise Try{From,Into}, you also want implementations of the types > in std. So you want things like impl TryFrom for u16. But that requires an > error type, and that was (I believe) the problem.

> u8 to u16 cannot fail, so you want the error type to be !. Except using ! as > a type isn't stable yet. So use a placeholder enum! But that means that once > ! is stabilised, we've got this Infallible type kicking around that is > redundant. So change it? But that would be breaking. So make the two > isomorphic? Woah, woah, hold on there, this is starting to get crazy…

> new person bursts into the room "Hey, should ! automatically implement all > traits, or not?"

> "Yes!" "No!" "Yes, and so should all variant-less enums!"

> Everyone in the room is shouting, and the curtains spontaneously catching > fire. In the corner, the person who proposed Try{From,Into} sits, sobbing. > It was supposed to all be so simple… but this damn ! thing is just ruining > everything.

> … That's not what happened, but it's more entertaining than just saying > "many people were unsure exactly what to do about the ! situation, which > turned out to be more complicated than expected".

[https://this-week-in-rust.org/blog/2019/03/05/this-week- in-r...](https://this-week-in-rust.org/blog/2019/03/05/this-week-in-rust-276/) [https://www.reddit.com/r/rust/comments/avbkts/this_week_in_r...](https://www.reddit.com/r/rust/comments/avbkts/this_week_in_rust_275/ehe2kre/?context=1)

<comment><USER4> > new person bursts into the room "Hey, should ! automatically implement all > traits, or not?"

Lol; that was me (although there were probably others). I approve of the dramatic rendition.

[https://github.com/rust-lang/rfcs/issues/2619](https://github.com/rust- lang/rfcs/issues/2619)

</comment></comment></comment><comment><USER5> Hmm, fn before_exec strikes me as a thing that should be gotten rid of entirely in favor of unsafe fn before_exec if the former indeed turned out to actually have the potential to cause undefined behavior. But that'd probably be a breaking change which would require a major version number bump, so deprecation is absolutely the right thing IMO. And it also sets the stage to get rid of it outright come the next major version bump.

This is the first such instance of "oops, turns out that wasn't safe after all, that should have been unsafe" that I've heard of in Rust. Is that because this is the first such mistake since the 1.0 milestone (the rest of `unsafe` having been nailed down before 1.0), or have there been other such mistakes that I didn't hear about because I haven't read the notes for all of the prior releases of Rust?

<comment><AUTHOR> We can't get rid of it because we have a commitment to not breaking users' code. There will not be a Rust 2.0.

There have been some small soundness holes in the typesystem that we have fixed, resulting in breakage, but since that's in the language, that's the only way. A library API is different. There haven't been many of these though. We did have some point releases which immediately fixed some library errors that were introduced by a release, see 1.15.1. But that was in a new API, and so the chance of breakage was extremely low. This API has been around for years. It is also not used much, given it's a *NIX specific extension you have to explicitly import.

Note that upon using it, you'll get a warning, so everyone will at least be notified.

<comment> ainar-g

      We can't get rid of it because we have a commitment to not breaking users' code. There will not be
      a Rust 2.0.

This is interesting. The C Standard people have, for example, removed "gets" from the C11 standard. Go, too, has exceptions to its Go 1 Compatibility Promise[1], which include security, unspecified behaviour, and bugs, both in the language and in the standard library. I don't remember for sure, but I think there were things removed from C++ specifications as well; please correct me if I am wrong. Did Rust decided to never break stdlib compatibility because the mechanism of editions was considered from the start, or was this rather ad-hoc?

[1]: [https://tip.golang.org/doc/go1compat#expectations](https://tip.golang.org/doc/go1compat#expectations)

<comment><AUTHOR> We do reserve the right to make changes for soundness holes. In theory, you could argue that this is a soundness hole, and so we can remove it.

We have to do such things extremely judiciously though. Users can only tolerate so much breakage, even if you say "we did say we reserved the right to do this." This API is just so rarely used that it was judged not a good time to pull the "technically we are allowed to do this" card.

</comment></comment></comment></comment><comment><USER6> Now that alternate registries to crates.io is available, hoping artifactory could add support for rust... - [https://www.jfrog.com/jira/browse/RTFACT-13469](https://www.jfrog.com/jira/browse/RTFACT-13469)

<comment><USER7> and [https://newreleases.io](https://newreleases.io) to support at least [https://crates.io..](https://crates.io..).

<comment><USER8> Looks like thats a site for notifying you of new dependencies?

I think I'd prefer PRs like [https://dependabot.com/](https://dependabot.com/)

</comment></comment></comment><comment><USER9> No mention of RISC-V support? It sounds like RV64GC finally landed (Hurra and thanks!):

"riscv64imac-unknown-none-elf and riscv64gc-unknown-none-elf targets are now on stable rustc 1.34.0 :slightly_smiling_face: [https://github.com/rust- lang/rust/blob/master/RELEASES.md#ve...](https://github.com/rust- lang/rust/blob/master/RELEASES.md#version-1340-2019-04-11")

[https://github.com/rust- embedded/wg/issues/218#issuecomment-...](https://github.com/rust- embedded/wg/issues/218#issuecomment-482307010)

EDIT: Mea culpa, I somehow missed that it _is_ in the release notes, but still, it's worth pointing out. I hope it'll find its way into Fedora/RISC-V.

</comment><comment><USER10> Such a boring release. That's why I love Rust.

<comment><USER11> For me the best releases will be when it matches D/Delphi/Ada/Eiffel/.NET Native compile times and cargo supports binary dependencies.

The language as such is already quite good, in spite of one or other possible improvements on borrow checker ergonomics (e.g. callbacks).

<comment><USER12> > For me the best releases will be when it matches D/Delphi/Ada/Eiffel/.NET > Native compile times [..]

Any ideas on when this will be? There has been talk about faster compile times for years now without that much apparent progress.

<comment><USER13> > There has been talk about faster compile times for years now without that > much apparent progress.

Really? What makes you say that? Have you tried it?

        $ git clone git://github.com/BurntSushi/ripgrep
        $ cd ripgrep
        $ git checkout 0.4.0
        $ time cargo +1.12.0 build --release

        real    1:09.13
        user    2:06.08
        sys     2.839
        maxmem  359 MB
        faults  1292
        $ cargo clean
        $ time cargo +1.34.0 build --release

        real    22.484
        user    2:32.66
        sys     3.380
        maxmem  702 MB
        faults  0

That's a >3x wall-clock speedup over the past 2.5 years on a cold start. That's pretty good.

<comment><USER14> The memory doubled?

<comment><USER15> I don't know about that specific measurement, but memory usage of the Rust compiler has not doubled in general. If it did, we'd notice immediately, as the script crate in Servo would probably OOM.

</comment></comment></comment></comment></comment></comment><comment><USER16> > People maintaining proprietary/closed-source code cannot use crates.io, and > instead are forced to use git or path dependencies. This is usually fine for > small projects, but if you have a lot of closed-source crates within a large > organization, you lose the benefit of the versioning support that crates.io > has.

I'm surprised that making people run their own registries is the preferred way to address this, instead of implementing versioning support for git dependencies.

There's many bad things I say about golang, but "I wish this module system additionally required me to host a language-specific package repository" is not one of them.

<comment><USER17> What do you mean by "versioning support for git dependencies"? We do support pulling in git dependencies based on a branch (I think tags work?)

We also support checking the version of the git dep.

It's fetching the dep that's the problem. Git has no uniform protocol for talking about versions, especially when it comes to resolving SemVer ("you asked for 0.2.1 but I also have 0.2.5, here you go")

If you want go-style import resolution use a local git dep. That works fine. It's specifically when you want all the features of cargo's version resolution -- which git doesn't understand -- you need to use a custom registry.

<comment><USER16> "Versioning support" is the wording from the release notes. I don't know why cargo's version resolution logic can't be applied to git dependencies, treating a tag like "v4.2" or "4.2" as a version 4.2 doesn't seem very contentious. I also don't know what you mean by local git dep.

<comment><USER18> > I also don't know what you mean by local git dep.

Presumably, the `git` URL for dependencies, in `Cargo.toml`, can point to a local git repository. That should let you refer to a branch / commit of that repository, other than the one currently checked out (which is what using a `path` dependency would give you).

<comment><USER17> "local git dep" was a mistake, I meant "git dep", which can be used in a way that approximates Go's import system if you use versioned tags.

(The "local" comes from it being in-house but that's confusing)

<comment><USER16> Ah, that's cool to hear. Which features of cargo versioning am I missing out on then?

<comment><USER17> Actual semver based version resolution.

And yes, this _can_ be added with some ad hoc scheme that requires you to use a certain kind of git tag, but that's not what people are asking for.

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> It will be nice when Cargo dependencies can use pre-built binaries instead of having to compile the whole dep chain. One crate I contribute to has a 4 GiB target folder and takes 20 mins to compile from scratch...

<comment><USER20> In the meantime, you can use sccache to at least save the time spent to compile the same version of a crate more than once.

[https://github.com/mozilla/sccache](https://github.com/mozilla/sccache)

<comment><USER19> thanks for the recommendation. if I understand [1] correctly, this cache is hosed when you upgrade rust?

[1]: [https://github.com/rust- lang/cargo/issues/1139#issuecomment-...](https://github.com/rust- lang/cargo/issues/1139#issuecomment-69350600)

<comment><USER21> Yes, everything needs to be rebuilt with the new compiler after a ugprade, but sccache still provides very valuable time savings when you work on multiple Rust projects.

</comment></comment></comment></comment><comment><USER22> I liked the concept of alternate registries in this release

<comment><USER23> I imagine this will unshackle some people who have been wanting to use Rust within organizations.

<comment><AUTHOR> That is one of the main motivating factors!

</comment></comment></comment><comment><USER24> It feels like Rust is now 'stable'. Are there any major language related things in the pipeline?

<comment><AUTHOR> The biggest one in the near future is async/await; you'll see the precursors land in the next few releases. There will also be a blog post soon outplaying overall plans for the year, but const generics, GATs, and specialization are the likely big-ticket items.

In general, this year of Rust will be about governance refactoring, finishing off long-desired features like the ones above, and general polish. There isn't a lot of big plans for big new things coming anytime soon, more of finishing what we've started and improving what we have.

<comment><USER25> > GATs

Oh, fantastic! I realize I'm probably in a very specific minority here, but I've been waiting on this one for literally years.

<comment><USER26> For people confused like me: GAT in this case means "Generic Associated Types"

[https://rust- lang.github.io/rfcs/1598-generic_associated_typ...](https://rust- lang.github.io/rfcs/1598-generic_associated_types.html)

<comment><USER27> Huh... Safari on iOS crashes on that page

<comment><AUTHOR> Interesting, it doesn't crash for me!

</comment></comment></comment></comment></comment></comment><comment><USER28> Rust is legit next gen, check it out today.</comment>