Asynchronously Opening and Closing Files in Asyncio - <AUTHOR> https://nullprogram.com/blog/2020/09/04/ <comment><USER2> Just want to note and curio and trio, two non-stdlib python async libraries, have file io as batteries included.

I would also like to point out that asyncio made a huge mistake here. IO is not limited to interactions with the network buffer. I don't know how something called asyn _io_ can be released in to stdlib, and not include disk io.

The fact that there is no actual async file io on the OS doesn't matter. Dealing with files is a core concept in almost every application, and so pushing this to stdlib and hoping the python ecosystem takes up the slack, or people handbake threaded access in themselves, is a joke.

Some of this is a little dated, but a friend of mine wrote this and included my complaints about file io in there somewhere too:

[https://web.archive.org/web/20171206105117/https://veriny.tf...](https://web.archive.org/web/20171206105117/https://veriny.tf/asyncio- a-dumpster-fire-of-bad-design/)

<comment><USER3> I disagree that dealing with files is a core concept in almost every asyncio application. I would say that the most common instances of file IO is at the start of an asyncio process (parsing config files) rather than in the "hot" asynchronous part.

Some problems might require extensive file IO, sure. But most don't, and something like reading from a database or making a HTTP request is orders of magnitude more common.

<comment><USER4> You're just writing off being able to write an HTTP file server in Python? That's crazy.

<comment><USER5> The parent never said that. You can of course write a file server, they just said it's not as common, and I agree.

From personal experience, even for serving files, I find myself relying a lot more on web services rather than a local disk.

</comment></comment></comment></comment><comment><USER6> > The other threads need to continue running while the thread waiting on > open(2) is paused, but ptrace pauses the whole process.

This definitely doesn't sound right. Running strace, you need to specify -f in order to trace threads, otherwise only the main thread is traced. gdb does stop all threads on interrupts, but only by default for convenience, and I don't think it's atomic.

Because of this, LD_PRELOAD is not the easiest way to delay system calls, strace -e inject:delay is.

      $ cat > a.c << EOF
      #include <stdio.h>
      #include <sys/types.h>
      #include <fcntl.h>
      #include <pthread.h>
      #include <unistd.h>

      void *start_thread(void *arg) {
          while (1) {
              puts("thread");
              sleep(1);
          }
      }

      int main() {
          pthread_t thr;
          pthread_create(&thr, NULL, start_thread, NULL);
          while (1) {
              puts("main");
              close(open("/dev/null", O_RDONLY));
              sleep(1);
          }
      }
      EOF
      $ gcc a.c
      $ strace -o /dev/null -P /dev/null -e inject=openat:delay_enter=3s ./a.out
      main
      thread
      thread
      thread
      thread
      thread
      main
      thread
      thread
      thread
      thread
      thread
      [ and so on. ]

</comment><comment><USER7> using threads for file IO is a hammer approach imho.

Often times the price you pay to send the job to the queue, yield for another coroutine, wait for IO task to finish, receive a notification back from the thread pool and resume is higher than doing the blocking call. Under high load it might have some small benefits but my hunch is that it's unlikely to buy you much.

Luckily, io_uring officially made it to the linux kernel few months ago and can solve these problems in a much more efficient manner. *BSD solved this problem long time ago, in 2002, when kqueue was introduced.

<comment><USER8> Note this is specifically about opening and closing files, which may be on network mounts. kqueue has no support for this, io_uring just very recently got it. So there's no alternative to threads today.

<comment><USER7> kqueue does support this via EVFILT_VNODE. io_uring is in linux as of kernel 5.1(march 2020). alternatives are available but might not be viable for everyone.

<comment><USER8> My understanding is that kqueue can notify for file events like "readable" or "opened," but cannot actually initiate reading or opening.

<comment><USER7> kqueue is not responsible for initiation. It's responsible to notify you about events. when you open(2) a file with O_NONBLOCK flag, you can register it with kqueue to let you know when it's readable/writable.

</comment></comment></comment></comment></comment><comment><USER9> People seem to complain and I do agree that we are not yet approaching an elegant solution.

I have used Asyncio for an API I built for [https://www.abstractapi.com/](https://www.abstractapi.com/) in order to be able to manage high load and avoid being locked by network latency.

It has been painful and I almost thought about migrating to Amazon Lambda to distribute the load but it feels like a bad use case for Lambda when you're actually only want to perform async stuff and not lock a full thread.

SCan't believe we still don't have a proper async lib for Python in 2020. Still have to test Curio but the whole thing makes me seriously reconsider which language I'll use for my next project. Async is something I need to handle more and more.

</comment><comment><USER10> > This is likely in part because operating systems themselves also lack these > facilities. This is a surprising statement. My impression was that OS file > operations are generally async, with sync built on top.

<comment><USER11> Depends on the operating system. This is one reason why it is folly to try to abstract away the differences between operating systems.

Ordinary Linux file i/o for example cannot be made non-blocking and ignores O_NONBLOCK flag. See open(2).

<comment><USER12> Hm. Confused by Node.js async fs operations in this context. Does it just not actually work asynchronously behind the scenes?

<comment><USER13> Node.js uses libuv for async file operations -- And libuv has its own internal thread pool to make file ops appear fully async to a node program.

From the libuv docs [0]:

        Unlike network I/O, there are no platform-specific file I/O primitives libuv could rely on,
        so the current approach is to run blocking file I/O operations in a thread pool.
        For a thorough explanation of the cross-platform file I/O landscape, checkout this post [1].

[0] [http://docs.libuv.org/en/v1.x/design.html#file- i-o](http://docs.libuv.org/en/v1.x/design.html#file-i-o)

[1] [https://blog.libtorrent.org/2012/10/asynchronous-disk- io/](https://blog.libtorrent.org/2012/10/asynchronous-disk-io/)

</comment></comment></comment></comment><comment><USER14> I've been solving similar problem to decouple python daemon logging IO from event loop in order to make logging completely non-blocking. I'm pretty sure this particular case must be most popular file IO case for async applications.

In my case it wasn't important to open log asynchronously, but it was critical to have async writes.

It turns out, depths of Python stdlib hide logging.handlers.QueueHandler and logging.handlers.QueueListener which allow to split log message handler into separate thread from log message emitters, making them communicate via synchronized queue.

Final solution is quite compact: [https://github.com/Snawoot/postfix-mta-sts- resolver/blob/589...](https://github.com/Snawoot/postfix-mta-sts- resolver/blob/589a59a90cf3f53148f9f3814ccd48cd92a9538f/postfix_mta_sts_resolver/utils.py#L26-L57)

Usage example: [https://github.com/Snawoot/postfix-mta-sts- resolver/blob/589...](https://github.com/Snawoot/postfix-mta-sts- resolver/blob/589a59a90cf3f53148f9f3814ccd48cd92a9538f/postfix_mta_sts_resolver/daemon.py#L101-L106)

It is convenient that you can still use logging as usual, without any async obligations. You just have logging function which works in a fire-and-forget fashion.

> Asynchronous reads and writes would require all new APIs with different > coloring. You'd need an aprint() to complement print(), and so on, each > returning an awaitable to be awaited.

> This is one of the unfortunate downsides of async/await. I strongly prefer > conventional, preemptive concurrency, but we don't always have that luxury.

I was sceptical about Golang for a long time, but recently I've started practicing it. It's designed with concurrency in mind from very beginning and goroutines have advantages of both cooperative and preemptive multitasking. And also it doesn't have GIL, so your goroutines will use all available CPUs without any additional effort from your side.

From programmers point of view, coding with goroutines looks exactly like coding with use of pthreads (even simpler, in fact). So, there are no function "coloring", no need in sync/async library flavors and so on. But these "threads" also have cost close to cost of python coroutines. It sounds too good to be true, but I've rewritten bunch of my Python/asyncio code in Go and I can say it's true. For this reason (and many others I discovered later) I quit using Python and asyncio for network applications in favor of Go.

<comment><USER15> For anyone looking for async logging in C++ I can highly recommend spdlog:

[https://github.com/gabime/spdlog](https://github.com/gabime/spdlog)</comment></comment>


Ask HN: Best place for business cards? - <AUTHOR> I'm looking to order business cards for personal (freelance) use without breaking the bank. I just need something simple — my custom logo and contact information. Can any of you share your experiences?<p>So far I've found moo.com. They seem to get pretty good reviews, and their cards look to be of high quality. <comment><USER2> <http://www.uprinting.com/>

Can't recommend enough. Their offset printing is higher quality and only a bit more expensive than overnightprints (I've seen examples of both) and they deliver on time. They also offer more paper options, but don't do spot UV or die-cuts (at least for the prices ONP does)

</comment><comment><USER3> <http://www.overnightprints.com/>

Cheap and fast.

</comment><comment><USER4> I've have a lot of success with NextDayFlyers and so have my friends. They have great customer service as well.

</comment><comment><USER5> <http://bizcard.com/>

Free for select designs and no advertisement of the back.

<comment><USER6> All the free selected design reminds me of Microsoft clip arts.

</comment></comment><comment><USER7> From China: <http://print100.com/> (free delivery worldwide)

</comment><comment><USER8> vistaprint is also ok, but the prices listed are artificially low (there is a "processing" fee).

<comment><USER9> I like my vista print cards. They aren't top of the line, but I could get my custom design for a decent price ($30 for 500).

</comment></comment><comment><USER10> Moo's great, quick, easy.</comment>


Ask HN: Feeling lonely in solo career – university-like institutions? - <AUTHOR> 	It's been 7 years since I graduated university, and aside from a few years of work at a startup in SV, I've been working on app projects all on my own. I like the independence and the pursuit of my own destiny, but lately I've been feeling terribly lonely. More than anything, I've been missing the institutional feel of college. I miss having smart people all around me with different career tracks and interests. I miss spontaneous moments of collaboration and insight, guided from above by supremely gifted professors. I miss feeling like I'm in a place where everyone is working on themselves or for the betterment of society, all without the risk of getting "fired". And I especially miss feeling like I'm in the crucible for our collective futures. Aside from the obvious option of going back to grad school (which sounds extremely draining unless you're super into it), are there any collaborative, cross-disciplinary institutions like this in the "real" world? <comment><USER2> "I miss feeling like I'm in a place where everyone is working on themselves or for the betterment of society, all without the risk of getting "fired"."

I've never got over the disappointment that the whole world isn't like this.</comment>


Bruce Eckel is Wrong - <AUTHOR> http://cafe.elharo.com/programming/bruce-eckel-is-wrong/ <comment><USER2> I know Mr. Harold is much more experienced than me. It's pretty obvious he's more of an authority on most programming subjects. With that caveat I give my reasons why I despise checked exceptions in Java.

I've never seen code that got cleaner because of the use of checked exceptions. If you have a fairly complex piece of functionality that you've refactored mercilessly, it is quite possible to end up with a deep object hierarchy. If the checked exception is thrown at the bottom, that pollutes every interface on the way up the call chain to the method where the exception is handled. Also, whenever you are ready to catch the exception, you have to have a try/catch block and that aesthetically looks like an if-else statement, which means it is really easy to write it in an ugly way (merely having 3 lines of code for each the try and catch part is enough). All of this inevitably slows me down as I have to come up with a way to deal with those problems. It also frequently tempts me to just eat the checked exception rather than handle it.

I also think throwing a checked exception assumes too much about how I want to use that particular class/function. Suppose I'm using some sort of parsing tool to test complicated output (say, HTML). I'm only using this in tests. I do not want to have to handle exceptions. Even if it was in production code I may not actually care about addressing anything but the happy path.

I cannot effectively argue I'm not a newbie, writing buggy, shaky software. But I can't help but feel that the concerns of most programmers are more aligned with mine.

</comment><comment><USER3> His argument that a library that accepts an interface without declaring all possible exceptions a method of that interface might throw is badly designed is misguided. This assumes that the writer of the library can know all possible custom exceptions that code written by the user might throw, which is impossible. But it is perfectly valid if the code that calls the library passes in an instance implementing the interface that might throw a CantFrobnicateException that the library doesn't know anything about if the calling code knows what to do if the library call fails with that exception.

The real design error here are still checked exceptions. What you really want are dynamic exceptions with an optional whole program analyzer that detects possible code paths that could lead to uncaught exceptions.

</comment><comment><USER4> Elliotte Rusty Harold is wrong.

Checked exceptions are problematic because they version poorly, they implicitly presume the wrong model of exception _handling_ , and more importantly, they prematurely decide the application's desired policy for error handling by encoding the "checkedness" in the type itself, where it is not available for configuration by the programmer.

The poor versioning is obvious. The OP says _"The superclass/interface was not designed properly for extension. Specifically it did not take into account the exceptions overriders/implementers might reasonably want to throw"_ \- and the only problem with that is the well-known difficulty in predicting the future.

But actually, it's more subtle: exceptions are usually a desired encapsulation violation. When programming to an abstract interface, you don't want to know the details of how it's implemented, but all the ways it can fail are a _function_ of how it's implemented. You can't reasonably require the design of the most abstract levels of the system to predict every possible low-level implementation failure and state them out long-hand; the only reasonable implementation would be "throws Exception", which defeats the whole point of checked exceptions.

By presuming the wrong model of handling, I'm referring to the burden of creating a tunnel through the type system for your exception type between the point of the throw and the point of the catch. This burden is set up to optimize for catching sooner rather than later. But the thing is, usually you never want to catch; usually, the only exception catching you want done is at the highest levels of the system, in an event loop or request dispatcher. If you were expecting an exception you'd want to catch, the situation isn't exceptional; instead, you shouldn't be using an API that throws. .NET's pattern of e.g. Int32.Parse() vs Int32.TryParse() exemplifies this.

The OP tries to argue against this with the distinction between runtime errors and exceptions: _"checked exceptions do not require the programmer to provide handlers in situations where no meaningful action can be taken. When no meaningful action can be taken Java programs throw Errors"_. And this brings me to my third point. The determination for whether meaningful action can be taken _varies from program to program_ , and is encoded in the very exception handlers themselves - i.e. it's the programmer who makes that choice, not the people who defined the relevant exception types.

His examples of error - _out of memory error, stack overflow, class not found, etc._ \- actually make more sense as reasons to completely terminate the application, rather than make any attempt to catch. They're not really errors so much as panics.

<comment><USER5> If you application is a server then _out of memory error_ during a request means that the request failed but not that you should shut down the server.

 _class not found_ means that some functionality is unavailable but you could provide a workaround that might have some disadvantages compared to the absent version but would work. For example, in Python ( _ImportError_ plays role of _class not found_ here)

      try:
          import cElementTree as ElementTree  # fast C extension
      except ImportError:
          from elementtree import ElementTree # ~30 time slower

Don't panic ;)

<comment><USER6> I'd rather have my application fail clearly and obviously than have it start to mysteriously run 30 times slower.

At least in Java on the server side, most checked exceptions I run across fall under this umbrella. If they happen, something is really really wrong.

<comment><USER5> If the code is in a library it is not your call to decide what is satisfactory performance and what requirements are. A user of your library could decide that running this code inside JVM (via Jython) is more important than using C extensions for speed.

Real world example, an excellent tool -- Universal Feed Parser <http://www.feedparser.org/>

      # If a real XML parser is available, feedparser will attempt to use it.  feedparser has
      # been tested with the built-in SAX parser, PyXML, and libxml2.  On platforms where the
      # Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some
      # versions of FreeBSD), feedparser will quietly fall back on regex-based parsing.
      try:
          import xml.sax
          xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers
          from xml.sax.saxutils import escape as _xmlescape
          _XML_AVAILABLE = 1
      except:
          _XML_AVAILABLE = 0
          def _xmlescape(data,entities={}):
              data = data.replace('&', '&')
              data = data.replace('>', '>')
              data = data.replace('<', '<')
              for char, entity in entities:
                  data = data.replace(char, entity)
              return data</comment></comment></comment></comment>


Why are there not more successful startups in Europe? - <AUTHOR> http://blog.nicoschuele.com/?p=149

<comment><USER10> Some other contributing factors: cultural attitudes to failure, and as a consequence cultural attitudes toward entrepreneurs, heterogeneous audiences (the USA has ~300M people speaking mostly the same language), far less advanced ecosystem - success breeds success in terms of both experienced founders, broader angel investment, stronger networks etc.

Of these, I suspect the cultural attitude toward failure is by far the most significant. I think the USA breeds more successful startups primarily because it breeds more startups, due to failure being viewed much less negatively.

<comment><AUTHOR> Point taken. But see, here in Switzerland, even before speaking of attitude towards failure, the simple fact of saying you are working on building a web startup... ...gets you considered as an unemployed failure. That is one major cultural difference.

</comment></comment><comment><USER11> Successful European startups:

* Bebo (remember them?) - <USER9>

* Mojang - <USER3>

* Mind Candy - <USER9>

* Spotify - Sweden/UK

* Rovio - <USER7>

* Shazam - <USER9>

* Habbo - <USER7>

* Miniclip - <USER9>

* Badoo - <USER9>

To name a few.

 _EDIT:_ How could I forget Skype? Estonia.

<comment><AUTHOR> Yes. They are successful and I acknowledged it. Now, compare any one of these to the success level of Twitter, Facebook, Microsoft, etc.

<comment><USER11> Every one of those companies defines the word 'successful'. I'd suggest your title should read "Why are there not more insanely successful, multi-billion dollar startups in Europe?"

<comment><AUTHOR> You are correct. On the other hand, spending at least 9 hours on the web daily for the past 10 years, there are some in your list I've never heard about. It is a fact that Europe produces less ubiquitous successful ventures than the US.</comment></comment></comment></comment>


Ask HN: Advice for dealing with a difficult co-worker - <AUTHOR> I'll try to keep this short. Essentially, I work at a startup and work very closely with another engineer of comparable experience as me. He's been at the company since it was started (2 years) while I joined 6 months ago. We've been having some conflicts. From my perspective, the issue is that he doesn't see any difference between his opinion and fact. He frequently makes changes to shared code that affects things I'm working on without checking with me. In fact, recently, he's taken to deleting entire modules of my code that he feels are poorly designed and replacing them with new versions, which often have changed APIs and require work on my part to correct. When I ask him why he would do this without even consulting me, his response is to argue - in his mind, his version is "right," so why should he need to talk to me about it?
At first I tried to ignore this and keep working. When it continued to affect my work, I tried to discuss it with him, using "I" statements and explaining how his behavior impacted me. Finally, I escalated to our supervisor, the director of engineering. He asks for examples and tries to help us compromise on specific issues. My problem is not any one of these issues but the general trend of disrespect. I suggested I be reassigned to other projects but this is not possible.
Basically, I love this company but these interactions are really impacting me. Sometimes when this happens I become very angry and have a difficult time thinking clearly or working productive. I don't think I can really change the situation, and I really don't want to quit.
TL;DR: I guess what I'm hoping for is some advice on how to be more zen about this situation - how to keep working productively in spite of interpersonal conflicts, how to proactively prevent disagreements from happening, and how to deal with them more effectively when they arise. <comment><USER2> >How to be more zen about this situation

Worry about the things that you can control and ignore the things that you can't control.

The things you can't control is how your coworker and supervisor will behave. Can you control their behavior? If not, then why worry about it and get stressed about it. You can't change people. Your coworker has been there from the start, so he has the rapport and line of communication you don't and most probably will never unless your coworker falters or you move into a different group/project where you can shine on your own. You will likely lose a head-on battle.

The things you can control is your reaction to your coworker and supervisor behavior, working on this job, working for this company, etc. So decide, how do you want to react? Complain, whine, hope for the best or quit.

If you want to stay at the company, why not make friends with this coworker? Improve your personal relationship with him. You might then be able to influence his behavior. Arguing, complaining, escalating wouldn't take you far except out the door.

</comment><comment><USER3> Talk to your supervisor in dollars and cents.

His shitty attitude is costing the business time and money because you're forced to rewrite existing code whenever he feels like rewriting a module.

Personally though, I would quit and find somewhere else to work only because your supervisor doesn't care about your problem. It's not like there's a shortage for software devs.

</comment><comment><USER4> Isn't there a build that's breaking somewhere because of this? It sounds like you're describing symptoms of a shop that's not set up quite right.

You say you've got a guy making breaking changes to shared code, and not fixing up the references. That's something that should rapidly self-report in the form of a broken build. The dev in question will get the big flashing "cone of shame" left on his desk, be assigned the task of "build master" for a while, and have his commit rolled back. This sort of thing runs automatically (apart from cone delivery) at most shops.

You also seem to have a bit of a "code ownership" thing going on at your workplace, since you mentioned "your code" and "his code" a few times. Gotta get rid of that. Let your buddy change whatever he likes. No skin off your nose, so long as he fixes up the references. It sounds like there must be some silly policy in place that's either not letting him do that or not _requiring_ him to. Gotta fix that too.

Naturally, these are technical fixes that don't address the underlying social problem. Fortunately, that's the only kind of fix that an Aspergers Sociopath developer of the type you describe will respond to. Make the rules say that he shouldn't be such a dick, and he'll adjust his algorithm to at least stop being that particular flavor of dick.

Good luck!

<comment><USER5> Seconded. If your commits consistently fix things while his consistently break them, that will be noticed. Just focus on doing your work as best you can and try not to let this guy get to you.

</comment></comment><comment><USER6> This may not be what you want to hear, but if your supervisor is unresponsive to your complaints then you may be best off switching jobs.

Assuming it's even possible, changing your colleague's behavior would probably take a very long time. Being miserable at work drags you down emotionally and will affect your whole life, so I recommend getting out of there.

</comment><comment><USER7> Life's too short to be miserable at work. I'd chalk it up as a learning experience and move on. Lots of opportunity out there, and you'll probably land somewhere that you can either learn or teach things that you'll never be able to in your current gig.

<comment><AUTHOR> Thanks for the advice. I guess I just don't want to think about quitting. First, I really do enjoy my work except for these conflicts, for example when he's working on something separate from me. Second, I worry about quitting so soon because I was at my previous job for only two years and this one for six months. I don't want to be seen as a "job hopper."

<comment><USER8> back your self up with well written code, committed into a VCS with proper comments. For each one that is rewritten mark those commits somewhere in a list of notes. Discuss each one with him if his check in comment is not clear as to why. When he's right, leave it, when he's being a jerk note it. If all else fails you have documented your reasons. Then go and find a new gig cuz you've done all you can.

</comment></comment></comment><comment><USER9> Maybe he doesn't see him replacing "your" code with better code as a hostile action? I'd try to swallow my pride and see if this guy can teach me something about coding.

At an old work I had a colleague doing it to me, and maybe because I believe myself to be an amazing coder it was more amusing than threatening. It led to me having lots of time browsing hacker news and working on my own projects while he had to work weekends and many late nights because he took on to much responsibility and wanted to control everything.

</comment><comment><USER10> I would think that the only way to overcome a disregard issue would be to somehow increase your personal relationship. If he is acting from a position of "factual" strength then the only way to change his behavior would be to introduce emotion into the thought process.

These type of coworkers can be exceedingly difficult if not impossible. The above is only speculation, and has never actually worked for me in a total resolution, but it has made it slightly better overall.

TLDR Heartstring attack.

</comment><comment><USER11> I'll give you three responses (a new method of mine to leave you the decision)

a) Just get over it, what doesn't kill you makes you stronger, keep coding and keep letting him delete your stuff. Eventually you should learn what he'll delete.

b)If you're not happy 100% happy what you're doing for a few days in a row reconsider your options and change altogether aka quit. - Steve Jobs commencement speech philosophy.

c)Keep going to your supervisor and work your way up the ladder.

</comment><comment><USER12> Can you put this in terms of dollars and cents?

If the two pieces of code are largely equivalent, then your co-worker is wasting a lot of the company's money. If his truly are much better (in a way that matters to the execution of the company's goals), well, then maybe you need to step it up somehow.

I'm not sure why your director is not addressing this, but nothing stops you from doing the analysis and presenting the argument.

</comment><comment><USER13> on top of what akg_67 said (Worry about the things that you can control and ignore the things that you can't control.) I need to add that your story seems to implicate you do not have a way to measure the efforts put into your code, quality assurance is one you can use and it's quite well known.

In the teams I've been part of and managed, egos always tend to come into play when writing code: I got better ideas, I got better line indenting, blah blah... been there, done that.

I think it's mostly important to focus on the outcome: practically speaking the way I would tackle this is by introducing some level of QA, either by introducing TDD or else. You start by writing tests as use case scenarios, and then implement the code. Once this is done, if any of your colleagues wants to re-implement the code/module/whatever, let them do it, but the tests need to pass and the improvement should be measurable. Otherwise who f*ing cares?

Peace!

</comment><comment><USER14> Dealing with difficult people is easier when the person is just generally obnoxious or when the behavior affects more than one person. [http://www.essayscouncil.com/professional_help.php](http://www.essayscouncil.com/professional_help.php)

</comment><comment><USER15> No disrespect meant; I don't know either one of you. But is it possible your work is in fact subpar? This has happened to me (I was the one who needed to improve). I urge you to look at your work in that light and see things from your coworker's perspective.

<comment><USER16> _" But is it possible your work is in fact subpar?"_

That might be the case, but throwing out large pieces of somebody else's code without talking to them about it is not a civilized way to behave.

If I saw a problem with somebody's code, I'd try to patiently explain to them what the problem was, and how it could be done better. If they ignored me, I'd make my case to our manager in a rational way and let them decide who was right.

If the manager thinks that just throwing out somebody's code is acceptable behavior, I'd agree with the people who advised looking for a job elsewhere.

</comment></comment><comment><USER17> The flawed premise is experience. To a headhunter, two resumes may look comparable, yet for the problem at hand one person is objectively more experienced than the other.

</comment><comment><USER18> Do you have a code review process?

Could you initiate one?

</comment><comment><USER19> Change it back?</comment>


Apple's Unibody MacBook: The Review - <AUTHOR> http://www.appleinsider.com/articles/08/11/02/apples_unibody_macbook_the_review.html

<comment><USER2> I really think the new macbooks / ~ pro are a bit of a letdown price/performance wise. There are recent other notebooks, such as the Samsung R560 that cost about half of what a macbook pro costs, and offer roughly equal specs.

E.g. Samsung R560: 2ghz core 2 duo, 4ghz ram, geforce 9600M GS (see here: <http://forum.notebookreview.com/showthread.php?t=303188>) for 1052 USD

versus macbook pro: 2.4ghz core 2 duo, 2ghz ram ([http://store.apple.com/us/browse/home/shop_mac/family/macboo...](http://store.apple.com/us/browse/home/shop_mac/family/macbook_pro)) for 1999 USD.

The samsung is even cheaper than the new macbook. Unless you really need OS X, getting a samsung with linux seems a better deal.

Am I alone thinking this? I've used macs for the past 6 years, and OS X is pretty neat, but every single piece of apple hardware I've owned has given me trouble. I'm seriously considering switching away from macs for my next upgrade.

<comment><USER3> Yeah, but that samsung laptop is _hideous_ :

[http://www.samsung.com/hk_en/consumer/detail/features.do?gro...](http://www.samsung.com/hk_en/consumer/detail/features.do?group=computersperipherals&type=notebook&subtype=rseries&model_cd=NP-R560-AS04HK)

</comment></comment><comment><USER4> I got one last week and I love it. I was upgrading from a 1Ghz powerbook G4 however, so it was a well deserved upgrade. I'm looking forward to installing winxp on it and playing through Half-Life 2 over xmas break.

It also runs my numerics for HW and things sooo much faster than my old computer its a relief.

The only thing that annoys me is that the mini display port doesn't have an s-video adapter, which I used a lot. I'm still crossing my fingers that they release one, but i doubt it. Probably have to buy some sort of converter.

<comment><USER5> seems like a lot of people held on to their g4 pb until this release. I just didn't like their hardware offerings in the intervening four years (too expensive or too cheap-looking), but I love my new al-macbook. my only annoyances: doesn't seem to work well with a bluetooth keyboard and usb mouse in closed-lid mode. also, seems to always forget the brightness settings for my display and keyboard (adjust brightness based on ambient light is a cool trick to show friends, but when I'm working, I don't want things changing based on whether my head is blocking the light or not).

<comment><USER6> System Prefs -> Displays -> Uncheck "Automatically adjust brightness as ambient light changes", and I believe that will do it for you.

<comment><USER5> yes. there is one for the keyboard as well. the problem is that it doesn't remember this for very long (seems to be reset for me after suspending some of the time).

<comment><USER5> hmm. from a sibling comment, maybe it has different settings based on if you have it plugged in or not, and I mistook this for resetting. will have to investigate when I get home.

</comment></comment></comment></comment></comment><comment><USER7> nice looking mac, but my late 2006 black MacBook is still working nicely and as the new MacBook no longer has Firewire I won't be upgrading any time soon.

<comment><USER8> Ditto on the putting off and for the same reasons. I am sort of eying the next generation MBPs (18 months from now or whenever) as my next laptop though.

<comment><AUTHOR> Same here, holding off till the next generation. I especially hate the fact that Apple decided that everyone wants a glossy display.

<comment><USER9> Same again - I've got a two year old MBP... Only problem with it is it's working just fine :|

Think waiting 12 months or so is a good idea. There should be a big bump in specs by then. (hopefully Apple supported 8Gb RAM).</comment></comment></comment></comment>


Show HN: Scrape.it let's you extract data automatically - <AUTHOR> http://scrape.it

<comment><USER2> I really did want to test...but I gave up.

I didn't have a mashape account and I didn't want one at first, but it was necessary to test, so ok, let's do a signup with github... and then I'm asked for my credit card credentials for the freemium plan (wich is free)...so... sorry, but mashape went to far for me here.

Isn't it possible to test with curl or another language (without going through the mashape process...) ?

<comment><AUTHOR> I tried it myself and was surprised that I had to input my credit card as well...so I know where you are coming from but I'm afraid there's nothing in place to support bypassing mashape but in the future I'd have a way to sign up directly on my site.

You won't get charged if you stay under the freemium limit. you'd request something like this:

        curl --include --request GET 'https://scrapeit.p.mashape.com/scrape/http://www.yellowpages.ca/search/si/1/Car+Alarm+Systems/Airdrie+AB' \
      --header "X-Mashape-Authorization: your_mashape_key"

and get back a JSON response like (too long so pasted a portion):

[ 8, [ [ "\n\t\t\t\t\t\t1\n\t\t\t\t\t", "Auto Dream", "403-248-1566", "159-5120 47 St NE, Calgary, AB T3J\u00a04K3", "", "", "Map & directions", "Website", "Email", "Be the first to review", "Category:", "Car Alarm Systems", "", "" ], [ "\n\t\t\t\t\t\t2\n\t\t\t\t\t", "Advance Auto Security Mobile Ltd", "403-701-4388", "507-3208 8 Ave NE, Calgary, AB T2A\u00a07V8", "", "", "Map & directions", "Website", "Email", "Be the first to review", "Category:", "Car Alarm Systems", "", "" ], [ "\n\t\t\t\t\t\t3\n\t\t\t\t\t", "Autotemp Air & Sound", "403-287-2585", "Multiple locations\u00a0", "view addresses", "903 42 Ave SE, Calgary, AB T2G\u00a01Z1", "Map & directions", "Website", "Email", "Be the first to review", "Category:", "Car Alarm Systems", ", ", "Car Radios & Stereo Systems" ], [ "\n\t\t\t\t\t\t4\n\t\t\t\t\t", "Autotemp Air & Sound", "403-343-1415", "Multiple locations\u00a0", "view addresses", "15-7667 50 Ave, Red Deer, AB T4P\u00a01M6", "Map & directions", "Website", "Email", "(1 review)", "Category:", "Car Alarm Systems", "", "" ], etc....</comment></comment>


Creepy stationary helper robot for pre-order - <AUTHOR> http://www.myjibo.com?hn=1

<comment><USER2> Nothing about the robot pictured at TFA is "creepy", nor does TFA refer to it that way.</comment>


OSv, probably the best OS for cloud workloads - <AUTHOR> http://osv.io/

<comment><USER2> A big part is written in C++, for example the interrupt descriptor table is managed by a class: [https://github.com/cloudius- systems/osv/blob/master/arch/x64...](https://github.com/cloudius- systems/osv/blob/master/arch/x64/exceptions.hh)

<comment><USER3> And the console is JavaScript (using Rhino).

<comment><USER4> The CLI is actually CRaSH which is written in Groovy:

[http://www.crashub.org/](http://www.crashub.org/)

The JavaScript CLI is being phased out.

<comment><USER3> OK I was just having a look round this morning not really knowing what was where. Is there a sort of roadmap?

</comment></comment></comment></comment><comment><AUTHOR> Announcement on kvm mailing list: [http://www.mail- email@example.com/msg95768.htm...](http://www.mail- email@example.com/msg95768.html)

</comment><comment><USER5> Ideas like this seem to be the future. I specifically like the small container concept that this shares with Docker.

</comment><comment><USER6> This is one cool project. Looking forward.</comment>


The OnCall Game - <AUTHOR> http://dorothyjung.com/oncall-game/ <comment><USER2> (spoilers) How does "clean bad log line" make sense in the first one? There's nothing to indicate there's a bad log line, and how removing that from s3 make any sense?</comment>


Nokia's developer network hacked - <AUTHOR> http://www.bbc.co.uk/news/technology-14706810 <comment><USER2> The link to Nokia's statement is broken. The correct link is <http://www.developer.nokia.com/Community/Discussion/>, which will probably get taken down soon. It reads:

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>

You may have seen reports or received an email from us regarding a recent security breach on this developer.nokia.com/community discussion forum.

During our ongoing investigation of the incident we have discovered that a database table containing developer forum members' email addresses has been accessed, by exploiting a vulnerability in the bulletin board software that allowed an SQL Injection attack. Initially we believed that only a small number of these forum member records had been accessed, but further investigation has identified that the number is significantly larger.

The database table records includes members' email addresses and, for fewer than 7% who chose to include them in their public profile, either birth dates, homepage URL or usernames for AIM, ICQ, MSN, Skype or Yahoo. However, they do not contain sensitive information such as passwords or credit card details and so we do not believe the security of forum members' accounts is at risk. Other Nokia accounts are not affected.

We are not aware of any misuse of the accessed data, but we are communicating with affected forum members, though we believe the only potential impact to them may be unsolicited email. Nokia apologizes for this incident.

Though the initial vulnerability was addressed immediately, we have now taken the developer community website offline as a precautionary measure, while we conduct further investigations and security assessments. We hope to get the site back online as soon as possible and will post developments here in the meantime.

If you have any questions on this, please contact Nokia.developer-discussions- firstname.lastname@example.com.

The Nokia Developer website team.

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment>


Ask HN: I Can't Register to Vote Because of Google's Recaptcha - <AUTHOR> I just solved 15 of their images and it keeps presenting me new ones... I want to switch to Democrat to be able to vote for Bernie in the primaries. <comment><USER2> That would be an interesting way to rig an election, although Google* would have to know who you were planning to vote for before stopping or allowing you through. Maybe separate pages? or tracking which link the person came from like the candidates campaign emails.

*absolutely not saying Google is actually doing anything like this, but it's an interesting thought

<comment><USER3> I don't think Google is trying to actively rig anything here, but I'm sure they can very accurately predict who you're planning to vote for.

This rather sounds like what people have been finding out the hard way recently though: Recaptcha is broken and everybody relying on it is a terrible idea.

</comment></comment><comment><USER4> Which web browser are you using? I've heard that Tor users get more CAPTCHAs, but I'm not sure if that is the case or not.

</comment><comment><USER5> Use the audio version.</comment>


Comparing Cloud Database Options for PostgreSQL - <AUTHOR> https://severalnines.com/blog/comparing-cloud-database-options-postgresql <comment><USER2> We compared PostgreSQL performance on virtual machines from 5 different cloud providers a while back, the results are on our blog at [https://aiven.io/blog/postgresql-cloud- performance/](https://aiven.io/blog/postgresql-cloud-performance/) and show that there's quite a bit of variance between them.

<comment><USER3> Apples to oranges comparison. TFA is about managed service.

If you could show that RDS runs faster or slower than running PostgreSQL yourself, that would be interesting.

<comment><USER2> The post and linked slides focus on comparing different clouds, but the slides actually have a couple of comparisons of AWS Aurora, RDS and Aiven PostgreSQL performance at the end.

We'll update that with other managed services soon.</comment></comment></comment>


Command line lightweight todo tool with readable storage - <AUTHOR> https://github.com/hit9/todo.c

<comment><USER2> It would be painful to add new features. Unlike a lot of full featured note taking systems like Org mode for Emacs. Which you can, if you absolutely must, run in a console.</comment>


The future according to Google's Larry Page - <AUTHOR> http://tech.fortune.cnn.com/2013/01/03/google-larry-page/ <comment><USER3> Larry is a smart guy, his success is proven, and he has the resources to make the future happen.

But don't put too much weight on his prediction. Real innovation usually comes from unexpected places. Historically, predictions of technology big-shots are not as accurate as the tech press seems to think.

<comment><USER4> Watching Charlie Rose over the past 15 years helps to prove this.

<comment><USER5> The TV talk show?

</comment></comment></comment><comment><USER6> _Google's popular 20% time, which allowed many engineers to work on their own ideas one day a week, has been severely curtailed._

What's happened to it?

<comment><USER7> I guess some manager realized that they could improve productivity by up to 20% if the engineers focused on the official company projects.

<comment><USER8> 25%

<comment><USER9> I think he implies that the manager is stupid

<comment><USER7> No, I do not. I imply that the manager does not understand the benefits of 20% time on productivity.

<comment><USER10> Let me spoil the joke:

Going from 80% to 100% is a 25% increase.

<comment><USER7> There is no joke because I was not including all of the time spent on 20% time as a gain in productivity. Read where I wrote that they could see an increase in productivity of _up to_ 20%. I'm not quoting exact numbers because _drumroll_ managers hardly ever think of hard numbers. Its all (gu)es(s)timates.

<comment><USER11> sounds like an excuuuuuse ;)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> It seems to be more about the role of Page in the company than the future of Google. A lil' bit about driverless cars and Google Now but mostly on Page, his background and personality.

</comment><comment><USER13> Please do not post links with utm junk in the URL.

<comment><USER14> I know when you submit a link, HN will usually automatically omit the " - <USER2> Name" part at the end of the title.

Given the proliferation of FeedBurner links, why can't pg do the same to get rid of utm cruft?

</comment></comment><comment><USER15> For some reason I read that as if there was a page on Google called Larry. Guess plenty of people made the same mistake with Page Rank though, so I don't feel too bad!

<comment><USER16> This is why proper grammar is important. With the correct capitalization of proper nouns, there is little room for ambiguity. Of course, that doesn't help in speech...

<comment><USER17> Everyday I park at work by a sign saying: security camera's in operation. The daily reminder is good for me.

<comment><USER18> That parses. It just implies there's only one security camera. And you and the sign painter already know of and speak informally about it. And it's operating RIGHT NOW.

<comment><USER17> Hadn't thought of it like that. There aren't any cameras unfortunately. The spate of break ins was dealt with by installing a sign. A very proactive sign. Wonder what they will do to its punctuation if 2 cameras get installed...

</comment></comment></comment></comment></comment><comment><USER19> The clean link: <http://tech.fortune.cnn.com/2013/01/03/google-larry-page/>

</comment><comment><USER19> I'm half way through the article... and I still haven't figured out what the future looks like. Anyone could summarize it here?

<comment><USER20> Well, we are only 2 years out from flying hovercars, auto-sizing clothes, the abolition of lawyers, reliable weather forcasts, and hoverboards.

I'd also put my money in Universal, they have 15 Jaws movies to release in 2 years. That's gotta make some bank.

<comment><USER11> and pepsi will dominate over coke

</comment></comment></comment><comment><USER21> A self driving car. Google is positioned to do anything and everything. Love it.

</comment><comment><USER21> That was such a good and inspirational read. Google is awesome.

</comment><comment><USER22> I can't wait for automated cars.

</comment><comment><USER23> I am more than ok with the self-driving car. This will really relieve us from a heavy and unsafe burden. Our grand kids in 50 years will wonder how we did foolishly let (almost) everyone drive so dangerous a killing machine.

But I am not ok with most other directions Google seem to be looking at:

\- Voice control: Voice control maybe useful to do some hand-less complex configuration but it will always be awkward for normal operations of electronic tools. To push the comparison to its limits: one would not talk to one's screwdriver ("on the left, on the left, stop! on the right! get inside, turn right, euh no! I mean LEFT, counterclockwise..."), one will always prefer tools with direct interaction and feedback. Moreover, in most situations, using voice or sound to communicate is just adding noise to already noisy envs (eg on a plane, train, during meetings. etc).

A factory robot or a plane cockpit have full-fledged interfaces, with knobs and screens and all, but none will use voice control or even sound feedback except for the most urgent and intrusive warning notifications. Even the navigation voice telling me to "turn left in 100 meters" is too intrusive, because maybe at the same time I am talking with someone in the car. A soft "bzzz" on the wheel to remind me to check the navigation screen should be enough.

As anyone has experienced, the voice robot "press one for x, press two for y" is a very good subject for jokes, because it is borderline unbearable: both too slow and too fast, both too rigid and not solid enough. With touchscreens in everyone pocket, I bet these usability nightmares will be replaced with apps or websites.

So, in all, voice control, Siri and Google Now seem to be technological dead- ends. It will probably be similar to alchemy however: it is wrong to try to make gold out of mud, but it was the seed of Chemistry.

\- Guess my wishes: I think the "Fairy Godmother" better stay fairy tale. Human beings have shown enough they do not like to be catered like a crowd of sheep. History books are full of revolutions against entities willing to "guess the wishes", from the Catholic Church, to communism, to feudalism. Always in the name of Freedom, and freedom is best felt when you have "unguessable wishes". If Google buys me plane tickets to Sri Lanka because it has detected it was the most suitable destination for my tastes, I probably will cancel the tickets and turn off Google Travel Prescience, because I want this choice to be mine.

I know I am getting a bit too far, but I don't think most people really want their wishes to be guessed. Everyone hopes to be unique, and choose one's life, and decide one's fate. This is the feeling of one's freedom and guessing wishes would just kill it.

Or, the "suggestions" must be very careful in suggesting things and must be psychological enough to let you think that you did find the idea yourself. Just like a careful mother will transparently suggest to a kid something to do or not to do and at the same time will not hinder the kids' feeling of "free- will".

<comment><USER24> I don't think you're giving the future enough credit. You discredit voice control, but base your opinion solely on their present capabilities.

> the voice robot "press one for x, press two for y" is a very good subject > for jokes

Interactive voice systems are among the most primitive voice control system possible. The simplest require you "talk" using generated tones. The more complicated accept a real voice but are hardly conversational; they present a rigid and invisible menu of options. At least they present options, some text- based games of lore required you to read the minds of their game designers.

But they won't always be this way. There's no reason to believe computers won't someday become as good at conversing as humans are. Surely you've noticed talking with a human over the phone is much faster than talking over IM, and eventually computers will also hit that point. Imagine it: you pick up your phone and call AT&T, the system immediately picks up and asks "Thanks for calling customer support, may I have your PIN please?", followed by "Hello gbog, and why are you calling today?". You respond with a simple "I'd like to pay my phone bill" and the conversation continues.

> With touchscreens in everyone pocket, I bet these usability nightmares will > be replaced with apps or websites.

What happens when you don't have a touchscreen in your pocket? Touchscreens are magical and the current rage, but there's no reason to believe they are the last word in HCI. What about Google glass? Implants? Some other form- factor we haven't yet imagined?

Voice recognition will become faster than using apps, it's already happening! Telling Siri to "set an alarm for 9:30 tomorrow" is much faster than unlocking your phone, finding the right app, waiting for it to open, then messing with those damned spinners.

> So, in all, voice control, Siri and Google Now seem to be technological > dead-ends

Siri is a vision of the future. For the first time (if you'll allow some narrative license) you can have something resembling a conversation with your computer. You talk to it like you would anybody else, and it tells you what you'd like to know. Speech is the fastest method we have of dumping information from our brains, it's incredibly natural, and it's nearly universal; I wouldn't be surprised if it eventually became our primary method of controlling computers.

I don't want to make this comment too long, but a similar argument applies to Page's vision of predicting your needs. You are focusing too much on the present and not enough on the futures potential.

<comment><USER23> Thanks for your answer.

> "set an alarm for 9:30 tomorrow"

If tomorrow you have some unusual reason to wake up at a different time, I agree that voice control is simpler, but this one is the kind of complex one- time configuration I was talking about above. You should not need to give the same order every evening, right? And even in this case, if your gf/bf just fell asleep next to you, would you not prefer some silent way to give this order?

I agree too that touchscreen is not the last word in HCI. But I still don't see a future of people talking to robots. More precisely, I think that robots will always be machines, and that the main interaction channel with machines will not be sound waves carrying human language. I'll try to explain why.

The most useful and powerful tools and machine we have today, from chopsticks to pen and paper to cars to computers, are all using hands and fingers. Human being are as much defined by their language capacity than by their crafting- by-hand capacity. When sound channel is used, for example for sherperding and hunting, it is because it can reach far away, not because it is particularly convenient, and it is not using normal human language anyway.

Most powerful tools are powerful because they have near infinite precision and expressivity. Think a Chinese brush, or a violin: human language is extremely rough compared to the range of actions allowed by these. Try to voice-control a pen to draw a single smiley face, I would be surprised if we would recognise the thing. In fact, I think next and next-next generations of electronic devices, be it phones or glasses or implants, will go closer to the tight coupling and immediate feedback we have with pens, brushes, pianos, and even hammers or game controllers.

Many (if not most) of the interesting interactions we can have with machines and tools are not worded and cannot be expressed in current human language. This is a bit out of sight these days, but not everything need to be words or text. Reading famous chefs recipes will never help you cook food if you do not have the "hand" (and taste) for it. The HN crowd is a bit biased, with so many bloggers and blog-readers, but many people do not consume as much text as we do here.

The many attemps to use human natural language to describe the behavior of systems have all failed hard, and we have to fallback on programming languages, which, from linguistic perspective, are abominable caricatures of human languages. This is telling. In order to control properly a computer, we need to talk in the computer's language. Not necessarily because it is not clever enough to understand human language, but because human language is not the right tool for the task. Human language is very efficient in communicating with other human beings, but not so with machines, and useful robots will be machines.

The future will them me right or wrong, I hope to grow old enough to see it.

But allow me to imagine the intelligent glasses UI. It can display anything on the screen. Very good, so it means that, except when alseep, the audio channel is not needed not receiving feedback from the glasses. Talking to the thing using human language is a possibility, but only one in many other possiblilities. Imagine there is a very well thought "UI" that is sensing the taps of your fingers on your forearm, or your leg, or whatever part of your body is easily accessed. Imagine you can give "input" to your glasses by drawing shapes on your blue jeans, or tapping little rythmic commands, "tap- tap-tap" is cancel, "slide-left" is next, "draw a round" is repeat, etc. I think this could be worth trying.</comment></comment></comment>


An Adaptive Packed-Memory Array (2007) [pdf] - <AUTHOR> https://www3.cs.stonybrook.edu/~bender/newpub/BenderHu07-TODS.pdf <comment><USER2> [https://github.com/pabmont/pma](https://github.com/pabmont/pma) in C

See also [http://dhruvbird.blogspot.de/2013/03/pma-packed-memory- array...](http://dhruvbird.blogspot.de/2013/03/pma-packed-memory-array.html) who has his own implementation in C++

<comment><USER3> Are either of these specifically _adaptive_ packed-memory arrays? The former cites it, but only has one type of PMA implemented, it seems.

</comment></comment><comment><USER4> I was thinking it would be nice to have this insert operation pushed down into the NVM/SSD. If there could be an MMU with lookup tables attached to virtual address space regions inside the NVM, it would effectively be this.

The older I get, the more I realize that the world runs on slop. The techies are optimizing everything and removing slop, but this slop has allowed systems to be resilient. A little "waste" goes a long way.</comment>


Someone is massively registering multiple *.eth domains - <AUTHOR> https://www.reddit.com/r/ethereum/comments/6p990e/someone_is_massively_registering_multiple_eth/ <comment><USER2> Can someone tell me why I'm seeing so much about ethereum on Hacker News lately? It's starting to feel like a concerted marketing push, the same way that the latest Kardashian outrage is a non-event most people don't care about, but they sure make it look like news...

<comment><USER3> I guess it is because many people on HN own ether.

</comment></comment><comment><USER4> I don't understand why domain squatting in general isn't considered more of a problem. I tried a couple different times to get a .link domain for my blog and just about anything short/meaningful on the obscure tlds are taken, but none of them are actually used for anything. They wanted $5k for sym.link...WTF?!? I actually sort of appreciate the logic behind the .sucks tld managers if not the intent. You can't squat everything if the registration actually costs something semi significant.

<comment><USER5> I agree with you. But what do you expect from a system that allows you to create real-estate out of thin air?

<comment><USER6> Insert "cash" for "real-estate" and we have a very ironic statement.

<comment><USER7> It isn't really comparable, as domain names are the epitome of non-fungible.

</comment></comment></comment></comment><comment><USER8> 25 days ago someone brought 600 domains that does not exist. That is not a news.

<comment><USER9> Yeah, I was expecting hundreds of thousands based on the title. This doesn't seem like news.

</comment></comment><comment><USER10> this is the 'cocacola' problem. No strong name system can work in the real world if cocacola has no legal right to their name. Sue a smart contract, lol!

Considering cryptocurrencies supposedly 'square' zooko's triangle, a fraud namespace like this eth registration can not survive the real world.

<comment><USER11> I guess we won't see massive migration from DNS usage to ENS usage in a matter of days. I foresee we'll have mixed usage decentralized and centralized naming systems for a long time until people start seeing the advantages of the former. By that time, CocaCola will just have to buy the domain from the squatter instead of registering themselves (too big to fail, on this matter).

<comment><USER10> I agree, there will be both central and decentralized namespaces; I do love the idea of decentralized, but I am realistic about the limitations. CocaCola can ether buy the keys (or have a court requisition them from something.. ) Now, this relies on the keys that registered this domain still existing!

No court in the world can force a deleted key to be transferred to CocaCola. Likewise any cryptocurrency cannot be forceably stolen by the threat of state violence -- the math does not permit it.

So either, cocacola has to have cocacola1.eth (lol), or they have to institute a court ordered hard fork to recover the keys.

Both seem undesirable!

<comment><AUTHOR> No, I think it can work in another way: at the end the descentralized system is connecting to a protocol outside the blockchain, this is the weakest link. You can contact the legal entity using ETH and sue them in the country they operate. Switzerland? [https://en.m.wikipedia.org/wiki/ETH_Domain](https://en.m.wikipedia.org/wiki/ETH_Domain)

<comment><USER10> So the scenario becomes: a) use DNS b) use "central"-ENS, but if the domain is already registered now I have to sue some .ch organisation to unregister it. c) use regular ENS and live with whatever namespace entries are free

a) offers everything b offers, but its likely cheaper and has a real-world dispute resolution process.

Take a look at the grandfather of decentralized DNS namespace; .bit from namecoin. After 6 years it has not found its place in the internet name ecosystem.

</comment></comment></comment></comment></comment><comment><USER12> It's not unfair if he is paying for them.

<comment><USER13> According to [1], it's minimum 0.01 ether for one year. That's around $2.24, so not that cheap for mass-registration.

[1]: [https://registrar.ens.domains/](https://registrar.ens.domains/)

</comment></comment><comment><USER14> It's 2017. Stop letting users pick their own identifiers.

<comment><USER15> lol wut...

As opposed to?

Wait, let me guess, UUIDs right?

<comment><USER16> Actually, yes, UUID's would be ideal. Then we'd just a public registrar of some sort to index them with a more human-readable name.

<comment><USER17> I hope this is sarcasm. The human readable IDs would than be squatted upon.

<comment><USER16> Yes it was sarcasm :D. I wouldn't insult anyone's intelligence here by adding a /s</comment></comment></comment></comment></comment>


Show birthdays of Google Contacts in Google Calendar - <AUTHOR> https://birthdaycal.appspot.com/

<comment><AUTHOR> Now supports hourly automatic sync through a two step setup process. No link importing anymore.</comment>


You'll Never Really Be Your Own Boss - <AUTHOR> https://blog.bugmuncher.com/2016/01/11/youll-never-be-your-own-boss.html <comment><USER2> "Even if you run business with millions of customers, they will always be your bosses. Your bosses will always be able to hire you, pay you, fire you, and influence how you spend your day. You will never really be your own boss, so having as many bosses as possible is the next best thing."

If you are a freelancer, yes. You basically are replacing one boss with many.

However, if you sell a product, you design the product the way you want and your customers buy it.

They don't tell you exactly what needs to be added, when it needs to be released, or any other sort of controls you have when working for someone.

I own my own company now and make all of these decisions myself.</comment>


Microcopy - <AUTHOR> http://www.flickr.com/groups/microcopy/ <comment><USER2> This is getting bookmarked. A lot of great examples here.

It'll be nice when clear, personable copy isn't so noteworthy.</comment>


Read me please...Google Profile can help me locate a thief that stole my laptop? - <AUTHOR>

I had all my personal property stolen and in that property was my laptop in addition to my entire life history. I had tax transcripts and many other identifiers in my car. Anyway, I digress, the individual that stole it is unaware that he logged in on my boyfriends google profile and when searching the dashboard history came upon some data that neither one of us inputted. After some hours of investigating we found several addressing that were a result of the "MY LOCATION" TO XYZ etc. and was wondering are these fairly accurate. I believe them to be as I tested ones that I had inputted and they were exact. Secondly, I came across a facebook page that belongs to this individual. How can I dig deeper into inspect element and discover their identity? <comment><USER2> your boyfriend must be pissed ! good luck im sure police are of no help.no one saw a thing im sure someone saw something and knows you should ask and bribe people you may just find out and be surprised</comment>


PostmarketOS: Overwhelmed by feedback and next steps - <AUTHOR> https://ollieparanoid.github.io/post/postmarketOS-next/ <comment><USER2> Realistically when do you think a production phone with pm-os will be possible? Assuming if everyone that are star-gazers will chip in? I want to show my gratitude but I am also pragmatic. Thanks

<comment><AUTHOR> I don't think it is realistic, that all stargazers will help with development :)

So currently the project is nothing but a proof of concept with a solid base component (pmbootstrap).

I guess with "production phone" you mean, that it can compete with Android/Apple? This would take years, and that isn't in the scope at all for now.

What is a goal though is to make basic functionality work, so you could at least use Wi-Fi, do phone calls, update your phone and have a sane userland (where programs don't run as root, when they don't need to and ideally have privilege separation). Even for that it's hard to estimate, but maybe half a year or so.

<comment> yjftsjthsd-h Re: production ready, it would be good enough for me with:

1\. WiFi

2\. LTE

3\. Phone

4\. SMS

5\. Browser

So I'm optimistic :)

<comment><USER3> I second that, this is what i would consider "production ready" \- This is all i need!</comment></comment></comment></comment>


Why CLisp is under GPL - <AUTHOR> http://clisp.cvs.sourceforge.net/viewvc/clisp/clisp/doc/Why-CLISP-is-under-GPL

<comment><USER2> Is the thing still being developed?

<comment><USER3> There were a couple of commits last month, and a few last year. See [http://sourceforge.net/p/clisp/clisp/commit_browser](http://sourceforge.net/p/clisp/clisp/commit_browser) .</comment></comment>


A VC: Some Thoughts On Geography - <AUTHOR> http://www.avc.com/a_vc/2010/10/some-thoughts-on-geography.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+AVc+%28A+VC%29 <comment><USER2> This really highlights the value of local networks: over 60% of their investments are in New York, and in the comments he mentions that one of their portfolio companies is moving there. "NYC is our home and where we do the majority of our investments. That is how it should be because we are primarily early stage investors and it is best to be close to our companies."

</comment><comment><AUTHOR> It'd be a bit more meaningful to discuss the fraction of startups they've invested in in each town. Of course, that is difficult to count, but an estimate can be made.

I suspect that doing that would make them seem like an NY-centric investor.</comment>


Google responds to negative feedback, makes video migration easier - <AUTHOR> http://pastebin.com/sqW8h7ze

<comment><AUTHOR> They're even working on a fully automated solution. That's a hell of a difference compared to 'download the original movie and upload it to youtube yourself'.

<comment><USER2> I just tried this automated solution. The result has much more quality than the download-and-upload method.

</comment></comment><comment><USER3> An official link: [http://youtube-global.blogspot.com/2011/04/update-on- google-...](http://youtube-global.blogspot.com/2011/04/update-on-google-video- finding-easier.html)

</comment><comment><USER4> This is why we gripe. It works.

Thanks to Google for recognizing and adjusting to the feedback.

I still wish they could be more responsive at the individual level -- although I have some outside understanding of the logistical and resource challenges such demands must place.

Nonetheless, Wave technology got a new home. Google Video content will survive. Good things.</comment>


JQuery Mobile is awesome - <AUTHOR> https://www.reddit.com/r/webdev/comments/58aoaw/jquery_mobile_is_awesome/ <comment><USER2> No it isn't, it is outdated. It wasn't awesome when it was new either. I suffered through supporting a website that was made with it for a while before I was able to convince them to switch to something else.</comment>


Real Lives and White Lies in the Funding of Scientific Research - <AUTHOR> http://www.plosbiology.org/article/info%3Adoi%2F10.1371%2Fjournal.pbio.1000197

<comment><USER2> One way we could dramatically increase the availability of funds for science: allow science to be conducted at market rates.

Currently, most science is funded under the following model. A scientist is directly employed by a host institution, typically a university. The scientist then applies for money from the government, of which 50-60% will be spent on research. The remainder will be pocketed by the host institution as "overhead".

In principle, the overhead pays for things like lab space, but in reality lab space could often be acquired for vastly less than 50% of a large grant. Scientists put up with this because it is not possible to apply for a grant without being employed by a host institution.

I propose to cut out the middleman, and give money directly to scientists. This will dramatically increase the funds available for science.

<comment><USER3> The SBIR program is kind of like what you're proposing:

<http://www.sbir.gov/solicitations/>

It's walled off so that larger entities _cannot_ propose to it (somewhat contrary to "free market" principles, but whatever).

I've managed proposal reviews for SBIR, and the average quality is noticeably lower than NSF proposals I've reviewed. Of course there is significant overlap between them, but that's the average.

So I'm not sure your idea would accomplish anything new.

<comment><USER2> SBIR is mainly grants to get innovative small businesses going (which is why large businesses are not involved). It's also mostly military, as far as I know. I think SBIR is a great program, but it's not really meant for funding basic research.

But yes, something similarly structured but aimed at basic research might be a good idea.

Greater transparency also couldn't hurt. We could simply demand that universities itemize overhead. Then the PI is responsible for rejecting unneeded items (e.g. university computer lab fee if the PI has his own computer) and the NSF is responsible for rejecting items which are >10% above market.

<comment><USER3> It's far broader than DoD. See the solicitation I referenced or:

<http://www.sbir.gov/federal_links.htm>

(I managed a small SBIR category for NASA.) Despite the rhetoric, they do provide a sustainable flow of work to many organizations (sometimes referred to as "SBIR shops").

About basic vs. applied research: What I was trying to say is: The relative lack of breakthrough success for SBIR seems to imply that smaller, more nimble (market-responsive?) organizations are not the answer.

</comment></comment></comment></comment><comment><USER4> There aren't enough ways one can say how totally broken science funding is.

Big upvote for the OP for actually trying to address some solutions. However what concerns me is that there isn't a single unifying voice; some people want to tweak the grant system, some want to get rid of it, and everything in between; while I personally I am in the get-rid-of-it camp, I would get on any bandwagon that had an actual chance of success.

</comment><comment><USER5> I think another problem not discussed in the article is the "manufactured consensus" phenomenon where well funded labs can populate a particular niche with grad students and researchers who are all working from the same theoretical framework. This creates a feedback loop of ever increasing funding and publishing for this ever growing group.

Any researcher who does not subscribe to this false consensus will find it almost impossible to get funded or published. Thus those with radical ideas are kept out of the system. You see this in many of areas scientific research (e.g. viticulture, climatology, linguistics...)

</comment><comment><USER6> An excellent article. I like the idea of a system where a researcher's future funding is based on a periodic review of what they have done, as opposed to how glamorous they can make their plans for future work sound. As an aside, as someone who has just finished their PhD and is starting to think about writing grant proposals, does anyone on HN have any tips for a first-timer?

<comment><USER7> Good grant applications (especially large ones) take a considerable amount of time to put together. In general, you can't bang one out in a couple of days or even a week. Some large ones I've worked on have taken months to pull together. A few quick tips:

\- Start as early as possible so that you can write, develop ideas, rewrite and rework.

\- Find a mentor, preferably one in the same or related area who has a good record of success.

\- Ask colleagues for copies of successful grant applications to the same programs.

\- Have your mentor and other colleagues review your grant and provide feedback.

\- Listen to advice from others, but ultimately trust your own judgement.

\- Apply to as many programs as possible--you can't get funded if you don't apply.

\- Don't get discouraged if you are not successful, as many programs have small (and ever dwindling) success rates.

\- Reapply if turned down, being sure to address the concerns of the reviewers.

<comment><USER8> Very good, concise advice. I was lucky enough to get a good mentor and collaborator on my first grant application and got many of those tips from him as well.

</comment></comment></comment><comment><USER9> >"The problem is, over and over again, that many very creative young people, who have demonstrated their creativity, can't figure out what the system wants of them—which hoops should they jump through?

I think that's the main problem. The system doesn't know what it wants.

</comment><comment><USER10> I really like the idea of awarding grants to institutions based on aggregate performance, and then awarding funding within a department based on internal metrics.

Getting rid of some of the direct competition might make people more compelled to share thier ideas with one another as well.

<comment><USER11> In your field, is this a real problem?

<comment><USER10> I'm a college student thats looking into going down this path, and am pretty apalled about the ratio of cool stuff to playing the game that academics seem to have to endure.

I'm pretty sure I don't want to spend 80% of my time stressed out about grants and 20% actually doing work or teaching. Unless thats not what the reality is, but from the jaded sources I've read, that seems to be the case.

<comment><USER11> I totally agree with the problems of teaching, administrative duties, and grant applications getting in the way of research.

But I am interested in the concern you showed about people keeping their work secret due to funding applications. In the world of CS, there are so many conferences because people are compelled to share every small step of progress instead of keeping it to themselves awaiting a huge breakthrough.</comment></comment></comment></comment>


News on Belarus? Not clickbaity enough - <AUTHOR> https://twitter.com/_zerez_/status/1293696479413047296 <comment><AUTHOR> Context: rigged elections in Belarus (European country the size of Portugal/Greece/Sweden, bigger than Libya and Lebanon), massive protests, hundreds of people arrested, dozens disappeared.

Clashes with police in multiple municipalities. Several factories and plants on strike or planning to go on strike. Multiple accounts of torture and physical abuse of those arrested or detained.

<comment><USER2> Thanks for the context, but how is Belarus bigger than Libya?

<comment><AUTHOR> By population:

Belarus: 9,408,400

Libya: 6,871,287

<comment><USER2> Got it. Thanks!</comment></comment></comment></comment>


Debugging Leaks with rr - <AUTHOR> http://robert.ocallahan.org/2015/11/debugging-leaks-with-rr.html <comment><USER2> For those that don't know, rr is a fantastically powerful tool that everyone should learn about. It's a record-and-replay debugger (actually a backend for gdb) with low overhead so it's actually practical for normal debugging, unlike the standard r-and-r backends built into gdb, which have very high overheads. Since the user interface is currently via gdb, it might seem a bit underwhelming at the moment.

</comment><comment><USER3> I remember being impressed by someone using windbg to map an address back to the pointers. I was never useful with windbg but looking now it looks like it has a builtin to scan memory for values; I'm not sure how you'd go back from those addresses to code, though.

<comment><USER4> Compilers can generate a map file that associates relative addresses with variable and function names. They can also store such information in the compiled executable.

<comment><USER5> I use this for debugging embedded code, if I get a null pointer exception or bus fault I log the calling address. 99% of the time running addr2line points me directly to the offending lines of code. There are also builtins that allow you to walk back up the stack and and thus fink on who's been naughty.</comment></comment></comment>


React v0.14 Beta 1 released - <AUTHOR> http://facebook.github.io/react/blog/2015/07/03/react-v0.14-beta-1.html

<comment><USER2> If you haven't already, you should be betting on React. It's the future:

> More importantly, this paves the way to writing components that can be > shared between the web version of React and React Native. This isn't yet > easily possible, but we intend to make this easy in a future version so you > can share React code between your website and native apps.

Isn't this what we have all been waiting for? Writing components that are composable, that are "isomorphic or universal", that can run on Native or DOM without any downsides of it's predecessors.

Aside, the article also mentions a migration tool [1] to help you port your code from 0.13 to 0.14. While others may have done so before, it's pretty cool that this is streamlined as part of the beta release.

[1]: [https://www.npmjs.com/package/react- codemod](https://www.npmjs.com/package/react-codemod)

<comment><USER3> _It 's the future_

[http://blog.circleci.com/its-the-future/](http://blog.circleci.com/its-the- future/)

<comment><USER4> For CircleCi, it's the present. Their frontend is written in Om, a cljs wrapper around React.

[https://github.com/circleci/frontend](https://github.com/circleci/frontend)

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

</comment></comment></comment><comment><USER5> I think this is the crux -

> _We think the true foundations of React are simply ideas of components and > elements: being able to describe what you want to render in a declarative > way. These are the pieces shared by all of these different packages (react- > native, react-art, react-canvas, react-three). The parts of React specific > to certain rendering targets aren 't usually what we think of when we think > of React._

I've not played with React-native yet (waiting for Android) but I feel this is a positive step towards their vision of "learn once, write anywhere". From the twitter updates it seems, Sebestian Markbage, gave a pretty cool talk on the same topic at ReactEurope yesterday. Can't wait to check that out. [https://twitter.com/chantastic/status/616679794479112193](https://twitter.com/chantastic/status/616679794479112193)

> _To make this more clear and to make it easier to build more environments > that React can render to, we 're splitting the main react package into two: > react and react-dom._

Great to see the react team responding positively to the developments in community and not being afraid to take hard decisions (like this one)

Lastly, if you're a web developer and deciding between going the 'web components' route or the React route, this announcement gives you, IMHO, an even more impetus to pick up React.

</comment><comment><USER6> _we looked at what you can do with a ref to a DOM component and realized that the only useful thing you can do with it is call this.refs.giraffe.getDOMNode() to get the underlying DOM node. In this release, this.refs.giraffe is the actual DOM node._

This only holds if you use Facebook's particular flavour of Flux, I guess.

Personally, I use refs a lot to bubble events _down_ the component hierarchy. For example, when the browser window loses focus and gains it again, some sub sub component of the root component might want to do set some local state. Whatever, display a "welcome back!" message or something. I can use refs to do this.refs.subcomponent.onWindowShow() and this makes my code very clean and flexible - it keeps browser event stuff out of my flux stores, and only the actual important user data in there.

Similarly, I use refs to ask an <Input> component whether its value is valid according to some validation rule. I could also give the Input an onValueValidityChanged prop, but that just increases the amount of bookkeeping I need to do. If I'm rendering a form with 2 inputs, name and email, calling "this.refs.name.isValid()" in some onButtonClick handler makes a lot of sense to me.

I really liked how React was separated from particular architecture patterns, but this change makes that a lot more difficult. I really hope this change can still be reversed.

<comment><USER7> _Personally, I use refs a lot to bubble events down the component hierarchy. For example, when the browser window loses focus and gains it again, some sub sub component of the root component might want to do set some local state. Whatever, display a "welcome back!" message or something_

Isn't that a bit of an antipattern? It seems that sending events down the hierarchy is something that React goes out of its way to make awkward, and on purpose.

In the case you've given, I'm not clear why you wouldn't just bind to the window's focus and blur events from within componentWillMount, anyway.

<comment><USER6> I'm not sure that it is an antipattern. Personally, I feel that attaching event handlers to global window events from all over the place is just as bad, basically a singleton in disguise.

Another use case that I came across was where we wanted a search dropdown to open in the header when a user clicked somewhere in the middle of the page content. One option would be to make a PageStateStore and add an isSearchDropdownVisible to it, but I don't like doing flux that way because I don't want UI details to be part of my model later.

I think having isVisible in the SearchDropdown state is much more elegant, but that poses the slight problem of how to change that state from the other side of the page. We did that by having the item in the page have an onWantToSearch event, which the page had a handler for that invoked this.refs.header.showSearch(), which in turn invoked this.refs.searchDropdown.setVisible(true), which did a simple this.setState({isVisible: true}).

So, in general, the event first bubbles all up the tree (through custom react onSomething, onSomethingElse props), and then bubbles down the tree (through method calls on refs). This exposes a really elegant design, because it made the Header component be "a thing that allows searching" (because it has a showSearch() method), and the page item an "a thing that allows a user to initiate a search action" (because it has a onWantToSearch event). The available methods and onSomething props of all components perfectly matched the possible behaviors of the components, and no behaviour is "hidden" inside a singleton mesh of flux stores.

</comment></comment></comment><comment><USER8> I am using/loving React a lot and is already in several production apps I am working on (thanks for awesome work Facebook!) but I don't fully get this release.

I feel it's a bit premature to separate `react` and `react-dom`. React has proven itself for the web but still has to prove itself as `react-native` and I don't get the friction/complexity being added by break it down into two components for the web. I feel React is more the rendering engine `react-dom` than the class/component system now `react`. What makes React beautiful is to be able to freely mix html into JS and not being limited to the render() call, so I feel the cut is a bit non-organic.

Finally, I love the approach `learn once, write anywhere` but having `react` as a thing by itself points (or at least confuses) to a workflow where you can write components by themselves then plug a rendering engine DOM or native, I don't think that's the initial intent and I don't think that's the intent now of this release as well but it's unnecessary confusing.

[Edit] Don't fully get why I've been downvoted.

<comment><USER9> Chances are this clear separation will allow the various teams to submit patches to React without having to worry about time synchronizing with the release of the stuff that is in ReactDOM ... at least once it stabilizes a bit.

</comment></comment><comment><USER10> We're considering trying react for a new project, and just read about the adoption of Babel [1] instead of the internal transpiler previously used for JSX. One question: does this mean that JSX will be able to use ES6 syntax supported by Babel out of the box? If so, will this be the default for this new version of React?

I ask the questions also because we would really like to be able to use React with CoffeeScript, but, even if there are many solutions to do so, no one is supported by Facebook and we're worried about future compatibility. Is adopting Babel going to influence the ability to use React with CS?

[1] [https://facebook.github.io/react/blog/2015/06/12/deprecating...](https://facebook.github.io/react/blog/2015/06/12/deprecating- jstransform-and-react-tools.html)

<comment><USER11> You don't need to use Babel, though we do recommend it. We're just no longer going to maintain our own JSX transformer since there's no point. (If you want just Babel's JSX transformation without any other features, that's possible too.)

There's a CoffeeScript JSX transformer here if you're interested:

[https://github.com/jsdf/coffee-react](https://github.com/jsdf/coffee-react)

and we'll continue to support using React without JSX, and though we use Babel now internally, we compile React itself to ES5 before putting it on npm so you don't need to use Babel if you don't want to.

<comment><USER10> Thanks for the answer. It would be great to have an officially sanctioned toolchain for using coffee and react from Rails, but I think that asking too much :)

</comment></comment></comment><comment><USER12> Aren't these two changes in conflict with each other?

One change remove assumption about DOM as rendered target, while another change means DOM must be the rendered target.

Requiring ReacDOM.findDOMNode(ref) should be what they do if they want to encourage multiple rendering target.

<comment><USER11> If you use a ref to a DOM component, you don't need ReactDOM.findDOMNode at all. Calling findDOMNode on a composite drills through abstraction boundaries and breaks encapsulation, so it's rarely what you should do.

The removal of .getDOMNode() was intentionally done in concert with this change: previously, all component classes created with React would magically have that DOM-specific method added to them; this way, component classes are less tied to specific rendering environments. If you need to call ReactDOM.findDOMNode then yes, your components will be tied to the ReactDOM renderer.

</comment></comment><comment><USER13> tl;dr React (core) is evolving into a kind of component spec.

Sounds good!

If not already, react-dom will probably be easily replaceable by modules like virtual-dom?

</comment><comment><USER14> I'm extremely excited about this release because of the change to context from Owner-based to Parent-based.

Authoring react-resolver meant jumping through weird hoops to avoid context changing, but this release should mean things will work as expected, rather than having to sort out "gotchas".

There goes my July 4th weekend :)

<comment><USER15> I'm looking forward to the context change the most too, it makes the feature work the way I've intuitively thought it would/should work when trying to design for it in the past.

It's going to be a boon for libraries which use DSL-like ancestor components.

</comment></comment><comment><USER16> About the refs, I've been using a small helper:

        h.ref(this, 'some-element.children-element');

and its companion h.$ref(this, 'some-element.children..'); for the jquery version.

I don't have a strict rule of when using it, but sometimes it's cleaner than having lots of nested callback on an inner children.. I.e. I can just do:

        h.$ref(this, 'header.search.input')..

Which basically transforms to this.refs.header.refs.search.refs.input (IIRC)

<comment><USER11> I wouldn't encourage doing that because it breaks encapsulation of your children. Like state, you shouldn't peer into another component's refs.

But that should continue to work fine.

<comment><USER16> I think it's fine when the parent and children are really tied together. I wouldn't use that from the main component to a really nested children for instance.

Let's say you have a "SearchComponent" with a "SearchButtonComponent" and "SearchInputComponent", I'm okay with using the strategy I suggested because using "SearchInputComponent" without its parent somewhere else in the code would be too risky so the encapsulation is still kept between parent/children.

</comment></comment></comment><comment><USER17> I am using React and am very happy with it, however I worry about upgrading because of the interdependencies as well as how fast everything is moving in this space... Does anyone know when we'll be able to have a 1.0 release that we can assume stable for a few months and that react-xxx authors can make sure their modules are stable against.

Presumably the react/react-dom breaks all current third party packages for now?

<comment><USER11> These changes require a little work on your part with each release, but we think they make React better overall – the alternative would be to stop improving React, which I think is worse. We're already trying to get to a long-lived release as fast as we can, especially given our commitment to support each change with a warning for an entire release to give people a chance to update their code.

One of our goals with this release is actually to help with the problem you mention of interdependencies and component versioning: we expect most components to only depend on the "react" package, which will be more stable and updated less frequently.

Thankfully the React community moves fast and package authors are usually quick to update to new React versions.

P.S. We've been making releases every 6 months or so, so we're already at "stable for a few months". We might speed this up a little but we never want the pace to be unmanageable. (The four of us on the core team need to make sure the 10,000 components in the Facebook codebase continue to work, so I assure you we don't take breaking changes lightly.)

<comment><USER17> Fantastic, that's reassuring to know. Given this I'll bite the bullet and move to 0.14 beta seeing as my app isn't publically available yet.

Thanks so much for React - it really is an amazing way to work and moving to it has simplified the extremely complex and interactive app I'm building!

</comment></comment></comment><comment><USER18> It'll be cool to see a WebAssembly implementation of react-dom.</comment>


Selling your company – some core questions and answers - <AUTHOR> http://giffconstable.com/2010/11/selling-your-company-some-core-questions/

<comment><USER2> site is down, cache: <http://xrl.us/sellingcache></comment>


NYSE to temporarily close floor, move to electronic trading due to coronavirus - <AUTHOR> https://www.cnbc.com/2020/03/18/nyse-to-temporarily-close-trading-floor-move-to-electronic-trading-because-of-coronavirus.html <comment><AUTHOR> This is big news not just because it's NYSE, but because many businesses are doing novel experiments catalyzed by this virus. Closing the floor and trading electronic-only has been technically possible for a while, but perhaps not politically viable. Now suddenly it is viable. Will such emergency measures be used as a moment to radically alter businesses and other systems sooner than otherwise expected?

<comment><USER2> I believe NASDAQ doesn't have a floor and hasn't had one for quite a few years.

A likely result of the current crisis is that many exchanges, which have long had the capacity to institute electronic trading only but which for historical reasons have elected to retain a floor, will fully embrace electronic trading. Peter Tuchman might be out of a modeling gig [0].

[0] [https://www.buzzfeednews.com/article/matthewzeitlin/meet- the...](https://www.buzzfeednews.com/article/matthewzeitlin/meet-the-most- photographed-trader-on-wall-street)

<comment><USER3> When did Nasdaq ever have a floor? -AQ stands for "automated quotations".

<comment><USER2> When they initially started operations quotations were electronic but trading was not.

<comment><USER3> Because they didn't have trading then, they were just a quotation service?</comment></comment></comment></comment></comment>


Updating an "Intro to Web Design" Course - <AUTHOR> Hi folks. I'm a college professor teaching largely non-technical students. I used to teach our "intro to web design" course regularly, but haven't taught it since spring of 2015.
I'm about to teach it again for the first time in a while and while—at the level of these students—most of the material will be the same (file structures, html, css, js/jquery, a tiny bit of server-side stuff, like php and sql), I know the larger world of web design changes very rapidly.
So I'd love your advice on tools / standards / libraries / frameworks that have evolved or become newly popular in the last few years, and what that might mean for a novice/intro curriculum. In particular, I'd love to know what bigger trends like the rise of serverless, the ascendance things like node.js and GO, and the reimagining of mobile web design might mean for an intro curriculum. <comment><USER2> What's the goal of the course?

A lot of the changes I've seen (from a distance) in the last few years are about how to better scale front-end development, which isn't really necessary for people who don't plan to be developers.

Serverless is interesting in that it lets you get a real application running with less ops knowledge, but are the people taking this course interested in making applications, or do they want the skills to make some changes to a wordpress blog? The combination with single page applications can remove the need to learn a server-side templating system, but with the downside that you need to know more JS than a simple PHP page.

One thing that HN doesn't talk about, but could be useful for non-technical folks is low-code frameworks for building typical business apps.

<comment><AUTHOR> All great answers, thank you. My goal isn't to have them become cracker-jack developers, but rather to get a good enough sense of how web applications work that they have a better idea of what developers do and how to talk with them. In the past I've typically had them complete simple exercises—with lots and lots of scaffolding—using different technologies in the stack.

</comment></comment><comment><USER3> I don't have advice - but just to share my own confusion in this area - I'm working more and more with containers and microservices. In the old days I used Eclipse, makefiles, and mostly vi to do my work. I'm not really sure how to integrate this with things like container deployments (lots of copying and shell scripts?) and with Kubernetes where things are getting very dynamic (scaling up, down, upgrades). The tooling just doesn't seem to be there. Right now, I'm relying on the old standard of vi along with some bash scripts. I don't know if that makes sense, but these old tools seem to work with the least obfuscation.

<comment><AUTHOR> That does make sense. The whole world of Docker and so forth is still pretty mysterious to me. I mean, I get how it works in principle, but I'd have to seriously update my skills to teach an advanced course. Though, if I get what you're saying, it's that fewer training wheels—IDEs, etc.—are better in the beginning. Which is good (hopefully?), since I typically force them to use a text editor for everything.</comment></comment>