Ask HN: What do you not like about Product Hunt, Beta List, or Indie Hackers? - <AUTHOR> Tasked with building a website for a "portfolio course" as part of my Web Development B.S. degree I have decided to build an enterprise marketing platform similar to Product Hunt, Beta List, and Indie Hackers.
I chose this project because I realized the use case and potential help it could provide. Startups want to get early adopters and beta testers to help provide feedback for validating their own projects. My understanding is that there could never be too many platforms like that as long as they are quality platforms and not just a list of projects. It is my understanding that these platforms are around to not only help the public find the new projects but to help the companies behind those projects acquire those early adopters and beta testers.
Rather than build a basic MVP I figured I should include what I thought is great about the platforms. As I have already begun doing that I am wondering what users of those platforms, or their developers, wish the platforms had that they currently do not have, or that they did not have of which they currently do.
I have been tasked with validating my project to "potential customers". As my project, and the other platforms in consideration, offer freely the ability to submit content by users of the platforms I am unsure how to validate it any other way than to seek who would use the platform. Imagine it as a mix of the three platforms in consideration, essentially the features you may see similarly among the three platforms.
Do you currently use any or all of the three platforms in consideration? What do you find beneficial from using [platform]? What do you not like about [platform]? What feature(s) would you like added to [platform]? What feature(s) would you like removed from [platform]? Why do you use [platform]?
If you have anything else you would like to add then please share your thoughts about the platforms/market as well!! Thank you for your time and consideration! <comment><USER2> Product Hunt: I'm sure many have said this, but it feels like a "cool kids" club, where only the elite members can submit and hold basically all the power. We eventually got "hunted" but not really on our own terms and it took some asking around to do so.

Beta List: We got featured here recently and it got us a few hundred sign-ups (before launch) but it took a while (1.5 months) to get listed. By that time we were nearly launched.

Indie Hackers: Great concept but hard to verify any numbers. We're actually thinking about starting something similar but for bloggers (not entrepreneurs in general). Courtland (the founder) used a very clever tactic in providing interesting information to his exact target market = lots of exposure on HN, Reddit, Quora, etc.

