An introduction to libuv (2016) - <AUTHOR> https://nikhilm.github.io/uvbook/ <comment><USER2> We merged this guide into [http://docs.libuv.org/en/v1.x/guide.html](http://docs.libuv.org/en/v1.x/guide.html) which got some updates to match API changes.

</comment><comment><USER3> I work with Nikhil. He's incredibly smart and a fantastic programmer. Didn't know he wrote a book on libuv though!

</comment><comment><USER4> > This book and the code is based on libuv version v1.3.0.

libuv v1.30 was release at on Jan 28, 2015. It is at v1.22.0.

<comment><USER5> Original author here. Yes this book was written a long time ago when I was into the node ecosystem.

A lot of the book was copied into the official docs later [https://github.com/libuv/libuv/pull/1246](https://github.com/libuv/libuv/pull/1246).

The book definitely does not capture new things. I do not intend to update it, but I still look at pull requests.

<comment><USER2> I merged it into the official docs, thanks a lot for all your work nsm! <3

</comment></comment></comment><comment><USER6> libuv supports child processes via fork, such as in uv_spawn. It also uses multiple threads to support uv_fs_stat, etc.

How does it handle the well known incompatibility between fork and threads?

<comment><USER7> Which incompatibility do you mean? If you're forking to create a child process, usually you're just careful not to do anything that might acquire a lock (including allocating memory) in between the fork and the exec, and then I think you're good?

Forking for something _else_ , though, god help you.

<comment><USER6> The tricky part of this approach is error handling. What if a system call fails in between fork and exec, or exec itself?

It looks like libuv creates a pipe for every new process, and uses that to send errno back on any failing system call. This has the disadvantage that you only get the error code, and none of the context. You get ENOENT, but you don't know which path was invalid.

<comment><USER8> They could just write the entire error string to an fd, right? It's annoying in C to write a formatted string without doing dynamic allocations, but it's possible.

(Or, if you want to be weird, do a PTRACE_TRACEME after fork and have the parent trace the child process and only detach when it sees a successful return from execve. If ptrace is unavailable, fall back to less-useful errors)

<comment><USER6> Piping back the error string is probably the best one can do.

</comment></comment></comment></comment></comment><comment><USER9> Is libuv used anywhere else outside of node?

<comment><USER10> I'm pretty sure aspnetcore uses it.

<comment><USER11> The default for Kestrel has been moved off of libuv, but you can choose to use libuv if you'd like.

[https://blogs.msdn.microsoft.com/webdev/2018/04/12/asp- net-c...](https://blogs.msdn.microsoft.com/webdev/2018/04/12/asp-net- core-2-1-0-preview2-improvements-to-the-kestrel-http-server/)

</comment></comment></comment><comment><USER12> Why is the hello world example [0] unnecessarily allocating and freeing the uv_loop_t? When I see this kind of crap right out of the gate I immediately begin suspecting this is probably a pile of awful code written by a novice C programmer then documented and published as if it's the best thing since sliced bread.

Much of the value in making a struct (and hence its size) public and supplying a pointer to the initializer is the potential to embed or avoid heap allocation of the thing altogether, and here in an example which would benefit from both the simplified code in addition to demonstrating the advantage, it's completely missed.

Fixed form:

      int main() {
        uv_loop_t loop;

        uv_loop_init(&loop);

        printf("Now quitting.\n");
        uv_run(&loop, UV_RUN_DEFAULT);

        uv_loop_close(&loop);

        return 0;
      }

[0] [https://nikhilm.github.io/uvbook/basics.html#hello- world](https://nikhilm.github.io/uvbook/basics.html#hello-world)

<comment><USER13> Generally, you only create one uv_loop_t, and it is vital it is never copied (which is easy to do accisentally if you stack allocate it).

mallocing is the entirely sensible thing to do here.

<comment><USER12> Then uv_loop_t should be an opaque type so its size isn't known at all, and uv_loop_init() should instead be uv_loop_new() returning the heap-allocated uv_loop_t, and uv_loop_close() renamed to uv_loop_free().

As-is the API and the way its use is being demonstrated in that example appear amateur to say the least.

<comment><USER14> Funny how most structs in the linux kernel are public, they must be all amateurs, too. Perhaps go read about container_of and struct embedding in C before calling anyone an amateur.

It's just a different programming approach in C.

Encapsulation is good only for making it harder for anyone to poke in the internals of your library, which has some benefits with binary compatibility, etc.

But it's strictly worse in all other metrics when coding in C. It limits you, it forces malloc calls where most of the time none would be necessary, it makes memory management more complicated, it forces explict initialization, etc.

<comment><USER15> If one already accepts that the object should be dynamically allocated because otherwise it's too easy to accidentally copy (which seems specious, but that was the suggestion), then all of those arguments apply to that recommendation, too. And if it's "vital" that the object not be copied, then the API could enforce that with an opaque type.

I've only worked with libuv in a few contexts, and maybe there are compelling reasons for exposing the struct. (I'd like to hear them! I would not have expected a uv_loop to be allocated in perf-critical code paths or code paths where failure isn't an option.) But I think critical analysis of C API design is an important topic. C gets a bad rap for being unsafe, which it obviously is in many ways, but as C developers, simple choices like this (that a novice might not even think much about) can make an API much safer -- or much less safe.

<comment><USER14> Performance is orthogonal to this. To me the less you juggle with pointers and malloc/free the safer your code will be from memory leaks, misuse of unallocated memory, NULL checking issues, and easier to inspect/reason about.

Struct embedding helps with this quite a bit. And it's not possible without exposing the struct definition.

Performance gains are possible, but that's secondary.

> If one already accepts that the object should be dynamically allocated

It can still be allocated on heap, but in one continuous chunk of memory as a part of the larger struct. Hiding the struct definition would prevent this.

<comment><USER15> > Performance is orthogonal to this.

That's largely true, but it's often cited as a reason to avoiding malloc/free (however dubious that is).

> To me the less you juggle with pointers and malloc/free the safer your code > will be from memory leaks, misuse of unallocated memory, NULL checking > issues, and easier to inspect/reason about.

I don't quite agree. I've worked mostly in code bases using the pattern described earlier (an opaque pointer, a $type_create(), and a $type_destroy() function). With that pattern, I find it much easier to be certain by code inspection that a particular object or transformation is valid because as long as the pointer was allocated correctly, the object can only be modified by functions that know the type (aside from memory corruption, but that's always possible). That's usually a small set of functions that know the struct details. This fact is useful both as a library author and as the author of a library consumer. By contrast, if the struct is exposed, it's harder to identify all the places that can modify the structure's details and to be sure that invariants are maintained in all those places.

Besides that, several other failure modes are much less likely with opaque structures, including copying a structure you shouldn't, miscopying a structure that's okay to copy (e.g., off-by-one while copying), or operating on a correctly-sized block of memory that's never been initialized. You can still use unallocated memory, of course, but that's fairly easy to make safer by initializing pointers to NULL. (The analogous option for stack-initialized structs -- initializing them to zero -- is not necessarily any safer than leaving them uninitialized -- particularly if the struct contains file descriptors.)

There are tradeoffs to both approaches. To me, the ability to modify the struct in new versions of the library without breaking the ABI is a pretty major point in favor of using an opaque structure for a library's primary handle. For very simple ancillary structures that are very unlikely to change, and where the convenience of stack allocation is worthwhile, exposing the structure makes a lot of sense.</comment></comment></comment></comment></comment></comment></comment>


Ideas I would like to see funded. What about you HN? - <AUTHOR>

1- A Rearden Commerce Competitor. Rearden has a few thousand enterprise customers. A group of talented programmers could launch a light version for consumers as well as the small 5 to 10 person teams.
2- An Open Table competitor. If you take a quick look at OT you can come up with 20 ways to improve the service. The only problem would be to sign restaurants, but you can start with your cousin's fiance's mom's restaurant.
3- A Paypal for web content. Add this piece of code to your video, blog post, or webpage and force anyone to pay 5 cents to access it.
4- A Google competitor. Crawling 1 million pages cost $2.00. Why does every search startup need to crawl the same web. One startup could do this  and license access for a fraction of a fraction of the cost. I do not think you can rely much on Google to create your own search engine.
5- A startup that fixes Email (Gist is a great start)
6- A startup that lets you switch cellphone companies without paying a penalty fee.
7- A startup that re-invets cable companies. These guys charge between 19.99 and a few hundreds per month.
8- A Plug and Play office.
Members pay a monthly fee and can make use of the office space/cafeteria/conference rooms 24/7 year round.
9- A plug and Play Mechanic shop.
A lot of people love to work on their cars, but lack the proper space to do. Give us a park with all sort of high end tools to lift cars, engines, power tools to change tires etc...
10- A startup that can produce high end and eco-friendly container homes for less than 25k, and a state the gives cheap land to people who buy these.
*Bonus- A startup that will force users to turn off their phones, and PC and mingle with real people. <comment><USER2> 8 & 9 already exist in a number of places around the country.

10 exists in that there is plenty of cheap land all over the US. I have a neighbor that's selling off property for about $12,000/acre. Is that cheap enough? Move a bit farther north and you can find land for less than $8k/acre. You can build a small house for less than $25k if you start with a prefab building. Material cost is less likely to be a problem than people worrying that no one will want to buy the house when they move: that's why no-one builds small houses outside of trailer parks.

What would I like to see funded? Cheap satellite internet so I can move into the middle of nowhere or live on a boat with no POTS, DSL or cell coverage and still get at least a 1Mbps upload and download. I live just 45 minutes outside a major city and I barely have cell coverage in my living room!

</comment><comment><USER3> >> 10- A startup that can produce high end and eco-friendly container homes for less than 25k, and a state the gives cheap land to people who buy these.

Some states like Kansas will already give you free land if you move there for a certain length of time, I think it might be like 5 or 10 years.

</comment><comment><USER4> >> 3- A Paypal for web content. Add this piece of code to your video, blog post, or webpage and force anyone to pay 5 cents to access it.

That's not a bad idea - I'd pay 5c out of a prepaid account to see something on YouTube - and the music execs could stop whining.

<comment><USER5> It's also not a new idea. Tons of people have thought about and worked on micropayment systems (myself included). See [http://www.openp2p.com/pub/a/p2p/2000/12/19/micropayments.ht...](http://www.openp2p.com/pub/a/p2p/2000/12/19/micropayments.html) for a pretty good argument as to why micropayments won't work. Basically they overvalue cheap resources (like web content) and undervalue expensive ones (like users' time).

Think about it in some real-life contexts of your own. For instance, do you pay per text message, or do you have an unlimited texting plan?

</comment></comment><comment><USER6> Paypal killer.

Ebay killer.</comment>


How Facebook Groups Sparked a Crisis in France - <AUTHOR> https://www.getrevue.co/profile/caseynewton/issues/how-facebook-groups-sparked-a-crisis-in-france-148144 <comment><USER2> One of the concluding paragraphs undermines the presentation of the article itself:

"Of course, at this point we lack the evidence that Facebook caused the Yellow Vests to organize. "

Anyway, everyone knows that it is the Russians that organize all the bad things.</comment>


We made 1,000,001 Gifs using Computer Vision - <AUTHOR> http://gifs.com/feed/dwi <comment><AUTHOR> Hi all! Happy to answer your questions throughout the day :).

If you're interested in the whats, whys, and hows, we'd love for you to read out medium post:

[https://medium.com/@gifs/using-computer-vision-to-make- milli...](https://medium.com/@gifs/using-computer-vision-to-make-millions-of- memes-73416015c7bd#.dt4aqagsr)</comment>


Immortal Game - <AUTHOR> https://en.wikipedia.org/wiki/Immortal_Game <comment><USER2> It would be interesting to see AlphaZero trained to play very aggressive romantic style. AlphaImmortal's goal should be beating Magnus Carlsen 51% of the time with the most amazing games ever played.

I think you could do this by changing the value function:

\- reward short game over long games,

\- draw reward closer to loss reward,

\- reward capture more.

In fact, I would like to play against AlphaImmortal specially trained to play against my Elo-rating level opponents with 51% win rate. That would be fun!

<comment> V-2 As a matter of fact, AlphaZero already plays more aggressively than typically expected of chess engines.

Eg. in a well-known game it beated Stockfish (the strongest traditional chess engine), brilliantly sacrificing 3 pawns for a non-obvious, human-like compensation.

This once again challenged the notion of what the perfect play boils down to in chess.

Oversimplifying a bit, it had already been assumed that it's solely about grinding the opponent down by mercilessly accumulating miniscule advantages, while all the flashiness only worked because human players are error-prone.

As it turns out, it may have been just another limitation of chess engines as we knew (and built) them.

<comment><USER3> Link to game? I'd like to watch that.

<comment><USER4> Possibly [https://www.youtube.com/watch?v=7-MborNxYWE](https://www.youtube.com/watch?v=7-MborNxYWE)

Also a nice game: [https://www.youtube.com/watch?v=lFXJWPhDsSY](https://www.youtube.com/watch?v=lFXJWPhDsSY)

</comment></comment></comment></comment><comment><USER5> Coincidentally I was watching reviews of some games from AlphaZero vs. Stockfish 9 and people were amazed at the "human-like" nature of some of AlphaZero's decisions. It was seemingly sacrificing material with no obvious gain, only to come back much later in the game with a stronger strategic position. While Stockfish evaluates all possible moves it is limited by computation time and can't see too far into the future. AlphaZero responded much faster because it has already precomputed the expected probability of winning for most branches, so it can seemingly blunder when in fact it is following the path that led to victory most often.

</comment><comment><USER6> A seven-minute summary of the game, and some history too!

[https://www.youtube.com/watch?v=AaKWUiiEHgA](https://www.youtube.com/watch?v=AaKWUiiEHgA)

</comment><comment><USER7> Compare (one of the best) chess games that isn't even a chess game: [https://www.reddit.com/r/chess/comments/e2n3df/kramnik_propo...](https://www.reddit.com/r/chess/comments/e2n3df/kramnik_proposes_a_variant_nocastling_chess/)

<comment> default-kramer What is interesting is in the comments on chess.com, people propose "NBC [no black castling] Armageddon" meaning black is not allowed to castle but wins with a draw. And it seems balanced! I'd really like to see some top humans try it out.

</comment></comment><comment><USER8> kinda reminds me of josh waitskin

</comment><comment><USER9> It was an interesting read. But ... why is it on HN home page with just 3 points within 45m?

<comment><USER10> Because Americans are sleeping.

</comment></comment><comment><USER11> Who else thinks that Chess is too simple and too boring compared to other strategy games that we have now? Starcraft 2, Agricola, Twilight Struggle, Through The Ages, etc.

<comment><USER12> All these games include some sort of random component and thus cannot be compared to chess which is purely skill based.

<comment><USER13> Starcraft is deterministic, the only random element is how people click. Slow the game to 1/10,000th current speed and it's turn based.

<comment><USER14> Starcraft is not deterministic, and the nondeterminism can matter in significant ways.

In Starcraft 1, every ranged attack had a 120/256 chance of missing a unit that was up a hill or behind a tree, and a 1/256 chance of missing always.

In Starcraft 2, attack cooldowns are slightly randomized, so two units that are commanded to attack each other will almost never kill each other simultaneously.

<comment><USER15> By your argument Pokemon is also a non deterministic game

<comment><USER16> Pokemon is highly nondeterministic. To take just one example, there are many moves which probabalistically induce game-changing status effects on the enemy.

<comment><USER13> This is exploitably incorrect. It seems that way to players but tool assisted Pokemon speed runs regularly use luck manipulation. [https://glitchcity.info/wiki/Luck_manipulation](https://glitchcity.info/wiki/Luck_manipulation)

Games have had really bad prng's for preformance reasons and gamers have been exploiting them for years. The most extreme example is probably Doom's which was simply a hard coded list of numbers. [https://doom.fandom.com/wiki/Pseudorandom_number_generator](https://doom.fandom.com/wiki/Pseudorandom_number_generator)

<comment><USER17> Luck manipulation is only possible in more recent entries by exploiting game- external factors like the system clock. But, in any case, when it comes to comparing games implemented in software (like Pokemon) with games that aren't, you have to distinguish between "the game" and "the software". The Pokemon game is designed to be non-deterministic from the player's perspective, regardless of the fact that the Pokemon software may be deterministic in some detectable or manipulable way. Just like craps would still be a game of chance even if you figure out how to fix your rolls.

<comment><USER13> So in your mind actual Pokémon games are deterministic, but the platonic ideal for Pokémon is not. Why would you assume the real Pokémon game was your mental model?

I mean the software implementation defines the game and it's the only thing anyone has ever played. It seems to me any change you make results in a different game. It's not like a game allowing pawns to move 3 spaces can be called Chess even if everything else was the same.

<comment><USER18> The point is that nothing is random, even pure games of chance, if you have enough physical data about the rng.

Humans playing Pokemon on a standard device cannot manipulate luck.

<comment><USER13> Actually humans can exploit the prng on for example Generation III Pokemon. It takes frame perfect timing, which limits how long you can do so, but it is possible at the start of the game.

This really falls into the same category as speed running using save game glitch: [https://www.youtube.com/watch?v=qHTK5GLOFVM](https://www.youtube.com/watch?v=qHTK5GLOFVM) aka possible but only really useful if you're trying to do something very specific.

Anyway, while I understand you assume this stuff to be impossible I simply suggest you do some research before bringing it up.</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment>


How To Use Basic jQuery Filters With HTML List - <AUTHOR> http://jquery-with-asp.net/2010/08/how-to-use-basic-jquery-filters-with-html-list-part-2/ jQuery basic selectors and filters explained in a simple way with examples. <comment><USER2> There seems to be a lot "how tos" that are just slightly expanded help documents.

TLDR; RTFM: [http://api.jquery.com/category/selectors/basic-filter- select...](http://api.jquery.com/category/selectors/basic-filter-selectors/)</comment>


A former Marine who was on the no-fly list for 4 years –and still don't know why - <AUTHOR> http://www.vox.com/2016/6/30/12054124/no-fly-list-veteran <comment><USER2> I'm against anything to do with the no fly list, including not being able to fly, because of the utter disregard for due process and consequent inevitability of abuse.

From the article, the government offered to take him off the no fly list if he would be an informant/spy. If he could come off, then he must not be a threat. So he's on the list unjustly (as I presume most people on the list are). He should come off immediately, but instead the government tried to coerce him by selectively doling out his rights.

That's a shameful way to make a living.</comment>


Ask HN: Would you take a pay cut for a shorter commute? - <AUTHOR> So I'm at a crossroads. I just moved to a smaller city, about 50 miles from the nearest large population center. I still have a job in said population center making 110k. This results in a commute of about an hour
The problem is, if I take a job locally, I'm looking at a pay cut of 10-15k.
I really can't judge if that's worth it or not. I've done long commutes before and there are pluses and minuses of course. But I really am struggling to decide on what's the better choice: more money, or more time...
Thoughts? <comment><USER2> Gas is costing you $3k per year already, plus the mileage and upkeep. That 10k is really like 7k after tax so your extra income is $4k which is $333 per month. Plus you are using 2 hours per day of your life to the commute. This is 40hrs a month for the $333 or about $8.32 an hr.

<comment><AUTHOR> I guess I just needed somebody else to confirm it for me. I did the math after posting this. I don't like the ego hit of a salary reduction, but it just makes sense it seems...

<comment><USER3> Studies show: Sitting for many hours a day takes a toll on your health that cannot be fully reversed by exercise.

Medical bills get spendy fast, plus how miserable are you willing to be for the "bragging rights"? Do you really routinely tell folks your salary number to enhance your ego?

Those are sort-of rhetorical questions. I don't need or want answers to them. Just think on it all for your own edification.

</comment></comment></comment><comment><USER4> I've commuted 1hr by car for 2.5yrs. Don't recommend it. I'd happily take a 15k paycut if my company relocated within a 15 min drive. The driving became so mind-numbing after a few months. And I shudder to think of all the lost sleep from the early mornings.

</comment><comment><USER5> If I were you I would certainly take the local job. I strongly hate commuting.

</comment><comment><USER6> personally im not that averse to commuting, i use the time to read and listen to music, its probably different if youre travelling by car rather than train though</comment>


A website for joke enthusiasts  (kwipp.com) - <AUTHOR>

We just finished developing this website(http://www.kwipp.com). I promise it's worth a minute of your time and you'll get a few chuckles out of it. <comment><USER2> I do not like the green or the frames / header.

I do like the fist bump icon.

There are already a lot of good joke sites online, you should get more content IMO.

</comment><comment><AUTHOR> We really appreciate your feedback.</comment>


What to do when your new company name is shared by a gang of criminal fraudsters - <AUTHOR> https://www.fastcompany.com/90290520/what-to-do-when-your-new-brand-name-is-shared-by-a-gang-of-criminal-fraudsters <comment><USER2> This article ought to be one sentence: change your name</comment>


Chinese Scientists create process to turn Copper into 'Gold' - <AUTHOR> https://www.google.com/amp/s/amp.scmp.com/news/china/science/article/2179209/chinese-scientists-turn-copper-gold <comment><USER2> They are NOT turning copper in to Gold. They're altering the properties of copper using a process a little like sputtering to make it resilient enough for use in applications where Gold is currently best utilized.

<comment><AUTHOR> I agree, that's why I said 'Gold' \- it's not gold, it just is an attempt at replicating some of the best industrial aspects of it.

</comment></comment><comment><USER3> Looks like this is the actual paper: [http://advances.sciencemag.org/content/4/12/eaau3275](http://advances.sciencemag.org/content/4/12/eaau3275)

Note that this is about replacing the use of gold as a catalyst for synthesizing alcohol from coal, not any electronics usage.

I don't know enough about the science to say if this is promising for electronics usage or not.

</comment><comment><USER4> This seems less like they turned copper into gold and more that they found a way to process copper so that it can replace gold in some industrial applications.

I suppose that title wouldn't climb the frontpage as quickly.

</comment><comment><USER5>
      > The method developed by
      > Sun's team can inject a
      > large amount of energy
      > into copper atoms and
      > made the electrons more
      > dense and stable, they
      > said.

What is this pseudoscientific drivel? What the hell do they mean by "inject a large amount of energy" into atom? Can anybody actually explain what they created and what the properties of that material are?

<comment><USER6> <big IIUC warning>

They are using sputtering that is a method that use a big spark to remove some Cooper atom from a surface and put the atoms in another surface. (You can use other metals instead of Cooper too.)

The deposited Cooper atoms are not in the standard environment that they is use to be, like in a big Cooper metal block. So they attach to the surface in a weird configuration.

In the new configuration, the elections don't have the usual distribution (like the electrons in the atoms of a metal Cooper bar). Anyway, the atoms of Cooper here don't have more or less electrons that usual, so they are still "metallic" with some definition.

In the new rearrangement, the electrons are more densely packed. If you use the (wrong) Borh atom model, some of them have an orbit that is closer to the center than usual. With the correct quantum model, the idea is that some of the inner orbitals are usually empty, but here one of the electrons that is usually in an outer orbital falls into this usually empty orbital.

(It's much more complicated, because the orbitals are not static and they are rearranged in each configuratio, and the orbitals are not a totally clear concept when you consider the quantum effect of correlation, but let's keep this simple.)

So the new configuration is more compact, because one electron that is usually in an outer orbital is now in a inner orbital.

The outer electron was easy to attack by other chemical substances. This gives Cooper some of it's usual properties. With the new configuration, it's more difficult to attack the electron, so the atoms have some (at least one) property that is similar to the properties of Gold.

In particular, this property is useful to bound some Carbon atoms and help them react, so they can produce alcohol from carbon (and water and energy?).

</big IIUC warning>

<comment><USER5> Thank you

</comment></comment></comment><comment><USER7> [meta] Does this really need to be an amp link?

<comment><USER8> Nothing ever does.

</comment></comment><comment><USER9> If this works out it's bad news for gold bugs- 10% of global gold demand is for electronics manufacturing.

<comment><USER10> I thought they primarily viewed gold as valuable because it's a medium of exchange that they believe will remain useful and stable in case of some sort of societal collapse? There probably won't be a lot of microelectronics getting manufactured in that scenario; gold prices dropping ought to be good for them now.

<comment><USER11> Hoarding gold when TSHTF is stupid anyway. The only commodities in that event will be booze, ammo, and women.

<comment><USER12> Personally, I would go for food, clothing, and shelter

<comment><USER10> Hard to trade shelter, but I see what you mean - but I think those are too low on the pyramid to truly be commodities. I'm thinking painkillers and antibiotics.

Also, skills. If I were truly paranoid, instead of hoarding gold I'd be hoarding friendships with dentists and paramedics. An infected tooth can kill you, and make you wish it wouldn't take its sweet time doing it.

</comment></comment></comment></comment></comment><comment><USER13> While we're at it with the misleading titles, this one could have been "Sun's micro system turns copper into gold".</comment>


Deferred Objects - <AUTHOR> http://developtodesign.com/js/deferred-objects/

<comment><USER2> Dojo has had a very good deferred pattern for quite a while now and was one of the first toolkits to implement it. There a quite of few people that use the word promise for the same construct as well. So if you see an article talking about JavaScript promises it is a similar pattern.

<comment><AUTHOR> Yes, it seems you can use them interchangeably; for example, the jQuery Deferred API doc page mentions that they've based it on CommonJS Promises proposal.</comment></comment>


Java 8: New features in ConcurrentHashMap - <AUTHOR> http://www.deadcoderising.com/2016-01-17-java-8-new-features-in-concurrenthashmap/ <comment><USER2> Java has really come a long way. I'm not sure why it's not hyped more. I guess it's like C++ (another widely used old man's language that runs the world).

<comment><USER3> \- Oracle has hands on it and does questionable things like suing google

\- Everything Java does, C# does as good or better. In general for everything in Java you could easily find a better way to do it.

\- Java has lots of warts, many to have the language be backwards-compatible. (switch-case, enums, UTF-16 encoding, generics, null, difference between objects and basic types,...)

\- Java is tied to old technologies. There are no standard JSON libraries, however even XSLT is included in java se.

\- You need to use Java with an IDE. Eclipse is horrible to use (even scrolling lags here) and IntelliJ costs money.

Still java is a mature and solid language. There is just nothing to hype about it.

<comment><USER4> You must not have used eclipse for a while :) . I use Visual Studio at work and Eclipse at home and they're comparable these days. I agree that years ago Eclipse was awful.

\- Every language has switch-case and enums? I don't get what you're trying to say there.

\- Generics are fine?

\- Every language supports null on objects?

\- Nearly every language treats null and primitive types differently for performance reasons

\- Java has three popular JSON parsers and they're all faster than .NET's builtin serialization. To get similar performance you need to use Newtonsoft which isn't builtin to C# either :).

\- You don't need an IDE, it's just stupid to develop without one because they're so helpful. Nothing is stopping you from running javac on the command line.

You can't do a LOT of things java can do in C# because third party library support pales in comparison. A lot of databases and open source software don't have c# clients. If you're dealing with big data or ML you'll find almost nothing in C# land.

I feel like you haven't used Java in a long time. Things are much better than Java 6 days

<comment><USER3> Maybe I should expand a bit on my points, as the problems do not seem so apparent.

\- Java has the same horrible switch case with the error prone break as C. If you want exhaustive matching on enums you will end up with a useless default case. If you ever worked with a programming language with pattern matching you will feel the pain.

\- This might be a bit opinionated but I think enums are not enough. Sum types/tagged unions/variant types/disjoint unions/whatever you like to call them are pretty useful.

\- Generics in Java are highly limited. Part of that is because generics were added as an afterthought and are implemented using type erasure. Both functional programming languages like Haskell or imperative programming languages like C++ or Rust offer more powerful generics that can sometimes help abstract things more elegant.

\- The problem is that all objects are nullable by default and you cannot specify that e.g. parameters or results are never null. This leads to boilerplate null checking and missing handling of null cases. Everybody that touched java probably saw quite some amounts of NullPointerExceptions. Kotlin for instance offers types that by default cannot be null, with TypeScript this exists if you turn on an option of the compiler.

\- You can offer pretty much everything you offer for objects also for primitive types. In fact, this is what Project Valhalla tries with value types and specialisation.

\- My comment on IDEs was more about the need to use an IDE being bigger with Java than for instance C, while eclipse is often annoying. I am using eclipse daily currently because I work on some Java code for my Master's thesis.

<comment><USER5> "IDE being bigger with Java than for instance C "

Really, why ?

I can't imagine working without an ide for any language. Back in the dark days I did html/javascript in notepad.

</comment></comment></comment></comment></comment><comment><USER6> To me, the single most useful/important addition to Java 8 ConcurrentHashMap is the addition and implementation of "computeIfAbsent".

With CHM and computeIfAbsent, it's easy to write lazy loading "by key" (i.e. simple caches). Prior to Java 8, I had to resort to Guava's LoadingCache.

<comment><USER7> Wait, it had a concurrenthashmap but no way to "get or add"? Is a concurrent hash map even useful without that? (I suppose you could always write your own with some read/write locking but...wow)

<comment><USER8> ConcurrentMap has always had putIfAbsent(). That requires the thing that you're putting to have been constructed prior to the call.

computeIfAbsent() allows you to pass in a lambda (a Function really) which will only be called if necessary, thus avoiding a potentially unnecessary Object creation/etc.

</comment></comment></comment><comment><USER9> After Java 8 is there any benefit to using Scala? It seems Java has caught up and has the benefit of being lighter.

<comment><USER10> The Java streams syntax is still painful.

<comment><USER11> I got used to the syntax pretty fast, to the point that I actually kind of like it. My complaint about streams is how slow they can be. If you're doing collection transformations often, the time spent turning your objects into streams can kill your performance. I'm worried it's going to reinforce the old myth that functional programming is implicitly slow.

<comment><USER12> It will be a lot better with value types in Java 10 (hopefully).

</comment></comment></comment></comment><comment><USER13> This is old and they didn't even touch on the most useful thing in Java 8 ConcurrentHashMap which is computeIfAbsent.

<comment><USER14> Like most of these, that's part of Map in general.

<comment><USER6> The _thread-safe_ implementation of computeIfAbsent in ConcurrentHashMap is the real improvement. "computeIfAbsent" on a non-concurrent Map is merely syntactic sugar.

<comment><USER14> Neither is 'merely syntactic sugar', take a look at their respective implementations. It's hardly surprising that a method on a class named 'ConcurrentHashMap' in 'java.util.concurrent' provides certain concurrency- related guarantees. It's the point of the whole thing and is written on the tin.

<comment><USER6> Default Java 8 Map implementation is merely: "get X. if X absent, compute for X, put X." These lines of code have been written over and over again for anyone using a Map in Java, no doubt. It is entirely trivial and almost impossible to get wrong writing it out on your own.

Whereas writing a _performant_ concurrent "computeIfAbsent" is extremely non- trivial and if you try to do it yourself, you have a high chance of getting it wrong or slow.

Therefore, CHM "computeIfAbsent" is new and exciting, and Map "computeIfAbsent" is "could care less".

<comment><USER14> _Default Java 8 Map implementation is merely_

Worth noting that's not actually the HashMap implementation.

</comment></comment></comment></comment></comment></comment><comment><USER15> I've spent the past 4-5 days going over and over this page:

[http://winterbe.com/posts/2015/04/07/java8-concurrency- tutor...](http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial- thread-executor-examples/)

Talks about some other useful topics as well. It's probably not news to everyone, but the third part covers a fair bit of CM/CHM.

</comment><comment><USER16> What is it about Java that gives us so many variants of each method instead of more composable primitives?

I'm thinking of:

        forEach(long parallelismThreshold, BiConsumer<? super K,? super V> action)
        forEach(long parallelismThreshold, BiFunction<? super K,? super V,? extends U> transformer, Consumer<? super U> action)

I get why we have function, bifunction, consumer, biconsumer, and all that. What I don't understand is why we have a special method for applying a function before passing to the consumer. It seems like the minor convenience in terms of syntax is outweighed by the proliferation of method signatures.

<comment><USER17> Well, what's the alternative? In a more functional language we have two options: have a map() function we apply first and then call forEach() on the result, and function composition. The problem with the map() function is we have to return a ConcurrentHashMap, which means we're effectively making a copy of the data, which isn't space efficient. The function composition operation is more tenable (in Java, this is the andThen() or compose() methods, which are duals), but kind of ugly to write out if both the transformer and action are lambda expressions. Truth be told, I don't see the disadvantage of having extra method signatures: their usage is optional, and I imagine they have default implementations that refer to each other using function composition on the back end.

There's also one annoyance that neither function composition nor extra method signatures solve, which is boxing primitives. The transformer has to return an object, and the action has to accept one, so the example forEach(4, List::size, ...) will generate a bunch of boxed integers. Hopefully the JIT will notice this and try to elide the allocations, but I don't know how much you can trust the JIT to figure that out. The best thing to do is to manually compose the operations yourself, but that isn't always possible or convenient.

<comment><USER16> When I look at the documentation, I find the section with forEach to be so much noise. Ditto for autocompletion in an IDE. [https://docs.oracle.com/javase/8/docs/api/java/util/concurre...](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html).

When does manual composition not work well? The article's examples seem easy enough:

        map.forEach(1, (k, v) -> "There is " + v.size() + " articles about " + k, System.out::println);
        map.forEach(1, (k, v) -> System.out.println("There is " + v.size() + " articles about " + k));

<comment><USER17> To be fair, there are only 3 signatures for the forEach() method, the reason that section is so noisy is because it's followed by forEachEntry(), forEachKey(), and forEachValue(), each of which has two signatures. You technically don't need those other methods, but they are convenient to have. I find "map.forEachValue(1, Foo::bar)" to be more clear than "map.forEach(1, (_, v) -> Foo.bar(v))".

Manual composition can get ugly if the argument is used multiple times, especially if the function is non trivial. Say something like

       map.forEach(1, Expensive::func, x -> x * x)

which would naively manually compose to

       map.forEach(1, (k, v) -> Expensive.func(k, v) * Expensive.func(k, v))

which is going to be less efficient, doubly bad if that function has side effects, and noisy on top of it. You could assign the value to a local variable inside the lambda, which gives you

       map.forEach(1, (k, v) -> { int x = Expensive.func(k, v); return x * x; })

which fixes the efficiency and correctness problems, but is a bit too verbose for me. There's probably other situations, that was just the first one I thought of.

Honestly, though, it all comes down to taste and the situation. I personally would use manual composition excepting circumstances like my example above.

</comment></comment></comment></comment><comment><USER18> Isn't that about 3 years late? IIRC Java 8 was released in early 2014.

<comment><USER19> The Java world tends to be pretty conservative and slow-moving compared to newer, trendier languages.

So while it's been out for some time, a lot of enterprise code bases are only just now starting to move to Java 8, and developers are only now really getting their teeth into these sorts of features.

Also, Java 8 was a pretty huge release. Even experienced developers are no doubt discovering little new interesting features and tricks all the time.

<comment><USER20> > The Java world tends to be pretty conservative and slow-moving compared to > newer, trendier languages.

newer, trendier languages like Python, Ruby or C++? ;)

<comment><USER21> He who uses Python 3 / C++14 in production may cast the first stone :P

<comment><USER22> I think there's a reason why you didn't mention Ruby 2.4.0. :-)

<comment><USER21> Just the fact I don't know enough about it to find an example :D

</comment></comment></comment></comment></comment></comment><comment><USER23> My favourite is the fact that ConcurrentHashMap does not de-generate into a Linked List anymore.

<comment><USER24> oh well, unless you had specifically designed custom made hash function (like hashCode() {return 1;}) it never did.

And even now it still does it do so... unless you do it on purpose but implement properly j.u.Comparable.

</comment></comment><comment><USER8> Most of the methods mentioned in the article seem half-assed to me, especially when compared to the "natural" Java 8 functionality that's commonly available on Streams, particularly .map() and .filter().

Maybe there are optimizations, but why would you have a custom signature to add a transformer (really it's just a map()) to forEach(), when you would normally just .map().forEach()?

<comment><USER25> > why would you have a custom signature to add a transformer really it's just > a map()) to forEach()

Might have to do with the parallelism. With the transformer in the forEach call, the transformer will (presumably) be on the same thread as the consumer.

(That's just a guess--I haven't actually looked at code)

</comment></comment><comment><USER26> For what I care, the feature in itself it is not new, but I am happy to find out things in the JVM space that I haven't known about before. Especially since Java 8 came as one of the biggest releases to date in terms of new features and functionality added to the language.

</comment><comment><USER27>
        > .search()

Why didn't they name the function "filter", like everyone else does?

<comment><USER16> I think because it just returns a single value: [https://docs.oracle.com/javase/8/docs/api/java/util/concurre...](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html)

<comment><USER28> Why didn't they name the function "find", like everyone else does?</comment></comment></comment>


The London Eye in Apple Maps (3D) Now Rotates - <AUTHOR> https://twitter.com/AdamSwinden/status/570976064710844416 <comment><USER2> Insane.

What's next? Moving cars.</comment>


A guide to working with Riemann - <AUTHOR> http://aphyr.github.com/riemann/howto.html <comment><USER2> It'd be nice if you told people what this was.

<comment><USER3> Hi, I'm the author of Riemann. This part of the documentation is aimed at people who already know what Riemann is, so your confusion is completely understandable! :)

In short, Riemann is a complex event processor, driven by Clojure configuration, oriented towards monitoring distributed software systems. There's an introduction to its features and concepts here:

<http://aphyr.github.com/riemann/>

You can watch me try to justify my crimes against computers here:

<http://vimeo.com/38377415>

And here's some slides!

<http://t.co/9BKdufal>

If there's any questions I can answer, happy to help. You're also welcome to stop by #riemann on freenode. Cheers!</comment></comment>


Thin film converts heat from electronics into energy - <AUTHOR> https://m.phys.org/news/2018-04-thin-electronics-energy.html <comment><USER2> Abstract:

The need for efficient energy utilization is driving research into ways to harvest ubiquitous waste heat. Here, we explore pyroelectric energy conversion from low-grade thermal sources that exploits strong field- and temperature- induced polarization susceptibilities in the relaxor ferroelectric 0.68Pb(Mg1/3Nb2/3)O3–0.32PbTiO3. Electric-field-driven enhancement of the pyroelectric response (as large as −550 μC m−2 K−1) and suppression of the dielectric response (by 72%) yield substantial figures of merit for pyroelectric energy conversion. Field- and temperature-dependent pyroelectric measurements highlight the role of polarization rotation and field-induced polarization in mediating these effects. Solid-state, thin-film devices that convert low-grade heat into electrical energy are demonstrated using pyroelectric Ericsson cycles, and optimized to yield maximum energy density, power density and efficiency of 1.06 J cm−3, 526 W cm−3 and 19% of Carnot, respectively; the highest values reported to date and equivalent to the performance of a thermoelectric with an effective ZT ≈ 1.16 for a temperature change of 10 K. Our findings suggest that pyroelectric devices may be competitive with thermoelectric devices for low-grade thermal harvesting.

</comment><comment><USER3> When can I buy this film to put on the inside of the windows to my car?

Because the first person to make that happen is going to be very wealthy....

<comment><USER4> How would you see to drive? They never said the film was transparent.</comment></comment>


Facebook scans system libraries on Android and uploads them to their server - <AUTHOR> https://twitter.com/wongmjane/status/1167463054709334017?s=12 <comment><USER2> Previous discussion:

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

</comment><comment><USER3> As someone who's built my company's mobile crash reporting solution, I have a guess why they might do this.

It's is extremely difficult to diagnose Android native code crashes. Unlike iOS where it is both straightforward to unwind on the phone, and where Apple makes the iOS system symbols available for symbolizing system frames in a stack trace, neither of these things are true on Android.

My first approach for my company's Android crash manager SDK was to use Google Breakpad. This works by capturing a snapshot of stack memory at the time of the crash. Unwinding then occurs on a backend server. But to unwind successfully, absent a frame pointer register, you need unwind info to provide to the unwinder. This simply isn't available except for Nexus devices for which you can download the system images from Google. And even on devices where the code was compiled with a frame pointer, you still need symbols so you know what each frame's function was.

Another approach is to unwind on the device. In my experience, using libunwind, this is successful about 50% of the time. It also risks hanging the app, which looks even worse to the user than just crashing.

Years ago, I briefly considered having our crash SDK, optionally and with user consent, extract the symbols and unwind data from the libraries on the device and upload them to our backend. I dismissed it as too expensive to do on a user's phone.

Instead, we crowd source as much as we can from our employee phones.

Android native code crashes remain a bear to diagnose. Especially annoying since Android itself collects a ton of diagnostic data about your app when it crashes - it just doesn't make it easily, or in some cases at all, accessible to the app itself.

<comment><USER4> This is clearly not for crash reporting. They're sucking up libs to figure out what apps their users use.

Could be a few reasons, could be boring metrics, could be anticompetitive identification of acquisition targets, could be oppo research, could be user profiling.

None of these things I'm ok with Facebook getting off my phone.

<comment><USER5> > They're sucking up libs to figure out what apps their users use.

Hypothesis 1, debugging: requires full copies of system libraries

Hypothesis 2, fingerprinting: requires hashes of application libraries

Evidence: full copies of system libraries are being uploaded

How are you using that evidence to be so confident in hypothesis 2 and confidently against hypothesis 1?

<comment><USER6> Hypothesis 3: they do both

</comment></comment></comment></comment><comment><USER7> If the actual files are uploaded(?), doesn't this constitute reverse software piracy? Under what license are the uploaded files covered by? Can facebook require the end users to supply the source code for GPL-licensed library binaries uploaded through this system? What about proprietary oem blobs that are often covered by a no-redistribution license or EULA? What if I am an AOSP or vendor developer working on unreleased R&D next-version Android?

<comment><USER8> Nice angle but I guess the defense is that the user explicitly gave Facebook permission to read those files.

<comment><USER9> If I buy a book, I'm allowed to read that book, but I am not allowed to copy it.

<comment><USER10> You are allowed to copy it, you just can't sell copies of it.

<comment><USER11> You are not allowed to copy it, or sell copies of it

Under fair-use laws (which vary country to country), you can usually copy a small portion of the work for non-profit educational use

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

</comment></comment></comment></comment></comment><comment><USER12> Okay what is the purpose of this even?

Sure, everyone is going to talk about fingerprinting, but let's face it, there are way easier and more reliable methods of doing that than system libraries that mostly match between same devices.

Must be for some sort of debugging? Still seems insane...

<comment><USER13> There are hundreds of thousands of variants of android phones.

Facebook wants their app to work on all of them, but cant track down all of those physical devices.

Instead, I bet they load all the libraries into a big test bench and check all features of the app work with all possible hardware.

It wouldn't be perfect, since I bet many of those libraries rely on custom system services, kernel interfaces, etc, but I bet it helps them track down a bunch of issues before they impact real users.

</comment></comment><comment><USER14> What about the Instagram and WhatsApp apps? Do they behave the same way?

<comment><USER15> I'm really interested in an answer for this question, since WhatsApp is the only Facebook app I have installed/keep an account.

Unfortunately, _everyone_ uses WhatsApp in Brazil, and very few people uses Telegram, for example. This makes it kinda impossible to be Facebook-free here.

</comment></comment><comment><USER16> Apps should be statically linked and the kernel should not allow any access to the hdd or fs. Where you have to opt in to what folders the app is able to read or write to. Same for network access and any other hardware, camera, mic, etc.

<comment><USER13> Frequently those static libraries provide device-specific functionality. For example, the Jpeg decompressor on my phone uses custom silicon, and is a systemwide shared library.

<comment><USER17> Is there any way to make memory pages executable, but not readable?

<comment><USER18> Kernel modules are executable, but not readable (by userspace processes). Or just have it in a different process and talk over IPC.

</comment></comment></comment></comment><comment><USER19> Wouldn't they just hash the libraries, surely they can get copies by legal means, like buy "a few" phones?

</comment><comment><USER20> How does this pass through their legal team?

<comment><USER21> I suspect they don't run anything through their legal team, only ask them to help after they've fucked up.

This has the advantage of getting away with things the legal team would advise against, which I think they do a lot.

<comment><USER20> If that is true...This is a culture inbreeding disaster...

</comment></comment></comment><comment><USER22> Another reason I'm glad I quit

<comment><USER23> Both. No point using an operating system that is a malware and privacy nightmare, just so I can fiddle with it more. It's not a computer, it's just a phone.

And no point using Facebook, really. Still with Whatsapp (and passively Instagram) as my friends are massively on those.

<comment><USER24> Whatsapp and Instagram _are_ Facebook. The same company owns and runs all three.

<comment><USER23> I am well aware of that. Thus I mentioned I am still with those apps (involuntarily). So still with Facebook Inc, but not Facebook.com/App

</comment></comment></comment></comment><comment><USER25> How is this not utterly illegal in the EU, per GDPR? (Which was drafted to stop indiscriminate data acquisition on human subjects: I'm assuming that metadata about the core libraries on your phone, in conjunction with FB's user metadata, are trivially de-anonymizable.)

<comment><USER26> How does this provide any more data for fingerprinting than just checking the model of the phone?

<comment><USER27> Harder to spoof, less likely to be faked, plus additional meta information.

<comment><USER26> For starters, I'm not convinced it would be harder to spoof that than the library information (which also seems pretty easy to spoof if not easier).

But even if that were the case, why would they spend this level of engineering effort just to be able to fingerprint people in that extremely rare case of having a spoofed phone model? Do you think that kind of customer would even be receptive to targeted ads in the first place? It just doesn't make sense to me.

<comment><USER27> Tracking value increases with rarity. Data is packaged and sold, not simply stored and empty cells can go for crazy money if the target is hot enough.

How much would you pay for Elons verified personal number?

</comment></comment></comment></comment></comment><comment><USER8> Fingerprinting on steroids?

<comment><USER28> It's copying the actual libraries, so it's more like cutting off actual fingers rather than just taking the prints.

<comment><USER29> Maybe more like making a copy of your fingers and keeping them while leaving your actual fingers intact.

</comment></comment></comment><comment><USER30> This is pretty bad.

</comment><comment><USER31> What about the breaking of GDPR as well?</comment>


I still don't know how to share a story on Hacker News Homepage. Please help - <AUTHOR> <comment><USER2> Submit a title. And then the URL. That's it

<comment><AUTHOR> under which tab from the top?

<comment><USER3> The one labeled "submit".

<comment><AUTHOR> Yeah but it goes to "new" tab, and not the Y Homepage...

<comment><USER4> Submissions are ranked according the the associated activity. It'll appear on the first page if it is ranked accordingly.

See the FAQ ([https://news.ycombinator.com/newsfaq.html](https://news.ycombinator.com/newsfaq.html)):

> _" How are stories ranked?"_

> _" The basic algorithm divides points by a power of the time since a story > was submitted. Comments in threads are ranked the same way."_

> _" Other factors affecting rank include user flags, anti-abuse software, > software which demotes overheated discussions, and moderator intervention."_

I also recommend reading the Guidelines:

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

<comment><AUTHOR> Thanks you! Very helpful.</comment></comment></comment></comment></comment></comment>


Bessemer's Anti-Portfolio - <AUTHOR> http://www.bvp.com/portfolio/antiportfolio.aspx

<comment><AUTHOR> In another comment someone mentioned how Fred Wilson started a trend of VCs telling about opportunities they've missed. This Bessemer's page has been online for years, and contains some pretty funny bits of information.

My favourite tidbit is: "How can I get out of this house without going anywhere near your garage?" :)</comment>


Here's how Apple plans to protect privacy and still compete on AI - <AUTHOR> http://www.recode.net/2016/6/13/11925660/apple-differential-privacy <comment><AUTHOR> _To obscure a person's identity, the company said it will inject a small amount of "noise," or randomness, to what the user does — so each little interaction, on its own, is meaningless_

This seems like a system-level implementation of the recent "Ruin my Search History" that was on here a few days ago[1]. I like it in theory as it seems to give users plausible deniability on any activity, but I think it would only help if used in addition to other policies.

[1] [http://ruinmysearchhistory.com](http://ruinmysearchhistory.com)</comment>


Mathematica man brews AI Google Killer - <AUTHOR> http://www.theregister.co.uk/2009/03/17/wolfram_alpha/

<comment><USER2> "Google Killer": The tech journalists' kiss of death.

"AI Google Killer": The kiss of death and a box of poisoned chocolates.

I get the impression that tech journalists purposely overhype new ideas just so 6 months later they can trash the very thing they overhyped for not living up to its expectations. Job security for tech journalists.

</comment><comment><USER3> More (new to old):

<http://news.ycombinator.com/item?id=510579>

<http://news.ycombinator.com/item?id=507360>

<http://news.ycombinator.com/item?id=507172>

<http://news.ycombinator.com/item?id=504411>

</comment><comment><USER4> wow. this article is horribly biased.

i went to a lecture wolfram gave at my university when he was touring for NKS. he would answer a question from a CS professor until he went over the CS professor's head, then a biologist until he went over his head, then a physicist until he went over her head. flippantly passing off that level of genius by calling him "the lovable George Costanza of the mathematics community" says something. i understand wolfram has a huge ego, but that does not belittle his accomplishments.

just because your work "ruffled some feathers in the scientific community" currently, does not mean that it won't be considered ground breaking in 100 years. to be clear, i'm referring to how scientists become attached to their life's work and thus biased, as opposed to anything specific to wolfram or NKS and cellular automata.

finally, Alpha will be judged when it comes out. if it's worthwhile great, if not fine, but there's not much point in trying to persuade people of something before it is out.

<comment><USER5> Did he actually go over their heads? Or did he just become too hard to follow?

<comment><USER4> fair enough, i didn't word that well. what i was trying to convey was simply that he was holding conversations with computer scientists, biologists, and physicists each in their respective languages, which to me is pretty impressive.

</comment></comment></comment><comment><USER6> Yellow Journalism at it's finest. "The George Costanza of the mathematics community", he calls him. Must be nice to always be a critic, and never have to create anything real.

</comment><comment><USER7> Regarding AI & systematic knowledge: "No, computers haven't solved this problem because there are no people who actually need it solved."

Is this guy serious ?

<comment><USER8> He's Ted Dziuba. Which pretty much means "no".

</comment></comment><comment><USER9> The article makes some good points, but unfortunately is based on 0 firsthand knowledge.

Yes, machine learning+semantic web "sounds like" like oil. But neither of those technologies are very relevant to alpha.

Yes, prolog had an algorithm for making deductions. But the point of alpha is not to make logical deductions, but to run computational models and analysis based on a vast dataset and human input.

The idea that alpha "answers your question" is something that wolfram implicitly put out there in his blog post, but often its more like a computational version of wikipedia.. you enter an entity and visualization- heavy page is generated to explain and explore it.

Hand-curating data and algorithms may sound silly to someone who hasn't built something as big as Mathematica, but the world of important/relevant data and algorithms is ultimately finite in size (if very large and complicated).

</comment><comment><USER10> I'm actually excited about this project. Wolfram does the kinds of things I could imagine myself doing if I was smarter.

<comment><USER11> Maybe you should just do instead of saying you wish you were smarter.

<comment><USER12> This running shoe philosophy is fine in high school, but accepting that there are differences in ability between us all is an important aspect to maturity.

<comment><USER13> _"Nothing in the world can take the place of Persistence. Talent will not; nothing is more common than unsuccessful men with talent. Genius will not; unrewarded genius is almost a proverb. Education will not; the world is full of educated derelicts. Persistence and determination alone are omnipotent." -- Calvin Coolidge_ <http://news.ycombinator.com/item?id=340466>

<comment><USER14> I hear Einstein, Newton, and Guass all had IQs of about 100, give or take 100.

</comment></comment></comment></comment></comment><comment><USER15> Mathematica Alpha has officially been initiated into the gaggle of existing semantic web apps, now that it's been referred to as a "Google killer" in a linkbaity headline. Lets just hope it doesnt suffer the fate of Cuil.

All joking aside, I'm really excited to begin playing with this and exploring the possibilities of a live web inference engine. I'm anxious to see what kind of API/developer tools will be provided, and (since it's Mathematica) whether there will be any cost involved. Has anyone seen this discussed anywhere?

</comment><comment><USER16> I thought Wolfram Alpha wasn't aiming to be an "AI"?

<comment><USER17> It will be a "New Kind of AI (tm)"

</comment></comment><comment><USER18> The key phrase in the original announcement is "explicitly curate all data".

This was tried before, in the "expert systems" of the 1980s. Prolog and various 'production system' languages (e.g. OPS5) would decouple facts/rules from the execution engine. Then "just add" domain knowledge ...

As far as I can tell, what killed that was the unfeasibility of debugging. One bad item (or the lack of a critical true one) could poison the well, and good luck tracking it down.

The care and feeding of proper 'fact databases' remains expensive, and Google doesn't seem disposed to go there, apart from unit and currency conversions. (Add a 'hmm' for automated translation.)

So, this leaves two ideas for 'Alpha' as a product: a) they believe the database grooming expense can be profitable on a global web scale; b) they automated enough of the database grooming to make it profitable.

</comment><comment><USER19> let's wait and see.</comment>


pyMCU - The Python Controlled Microcontroller - <AUTHOR> http://www.pymcu.com/

<comment><USER2> Also check out pymite:

<http://wiki.python.org/moin/PyMite>

PyMite is a flyweight Python interpreter written from scratch to execute on 8-bit and larger microcontrollers with resources as limited as 64 KiB of program memory (flash) and 4 KiB of RAM. PyMite supports a subset of the Python 2.5 syntax and can execute a subset of the Python 2.5 bytecodes. PyMite can also be compiled, tested and executed on a desktop computer.

</comment><comment><USER3> This sounds like it's a bunch of GPIO ports connected to a PC over serial, and a nice Python module that runs on the PC. It's not Python-on-a-microcontroller (they never claim it is, but that's the assumption I made upon seeing the website). For those who want this sort of thing, it's also easy to get an Arduino, write a quick sketch that receives and transmits over USB serial, and use pyserial to control it.

<comment><USER4> Exactly my reaction.

You can run Python actually ON a Raspberry Pi, btw. That device is just not as robust on GPIO (5V destroys it, weak current source.)

<comment><USER5> Yes, good point. Though getting an RPi these days is quite a chore. Its backordered until hell freezes over.

</comment></comment></comment><comment><USER6> Very cool stuff. I always wanted to pick up PIC embedded programming, but always had too many other things in Python to play with. Now it seems I wouldn't have to learn a new language. I wonder how well this stacks up with hand written PIC code.

What's the coolest thing you've done with a PIC?

<comment><USER7> Why not just use a Raspberry Pi? This device doesn't actually run Python, it's just an interface between USB and I/O pins like the Bus Pirate (which is also controllable with Python).

<comment><USER6> Correct me if I'm wrong, I don't have any experience with a Raspberry Pi, but wouldn't the end result from this be able to be embedded in a much smaller form factor than a Raspberry Pi?

This looks like mainly a test board. Would one be able to take the end result of this and program a production PIC board with it?

Seems like that might be useful for smaller form factors than what a Raspberry Pi is capable of.

<comment><USER7> If you want to write production embedded code, you have two choices: C and assembly. That's the result of my extensive research, anyway: gcj doesn't work, the AVR forth implementation uses too much flash and can brick your chip at runtime (for other reasons), etc.

<comment><USER8> You can also program 8+bit PICs in JAL, a Pascal-like language.

</comment></comment></comment></comment></comment><comment><USER9> This looks cool. It's unfortunate that it's Python-controlled rather than Python programmable. It uses a PIC16, so you'd probably have to throw out essentially all of Python's dynamic features. At that point, one might want to stick with Arduino or PIC Basic stamp.

I think a Lisp programmable uC would be infinitely cool, but again using these types of uC you would have to forgo the dynamic features.

<comment><USER10> Possibly of interest: Pycorn. It's a project a friend of mine is working on to port a Python interpreter to bare-metal ARM.

<https://github.com/tornewuff/pycorn>

From what I understand, though, it requires quite a bit more memory than is available on most microcontrollers. 64KB isn't enough for Python to even start up, let alone do anything useful.

<comment><USER4> I think the Cortex M4s that are coming out have 512 kB and up in their bigger variants. They also have more MHz and MIPS, and just need a cheap board available. The TI Stellaris Launchpad is looking good in this direction.

<comment><USER10> The Stellaris tops out at 96KB SRAM (and the part on the Launchpad is 32KB). I'd be interested to know what parts you're looking at, as right now I'm looking into building an SPI-based RAM expander for the Stellaris board.

Regardless, I believe Torne was saying that Python ends up needing a few _megabytes_ to work. So you still pretty much end up needing something with external RAM.

</comment></comment></comment></comment><comment><USER11> My preference for this style of thing is the series of controllers, sensors, and actuators made by TinkerForge. They use the same style of USB daemon to talk to the microcontroller(s), but there are then bindings in Python, C#, C++, Java, Perl, etc, etc. They also have more 'stuff' available to add (IMUs, I/O, motor controllers, all many of sensors, video controllers, etc.)

I've no idea why they're not more popular. Low marketing budget I'd guess...

</comment><comment><USER12> When I first saw the link I was hoping it was a hardware python interpreter, sort of like what the Reduceron does for Haskell. <http://www.cs.york.ac.uk/fp/reduceron/></comment>


NY State Senate Code on GitHub - <AUTHOR> http://github.com/blog/447-ny-state-senate-code-on-github <comment><USER2> I'm not familiar with JSP, but this ([http://github.com/nysenatecio/Newsclips/blob/ba592845111abd8...](http://github.com/nysenatecio/Newsclips/blob/ba592845111abd8052788cb294eca02110c7410d/WebRoot/index.jsp)) looks like someone let too much logic creep in their view.

Also interesting: [http://github.com/nysenatecio/Newsclips/blob/ba592845111abd8...](http://github.com/nysenatecio/Newsclips/blob/ba592845111abd8052788cb294eca02110c7410d/src/gov/nysenate/newsclips/ClipsClient.java)

I can only hope that such openness will lead to higher quality government software.

<comment><USER3> wow, look at all that keyword stuffing at the bottom of the first file.</comment></comment>


Can my startup kill reddit? - <AUTHOR> http://www.poprl.com

<comment><USER2> A couple of questions:

1) Links are categorised, but there seems to be no way to dive or browse the different categories?

2) What is the significance of the shink at the top?

3) How do I submit a link?

4) How do I mod links up or down?

Currently, far from being a reddit killer I think :/

<comment><AUTHOR> The service is much like TinyURL in that we shrink URLS. We then measure the click through rate on the new short URL and rank the link appropriately.

We might expand to more categories in the future.

This link might help. [http://www.techcrunch.com/2008/06/06/poprl-mixes- reddit-with...](http://www.techcrunch.com/2008/06/06/poprl-mixes-reddit-with- tinyurl-gets-strange-result/)

</comment></comment><comment><USER3> If you explain what holes you are filling which Reddit doesnt maybe we could answer. In the 10 seconds I spent on the site, I couldn't figure out what it is. Sorry it looked to me like a digg clone.

</comment><comment><USER4> no.

but it looks useful and could fill a niche.

</comment><comment><USER5> What, no unicode?

</comment><comment><USER6> your about us section links to your personal blog. What is the site about, how does it work?</comment>


Vulnerability in iPhone data encryption - <AUTHOR> http://www.h-online.com/security/news/item/Vulnerability-in-iPhone-data-encryption-1008185.html

<comment><USER2> I tried this actually and photos, audio recordings and music are the only exposed things. The rest of the folders are empty. Granted it's an issue, but it's not that bad.

</comment><comment><USER3> Security through hoping nobody plugs the device into a linux box is no security at all.</comment>


Instagram Deleted My Account with 135K Followers. Zero Warning - <AUTHOR> http://petapixel.com/2016/09/14/instagram-deleted-account-135k-followers-zero-warning/ <comment><AUTHOR> TLDR: It looks like Instagram has a way to automatically deactivate people's accounts, opening up the reporting tools to abuse. Then it's hard to get in touch with anyone to fix it.

Should be a good lesson for startups building tools to moderate user generated content. I personally think humans should review everything, but use the number of reports to push up items as higher priority to review.</comment>


Running Rails on Amazon EC2 - <AUTHOR> http://railspikes.com/2007/4/5/rails-on-ec2 <comment><USER2> Great article on EC2! The author misnamed the article though since it hardly mentions anything at all about Rails specifically. Regardless, definitely a good read and introduction to the pros/cons of EC2 for beginners.</comment>


Atomic switch networks – design of a complex system for natural computing - <AUTHOR> http://iopscience.iop.org/0957-4484/26/20/204003/article

<comment><AUTHOR> OP here with a few disclosures.

Firstly, the paper is paywalled, but there is an article discussing it at [http://phys.org/news/2015-05-scientists-atomic-scale- hardwar...](http://phys.org/news/2015-05-scientists-atomic-scale-hardware- natural.html).

Secondly, after double-checking the abstract, I made the editorial decision to replace the subtitle "nanoarchitectonic design of a complex system for natural computing" with "design of a functional device". My reasoning was that the original subtitle seemed hopelessly opaque (outside the field, presumably), and that the development of a testable device seemed to be the most interesting news.

Thirdly, I know next to nothing about the topic, and am only guessing that this is newsworthy. My introduction to the news was from a post at phys.org by Lisa Zyga ([http://phys.org/news/2015-05-scientists-atomic-scale- hardwar...](http://phys.org/news/2015-05-scientists-atomic-scale-hardware- natural.html)). Phys.org is a frequently breathy science news site, but Ms. Zyga has been blogging there for years and is a decent science reporter.

I am hoping that this post will be of some interest to those with domain knowledge, and that I can learn from any discussion or criticism of the paper.

</comment><comment><USER2> clever, wish we could read the research. Seems that the aim is to create a higher density (and presumably larger scale) medium for computing than can be made with traditional fabrication. trade-off (opportunity?) is that it computes much differently - you learn to compute with the switches you get, rather than building the switches you need. probably has some nasty sensitivities to voltage, and RF, and heat, and vibration - but that's just engineering :)

Have they demonstrated much better density yet? (from skimming one of the researchers' other papers they have gotten 10^8 switches/cm^2 which is not as dense as the transistors on a high-end graphics card. not that they are really directly comparable anyhow, this would be like a special coprocessor for neural-stuff.

here's a good overview with quotes from one of the above paper's authors: [http://nanotechweb.org/cws/article/tech/61049](http://nanotechweb.org/cws/article/tech/61049)

</comment><comment><USER3> I did research with Adam & Jim back in undergrad @ UCLA - I had a first stab attempt at creating these atomic switches & failed miserably. I'll see if I can get them to comment if there's a specific question here.</comment>


Programmer Insecurity - <AUTHOR> http://blog.red-bean.com/sussman/?p=96 <comment><USER2> I hadn't thought of programming this way but it rings true. Call it the "genius complex" or "hacker complex": wanting to create something great alone and in a short timeframe then "unveil" it and bask in praise from peers. Unfortunately for self-approved geniuses and hackers, great things are built incrementally.

"The Myths of Innovation" by Scott Berkun has something to say along these lines but in general terms rather than in terms of programming. Check it out:

[http://www.amazon.com/Myths-Innovation-Scott- Berkun/dp/05965...](http://www.amazon.com/Myths-Innovation-Scott- Berkun/dp/0596527055/ref=pd_bbs_2?ie=UTF8&s=books&qid=1213356181&sr=8-2)

<comment><USER3> I agree that projects are best developed and released incrementally, but I don't see that as being the same as releasing unfinished code, or code which otherwise doesn't meet the developer's own expectations of fitness.

I read the article, and he makes good points, but he was also concentrating on a specific subset of software development, and I don't think the principles apply equally well to individual projects or projects developed by small teams.

Also, it glosses over the reasons that we all developed those habits in the first place: the software development community is notoriously acerbic. Although most of the time nobody may care about your unfinished code, eventually you'll post something, somewhere, that will elicit an ugly response that could have been avoided if you'd just rolled out something a little more polished. (See also: the OpenBSD development community.)

</comment></comment><comment><USER4>
      Be transparent. Share your work constantly. Solicit feedback. Appreciate critiques. Let other people point out your mistakes.

I agree with this fundamental thought expressed in the post.

But sometimes making the decision of 'when' to open source your code, does also have to take in to account the 'community acceptance' factor. If the code is of not that great a quality, it can put off potential key contributors, and actually wrongly tag that product with a hard to get rid of 'below average' kind of label.

Of course, once its out, or if someone is contributing to an existing open source project, throwing 'code-bombs' isn't a great idea at all.

</comment><comment><USER5> On the other hand, most artists like to keep their work secret untill it has reached a certain level of readiness, or am I mistaken? Unfinished paintings, books, poems...

<comment><USER6> It's a natural reaction for any creative to keep their work under wraps until it's ready, but ready is relative to the medium (and the creator).

Having worked professionally as an illustrator before becoming a programmer, I can confidently argue most illustrations don't look close to complete until you've laid down 95% of the paint. If you've worked all week on an illustration, and it doesn't meet your expectations, more often than not you need to begin with a clean canvas.

Code, on the other hand, can be functional in as little as one line. Functionality can be built upon that, and you can refactor code more often than not without destroying the functionality that relies upon it. Code is an infinitely more flexible medium.

The impulse to shelter your work from critical eyes is powerful, but "unsightly" work can be altered at the drop of a hat. Perhaps programmers need to be a little more open.

</comment></comment><comment><USER7> I'm better at realizing most of my code is shit than I am at producing great code so I'm hesitant to share because that could "promote" bad programming and people might be misled about my taste. That also means I don't need reviews that much, I'm already busy improving my skills/codebase for things I know are sucky.

</comment><comment><USER8> I work on a small team with a large legacy codebase in ClearCase. Builds take long enough that it is easier to work on a large chunk and do a clean build once the couple of libraries and executables I'm working on are in good shape, then deliver the blob.

I check-in on my own branch on a feature-by-feature basis, but in practice, no one sees my work until a large blob is out there. There's limited opportunity to second guess people (this cycle, we had one formal code review per developer).

At my work I am just stuck with these limitations, but I don't recommend working this way.

</comment><comment><USER9> I understand about not wanting to share code in progress. Even though there are 427 coding methodologies, each of us still wants to work in our own style. Chances are likely the _someone_ won't understand what we're doing even if we do. If I want feedback, I'll ask when I'm ready.

Finished code. OTOH, is a totally different animal. Not wanting your code to be peer reviewed is indeed insecure, stupid, and in many commercial shops, a violation of protocol. Only a fool expects no feedback.

Junior Programmer: "I'm not sure it's right."

Mediocre Programmer: "It's not right until I say so."

Good Programmer: "It's not right until _you_ say so."

<comment><USER10> This is something I can relate to very well - I work for a large company that out sources lots of work to India - some of the developers are good, some terrible (as they are everywhere) - but without fail they refuse to show you anything until its all done. There are at least two problems with this:

* Often they make poor implementation decisions that as the 'designer' (I hate branding myself with that term) I don't like and know it could be done a different way, but now that X weeks of development work have been done, its too late to change it.

* Reviewing a big blob of code like that is a nightmare - easier if I get drip fed it feature by feature. Also, often when reviewing code I have noticed a junior developer will use the same anti-pattern over and over again - so they have to refactor all through the code - if such an error was noticed early, it would have resulted in much less work overall.

<comment><USER9> "Often they make poor implementation decisions"

Are they coding to a spec? If you're outsourcing you better be or you're just asking for trouble.

"Reviewing a big blob of code like that is a nightmare"

Right. That's why "big blobs of code" are _never_ acceptable. Use whatever strategy you want: structured code, object orientation, reuseable components, etc., but use _something_.

The problem isn't outsourcing. And it isn't lack of incremental reviews. The problem is in standards, methodologies, and project management. You'd think a "large company" would know better.

<comment><USER11> "Are they coding to a spec?"

A spec is a description of the expected behavior of the program, NOT a description of what the code will look like. Unless we have a different conception of "spec"?

If you are specifying the entire, detailed "design" upfront, you are not allowing for Hacking as a valid methodology (specifically, Bottom Up Programming). As we are discussing this on "Hacker News," I'm not sure we want to discredit Hacking as a valid model for software development.

"And it isn't lack of incremental reviews."

Aren't incremental reviews a valid part of project managemnt and software methodology?

<comment><USER12> For a couple of projects weren't particularly big, we required this set of "specs" before release (for internal use):

\- Requirements specification

\- Design specification

\- Use cases

\- Test plan

Plus some reports. The design included a functional specification, but all of these documents evolved iteratively, so as it turned out the design document was mostly an after-the-fact record of what we did. But I don't think anyone here is an avid supporter of BDUF, so what else can a team do to prevent foolish code, other than requiring everyone to show their stuff and explain themselves regularly? If your up-front specification is comprehensive enough to prevent any bad future programming decisions, you don't need a programming team to implement it, you just need a compiler for it.

Maybe that's the deep secret to "Worse is Better": bad ideas are exposed to the harsh glare of other developers early on, but it doesn't sting so bad because nobody expected perfection. Humble is better.

</comment></comment></comment></comment></comment><comment><USER13> I always felt that if I can't put my code to others' scrutiny and live with the fact that it has errors and be glad that others spent THEIR time to help ME find problems, then I am a pretty crappy programmer. After all I can't expect myself to be the omnipotent programmer who writes perfect code.

Edit: I always felt that if someone did not look at some code and find a problem with it, they just didn't look hard enough :)

<comment><USER11> I think I would feel I was making other programmers do too much of my work if I just sent them code that I new was bad, and have them waste time to look at it and just confirm that, yes, it's bad.

That's different, of course, from making your best effort and then asking someone who you think is good at programming to find all the places you could do better.

<comment><USER13> My friend's company has a policy: Everyone gets code reviews all the time by peers.

The benefit is, the reviewer gets to learn a different part of the system, and the person getting reviewed gets his code scrutinized. It is a very beneficial system.

As far as showing bad code: There is a different between delivering crap and delivering code you are satisfied with. If you are satisfied with it, thats when scrutiny is necessary. You need to get a feel for when the code is good enough, because you can spend all your life making it just a bit better. Same kind of stuff applies to artists, you just need to know when to stop improving and start letting others scrutinize the work.

</comment></comment></comment><comment><USER14> I once posted allot of code from my misc directory and it was just generally useless code, some of it was just unfinished, and some of it wasn't supposed to do anything so it couldn't be finished and some of the code worked, though most of it was just some stuff i wrote as fast as i could type and not even run it later to see if it works. Like some form of instant poetic inspiration witch you might write down or record in a dictaphone on the street but not publish it in a book or even read it to your friends. I have a lot of those and i am not afraid to share them just for the fun of it. I also share my not useless code(witch isn't much). I also wrote one of my school exams in python and showed it to some friends(i think it was a biology exam or something) :D</comment>


Bottender: Make Bots in Your Way, Fast and Flexibly - <AUTHOR> https://github.com/Yoctol/bottender <comment><AUTHOR> blog post about first open source release: [https://bottender.js.org/blog/2017/10/31/bottender/](https://bottender.js.org/blog/2017/10/31/bottender/)</comment>


Don't Listen to What Your Customers Say, Look at What They Do - <AUTHOR> http://statspotting.com/dont-listen-to-what-your-customers-say-look-at-what-they-do/

<comment><USER2> Working software mike speaking. How may I help you?

My left handed smoke shifter is frog nozzles.

What happens when you try?</comment>


Some things to do (and not do) if you aren't invited to interview with YC - <AUTHOR> Having been here long enough to witness one funding cycle I'd like to offer some preemptive advice to those of you who aren't invited to interview in a few weeks.
For the record, I did apply last round and was not invited. I did not apply for this funding cycle.
1). Don't take it personally.
YC was kind enough to send a very nice email explaining that their decision wasn't personal. The email explained how their process is fraught with error. They were even nice enough to say there was a good chance they passed over promising groups of hackers. It's not personal and sometimes an application doesn't do justice to your abilities.
2). YC is not for everyone
Sure, YC would make the whole startup process a lot easier and a lot more exciting, but you can still be very successful without YC. There are lots of successful companies out there that probably haven't even heard of YC.  The honest truth is: being successful is completely in your control.
3). Don't write scathing blog posts
After the decisions were made, a few people wrote scathing blog posts, designed to rip YC a new one. It doesn't work, it won't make you feel better and it just makes you look like an emotional train wreck. Don't air your dirty laundry. If you feel wronged or emotionally charged, refer to #1, then #2, then #4.
4). Shorten the cycle
Eventually, the rejection will wear off and you'll get back to work. Some people might obsess for a few days, others a few weeks. Eventually though, you will get back to work on your ideas. If that's true, then why not shorten the cycle? Give yourself an hour to feel like crap (if that helps) then get back to work.

 I know many of you will see this advice as obvious, but when the email notifications go out it won't be. That's why I'm posting it now.

<comment><USER2> Another thing I'd ask people not to do is write to us asking for the details of why they weren't invited. We explain in the YC FAQ that we won't, but every cycle people deluge us with emails anyway.

It's not because we're being secretive that we don't answer these emails. The reason is that there generally are no details to give. Usually when we don't invite a group for interviews, it's not because there was some glaring flaw in the application, but simply because nothing in it jumped out at us.

<comment><USER3> This 'rejection without a stated reason' is common practice - and poor practice wherever it may be found, ie recruitment, vc, men/women relationships, record companies and many places else.

The ease by which even minimal feedback can be given which can lead to great benefit to the recipient is obvious, and therefore should be embraced. There may be risks that the recipient makes some kind of rebuttal and wastes time, the reasoning itself behind the rejection causes bad publicity or the feedback process takes time however the benefits to the [in this case YC] ecosystem I think outweigh the disadvantages.

<comment><USER2> _poor practice wherever it may be found_

Sure you want to commit to that blanket statement? Do you expect every woman in every room you walk into to stop and think about why you didn't draw her attention, and then come and tell you?

<comment><USER4> I can't speak for adrianwaj, but here's my approach:

In general, I'm not seeking sexual interest from every woman in the room. In fact, there's quite a few I'm specifically seeking to avoid.

For those I am interested in, I make every effort to look good and be an engaging, interesting person. I'm fit, I dress well, I'm good looking and can engage strangers in conversation easily, and usually make them laugh.

If a woman I'm interested in still isn't interested in me after I've engaged her (and provided I'm still interested in her after the conversing with her) I ask myself why. If I don't know the answer, I think it's quite reasonable to politely ask her.

Conversely, though, I'm prepared to accept her reasons why. For example, she might believe that I'm rough, but even if I know this not to be the case, I know there's a reason for this perception.

Or she might prefer something I'm not willing to be - eg, really big guys - I'm tall and thin and can't be bothered spending more than a few days at the gym. Fair enough, it would have never worked out.

But sometimes I find out something that's really valuable, and I can take that and work on it. I have to be in a frame of mind that makes her comfortable to be honest and direct.

Unfortunately, there's probably a lot of guys who don't realize there's a reason behind her perception, or who would argue about why they're they the right guy. These guys make it hard for girls to be honest for those of us who are interested in the basis for a perception, rather using it as a pretext to continuing to attempt to be accepted.

These also have no idea how many other great looking, witty girls there are, and put too much value on one opinion.

Everything above is applicable to YCombinator.

</comment></comment></comment></comment><comment><USER5> Just like many of us have succeeded regardless of which college we went to (or were rejected by), we can also succeed regardless of whether we're accepted by YC. Sure YC will help tremendously in some cases, but ultimately there is no single path to success. Reacting positively to whatever is thrown at you, under any circumstances will inevitably lead to success.

</comment><comment><USER6> Whether you believe you can or whether you believe you can't, you are right. --attributed to Henry Ford.

Entrepreneurs make it because they choose to, not because someone gives them the opportunity. The opportunity is always there, the question is whether or not you choose to make it happen. I've been reading "founders at work" and it surprises me that their opportunities were where they least expected it.

So, cheer up and keep dreaming!

</comment><comment><USER7> Before you hear back, you could do what we did - assume you got rejected.

What would you do today if you knew you were rejected already?

Hint: for bonus points, assume that YC is out to get you, and gives your brilliant idea[s] to some other shmucks.

Strap down and build. Don't get bogged down in details.

</comment><comment><USER8> As great as YC and Paul Graham's writings are, and as much as they are helping create a extraordinary startup community, there will always be many ways to success in a tech startup. Take 37signals, for example - they suggest that you get no outside funding, and make your startup on the side (while working or going to school). They also suggest that location and distance is completely irrelevant in the internet age. If I remember correctly, worked on their initial products from across the world.

Now, statistically speaking, YC companies probably has a higher success rate than the 37signals model, but your life is not a statistic. Focus on making something people want.

</comment><comment><USER9> > but you can still be very successful without YC

Sure, but let's face it, to be "under YC" makes you much more able to hit success, all the other things being the same.

This is not exactly fair, but it's how things work.

<comment><USER10> The kind of people YC attempts to identify are the kind of people who will make it work with or without YC. If they're wrong about you, they'll regret it.

<comment><USER11> here's hoping

</comment></comment></comment><comment><USER12> Here's a bit of advice: be a startup junkie and not just a YC applicant.

Startup junkies sill always follow startups: participating, sharing ideas, forming teams and making things happen. Being a startup junkie isn't something that is limited to any one funding cycle or organization. If you're a real junkie, YC is just a place to hang out while you're working on your own plans, which may have nothing to do with YC in the end. YC is just a tool which may or may not be available to you. If nothing else, you can monitor the board and listen while all kinds of cool stuff happens -- there's gold in being part of those conversations.

Or as the old saying goes, "I've been kicked out of better places than this one"

<comment><AUTHOR> ...and that too!

</comment></comment><comment><USER13> Well here's to my fourth attempt.

<comment><USER14> 997 more and you'd be as persistent as Walt Disney.

I bet you have an interesting story, alaskamiller. I imagine others here would like to hear it. Regardless of outcome this time, you should tell it here.

I admire your tenacity. Good luck.

</comment></comment><comment><USER15> This is great advice. Going through the application is itself a great exercise in developing our products and pitches. There are so many paths to success, we just have to keep taking them as they come, whether they be in the form of organizations like Y-Combinator or serendipity... it's almost romantic, don't ya think?

</comment><comment><USER16> When I was rejected in November 2006, I sent a sarcastic (but not rude) email complaining about not being given a reason. However, I doubt anyone was offended. Anyway, I won't be doing that again.

<comment><USER8> I felt a little disappointed also, but Paul's point above makes sense:

 _The reason is that there generally are no details to give. Usually when we don't invite a group for interviews, it's not because there was some glaring flaw in the application, but simply because nothing in it jumped out at us._

<comment><USER3> I would expect that in a more perfect world PG (or an equivalent) would also say "We also like to give feedback and point out the things that would have made us more interested had it been included."

<comment><USER17> The common refrain from VCs, book publishers -- anyone who gets large volumes of submissions and can only select a tiny minority is:

* even attempting to respond (however briefly) to the deluge of requests would overwhelm us to the point that we could no longer focus on running the core business

<comment><USER3> But, if all publishers gave feedback then the 'poor' authors would each save themselves from submitting to multiple publishers, and the 'poor' publishers deluged with submissions would instead have more refined manuscripts to evaluate and in lesser numbers. Thus, a little feedback can go a long way. This is because ideally manuscripts would improve only after a few submissions due to the feedback given and then they would either be accepted for publishing, referred to a more appropriate publisher, or shelved due to uninterested publishers.

<comment><USER18> Except for the fact that a large number of said 'poor' authors won't react that way. They'll argue, fight, and so on.</comment></comment></comment></comment></comment></comment>