</comment><comment><USER3> (I do like ProductHunt, so don't take this as an attack on the product)

PH allows anyone to find and vote on anything, and has a follower model that gives hunters with many followers much more exposure. The result of this is that hunters with lots of followers are a lot more effective at getting products attention, as are makers that aggressively market their PH submission, irregardless of the product's merits. Because these mechanics aren't interest-targeted, PH also heavily favors highly-general/mass-market products.

Just brainstorming, but I'd be interested in seeing if a product that eliminates this factor could be better at evaluating products purely on their merits. Maybe you select a couple topics that you're knowledgeable about, and each day you get a small, randomly-allocated batch of products in that topic that you can rate on a five-star scale (as opposed to an approval/participation scale)? In this model, there's no directed way to influence a particular product, the smaller number of products makes it easier to spend more time on each product, and all reviews would be done by people in their area of expertise. It'd probably be best to normalize the number of ratings on each products, to control for varying levels of participation and exposure. This would probably need to run on a rolling weekly model instead of a daily model.

I suspect that marketing this would be more challenging, since this also removes the incentive for makers and hunters to promote the site for votes. It'd probably be better at evaluating products purely on their merits, but I don't know if that's something the world needs enough to be self-sustainable.

</comment><comment><USER4> Product Hunt:

* _Superficial comments_ like "This is awesome. I was on the beta." An upvote suffices

* _Curated /Stack everything_ jargony, useless terms like curated are now rampant

* _Very little transparency_ from hunters. Did this person invest or have some material stake in the product's success?

* _Lack of succinctness_ from founders/makers. You have one shot at summing up your product/value, and people write a whole essay. Keep your words to idea ratio low.

</comment><comment><USER5> I don't particularly dislike any of these sites (well, ok, maybe producthunt ... but for balance I like indie hackers a lot), but I think the general problem is that these kind of sites quickly devolve from something authentic to just another marketing channel to be gamed. Same can be said about YouTube, Facebook, etc. But it the case of SV startup sites the cycle is accelerated due to the audience. Good luck solving this problem ...</comment>


A 3-D printer capable of incorporating hydraulics - <AUTHOR> http://www.technologyreview.com/view/544766/how-to-3-d-print-a-hydraulic-powered-robot/ <comment><USER2> Feels like 3D Printers are making progress like mad lately.

I think it's time to get my hands on one. I will just make myself an xmas present and get a little machine to get going. Currently undecided between getting a small Printrbot for about $400 or a larger Maker Farm for about $600:

[http://www.productchart.com/3d_printers/7001_vs_5881](http://www.productchart.com/3d_printers/7001_vs_5881)

Any suggestions for a complete beginner are welcome.

<comment><USER3> Well, I own a printrbot simple maker's edition ( the plywood one, in short ) and one small lesson I've learned with it is this :

Go for a printer with a heated print bed : It will save you many headaches.

Without heated bed : Check if the masking tape still is good enough for a print, if not, remove it and add a few new layers, prep the tape with some glue ( Only way I get something to stick ) and let it dry a little. Then you can attempt a print.

With a heated bed : clean up the glass plate, add some polyvinyl hairspray and you're good to go!

<comment><USER4> I'll second this about the heated bed. I have the Printrbot Play and I like it but I wish it had a heated bed. I have overcome most adhesion issues by printing larger brims on small prints. Then I have to cut off the brim. This wastes filament and adds another step to the process.

</comment></comment></comment><comment><USER5> My first question: Where are the vidyas? :D

</comment><comment><USER6> its fascinating though how few coments this topic recives. HW_ComentDensity= Personal.usefullnessOfTopic(topic) / RangeOfSkillsNeededForDuplication* DepthOfArticle</comment>


Ask HN: Rest api authorization - <AUTHOR> I am working on service which exposes REST API.
What is the best way to implement authorization for  incoming requests.
* Identify who is making the request. Can we use api key for this.
* Make sure this REST api can be used just as easily using curl. I am not sure how to do this, as I dn't think exposing API key is a good idea. I can ask clients to hash request params with api key, but that makes it non-trivial to use with curl.
What are the standard practices, and what are the trade offs.
Please be kind and helpful. If I said anything wrong, please correct me instead of flagging this.
Any help would be appreciated. Glad to provide any info that makes it useful to answer <comment><USER2> OAuth2 is the way to go for REST services especially if you plan to let users give other apps/developers access without giving out their passwords. For better security, you want to decouple the authentication server from your web application (2 separate databases at least)

The authentication server stores email/username, encrypted password, and roles. To access the web app, you first get a token from the authentication server by exchanging a client_id, secret, username, password and grant type. The token is used whenever you want to make a request to the web app. The authentication server has an endpoint that lets the web app check to see if the token is valid and what roles the client has.

The token is only valid for a short time and can be revoked. To know who is making the request, you associate the username/email from the authentication server with a user object on the web application so you can look up based on username/email.

It's not worth doing this from scratch as there are plenty of open source implementations out there already like Spring Security Oauth2 and other libraries for Django/python, but they all require some reading to get started.

I've used Spring Security Oauth2, but it's not very well documented. I've thought about open sourcing my work, but not sure yet.

<comment><USER3> Isn't having two distinct servers one for auth and one for business logic too much for small start ups / services?

I can see the benefit when scaling but starting with this design seems to be a little bit of an overkill / harder to manage? Care to elaborate?

Cheers

<comment><USER2> For a quick prototype, I think it's ok to have both in same server/database, but beyond a prototype you should think about security and scaling. Redesigning later can be a nightmare and most people end up not doing it instead just leaving what they already have.

The good thing with 2 separate servers is that if one is compromised, then the bad actor doesn't get access to all your data. Also you could use any language/database that makes sense for your auth server or services.

</comment></comment></comment><comment><USER4> I've seen people use JWT ([https://jwt.io/introduction/](https://jwt.io/introduction/)) for REST API auth. There are a variety of libraries that implement it and it's fairly simple to use.

Since it's just another HTTP header field, cURL can include it easily enough. Granted, you'll have to generate the encoded token externally but you would have had to do that with any other auth mechanism anyway.

</comment><comment><USER5> Use basic authentication and ssl. The users credentials will be encrypted and the API will be easily consumable from cli and from browsers.

<comment><USER6> Best answer here. KISS is the way to go.

</comment></comment><comment><USER7> HMAC for auth to avoid having the key exposed at every request.

For the rest: [http://www.javabeat.net/rest-api-best- practices/](http://www.javabeat.net/rest-api-best-practices/)

And documentation: [https://github.com/Rebilly/ReDoc/blob/master/README.md](https://github.com/Rebilly/ReDoc/blob/master/README.md)

There many more comprehensive resources about sane API design (use HATEOAS, pagination, etc.) but you don't have to implement everything from v1

ps. SSL goes without saying even if it's a public API

</comment><comment><USER8> I really wish this topic got discussed more because there don't seem to be a lot of great options.

I personally use an OAuth 2 library using the "Resource Owner Password Credentials Grant" which is where you POST a username and password, and you get back a session token. OAuth 2 has a few other types of grant flows but they don't make as much sense for REST only APIs.

The downside of this password grant flow is that anyone can create a client to work against your API, and potentially they can steal passwords in a man-in- the-middle fashion. One way to prevent this is to give your "trusted clients" a secret token, and then verify that token before issuing a session.

However you can't hide a secret in browser-side JavaScript and even mobile apps can be be decompiled, so this isn't perfect either. Some devices provide a hardware enclave to store your secrets in, but most don't.

Another weakness is that if your SSL breaks, then you're essentially sending the passwords in clear text over the wire. Another commenter mentioned HMAC encryption of the password which might help. That this isn't recommended by oauth is concerning. It's not the best standard and password grant is its weakest form. [Edit: now that I think about it, HMAC requires having another shared secret between your API and your client. Storing secrets on the client is difficult, as discussed in the previous paragraph]

JWT seems new and not too widely used but worth looking into. It has its own downsides like some difficulty with revoking sessions from the server side, but there are workarounds for this.

I wish there was an industry standard answer that was secure and we could all be happy with but there doesn't seem to be much interest in the topic, going by how rarely it gets discussed. Best of luck!

<comment><USER8> By the way, you may want to have a look at Auth0. They run the jwt.io informational site. Their services look interesting. Their claim is that you can use their service and their SDKs to add authentication to your service super easily.

<comment><USER7> JWT looks very interesting, thanks for bringing this up.

JWT website: [https://jwt.io/introduction/](https://jwt.io/introduction/)

</comment></comment></comment><comment><USER9> I have semi-copied what AWS did a couple of years ago. Each api consumer has an api key with a private key known to the consumer and server-side. Requests are SSL only and are signed with the private key by the consumer side (including any parameters and a client-side timestamp). For example, using curl:

      #!/bin/bash

      TS=$(date +"%s000")

      SIG=$(echo -ne 'GET\nhttps://servername:port/api/resources?api_id=1&ts='$TS | openssl dgst -sha256 -hmac "secret-key" -binary | xxd -p -c 32)

      curl -H "Content-type: application/vnd.collection+json" 'https://servername:port/api/resources?api_id=1&ts='$TS'&signature='$SIG

I have consumers of the api using node.js and Java as app dev languages with various http client libraries successfully. The actual server-side api is written with Clojure using the Liberator library (highly enjoyed working with this combo).

Server-side uses the api_id to check the signature using the shared secretkey. (Edit to clarify). There are two timestamps flying around here. One is a timestamp from the client call to the api ($TS above). This timestamp has to be "close" \- completely configurable on server-side - to the server-side time or the request is not valid. A little more subtle is that each resource has a timestamp that is the last time the resource was changed server-side. As part of the authorization for the api call to change a resource, it has to be make the call to the api with the resource's most current value for that timestamp to succeed. This is a little goofy logically.

This approach works very well when you have a requirement to allow multiple different apps to call the api rather than say, allowing _users_ to call the api from their browser. I don't have a case where users are in a web browser app that directly calls the REST api.

By the way, if you are using SSL, you don't have to worry about the api_id being exposed in either the query parameters or the request headers.

</comment><comment><USER10> Be aware of JWT when it comes to Login/Logout behavior. JWT is not a good fit for user facing login unless you have a session ID on the server. But then you could as well use Cookies and a sessionID.

So I would do a Login via Basic Auth or a Form post or a JSON post with username/password and then get some kind of token/sessionID/JWT which expires on the server side. The token might be encrypted on the server side with a secret only known to the server, never the client. Use the sessionStore to implement a proper session expiration scheme.

</comment><comment><USER11> Maybe you can take a look of an api gateway like apiman which can leverage the auth & authz to keycloak, or perhaps kong may be the one.

</comment><comment><USER3> I've used mostly JWT, the tokens with a short TTL which makes it easier to control revoking/banning in the backend.

It is really simple to set up. In the frontend it's pretty straight forward to implement logout and other common behaviors even if the token is still valid because of the TTL.

</comment><comment><USER12> Jwts are very straightforward to use, and you can get up and running with Auth0 for free in a few minutes.

They do have a 700 DAU limit, but when you need to, you can always implement your own JWT server

</comment><comment><USER13> Look into identity server 4. YouTube some videos about it and it should get you going. The rest is just picking what's popular for your platform/language.

</comment><comment><USER14> Regarding cURL, note that Firefox and Chrome allow you to copy the request as a Curl command with their Developer Tools. (F12/inspect...)

</comment><comment><USER15> you can (and should :)) use it (token auth) with ssl. To get SSL is not a problem today, and will cost you nothing if you use letsencrypt.org</comment>


What Marissa Mayer's maternity leave decision means for working parents at Yahoo - <AUTHOR> http://www.fastcompany.com/3054512/second-shift/what-marissa-mayers-maternity-leave-decision-means-for-working-parents-at-yahoo <comment><USER3> I'm not sure that I agree with this. With the current state of Yahoo Mayer is clearly in a tough position. She can't afford to be absent AT ALL. I suspect employees may recognize that her circumstances are not the same as their own and take the time they need.

<comment><USER4> I'm inclined to agree with you. If the board is questioning Mayer's leadership, i.e. her boss thinks she is not that great independent of her pregnancy, she's on thin ice. But what do I know -- if I were her, I'd gladly take the $100 million golden parachute and retire at 40.

<comment><USER5> I don't get it. With or without a golden parachute, she is likely already in the class of people who have enough wealth to never have to work a day in their lives ever again if they don't want to. Her children will probably not ever have to work a day in their lives either. Why choose not to take time with them? They're only babies once.

<comment><USER6> This is why us normal people aren't hyper successful. We're not psychotic enough.

<comment><USER7> Do you know there are guys working at Walmart who are forced to miss the birth of their children? I personally know a guy who was in this situation, he was a cashier at Walmart and was forced to miss his child's birth because he was forced to be there on a busy day.

It's not just CEOs and high-paying folks not taking time off for paternity/maternity leave, it's everybody people who work in autoshops, cell phone stores, construction jobs, etc.

<comment><USER8> That's awful. Didn't know that type of thing still happened.

<comment><USER9> What kind of Candy coated, sheltered existence do you have?

Missing a childs birth is disappointing, not being able to feed that child is awful... Not being able to get that child medical care is awful, Children working $2 a day to make your $500 pants is awful.....

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> What she is doing sends a message not to take all your leave. It also shows she is a poor manager. No manager, even CEO, should be so irreplaceable that she cannot step away from the job for several weeks, especially when the leave is anticipated. The leave should be viewed as a valuable opportunity to ensure that successors are being groomed and are ready to step in.

She might think this "unique time in Yahoo's transformation" talk shows that she is pitching in to help, but all it says to me is that she either thinks she is more important than she is or that due to poor management she really is that important. Fail either way.

<comment><USER9> I disagree 100%...

The board did not hire "other managers" they hired her, for the expressed purpose of turning Yahoo Around, and splitting out the Ablibaba Stock, now they have reverse that and will split out Yahoo Core but the fact remains when a Major restructuring like that is going on your damn right the CEO, the one hired by the board, should be at the helm, not the "other managers"

Ultimately people need to stop looking to other people as "examples" and determine for themselves what they need to do for their family. If Yahoo Provides X leave, and a person chooses to only take Y, that is their choice, that does not mean other employees can not take all of it.

Society seems to be developing a massive co-dependency problem and loosing individualism.

<comment><USER11> "...what they need to do for their family."

Exactly.

<comment><USER9> Which may or may not include taking time off.

What you view is as a "need" may not be what someone else views as a need and people should not feel they must take 3 months off, or even 3 days if they do not desire to do so.

</comment></comment></comment></comment><comment><USER12> Typical. Zuck takes half his parental leave, yet Facebook employees say "Four months and very little pressure to come back to work. I've personally never seen anyone not take the full amount when they had a child."

When Mayer doesn't take her full leave, she is setting a bad example and pressuring her employees.

What is the difference, here? Oh wait, I see it now...

<comment><USER13> The difference is two months vs. two weeks (assuming Mayer's "limited time" will be the same as with her previous child, which is the best guess with nothing else reported). Two months is still reasonably generous by American standards, two weeks is not.

<comment><USER14> Two weeks after giving birth to twins is ridiculously short.

</comment></comment></comment><comment><USER15> Well, what if she took 6 months off? Would there be another kind of criticizing, given Y!'s status?

Tough be a woman in sv.

<comment> atom-morgan I'd applaud it. There's nothing I hate more than seeing people putting in extra hours at work instead of spending that time with their kids - <USER2> when they're young. At nearly every job I've had I worked less hours than co- workers with a spouse and kids and I'm 25, single, with no kids. It's sad.

</comment></comment><comment><USER16> yeah but what does "limited time away" mean?

The whole article would be a waste if that really meant a couple weeks short of what mothers take on average.

edit: okay, it says she took 2 weeks leave for her first child. That's short. A key point is "does she have a small army of maids at home?" because she can afford that when an average worker can't.

<comment><USER17> Actually, she built and staffed a nursery at her office, which is certainly a luxury not available to the average worker. Her statement on the matter doesn't acknowledge the fact that she has resources that are unique to her, which I find somewhat disingenuous.

</comment></comment><comment><USER18> Her CEO stint will get an textbook example and taught in university/business schools.

<comment><USER19> Can you elaborate?

<comment><USER20> She's a woman.

<comment><USER21> It's hard to untangle the sexist ranting from the actual critique.

Submitted article is saying that she should have taken more maternity leave in order to make it culturally acceptable within Yahoo for other parents to take that leave. (That's a good point, and is probably true.)

But if she had taken more leave we'd have had a bunch of articles saying why she's terrible for taking that much leave.

The future people will want to know why her PR is so terrible; and will be able to see a bit more clearly whether what she did was useful or not.

<comment><USER22> I'm not sure it's a sexist ranting though. Zuckerberg just faced a similar criticism (about the precedent he is setting by only taking half the allotted time). I suspect that most CEOs would face criticisms if they were about to spin-off the primary business and become a holding company for international stocks (very few people would have defined that as a success before Meyer stepped in).

</comment></comment></comment></comment></comment><comment><USER23> Maternity leave is not about her, it is about the children.

</comment><comment><USER24> Tangent: I think that paid paternity/maternity leave is prejudicial against those who have chosen not to have kids. I get the sleepless nights in the first few months, and wouldn't want to deny parents time to bond with their newborns.

But looking at it objectively, why should a company offer benefits associated _only_ with parenting? It benefits society (not individual companies) to encourage breeding, and therefore parental incentives should, if they exist at all, come from the state rather than private enterprise.

At the company level, flexible personal paid leave for employees who have earned it might be a fairer arrangement.

<comment><USER25> Parental leave is available to everyone. It's not prejudicial just because you choose not to take advantage of it, just like it's not prejudicial to offer gym memberships to people who choose not to work out.

Besides that, parent leave is better seen as an _accommodation_ (like bathrooms or wheelchair ramps), not a _benefit_. It's a human function necessary to society--until the robots take over anyway. Because it's uniquely tied up with work schedules, it's reasonable for society to force employers to make the accommodation. It's entirely reasonable for private enterprise to sometimes be forced to foot the bill for activities that benefit society rather than the business itself.

<comment><USER24> > Parental leave is available to everyone.

That's a parent-centric view. Some of us a really not wired to have offspring. Obviously the magnitude of the situation is different, but your statement is along the lines of saying that "marriage benefits are available to everybody" prior to gay marriage being legalized.

> It's not prejudicial just because you choose not to take advantage of it, > just like it's not prejudicial to offer gym memberships to people who choose > not to work out.

That's a question of magnitude also. Parental leave for software engineers is easily a $10-20k benefit. Gym membership is a $100/mo benefit.

<comment><USER25> > Some of us a really not wired to have offspring.

Some of us are really not wired to go to the gym!

> Parental leave for software engineers is easily a $10-20k benefit. Gym > membership is a $100/mo benefit.

But people use the gym benefit throughout their working life, while they will use the parental leave benefit typically just twice (on average). Averaged over a 30-year career, the net cost of the two benefits is about the same.</comment></comment></comment></comment>


33 Exceptional Logo Rebranding In 2008 For Your Inspiration - <AUTHOR> http://www.smashingapps.com/2008/11/13/33-exceptional-logo-rebranding-in-2008-for-your-inspiration.html <comment><USER2> Voting up for interest, but not at all convinced that all of those are "exceptional". Many are just "gradient + shadows + reflections" versions of their former selves, which may be considered an improvement, but hardly exceptional. For instance, the HP one is particularly unimpressive - I prefer the former logo.

<comment><USER3> Hear, hear!

But seriously folks, swombat is right, some of them changed just for the sake of changing, and the result is no better than the original. Just more of the me-too web 2.0 style bandwagon.

</comment></comment><comment><USER4> All of these examples appear to have been swiped from the rather excellent

<http://www.underconsideration.com/brandnew/></comment>


Finally asp.net core RC2 released - <AUTHOR> https://blogs.msdn.microsoft.com/webdev/2016/05/16/announcing-asp-net-core-rc2/ <comment><AUTHOR> A very good change i feel is asp.net core is now just a console application executing asp.net core libraries.Lot of benefits _we can easily self host_ same .net cli tool chain *compiling your web application to native eventually</comment>


1978 – 'Farewell, Etaoin Shrdlu' - <AUTHOR> https://www.nytimes.com/times-insider/2014/11/13/1978-farewell-etaoin-shrdlu/ <comment><USER2> I recommend another documentary for anyone interested in the history of the Linotype:

[http://www.linotypefilm.com/index.html](http://www.linotypefilm.com/index.html)

Used to be on Netflix, but not presently.

</comment><comment><USER3> Despite the year in the title, this is really a (2014) obituary for a _New York Times_ Linotype operator who died in 2014 and was profiled in a 1978 documentary.</comment>


Fight Code - Code your robot with JavaScript and fight - <AUTHOR> http://fightcodegame.com/ Code your robot with JavaScript and fight <comment><USER2> Wow. What are the odds! I just presented a game based on the exact same premise a couple of nights ago at a backbone.js meetup in SF. I wonder if the author of this one saw me...

[http://www.meetup.com/Node-js-Serverside-Javascripters- Club-...](http://www.meetup.com/Node-js-Serverside-Javascripters-Club- SF/events/101940222/confirm/)

Here's the video I posted on youtube about it a few weeks ago: <http://youtu.be/SZAOvn0EQxQ?t=4m26s>

Game is here: <http://logicmason.com/Roboduel/>

Code here: <http://github.com/logicmason/Roboduel>

Fight Code is very much like my Robo Duel game, but much more polished and it looks the robots in it are programmed in JS, whereas I wrote a domain specific language (along with an interpreter) for mine.

Great job, guys. It's awesome to see a game like this. In fact I've wanted a game like this for years!

But it's hard not to wish it had come out a few weeks later after I graduated from Hack Reactor and had a chance to use my game to boost my job interviewing process!

<comment><USER3> I hope you don't let this stop you from making your game anyway. Even though Fight Code may have beaten you to it, your game would still be impressive to potential employers.

</comment></comment><comment><USER4> I love this stuff. Programmers at my office had a Robocode melee competition that ran every week for a month. Grand prize was an extra vacation day. It was so much fun I started working on a JS version thinking it would be a good learning tool for JavaScript. I dropped the idea about a year ago but now I want to pick that back up again. Here's an example view of where I left off. The battling javascript even had a function for taunting and responding to hits. <http://www.jellyrobotics.com/2013/01/16/code-wars/>

</comment><comment><USER5> This. Is. Awesome. I know what I'll be doing this weekend.

</comment><comment><USER6> Very cool. Reminds me a bit of RoboCode that was created a while back from IBM DeveloperWorks (<http://robocode.sourceforge.net/>). This should be a fun way to practive JS.

<comment><USER7> Reminds? From a cursory glance this IS RoboCode, just using JS instead.

In my first year CPSC classes I had an awesome prof who made learning fun. Rather than program boring text based games like tic-tac-toe we instead learned Java with projects such as RoboCode && Env3d (<http://env3d.org/beta/showcase>).

Great to see RoboCode for JS now too!

<comment><USER8> Looks like it's not _exactly_ the same, e.g. robocode had a separate scanner and turret, while fightcode has the cannon act as the scanner.

</comment></comment></comment><comment><USER9> It's really cool, I just would appreciate an alternative to github to login.

</comment><comment><USER10> Heck, this was my favorite game on the Apple IIe as a kid -- <http://en.wikipedia.org/wiki/RobotWar>. Glad to see it in-browser again!

</comment><comment><USER11> As a programmer I think this is very cool. As a game guy, the field of play is too large given the size of the robot graphics. Make the tanks bigger and you have something much more suspenseful.

</comment><comment><USER12> This is fantastic. It's super easy to use and understand (for a developer anyway). The only thing I could ask for is autocomplete so I wouldn't have to look at the API.

</comment><comment><USER13> Nice. Watching a couple of the fights unfold makes me see a perimeter strategy is very effective against a tank in the middle.

</comment><comment><USER14> That was fun! I wonder if it's just me, but I could never tell who the winner was after a fight?

</comment><comment><USER15> And found new addiction

</comment><comment><USER16> beat me to it: www.codeduel.com

I am making the FPS version though.

Nice job!</comment>


UseTheSource House Rules - <AUTHOR> http://blog.jgc.org/2011/06/usethsource-house-rules.html

<comment><USER2> I lot of rules are related to avoid gaming the system (and have severe consequences on breaking them). I wonder if its possible to validate the input for these rules programatically?

<comment><AUTHOR> I think so because recruiters/agencies are similar to spammers in this context and similar techniques can be used to remove them.

<comment><USER2> Sure, Machine learning algorithms can be applied to detect spams and recruiters, but I am talking about having a structure of the job application, like having mandatory fields for company name, location etc., instead of having them in free flow text of job description. It would also make for an easier read.

</comment></comment></comment><comment><USER3> John, do you have any plans to turn UseTheSource into a "serious" business, or it is more of a community-building exercise?

The reason I ask is because it seems that you and I (with job4dev) are running in a very similar space for pretty much the same audience. If you are not planning to turn it into a "pay to post" service, it looks like it would be mutually beneficial if we could join forces.

<comment><AUTHOR> It's an experiment. I don't know where it will go.

<comment><USER3> Ok. Then my question is "what is it that you are experimenting with?"

Is it something you are making to learn/improve your Arc skills? Or is it an experiment to measure your pull with the HN community?

<comment><AUTHOR> I thought there was pent up demand to access the HN community for job listings other than YC-companies and as a hiring manager I think there are better outlets than the current job boards. Figured I'd see what happens with an HN- focused job board.

<comment><USER3> Sorry for keep nagging you about it. I certainly agree that the current job boards are not satisfactory. And you are absolutely correct about the demand here on HN, the "who's hiring?" threads should be more than enough proof of it.

But at the same time, I wish that we find a way to work together, if anything just to avoid fragmentation of the userbase. Job4dev is not HN-exclusive, but we make a regular effort to make sure that the listings we have are relevant for the type of candidate that is a member of HN.

</comment></comment></comment></comment></comment><comment><USER4> > 4\. Do not use the same password on UseTheSource as you use on Hacker News. > That's silly and dangerous.

You're not storing the passwords in plaintext, right? They are being salted and encrypted with a one way hash, aren't they?

<comment><AUTHOR> They are not stored in plaintext, but that wasn't the motivation for putting that item in the house rules. No matter how I store them I could still see them, and you shouldn't be trusting me (or anyone else) with the same password used on a different site.</comment></comment>


'Anti-petroleum' movement a growing security threat to Canada, RCMP say - <AUTHOR> http://www.theglobeandmail.com/news/politics/anti-petroleum-movement-a-growing-security-threat-to-canada-rcmp-say/article23019252/ <comment><USER2> "The government has tabled Bill C-51, which provides greater power to the security agencies to collect information on and disrupt the activities of suspected terrorist groups."

FYI for any Americans reading this, when a bill is tabled in Canada, it means the opposite of what you think it does, the bill is put forward for discussion rather than suspending discussion indefinitely.

<comment><USER3> Also, when we have a majority government as we do now, a bill that is tabled by the government will almost certainly pass.

</comment></comment><comment><USER4> > "There is a growing, highly organized and well-financed anti-Canada > petroleum movement that consists of peaceful activists, militants and > violent extremists who are opposed to society's reliance on fossil fuels,"

Anti-Canada petroleum movement, or Canadian anti-petroleum movement? This doesn't seem like an accidental word re-arrangement.

<comment><USER5> It probably isn't.

There is a large portion of the federal government that have tied up Canadian economic interests in the tar sands. Entire regions of the central provinces are literally propped up on tar sands extraction. Take that away and you'll have swaths of blue-collar workers with mortgages, debts, and families and no income. They will probably be pretty mad.

Any group that harms tar sands extraction operations harms Canadian citizens... I can see the logic there.

The scary thing is the wider implications of C51 and that it hasn't been voted out, just tabled. This sort of thing winds up being buried in another bill with more obscure language around it when everyone has moved on.

<comment><USER6> As noted by [https://news.ycombinator.com/item?id=9063463](https://news.ycombinator.com/item?id=9063463) tabling a bill is not getting rid of it; Tabling a bill is the first step to passing it.

<comment><USER5> Exactly; often the first of many. Industry lobbyists have no shortage of time and resources when it comes to pursuing the interests of their employers. With the copyright battle in Canada we went through several bills before an outcome was achieved [0].

Unfortunately for those corporations with assets tied up in the oil sands the market hasn't been terribly kind of late and people who moved out there for the industry jobs are beginning to see the effects of market demand slowing for their rather expensive goods.

[0] [http://www.michaelgeist.ca/2012/06/canadian-copyfight- succes...](http://www.michaelgeist.ca/2012/06/canadian-copyfight-success/)

</comment></comment></comment></comment><comment><USER7> There's an election coming up. The terrorism boogeyman has been so expedient in America that the Conservative Party is trying to invent a similar threat.

</comment><comment><USER8> ".. concludes the report which is stamped "protected/Canadian eyes only"

I smell a Canadexploitation ripoff of James Bond...

<comment><USER9> Oh, you mean Spyfall? [http://www.imdb.com/title/tt3462616/](http://www.imdb.com/title/tt3462616/)

</comment></comment><comment><USER10> There's a simple solution to this supposed "anti-Canada" activity and it's for Canada to build the pipeline over to British Columbia. Then y'all won't have to worry about dealing with US "anti-petroleum forces" and we won't have to worry about your oil spilling on our land on its way to China.

<comment><USER11> the people of BC (but not the government unfortunately) are understandably opposed to the pipeline as well. It benefits BC to the tune of 50-someodd jobs

</comment></comment><comment><USER12> Anyone else catch how activity these groups engage in "jeopardizes [...] the natural environment"?

Sweet, sweet irony.

</comment><comment><USER13> Isn't Canada also being crushed by Saudi dumping cheap oil?

Pretty sure that is a bigger threat to them than protesters.

When exactly did the US and Canada turn into primary exporters of expensive oil, crazy times.

</comment><comment><USER14> [http://www.breitbart.com/london/2015/01/28/claim-russia- fund...](http://www.breitbart.com/london/2015/01/28/claim-russia-funding-anti- fracking-groups/)

<comment><USER15> It's a short step from linking breitbart to linking RT, the Daily Mail, or, hell, Stormfront.

<comment><USER16> Remember, Russia is our enemy, so their media is automatically as bad as a White Supremacist website.</comment></comment></comment>


"Punch above your weight" w/ a great domain...Wish.co.uk made $1MM+ in  - <AUTHOR> http://www.domainsherpa.com/wish-interview/ <comment></comment>


Notes on a Smaller Rust - <AUTHOR> https://boats.gitlab.io/blog/post/notes-on-a-smaller-rust/ <comment><USER2> As someone who recognizes himself as beginner programmer, i do not consider the borrow checker as my major issue with the language. Heck, i haven't even reached that issue.

Everytime that I have turned away from Rust, despite trying half a dozen times is due to its super busy and alien looking syntax. I just can't parse the code.

<comment><USER3> Honestly, I don't see any intrinsic problems with Rust's syntax that makes it unusually ugly.

Rather, I think the problem is that the syntax is 100% fine in isolation, but has some issues when taken together with experience in other languages — when you skim the code, some parts of it beg to be looked at like C++, while other parts push you to read it like a functional language. Unsurprisingly, neither fully works, which makes the experience jarring. Once you accept that Rust is its own language with its own rules and stop trying to borrow (hah!) from your experience with other languages, it feels much better.

<comment><USER4> > Honestly, I don't see any intrinsic problems with Rust's syntax that makes > it unusually ugly.

You literally just got a user experience report claiming that it is.

<comment><USER5> It's coming from someone who isn't comfortable with C or Java either.

There's no winning over everyone. Of course Rust's syntax will be completely jarring if you're coming from Crystal or Ruby.

In my personal experience it's a little jarring at first and then it completely goes away.

<comment><USER6> I'm comfortable with C/++ and Java, to a greater extent than a lot of people I've worked with. There are still things in Rust that are papercuts:

* The need to put :: before <> in expressions for generic parameters, but not in type signatures.

* Using :: instead of just . even though most of the time the naming convention will delineate the difference anyway

* Error handling with futures

* Self-referential structs

* Passing a shared pointer through multiple move closures

IMHO the frustration involved in these things is not typically worth being more explicit. The :: thing may seem a bit pedantic, but it is simply more physical effort (Shift-colon-colon vs dot) and creates more visual noise.

If/when all of the things above are addressed, I think Rust could give Python a run for its money.

</comment></comment></comment></comment></comment><comment><USER7> I like how the strengths of Rust are summarized by 3 points:

* Algebraic data types

* Resource acquisition is initialization

* Aliasable XOR mutable

I think it can help not only to design a Smaller Rust as discussed here, but also to grasp the key design points of this language which is a bit daunting.

<comment><USER8> I like how these three points aren't just "strengths of Rust", but...

> the necessary components ... to make imperative programming work as a > paradigm

You know, before Rust imperative programming just didn't work. Didn't work as a paradigm, even!

<comment><USER9> It had state mutation as a massive liability - which is probably why FP has seen such a surge in recent years. Rust is the only language that mostly solves that _without_ totally changing the paradigm.

<comment><USER10> It doesn't really change the paradigm compared to FP even, it just enforces a clear separation at all times between _sequential_ state mutation on the one hand and references to _shared_ (and generally immutable, except as provided for by explicit mutability mechanisms) state on the other. Which is essentially what FP languages end up doing, though they go about it somewhat differently.

<comment><USER9> Right. The problem is that functional purity always comes with overhead; data structures like Clojure's help a whole lot, but there's still a cost.

But one of the primary motivators for functional purity is to avoid unintended side-effects.

In pure FP, You never even have to bother your mind with _unexpected_ side- effects because there are _no_ side-effects.

Rust instead gives you the vocabulary to carefully articulate _intended_ side- effects, preventing all other, _unexpected_ side-effects at the same time. So you can colonize the wilderness, instead of avoiding it altogether, and for that you get to skip the overhead of treating everything as immutable. Not that this is an indisputable improvement for every use-case, but it's a novel tradeoff and one that is definitely preferable in many domains.

</comment></comment></comment></comment></comment><comment><USER11> > I would probably experiment with exceptions if I were making this language.

Hard disagree. Rust made conscious design decisions (i.e. limiting type inference) to enable local reasoning, and exceptions are non-local.

<comment><USER12> Checked exceptions (like Java) are isomorphic with Rust's Result type. You could convert a checked exceptions syntax into Result exception-carriers on each return with a mechanical transformation, of a Rust+exceptions program into Rust-today program.

<comment><USER13> Suppose you have

        fn foo(i: i32) -> string throws IOException
        let x: Vec<i32> = ...
        let y = x.iter().map(foo).collect()

What's the type of y ? There are no good answers here: if it's Vec<string> then where did the errors go? If it's Vec<Result<IOExecption, string>> then the user is pretty confused about where the Result came from. You can't propagate the IOException through the map() call in the general case (it might be in a third-party compiled library etc.). In Java this is a compilation error and the reason checked exceptions are useless in practice.

<comment><USER14> This should be a type error, because there's no further information available to resolve which implementation of FromIterator<> should be used. (Also you'd need to use filterMap to ever arrive at Vec<string> since you can't simply discard the errors.)

Using magic language syntax like checked exceptions _in lieu of_ type system expressiveness is not great, which is why Java's checked exceptions are a bit on the unpleasant side. You can't have one map() that handles functions with and without exceptions, because exceptions aren't part of the type system.

In Rust, exceptions _are_ part of the type system, so you only need one map(). If you also add syntactic sugar for the types such as:

      1: fn foo(i: i32) -> string throws IOException
      2: throw SomeIOException
      3: try a catch IOException b

To mean, respectively and approximately:

      1: fn foo(i: i32) -> Result<string, IOException>
      2: return Err(SomeIOException)
      3: match a {
           None => b
           Some(_) => {}
         }

... you can keep the simpler program code of exceptions and keep the ability to express exceptions first class in the type system.

The Rust implementation (syntax I use might vary from reality) of async/await is just this sort of syntactic sugar over a type: "async fn foo() -> X" is sugar for "fn foo() -> Future<X>", and "await!foo()" is (kind of) sugar for "foo().then(rest of the function)".

The only really kind of disappointing thing about this is that exceptions and futures don't get unified: we get ? for exceptions and await! for futures. Both of them ultimately are continuations: exceptions bypass the continuation and return an error immediately, futures call the continuation only when their value becomes available. The value of using a unified interface to continuations (or monads, if you prefer) is that you can use ones that don't have a magic blessed syntax: parsers with automatic backtracking written as simple imperative blocks, non-determinism via iterators where the continuation is a flatten operation, etc.

<comment><USER13> > This should be a type error, because there's no further information > available to resolve which implementation of FromIterator<> should be used. > (Also you'd need to use filterMap to ever arrive at Vec<string> since you > can't simply discard the errors.)

I don't want to have to worry about whether the function "throws" or not at the point where I'm calling map - that's the whole problem of doing this in Java. What if the function that calls map is itself a generic higher-order function? Result's great benefit over exceptions is that it isn't a special case; generic functions work with Result just as they work with string.

> In Rust, exceptions are part of the type system, so you only need one map().

So what's the answer to the question? If there's only one map() I should be able to use it to map with foo; when I do, what do I get back?

> The Rust implementation (syntax I use might vary from reality) of > async/await is just this sort of syntactic sugar over a type: "async fn > foo() -> X" is sugar for "fn foo() -> Future<X>", and "await!foo()" is (kind > of) sugar for "foo().then(rest of the function)".

Sure, and try!foo() does a pretty similar thing for Result. I think that's a better approach than exceptions, because you can see what's going on at the call site - having functions that "throw" and don't "throw" look _exactly_ the same at the point of use is too magic/confusing IME.

> The value of using a unified interface to continuations (or monads, if you > prefer) is that you can use ones that don't have a magic blessed syntax: > parsers with automatic backtracking written as simple imperative blocks, > non-determinism via iterators where the continuation is a flatten operation, > etc.

Yeah, I find continuations too confusing to reason about but I really wish Rust would adopt some general-purpose syntax for monads ("do notation"). That would require HKT though, because you can't even form the type of a monad in the general case without that.

</comment></comment></comment></comment></comment><comment><USER13> Interesting. Coming from an FP background I'd say the opposite - the confusing part of Rust is all these special-case imperative control flow keywords, a more smalltalk-like "everything is just values and functions" syntax would be the best way to simplify it.

I'd agree with stepping away from guarantees about when allocations happen etc. But I think at the point where you remove those from Rust you really just have OCaml.

<comment><USER15> Well, it'd be OCaml without a garbage collector. And to be honest, that would be a very useful and handy language for systems development.

<comment><USER13> OCaml is already a good language for systems development - people are far too scared of garbage collectors. And if you make the changes in the article then I think you give up most of the concrete benefits of non-GC - you won't have easy C interop without control of stack/heap/allocation, and since trait objects could end up nested arbitrarily far, I think you might still get GC- like pauses where a simple-looking code line ended up doing an arbitrary amount of unwrapping and freeing work.

<comment><USER15> I guess it depends on your definition of systems development. If you mean "writing systemsy applications" like IoT things or whatever, sure, fine, a GC isn't going to be an issue and probably will help.

If you're talking about a language to write drivers or an operating system, etc in then a GC is just a big No. In that domain we don't even have Malloc/Free, let alone GC services. Having the overhead and normative lifestyle assumptions of _any_ kind of runtime is a big Nope.

<comment><USER16> Counterpoint: The Oberon System successfully implemented a garbage-collected OS kernel: [https://en.wikipedia.org/wiki/Oberon_(operating_system)](https://en.wikipedia.org/wiki/Oberon_\(operating_system\)).

</comment></comment></comment></comment></comment><comment><USER17> > Resource acquisition is initialization

I recently built a small prototype Entity Component System, and one of the big learnings for me was to what extent RAII is an anti-pattern with respect to performance. It's actually amazing how fast a modern CPU can be when you're not using it to allocate and initialize small blocks of memory at a time.

I understand the benefits of RAII in terms of bookkeeping, but it seems like there is opportunity for a new resource management paradigm which is more optimized for using computing resources.

<comment><USER18> Can't you just initialize everything at once before you need it rather than initializing one object here and there?

<comment><USER17> It depends heavily on the problem domain. In some cases this is possible, but it's often the case that you will not know what resources you will need at the beginning of execution.

Also the implementation of "initialize everything at once" in an RIAA paradigm is not necessarily going to be the most efficient possible implementation. For instance, I might want to do something like this (in a made-up language):

        struct A { ... }

        func init() {
            let a1 = new A();
            let a2 = new A();
            let a3 = new A();
        }

The most efficient way to implement this would be to allocate enough memory to store a1, a2, and a3 and then run the initialization method 3 times over that memory. But it's likely that instead the compiler will allocate a1, initialize a1 and so on with a2 and a3. Since the allocations are separate, maybe another thread takes precedence between the allocation of a2 and a3 and allocates some memory, so these values are not contiguous in memory, and I get worse caching performance when accessing them.

In this toy example with 3 values it doesn't make aa lot of difference, but if you add up all these marginal costs in a large application it absolutely does cost a lot of performance.

<comment><USER10> > The most efficient way to implement this would be to allocate enough memory > to store a1, a2, and a3 and then run the initialization method 3 times over > that memory.

Only if a1, a2, a3 are also _freed_ at once. In which case, you can just put all three in a struct that is allocated as a single block. Rust doesn't yet support this very well _in the general case_ , because its support for what C++ calls "placement new" and customized allocation in general is not complete or stabilized. But doing this in a more hackish special-cased way is already possible in many cases.

<comment><USER17> > Only if a1, a2, a3 are also freed at once.

Yes exactly. This is meant to be illustrative of the case suggested in the parent comment, where all required runtime objects are known and can be initialized together at the beginning of execution.

edit: it may be possible to program around some of the worst performance pitfalls of RAII in many cases, but you will end up with very non-idiomatic code, which I would take as evidence that RAII is not ideal for memory performance.

</comment></comment></comment></comment></comment><comment><USER19> I'm really conflicted about

 _> Aliasable XOR mutable_

because it prevents _eventual_ synchronisation (e.g. single writer, multiple readers of a "monotonic" data structure like a counter)... I'm not convinced that it's entirely necessary, nor how easily it can be proved safe, but AFAIK many garbage collection runtimes work using eventual synchronisation... Probably other algorithms as well!

Another thing that's not (AFAIK) covered by Rust's ownership system is flexible memory pools... where you can have _proofs_ that some memory is accessible and pass those proofs around (whether at runtime, or just during compilation on the type system level)... although that might be entirely isomorphic to just passing around owned pointers to memory (pools), so maybe Rust _does_ support it.

People with lots of experience with Rust, what scenarios do you need to use unsafe Rust for?

<comment><USER20> Interior mutability via atomic values ([https://doc.rust- lang.org/std/sync/atomic/index.html](https://doc.rust- lang.org/std/sync/atomic/index.html)) works great for the first one, and, indeed, some sort of atomicity/synchronisation is required even in languages without the XOR rule (such as C++) to prevent undefined behaviour.

There's a variety of safe arena types that give allocation inside pools too: [https://crates.io/search?q=Arena&sort=downloads](https://crates.io/search?q=Arena&sort=downloads)

<comment><USER19> Atomics are very useful indeed, but an overkill for some situations. In particular, if there's just one writer and multiple readers, the write doesn't need to be synchronised (as there's no possibility of someone else mutating the value in the middle of you incrementing it). An example would be the GC thread incrementing the _epoch_ id/count that all mutator (user) threads read.

Presumably you'd still need _some_ sort of synchronisation otherwise the memory will stay mutated just in one CPU's cache, you need to "flush" the updated memory so that other CPUs can then see it, but that's likely cheaper than executing _the whole_ operation atomically... Basically, increments are fundamentally not atomic (i.e. composed of multiple separate operations) whereas reads (of a single word) are, so if all mutations happen from a single thread (assuming a sensible CPU architecture and cooperative compiler) there's nothing else that needs to be done to ensure atomicity, you only need to care about the "happens before" relationship.

But then I'm not a low-level programmer so the above is probably all wrong :)

<comment><USER20> They have to go via the atomic types or it is undefined behaviour. One can use a very weak ordering (such as Relaxed) to require little or no "physical" synchronisation by the CPU. Like C++, Rust atomics offer a range of levels of synchronisation, weaker than sequential consistency.

A platform like the JVM disguises this because every read and write (even without 'volatile') use minimal synchronisation to avoid the worst aspects of the danger here. This ensures that programs that do it wrong (e.g. forget a 'volatile') are "only" incorrect, but not unsafe.

<comment><USER19> Ah, you're right, weaker ordering takes care of a lot of these issues! Good point, thanks!

</comment></comment></comment></comment></comment><comment><USER21> The lack of ADTs in mainstream languages is really quite baffling, given their obvious utility.

Thankfully it looks like they're trickling in via Typescript/Swift/Kotlin.

<comment><USER22> Do TS and Kotlin support them now? Last I checked TS was relying on string comparisons and Kotlin wasn't even bothering outside sealed classes

<comment><USER23> TS is a bit more powerful than it appears here, because string literal values are recognized at the type level, so can be checked by the compiler when distinguishing cases. See for example: "Discriminated Unions" at [https://www.typescriptlang.org/docs/handbook/advanced- types....](https://www.typescriptlang.org/docs/handbook/advanced- types.html#discriminated-unions).

</comment></comment></comment><comment><USER24> See, everyone has a different thing they find important about Rust. He suggest abandoning zero cost abstractions (letting stack/inline allocation be decided by the compiler instead) which I think would remove most of the power of the language. Default thread safe primitives sounds really wasteful too.

I think languages similar to Rust but with less complexity will be a very cool space to watch going forward. All sorts of interesting language designs possible.

I'm working on a language that does "Rust-like" things, but unlike the article, what I am going for is the efficient memory management, in this case the inline structs (zero cost abstraction) and compile time memory management (automatic lifetime analysis). The biggest difference with Rust is that it is fully automatic: when ownership can't be determined at compile time, by defaults it falls back to a reference count increase at runtime (in Rust this would just be an error). The advantage is zero annotations, and a language that can be used mostly by people that don't even understand ownership. There may be ways to explicitly (optionally) enforce ownership in the future, for those who want more control.

Language: [http://strlen.com/lobster/](http://strlen.com/lobster/) Details on memory management: [http://aardappel.github.io/lobster/memory_management.html](http://aardappel.github.io/lobster/memory_management.html)

</comment><comment><USER25> > As I said once, pure functional programming is an ingenious trick to show > you can code without mutation, but Rust is an even cleverer trick to show > you can just have mutation.

Yea, I like this.

</comment><comment><USER26> > _In other words, the core, commonly identified "hard part" of Rust - > ownership and borrowing - is essentially applicable for any attempt to make > checking the correctness of an imperative program tractable. So trying to > get rid of it would be missing the real insight of Rust, and not building on > the foundations Rust has laid out._

Sure, but people wanting a smaller Rust might not care about the "real insight of Rust", but of the surface syntax, speed, apis, tooling (e.g. cargo), and so on...

I'd like a Rust like language that's GCed for example, and drops all the lifetime annotations and so on...

<comment><USER27> I guess it depends what you think is the real core of Rust - for me, Rust's primary innovation and primary differentiation point is giving you safe memory management without a garbage collector. Anything that steps away from it (so stepping away from the borrow checker, lifetimes and so on) becomes something that isn't Rust anymore.

After all, just about everything else in Rust is in Haskell.

<comment><USER28> The borrow checker is undoubtedly the core innovation of Rust, but it's not what people new to the language want. When I first came to rust, I was looking for a c++ alternative that had similar syntax and low level power, but also a sane standard library and modern language features like closures.

When I first learned about the borrowchecker I thought it was brilliant. Then I spent some time fighting it and I hated it. Then I learned to love it...until I got backed in to a corner and had to re-architect a project I'd been working on for months. Now I have mixed feelings about it.

So I agree Rust isn't Rust without the borrowchecker, but I empathize with all the noobs who want a rust without it because many people just want a language with some traction that fixes c++ past mistakes, and they end up getting a massive paradigm shift thrown at them instead.

<comment><USER17> It's surprising to me that a language hasn't emerged which is more purely a modernization of C. It seems like you could go a long way just keeping C's basic abstraction in place, reworking some of the clunky bits and adding some basic quality-of-life improvements from the past 30 years of language design.</comment></comment></comment></comment>


Show HN: `curl parrot.live` - <AUTHOR> https://github.com/hugomd/parrot.live <comment><AUTHOR> Hey HN! I made this as a side project, but it blew up a lot more than I thought so I thought I might share it here.

I love Cult of the Party Parrot so I thought I'd try to make my own, but for `curl`!

`parrot.live` just keeps the connection open and pipes down a clear terminal character and then passes through the next frame (with some colour).

</comment><comment><USER2> Thank you sir, the world deserve more party parrots !</comment>


Livestream engineer apologizes after getting fired for misogynistic  tweets - <AUTHOR> http://zi.vc/apology.html <comment><USER2> I don't like summary condemnations of people "to set the example". The guy has been uncouth and rude but it was just a (drunken? Tourette-like?) outburst.

As a women in tech I am more worried that, if we don't use with other people the same open-mindedness and fair play we ask for, we'll end up being dreaded or hated more than (maybe begrudgingly) accepted. I see nothing wrong in firing someone who promotes discrimination but hey, this was just a guy being a troll. One could as well have used magnanimity in dealing with it. Just my 2 cents.

<comment><USER3> Alternately, also as a woman in tech, we could expect employers not to lump us all together and to judge men who resort to using slurs more harshly than women who don't like having slurs used against them.

</comment></comment><comment><USER4> Its a legitimate disgrace that companies play into this bullshit. The idea that someone can send an out of context screenshot to a company that results in someone losing their job is unbelievable.

If there was even a slight link to the workplace I could completely understand.

This person didn't do anything illegal, at worst he was rude and foul mouthed but because there is an issue in tech, unrelated to him accept that he is seen as the embodiment of the oppressor, he has lost his job and possibly his career. Potentially a family has lost an income that might never be regained.

Someone being fired should be a huge and painful decision for a company not one taken willy nilly over the weekend because someone got offended over something on the internet.

I think this sort of thing does a dis-service to the 'women in tech' movement at large because it is effectively an abuse of the power they are given by the sentiment that there is in fact a problem with inequality and attitudes in the workplace.

</comment><comment><USER5> Here is the script:

0\. thing I don't like. 1\. have a vitriolic outburst at that thing. 2\. someone replies in defense with their own vitriolic outburst. 3\. If you're fortunate enough the person used a forbidden word in their outburst, dogpile their employer and get them fired. 4\. retweet everyone who is outraged at what you've done so that everyone on your follow list can shame and attack them in response.

[https://twitter.com/ryan/status/474791621100199936](https://twitter.com/ryan/status/474791621100199936)

don't take the bait.

</comment><comment><USER6> Its great to know that Shanley doesn't think name calling is appropriate or productive. I shudder to think about what she'd think of something like this: [https://medium.com/about-work/finding-out-youre-a-sexist- mis...](https://medium.com/about-work/finding-out-youre-a-sexist-misogynistic- homophobic-classist-racist-asshole-and-hypocrite-f986fbd5e51f)

 _edit:_ more name calling that she would certainly condemn: [https://twitter.com/ryan/status/474791621100199936](https://twitter.com/ryan/status/474791621100199936)

<comment><USER7> It's actually a pretty good blog post, the title is sort-of underscoring the central point:

" _Yes, I have slut-shamed, body-policed, name-called, bad-joked, appropriated, derailed, co-opted, silenced, objectified, stereotyped, trivialized, slurred, punished, isolated, insulted, benefited, and stayed silent with the worst of them. A highlight reel of my life profiting uncritically and even participating in the systems of misogyny, classism, racism, cis-normativity and homophobia that oppress my friends, my family, my fellow humans would not endear anyone to me, least of all myself.

It fees horrible to talk about. But I am because we all must realize how complete, how intersecting, how deeply fucked up the system is, and the role we play in it._"

</comment></comment><comment><USER8> Also as a woman in tech (trans as well!) I'm uncomfortable with bringing people's employers into internet pissing matches. Its a nuclear option that seems like overkill, not unlike the whole Adria Richards fiasco. Seriously, people get bitchy at each other on the internet all the time. Calling someone a cunt is not the same as death threats or rape threats.

<comment><USER9> Also firing, what appears to be, a low rung employee for such behavior seems extreme for name calling.

Instead of simply punishing, maybe some type of rehabilitation as a first step would be more appropriate (some type of therapy or sensitivity training)?

<comment><USER2> I agree with the idea of 'sensitivity training'. Sometimes empathy is only latent and needs to be showed the way to express itself. Harsh punishment is of no use in this.

</comment></comment></comment><comment> jack-r-abbit Wow... looking through Shanley's twitter history is scary. She certainly has some rude things to say about a lot people. I wouldn't ever call a person the "c" word.. but I can see how a person that was inclined to use that word would send it in her direction. She is really not a very nice person on twitter. It is too bad someone got sucked into her tar pit and then got fired. :(

</comment><comment><USER10> Shanley is a cunt and any "man" who takes her seriously and cowers on twitter by firing someone over her laughable bullshit is an eager-to-please bitch.

What I find hilarious is her ranting and raving constantly about "tone policing", then turning around and doing the ultimate tone policing (god, what a dipshit phrase) by getting a guy fired for saying something she doesn't like.

She is a cunt, he stated a simple, objective, provable fact.

</comment><comment><USER7> It seems I'm missing the context here that (almost?) everyone else seems to have. What actually happened?

<comment><USER4> a man called a woman a c __t on the internet and lost his job. Actually I don 't know what the rules are here so I will just censor the word

<comment><USER7> I don't care if you spell out the word if you're going to cite it (punctuation would be nice though ;) - but this is clearly not an explanation of what happened.

<comment><USER4> You are right I left out a bit. The woman took a screenshot of the abuse and tweeted it to his employers asking them were they happy to employ someone like that.

That really is the gist of it.

<comment><USER11> Is it even legal to fire a person for a single tweet (when tweeting is not their job)?

<comment> m-photonic It is, but it shouldn't be.</comment></comment></comment></comment></comment></comment>


We build DROPBOX for business cards. We have some questions. Could you help us? - <AUTHOR> http://nessfile.com/feedback

<comment><USER2> Best of luck, it's an uphill battle:

[http://techcrunch.com/2012/07/11/hashable-the-app-that- aimed...](http://techcrunch.com/2012/07/11/hashable-the-app-that-aimed-to- replace-business-cards-to-shut-down-on-july-25/)

<comment><AUTHOR> Thanks, we have something that will surprise all of our competitors :)</comment></comment>


Summary of knowledge acquired and produced by the UN on drug-related matters [pdf] - <AUTHOR> http://www.unodc.org/documents/commissions/CND/CND_Sessions/CND_62/ECN72019_CRP10_V1901490.pdf <comment><AUTHOR> How can we help this information proliferate? This is a very recent document, coming from the recent session of the United Nations Office on Drugs and Crime (UNODC) (62nd session, March 14-15 2019)

It seems that people are finally realizing that harm reduction is the way to move forward out of the human-rights tragedy that is the war on drugs.</comment>


How low (power) can you go? - <AUTHOR> http://www.antipope.org/charlie/blog-static/2012/08/how-low-power-can-you-go.html <comment><USER2> A couple of notes about the limits of things that have already been reached today:

A pixel in a camera sensor has to be a couple of wavelengths in size. This is basically the size that we can make them now. There are also diffraction limits for any imaging system, and a size limit on the lens (if your lens is too small, its surface won't collect enough photons in low light to make an image - no matter how you focus them). So I don't think it would be possible to make a deep sub-millimeter camera with usable image quality, and I don't think the 10-order-of-magnitude gains in power efficiency will be coming, either (if you can't shrink it, you're stuck switching larger circuitry and dealing with larger charges). Now, spy cameras can already be annoyingly tiny, but I don't think we're headed for cameras on a speck of dust or some such. One piece of evidence for this is that tiny sub-millimeter insects have lost most or all of their vision - eyes don't scale well to these sizes.

Genome sequencing: I think there are limitations to what can be done with these that are already being hit. E.g. looking at the USB-attached genome reader that Charlie Stross mentions, I see that it really needs to have the material which you're feeding it to be separated into DNA/non-DNA fractions for decent performance (otherwise, the micropores will be deluged by non-DNA material), and it needs a conventional chemistry lab in order to cut something as large as a human genome into manageable chunks. For this you need things like centrifuges, which can't become microscopic. I think there are fundamental limits reached here as well, since you can't make a pore arbitrarily small (molecular-sized) without having all sorts of molecular junk jam into it, if it is present.

<comment><USER3> Theoretically, a single pixel camera that scanned fast enough and held the result in memory could create an image with many pixels, so it seems like this barrier isn't necessarily absolute.

<comment><USER4> But how well is that going to work in dim light? You're going to hit a limit to how fast you can scan given the time it takes to gather enough photons. When you start to have to be too clever is when you've started to hit limits.

<comment><USER5> That's about two decades ago, then.

<comment><USER4> None of that was too clever, obviously.

</comment></comment></comment></comment></comment><comment><USER6> Either processors could share cameras, or each processor could have a low resolution camera that works in aggregate, perhaps similar to how a fly's eyes work. Or we could have both. Computer vision doesn't have to replicate human vision to be useful, especially if the processing is fast enough.

</comment><comment><USER7> I've occasionally mulled what a 1-bit camera could do, in the same notion as a 1-bit audio A/DC. Cross this with CS's gazillion millimeter computers and emerging 3D image extraction (term escapes me, take lots of photos and deduce the source objects a la Google 3D Maps).

One camera may be too small for an image (both resolution & color depth). A lot of them, thrown randomly around, may provide interesting results given enough math.

<comment><USER8> See <http://dsp.rice.edu/cscamera> for an almost practical single pixel camera.

</comment></comment><comment><USER8> Nobody mentioned that Moore's first law isn't just about the number of transistors doubling. It's about the number in the chip that's cheaper per transistor.

Also there's Moore's second law about the cost of fabs rising exponentially at about the same rate. If GDP growth doesn't accelerate dramatically, we won't be able to afford fabs any longer in a few decades.

</comment><comment><USER9> I think the assumption that Moore's law, or even Koomey's law, is going to hold for another two decades is wildly optimistic. I would expect a taper off much sooner, perhaps even this decade.

The physics and the economics of smaller process nodes is becoming harder and harder, to the point where anything beyond 10nm or so looks extremely difficult.

<comment><USER10> Indeed, see [http://www.semiwiki.com/forum/content/1388-scariest- graph-i-...](http://www.semiwiki.com/forum/content/1388-scariest-graph-i-ve- seen-recently.html)

<comment><USER11> That graph ignores that there will be pressure to go to smaller sizes not to get more power for the same size, but to get the same power for less power usage.

On the other hand, I would like to see a graph plotting time or nanometers vs cost of the factory needed to make them. I cannot find one, but I remember seeing ones that hinted that the cost of making a production line would become prohibitive for everyone.

</comment></comment></comment><comment><USER12> Stross' comparison between Cray 1 performance and that of a modern smartphone seems off. He says: "A regular ARM-powered smartphone, such as an iPhone 4S, is some 12-13 orders of magnitude more powerful as a computing device than a late 1970s-vintage Cray 1 supercomputer."

A Cray 1 could peak at about 250 MFLOPs/s (<http://en.wikipedia.org/wiki/Cray-1>), and a modern smart phone like the Galaxy Nexus peaks at about 9.6 GFLOPs/s (using ARM Neon instructions on both cores). That's less than two orders of magnitude difference.

Floating-point power efficiency seems to have improved by about 6-7 orders of magnitude in that time though, which is very nice :)

<comment><USER13> Maybe he's comparing integer operations? ARM has relatively underpowered floating-point because most of the uses for an ARM (at least historically) don't involve it.

<comment><USER14> He notes it is a mistake in the comments.

But the details of the comparison don't change the part where a modern cell phone is nicely comparable to a $millions computer from a few decades ago.

</comment></comment></comment><comment><USER10> Apparently, Charlie hasn't gotten the memo: [http://www.semiwiki.com/forum/content/1388-scariest- graph-i-...](http://www.semiwiki.com/forum/content/1388-scariest-graph-i-ve- seen-recently.html)

These are financial limits, the scaling limits will end at about 1-3 nm. But it will take longer, as doubling will no longer in constant time.

<comment><USER15> Well, that does imply that we could keep making the same processors at smaller sizes for the same price. Power density issues might constrain speeding things up at that point, but it would certainly be a continuation of Koomey's law.

EDIT: Maybe more likely is that we might be seeing a future slowdown of Moore's law to a doubling every 24 months or more, allowing fabs more time to amortize their investments. This would be bad, but not the end of the world.

</comment></comment><comment><USER16> fluorescent LEDs</comment>


Intel CEO Brian Krzanich Resigns - <AUTHOR> https://www.bloomberg.com/news/articles/2018-06-21/intel-ceo-brian-krzanich-resigns <comment><USER2> So it was a sex scandal that forced him out, rather than his poor business decisions and hostility towards consumers?

Man, this country is so weird.

<comment><USER3> They had so many reasons to push him out. I feel like the board has been aware of the relationship for a while, but they got together one day to figure out which public reason to give for the ousting of Krzanich. And they chose this, which is probably the reason with the least negative impact on whatever is left of Krzanich' career. He may even get high-fives for it at his next gig.

At the end of the day, they had to get rid of him, not just for the insider trading, which is probably one of those "everyone does it" things in corporate America, but primarily because he seemed completely incapable of keeping Intel competitive against AMD's offensive over the next few years. Plus, under Krzanich's watch Intel lost its multi-year leadership in process technology.

<comment><USER2> Larry Ellison rolled out the red carpet for Mark Hurd after Hurd was found to have had multiple questionable relationships with "marketing interns" that he would fly all over the world.

So like, do corporations use "impropriety" as the public cover story for "actually he lost this company a lot of money but we don't want to spook the shareholders"??</comment></comment></comment>


Should every computer chip have a cosmic ray detector? - <AUTHOR> http://www.newscientist.com/blog/technology/2008/03/do-we-need-cosmic-ray-alerts-for.html <comment><USER2> Why detect, when you can correct?</comment>


How to Wake Up in the Morning Without Stimulants - <AUTHOR> http://lifehacker.com/5708824/how-to-wake-up-in-the-morning-without-stimulants?skyline=true&s=i

<comment><USER2> Dup: <http://news.ycombinator.com/item?id=1988666></comment>


Graylog: Free and open source log management - <AUTHOR> https://www.graylog.org/ <comment><USER2> Huh, didn't know this existed, been using Elk for a while. Wonder how it compares to Splunk (which I still have yet to try), the blogpost below covers what it cost to ingest 250GB of logs a day with Greylog.

Apparently Splunk would be $160k a year for that kind of volume. Anyone work with Splunk extensively care to comment?

[https://thehftguy.com/2016/09/12/250-gbday-of-logs-with- gray...](https://thehftguy.com/2016/09/12/250-gbday-of-logs-with-graylog-the- good-the-bad-and-the-ugly/)</comment>


Why use closures in JavaScript - <AUTHOR> http://howtonode.org/why-use-closure

<comment><USER2> great post. It was more of examples of how to use closures in JS rather than the pros/cons of it.</comment>


Wikileaks tweets: Google boss Eric Schmidt on secret project - <AUTHOR> https://twitter.com/wikileaks/status/792858025212121088 <comment><USER2> So the big reveal here is that there may have been some neopotism in the rush to unfuck the Obamacare website instead of the usual federal hiring procedure? Based only on the text seen it looks like "hey, this Mike guy is good. Get this him on it and we can promise him a campaign position later on to sweeten the deal".

Considering how doing things the proper way led to the Obamacare website kerfuffle in the first place, this is the type of corruption I'd actually want more of.

<comment><USER3> What I got from the e-mail was that this is after the Obamacare website rework was already done, and they wanted the same guy to work on a "secret" Eric Schmidt project, since he proved to be a good leader.

Since the guy questioned "how legit it is", the insinuation I get from Wikileaks that this project was some kind of shady government spying project.

Edit: to be clear, based on the e-mail it could literally be anything. But I guess the main point is to show how tightly SV is integrated into the inner workings of government.

<comment><AUTHOR> Thats my understanding from that tweet too. The concerned part was when he asks about legitimacy of 'Eric Schmidt project' and they want to convince him with some position/reward later on.

</comment></comment></comment><comment><USER4> Some more on what Eric Schmidt did/is doing for Hillary's campaign (ignore the source, it's a "just the facts, ma'am" report, and all anodyne and entirely proper stuff, and per a linked article the company they set up is getting paid directly by the campaign, so there's no coordination issues, i.e. it's legit): [http://www.breitbart.com/tech/2016/10/31/wikileaks- googles-e...](http://www.breitbart.com/tech/2016/10/31/wikileaks-googles-eric- schmidt-wanted-to-be-head-outside-advisor-to-clinton-campaign/)

And it sounds like he gave good advice.

</comment><comment><USER5> I expect that this is not the big Google reveal that Assange promised</comment>


Australian net filter goes ahead - <AUTHOR> http://www.smh.com.au/technology/technology-news/filter-goes-ahead-regardless-20100529-wmg7.html

<comment><AUTHOR> I've sent enough chain emails to my friends, letters to MP's, rants on forums... I feel like giving up trying to stop this `net filter` imposed on us.</comment>


PyTennessee: Jessica McKellar Closing Keynote and Tickets on Sale - jam-python http://pytennessee.org/

<comment><AUTHOR> Hey everyone, we are accepting talks, I encourage you to submit: [http://www.pytennessee.org/speaking/cfp/](http://www.pytennessee.org/speaking/cfp/)

</comment><comment><USER2> I'm a Python/Django developer for a large healthcare.company here and I am so glad to see our python community continuing to grow. Good work.

<comment><USER3> In general, Nashville seems poised to be a sleeper tech city. Cheapish (especially surrounding areas), lots of money (personal and business), liberalish, well located. Though crime rates leave something to be desired and it can be a bit backwards/old South sometimes.

<comment><USER4> > liberalish

As a native, I do not know Nashville as a liberal city, but I guess perspectives are all relative.

<comment><USER5> Ditto. (Though I mostly grew up a lot farther out in the sticks.) I think what they mean is "the area around Vandy and the recently-gentrified portions of East Nashville are liberalish".

That having been said, the general feel of Nashville has really changed over the past decade.

I used to see it as a "dirty, smelly big city", but it certainly feels more alive now than it used to.

Then again, perhaps a lot of that is the fact that I live somewhere else, and now I go there to visit friends and family.

At any rate, glad to see a pyTN conference springing up!

<comment><USER3> I only go across the river to visit friends or go to the tomato fest and Vandy area for McDougals chicken.

I live and have lived in the areas people consider solidly red, you'd be surprised how people vote. They just don't wave a moderate or liberal flag like the conservatives do.

<comment><USER5> Good point.

Additionally, a lot of the liberal/conservative divide is actually urban vs. rural. Davidson Co. is certainly mostly urban.

I think I just have a skewed perspective of things, as I interact almost entirely with people in the rural parts of TN (which obviously isn't Nashville itself).

</comment></comment></comment></comment></comment></comment><comment><USER6> Not really a Python guy, but I'm sure to learn something interesting.

</comment><comment><USER7> Leon Gersing is the opening keynote as well!

</comment><comment><USER8> What is the theme for this conference? I suppose two months from PyT we will enter PyCon!

<comment> jam-python Diverse is the general idea, we want to have talks on the wide area of things for which python is used and good general development talks as well. We are also striving to be an affordable alternative for those that can't make it to Montreal for PyCon this year for whatever reason. We'll never be on that level, but we're aspiring to be a nice regional supplement like PyOhio, PyTexas, PyCarolinas, or PyArkansas.</comment></comment>


The future of life insurance may depend on your online presence - <AUTHOR> https://www.theverge.com/2019/2/7/18211890/social-media-life-insurance-new-york-algorithms-big-data-discrimination-online-records <comment><USER2> > Algorithms speed up this process — though there aren't many cases where a > decision is entirely automated — and can make it more precise. Sometimes, > the algorithm will greenlight a person so they don't have to go through the > invasive medical tests.

That sounds like a stupid idea except for very short-term, high-premium policies. How many people immediately post to Facebook a cancer diagnosis? Unless it's close to 100% then an insurer would be a fool to rely on it for anything other than the most niche products.

> The convenience of immediately receiving a policy is appealing to those who > don't want to wait weeks for a doctor's appointment, and that can lead to > more life insurance policies being purchased.

When I was originally looking at term life insurance, the policy offered by my employer required me to go to the doctor's office for a physical. I elected the insurance but never bothered getting the physical so it never took effect. A couple years later when I got serious about term life insurance and looked into it more seriously, I discovered two things: 1) an individual policy is a much better deal long term, and 2) many (most? all?) insurers for individual policies send a phlebotomist to you--the one sent to me arrived with a needle and scale and left so quickly I almost felt jilted.

> And while life insurance sales have traditionally been face-to-face > interactions with agents, that mode is quickly falling out of favor, meaning > that algorithmic processes are better for online sales.

That's another thing I learned: never buy any kind of insurance from a salesperson. State Farm? Extremely overpriced because they spend a ton of money on advertising and especially their enormous sales network. How many local sales offices have you seen for Principal or Mutual of Omaha? Agents selling their policies exist all over but the sales model for these insurers is different which ultimately results in lower premiums.

And you don't need AI to disintermediate the sales networks. I got my policy from policygenius.com. There are usually local sales agents who take a cut of the premium. I think it's an artifact of the state regulatory structures. Policy Genius and some local agent get a couple dollars every month from my premium, even though the only thing local agent did was take my paperwork. But that's still just a fraction of the overhead involved for insurers with more aggressive marketing and sales models.

Finally, get term life and term disability insurance as young as you can. The moment you feel you need it (e.g. new parent) do not hesitate. Disability insurance is arguably more important than life simply because medicine is so advanced these days you're unlikely to die from accidents or disease until you're older, but you'll still likely be disabled. I'm still procrastinating on the disability, though....</comment>


Show HN: Another weekend project "Quick Conversions" - <AUTHOR>

Had another few hours free to do another simple iOS project, and am curious what you guys think. The basic problem I wanted to solve, was to make a unit conversion app that is as quick and easy to use as possible, while still being simple enough to be picked up randomly and used. Total time for development was roughly ten hours, and it was built completely programmatically (no interface builder or images). Plenty of promo codes to go around, just let me know so I don't have to waste them by letting them expire.<p>https://itunes.apple.com/us/app/quick-conversions/id595047250?mt=8 <comment><USER2> Seems like a clean and nice solution from the screenshots. Were you not able to find any app on the store that did what you needed? What do you want to make simpler than say, convertbot? <http://tapbots.com/software/convertbot/>

<comment><AUTHOR> I think the biggest advantage an app like this has over something like ConvertBot (which is very nice), is that you can get any conversion in no more than 4 steps. Press the category, type in the number, and select the "from" and "to" from the dials. The screen stays the same, the buttons are big, and it auto evaluates. Easy to read, and use with one hand.

<comment><USER2> Agreed, especially if you are using this app a lot, number of steps is more important than any aesthetic. More apps need to take this into account. I like it and look forward to seeing if you can find any other ways to simplify the conversion action.

<comment><AUTHOR> Appreciate the kind feedback ctruman, want a promo code so you can play with it?

<comment><USER2> Sure, you can email the code to cleetruman [at] gmail

<comment><AUTHOR> email gives me an error. Here it is 7NN4YRA9NPKX. If someone snatches it out from under you, shoot me an email (profile)

<comment><USER2> nabbed it, awesome thanks! App works great. I admit the number of touches and simplicity of the UI makes this a nice standalone utility. Its a little hard to be specific with the UIPickerView, but thats not exactly anything easy to fix. It would be interesting to see if there was a better UI component for selecting the units.

</comment></comment></comment></comment></comment></comment></comment><comment><USER3> I love this kind of app. Take something that exists a million times over and take it to its natural conclusion. There are a lot of useful apps in the app store that I will not install because they are not as simple as the obviously should be. I have two recommendations: First, you should consider adding all the units to the picker so I dont have to change tabs to measure volume weight and time. You can detect what type of unit are in view and auto populate the second picker with appropriate conversions. Second, considering the simplicity of this app, I would consider using a UI template to polish the look. I dont know much about iOS templates but the link below looks acceptable. Hope this helps. Best of luck! <http://www.appdesignvault.com/></comment>