Vanguard dramatically cuts its expected rate of return for the stock market - <AUTHOR> https://www.cnbc.com/2019/02/11/vanguard-cuts-expected-return-for-stock-market-over-the-next-decade.html <comment><USER2> A cynic might note that it is in Vanguard's interest to be conservative here to (1) drive down client expectations and (2) increase the required savings rate in its financial planning models. There's no upside for Vanguard to be high and wrong on the overall market and limited (if any) downside to Vanguard being pessimistic.

<comment><USER3> Well people can invest in something else that has higher returns than 5% with the same risk and abandon services like ETFs so Vanguard has something to lose. You might be right though in the way that people got so used to invest in ETFs and will still invest with a 5% gain. Vanguard might be aware of that and might be trying to pull down the expectations to increase their margin. This is all unfounded speculation though.

</comment></comment><comment><USER4> It's fairly rational to point out that the market is overvalued at the moment to begin with. If anything, I'd expect some big losses in that 5% median if economic pressures leave people worried and speculating.

<comment><USER5> > It's fairly rational to point out

Stating that an opinion is rational does not automatically make it rational. Care to explain why you think it is?

<comment><USER6> Not the original poster but I would point to the Shiller PE (i.e. CAPE) ratio as a useful indicator of potential over-valuation. The increasing cost required to make the same in earnings is disconcerting.

[https://en.wikipedia.org/wiki/Cyclically_adjusted_price- to-e...](https://en.wikipedia.org/wiki/Cyclically_adjusted_price-to- earnings_ratio)

[http://www.econ.yale.edu/~shiller/data.htm](http://www.econ.yale.edu/~shiller/data.htm)</comment></comment></comment>


Globetrotting Digital Nomads: The Future of Work or Too Good to Be True? - <AUTHOR> http://www.forbes.com/sites/forbesleadershipforum/2015/12/22/globetrotting-digital-nomads-the-future-of-work-or-too-good-to-be-true/ <comment><AUTHOR> Considering it's Forbes --- this is a surprisingly in-depth, non-clickbait article by a Harvard researcher who spent time understanding the current (& surprising) demographics of digital nomads living in Ubud, Bali.

TL;DR turns out it is an unsustainable lifestyle for almost everyone who _isn 't_ an "elite software engineer" or internet entrepreneur. However, most Hacker News readers probably qualify for one of those categories anyway, so for us this isn't much of a deterrent.

</comment><comment><USER2> This describes my reasons for going remote:

 _wants to work remotely "in the comfort of their home or coffee shops, schedule work around peak creative times (e.g., the middle of the night), or raise kids without disappearing to an office for most of the day."_

I had dreams of moving to a tropical island and working from a laptop (my wife is from the Philippines and we have an oceanfront condo there), but with a 3 year old, the biggest benefit of remote work is the flexibile schedule and freedom to be at non-office locations during business hours.</comment>


Show HN: Git-remote-s3 – push and pull Git repos to/from s3, encrypted using GPG - <AUTHOR> https://github.com/bgahagan/git-remote-s3 <comment><USER2> i have been using keybase's encrypted git repos and it has been great. highly recommended as a possible alternative to this.

[https://keybase.io/blog/encrypted-git-for- everyone](https://keybase.io/blog/encrypted-git-for-everyone)

<comment><USER3> I have failed at understanding how to set this up. How do I use it while installing the bare minimum amount of keybase? Why is it necessary to use their website with keybase git? Can't I use the cryptography without their key exchange?

I got a bad feeling trying to use the app last time.

<comment><USER4> All you have to do is install Keybase, then when you load the app you click "git" in the menunav and create a repository for yourself or a team. It's easy. :)

<comment><USER3> The trick is, apparently, doing it without sending anything to Keybase

<comment><USER4> I guess it's somewhat possible if someone did the effort to Port their server code?

</comment></comment></comment></comment></comment><comment><USER5> Very cool project! But be wary using something like this on large repos with lots of objects, S3 PUT pricing is obscene and you may end up with a surprising bill...</comment>


Show HN: A fast ISO8601 date-time parser for Python - thomas-st https://hack.close.io/posts/ciso8601

<comment><AUTHOR> A regex only seems to take ~1µs.

      In [7]: iso_regex = re.compile('(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.?\\d+))')

      In [8]: %timeit iso_regex.match('2014-01-09T21:48:00.921000')
      1000000 loops, best of 3: 1.05 µs per loop

But hey, once it's written in C, why go back?

I'm missing the timezone, but the OP left that out, so I did too. For comparison, dateutil's parse takes ~76µs for me. Kinda makes me wonder why aniso8601 is so slow. (It's also missing a few other things, depending on if you count all the non-time forms as valid input.)

That said, cool! I might use this. One of the things that makes dateutil's parse slower is that it'll parse more than just ISO-8601: it parses many things that look like dates, including some very non-intuitive ones that have caused "bugs"¹. Usually in APIs, its "dates are always ISO-8601", and all I really _need_ is an ISO-8601 parser. While I appreciate the theory behind "be liberal in what you accept", sometimes, I'd rather error out than to build expectations that sending garbage — er, stuff that requires a complicated parse algorithm that I don't really understand — is okay.

¹dateutil.parser.parse('') is midnight of the current date. Why, I don't know. Also, dateutil.parser.parse('noon') is "TypeError: 'NoneType' object is not iterable".

<comment><USER2> The library has the following features your regex is missing:

* Every part from month onwards is optional

* Separator characters are optional

* Date/time separator can be a space as well as T

* Timezone information

* Parsing the strings into numbers

* Actually creates a datetime object

I expect adding all of those will bump up the time a bit.

<comment><USER2> I'm not much of a regex wizard, but I tried to add all the features listed other than parsing the result and creating the datetime object.

        iso_regex = re.compile('([0-9]{4})-?([0-9]{1,2})(?:-?([0-9]{1,2})(?:[T ]([0-9]{1,2})(?::?([0-9]{1,2})(?::?([0-9]{1,2}(?:\\.?[0-9]+)?))?(?:(Z)|([+-][0-9]{1,2}):?([0-9]{1,2})))?)?)?')

It seems like it performs quite a bit worse than the library, which creates the full object.

        In [82]: %timeit ciso8601.parse_datetime('2014-01-09T21:48:00.921000')
        1000000 loops, best of 3: 368 ns per loop

        In [83]: %timeit iso_regex.match('2014-01-09T21:48:00.921000')
        100000 loops, best of 3: 9.72 µs per loop

In the interest of intellectual pursuit, is there anything that can be done to the regex to speed it up?

</comment></comment></comment><comment><USER3> Pandas (data analysis library for python) has a lot of cython and C optimizations for datetime string parsing:

They have their own C function which parses ISO-8601 datetime strings: [https://github.com/pydata/pandas/blob/2f1a6c412c3d1cbdf56610...](https://github.com/pydata/pandas/blob/2f1a6c412c3d1cbdf566103eabef4997274e4576/pandas/src/datetime/np_datetime_strings.c#L344)

They have a version of strptime written in cython: [https://github.com/pydata/pandas/blob/master/pandas/tslib.py...](https://github.com/pydata/pandas/blob/master/pandas/tslib.pyx#L1473)

I'm not saying these are better/worse than your solution, I haven't done any benchmarks and the pandas functions sometimes cut a few corners, but perhaps there is something useful there for reference anyways. They also don't deal directly in datetime.datetime objects, they use pandas specific intermediate objects, but should be simple enough to grok.

Having done some work with dateutil, I will tell you that dateutil.parser.parse is slow, but its main use case shouldn't be converting strings to datetimes if you already know the format. If you know the format already you should use datetime.strptime or some faster variant (like the one above). There is a nice feature of pandas where given a list of datetime-y strings of an arbitrary format, it will attempt to guess the format using dateutil's lexer ([https://github.com/pydata/pandas/blob/master/pandas/tseries/...](https://github.com/pydata/pandas/blob/master/pandas/tseries/tools.py#L73)) combined with trial/error, and then try to use a faster parser instead of dateutil.parser.parse to convert the array if possible. In the general case this resulted in about a 10x speedup over dateutil.parser.parse if the format was guessable.

<comment><USER4> It would have been nice if Pandas had let this out into a separate package so that you didn't need to pull down all of Pandas to use it. This is why people are duplicating your efforts.

</comment></comment><comment><USER5> I tried to do a fair comparaison between comparaison between the main date implementations. The ciso8601 is really fast, 3.73 µs on my computer (MBA 2013). aniso8601, iso8601, isolate and arrow are all between 45 and 100µs. The dateutil parser is the slowest (150 µs).

      >>> ds = u'2014-01-09T21:48:00.921000+05:30'

      >>> %timeit ciso8601.parse_datetime(ds)
      100000 loops, best of 3: 3.73 µs per loop

      >>> %timeit dateutil.parser.parse(ds)
      10000 loops, best of 3: 157 µs per loop

A regex[1] can be fast, but the parsing is just a small part of the time spent.

      >>> %timeit regex_parse_datetime(ds)
      100000 loops, best of 3: 13 µs per loop

      >>> %timeit match = iso_regex.match(s)
      100000 loops, best of 3: 2.18 µs per loop

Pandas is also slow. However it is the fastest for a list of dates, just 0.43µs per date!!

      >>> %timeit pd.to_datetime(ds)
      10000 loops, best of 3: 47.9 µs per loop

      >>> l = [u'2014-01-09T21:{}:{}.921000+05:30'.format(
            ("0"+str(i%60))[-2:], ("0"+str(int(i/60)))[-2:])
         for i in xrange(1000)] #1000 differents dates

      >>> len(set(l)), len(l)
      (1000, 1000)

      >>> %timeit pd.to_datetime(l)
      1000 loops, best of 3: 437 µs per loop

NB: pandas is however very slow in ill-formed dates, like u'2014-01-09T21:00:0.921000+05:30' (just one figure for the second) (230 µs, no speedup by vectorization).

So if you care about speed and your dates are well formatted, make a vector of dates and use pandas. If you can't use it, go for ciso8601. For thomas-st: it may be possible to speed-up parsing of list of dates like Pandas do. Another nice feature would be caching.

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

</comment><comment><USER6> Extremely simple and straightforward C code too, which is also nice to read. 320ns (on what processor?) is assuming a clock of 2-3GHz on x86 around 1K instructions, several orders of magnitude less than what it was before. But that still works out to a few dozen instructions _per character_ of the string... so I'm inclined to believe that it could go an order of magnitude faster if you really wanted it to, but at that point the Python overhead (PyArg_ParseTuple et al) is going to dominate.

I'm not sure this would be any better than just manually writing out both trivial iterations of the loop:

        for (i = 0; i < 2; i++)

<comment> thomas-st I did all the timeit benchmarks on the latest 13" retina MacBook Pro, 2.6 GHz Intel Core i5. The profiler screenshot is from one of our serves on EC2.

Of course there is always potential for optimization, but at this point it's fast enough for our purposes. If you can make it significantly faster please don't hesitate to submit a PR though :)

EDIT: Wouldn't most C compilers unroll the simple "for" loops? Direct link to the C code: [https://github.com/elasticsales/ciso8601/blob/master/module....](https://github.com/elasticsales/ciso8601/blob/master/module.c)

<comment><USER7> I don't currently have a use for this library, but I'm going to bookmark it anyways because it looks like a nice introduction to writing a module in C. It does something non trivial but still is simple enough to grok quickly. Thanks!

</comment></comment></comment><comment><USER8> Does it cover all of ISO8601? I'm sure it covers the common cases so is a valuable library anyway but I seem to remember that ISO8601 is quite complicated I.

<comment> thomas-st It doesn't cover all of it, for example week dates or ordinal dates are not currently supported. But feel free to submit any patches :)

<comment><USER8> Sorry. I'm busy with other things at the moment.

It may also be better not covering everything if it keeps performance and simplicity but I just like to understand the trade-offs.

</comment></comment></comment><comment><USER9> My quick look at this shows that unless you cython wrap the call -- this is going to be slower than using pandas' to_datetime on anything with an array layout.

I've never really spent much time looking at pandas' to_datetime but I believe it has to handle a lot of variety in what you pass to it, which probably cause a bit of a perf hit. (Lists, arrays, Series)

[http://dl.dropboxusercontent.com/u/14988785/ciso8601_compari...](http://dl.dropboxusercontent.com/u/14988785/ciso8601_comparison.html)

</comment><comment><USER10> If you control the source data, store it as epoch and you can avoid this parsing.

Not quite related: Is there any python library that can handle timezone parsing, like the java SimpleDateFormat ([http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDat...](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html))? The timezone could be in utc offset and short name format (EST, EDT,...). I am surprised that I couldn't find one.

</comment><comment><USER11> While profiling I noticed the same thing about dateutil.parser.parse a few years ago. We standardized all our interacting systems on UTC so we have a regex that matches UTC and if that fails to match we call dateutil. That way the vast majority of cases are optimized but we still support other timezones.

</comment><comment><USER12> How many dates are you parsing at a time that optimizing this would make a noticeable difference to users?

<comment><USER13> The post says: "For large object structures with thousands of date time objects this can easily add up." At 0.1ms per parse, that's 100ms per thousand dates, within the range of noticeable. (Their profiler screenshot has it taking 589ms.)

<comment><USER14> 0.1ms to parse a date???

Even the standard PHP string parser does 0.017ms on my 3 year old netbook.

        <?php

        $st = microtime(true);
        $cnt = 10000;

        for ($i=0; $i<$cnt; $i++)
        	strtotime('2014-01-09T21:48:00.921000');

        echo 1000 * (microtime(true) - $st) / $cnt;

Seems like this solves a non-existing issue.

<comment><USER15> You can see the issue it solves pretty clearly here: [https://github.com/elasticsales/ciso8601#benchmark](https://github.com/elasticsales/ciso8601#benchmark)

Python != PHP

<comment><USER14> Actually both Python and PHP are ridiculously slow languages. Though Python is slower.

<comment><USER16> Some implementations of python are slowish for some tasks. Many parts, like the module being discussed are written in C/assembly/fortran/Java.

Python with a jit is Pypy, [http://speed.pypy.org/](http://speed.pypy.org/)

Also PHP has some fast _implementations_ of PHP.

</comment></comment></comment></comment></comment></comment><comment><USER17> There are other parsers that exist already too. For example, did you try this one? [https://pypi.python.org/pypi/iso8601](https://pypi.python.org/pypi/iso8601)

How do these all compare to each other?

</comment><comment><USER18> I think you actually mean RFC3339. ISO8601 is probably a lot larger than you think.

<comment><USER2> RFC3339 makes most of the fields mandatory, while this library leaves them optional, so it is more accurately a subset of ISO8601 than an implementation of RFC3339. That said, you could describe it as an extension of RFC3339.

</comment></comment><comment><USER19> This seems like the type of thing that's good to ffi out of you're using it a lot. I highly doubt the c version would take this long.

<comment><USER20>
      > good to ffi out of you're using it a lot

What does that mean?

<comment><USER21> s/of/if/

<comment><USER19> Spell correct is a helluva drug. I get bitten by of/if all the time.

</comment></comment></comment></comment><comment><USER22> Would it make more sense to modify the core library and send off a patch?

<comment><USER2> Most of the speed comes from only parsing a frequently used subset of ISO8601. For a core library, you probably want a more complete implementation.</comment></comment>


Saw an app on HN lost it's name - <AUTHOR>

Saw an app on HN lost it's name: I saw someone posted an App on HN but I forgot the name. It was an app that models financial data with ease and it was in beta I think. Anyone know what it's called by any chance. Thanks in advance! <comment><USER2> Perhaps you're looking for [https://www.pennywhale.com/](https://www.pennywhale.com/)?

</comment><comment><USER3> try looking for it here: [http://hn.algolia.com/](http://hn.algolia.com/)

<comment><AUTHOR> I did and couldnt find it after 2 hours i gave up.

</comment></comment><comment><USER4> Thinknum: [https://www.thinknum.com/](https://www.thinknum.com/)

<comment><AUTHOR> Yes this is the one thanks everyone!

</comment></comment><comment><USER5> Was it [http://www.Quantopian.com](http://www.Quantopian.com)?

</comment><comment><USER6> slope?

<comment><USER6> [http://slopelabs.com/](http://slopelabs.com/)</comment></comment>


Kaitai Struct: declarative binary format parsing language - <AUTHOR> http://kaitai.io/ <comment><USER2> The format gallery has some lovely examples. I was initially skeptical, but this is quite nice.

For other people who might not look as far, it seems that the main advantage of this over other solutions (PB, Cap'n Proto, Flatbuffers, etc.) is that you can describe types that don't originate in the Kaitai ecosystem, and come out with code that can correctly read and manipulate those datatypes.

One slightly unfortunate item -- I don't see anything about using the generated code in a zero-copy situation. The docs are not very detailed on the point of the generated API, so perhaps this capability is present and just not documented in an easy-to-find way. This is not fatal, it's just a slightly less than optimal state of affairs.

Reading the stream API ([1]), it seems this is correct. There is nothing like Cap'n Proto-like direct-access semantics, nor even anything on the level of ZeroCopyInputStream [2].

[1]: [https://github.com/kaitai- io/kaitai_struct_cpp_stl_runtime/b...](https://github.com/kaitai- io/kaitai_struct_cpp_stl_runtime/blob/master/kaitai/kaitaistream.h)

[2]: [https://developers.google.com/protocol- buffers/docs/referenc...](https://developers.google.com/protocol- buffers/docs/reference/cpp/google.protobuf.io.zero_copy_stream#ZeroCopyInputStream)

</comment><comment><USER3> Reminds me of Emacs Lisp's "bindat" library which truly rocks. Scroll down to "The following is an example" on this page for a tangible example:

[https://www.gnu.org/software/emacs/manual/html_node/elisp/Bi...](https://www.gnu.org/software/emacs/manual/html_node/elisp/Bindat- Examples.html)

</comment><comment><USER4> Sounds like Erlang's bitstring operations.

I wrote a set of OCaml macros to do the same thing: [https://people.redhat.com/rjones/bitstring/html/Bitstring.ht...](https://people.redhat.com/rjones/bitstring/html/Bitstring.html)

<comment><USER5> Erlang's bitstrings are one of the things I love about the language. I've never seen an equivalent in other languages (not saying they don't exist, just that I haven't seen any).

</comment></comment><comment><USER6> Looks very nice. Too bad there isn't a C API.

<comment><USER7> What would it take to make a C API to a binary format parsing package? If you have an itch, you are the best one to know how to scratch it. Everyone else might not see the simplicity that you see.

</comment></comment><comment><USER8> This is very useful for forensics. I was impressed they already had a module for reading Windows registry hives. I did a parser manually myself (2x times) and remember the difficulty of doing that.

Their registry hive module looked correct and extremely simple. Was also impressed with the ISO support to parse/extract files. All in all, seems like a very solid option for parsing binary files.

</comment><comment><USER9> I'm generally skeptical of YAML-based languages(YAMLangs as I say), but this seems to be one of the more readable YAMLangs I've encountered. I especially like how the author(s) solved the variable length/repeat fields situation.

</comment><comment><USER10> I was looking for something like this, to autogenerate a HTTP/2 and a gRPC parser/serializer in Swift!

</comment><comment><USER5> Can't all these data structures be described just as well using ASN.1, which has the advantage of being thoroughly documented, tried and tested, and just as declarative?

<comment><USER11> There is nobody that I hate enough to ever recommend that they subject themselves to the Hell that is ASN.1!

<comment><USER5> Hmm, I don't think it's _that_ bad...</comment></comment></comment>


Advice needed, Mid-Life crisis - <AUTHOR> I have been with my current company for more than 5 years now and currently I'm working as a Director of Engineering (I'm one of the early employees). I make around $40k salary and I have $300k in equity as well (I live in India and $40k is decent money here, though I've got offers for $150k in India) . Right now, I think my career isn't going anywhere and I don't see any personal growth in the company. I'm a hacker at heart and I can quickly build stuff which just works and that's the reason people value me. I've experience in hiring and building teams and getting the shit done.
Now I have 3 options: 1. Start something of my own. I've got couple of ideas which I really want to try and build. I've got some financial issues to take care of, and because of that I can't really quit my job right now.
2. Join a company which pays me a hefty salary. That way I can solve my financial issues and save enough in a couple of years to bootstrap something. But this will need some serious preparation.
3. Continue with my current company and expect to grow in future.
Please Advice what can I do.
P.S. I'm almost 30 years old and I have almost a decade of experience (if you count my freelancing days while I was in college). I know PHP(Codeigniter/Laravel), JS/Jquery, MySQL, Postgres, Designing and Slicing PSDs, HTML/CSS/SASS etc. and have used lot of tools/softwares such as Beanstalkd, Memcache, Redis, Gearman, Vagrant (for local development), Git/SVN, Supervisord and what not. I also have a decent experience working with Phonegap, Corona (built a small game), AngularJS (built a decent app) and Chrome extensions (wrote few extensions). I've worked on so many things that I can't even remember. I worked on pretty much everything which was thrown my way. <comment><USER2> It's not a midlife crisis in your late 20s unless you anticipate dying young :) I am 45 and wrestling with some major life issues, so my life advice about getting older is that you'll be just as confused, but more aware than the problem is within yourself than imposed upon you by the world.

That said, I incline towards option 1 - stay put for a while, but start building prototypes of your ideas. Option 2 is a good one, but the price of the extra salary is extra responsibility and commitment to the new employer, both of which could cause you to lose some focus on your own ideas. Developing prototypes first will qualify your ideas and help you to treat the high-paying job as a means to an end, as well as giving you a better idea of how much startup capital you need to accumulate.

</comment><comment><USER3> I'm guessing you have a lot of flexibility with how you tackle things in your current role, as well as more control over your work/life balance. Consider how those would change by taking a new role. More money might solve some problems currently, but it quite likely may come at the cost of far less free time.

If you ever want to get your own stuff off the ground (and it sounds like you are equipped to attempt that), and your current pay is workable, it might be good to focus your free time on these new endeavors vs. taking the higher paying job and not having the free time to explore that.

Beyond that, if you still feel passionate about your current company, start digging into why you don't feel there is growth potential. Is it a management issue? Is the company itself stalled? Is it that the founders are greedy and don't want to pay you more? Getting at the root of that might add some clarity to your decision-making process and priorities.

</comment><comment><USER4> I would vote for option #2. I was in a similar position (not in India though). The reason why I chose 2 is because fixing my financial situation would be a priority. There is a great feeling to know you don't owe anything and you're free in that regard. Last thing I would want is to start a business of my own with debt still around.

</comment><comment><USER5> I hope you don't mind me asking, but it's been ~800 days. How is your mental state? I hope you're in a better place.

You don't seem like the kind of person who's motivated by $, so I'd say join a more challenging/interesting startup. Where are you based? I may be able to put you in touch with an incubator.

</comment><comment><USER6> don't try to figure everything out man.

I just turned 32 and I had a "young-life crisis" from 29-31 probably where I didn't know what I wanted to do. My best friends seemed to be more successful than me and I felt like if I didn't make something happen quick then my contribution to society would be nil.

Sometimes you gotta just roll with life. If you think your job is dead end, then take a big boy breath, put in your notice and leave. Find another job. Go travel for a few months. Learn a new technology or build something that interests YOU.

Most of all, enjoy life. Stop and smell the roses. Hang out with friends and family and make new memories with them. You got your whole future ahead so just take it one step at a time!

</comment><comment><USER7> I'm confused. You haven't actually written anything about what you want, and what you value in life. We're not going to be able to figure that out for you!

If you have some financial troubles, consider lining up a new job with a hefty salary, and make sure you get at least a few weeks' break before you start there. Perhaps spent a little time not working on anything at all and reflecting on what you want (if you don't know this already!).

</comment><comment><USER8> It's simple. Love what you do and do what you love. Just follow your heart because when we are doing everything by heart, we can achieve the best thing in the life.

</comment><comment><USER9> Your prescription, Sir:

A) Ask your parents, family and friends for advice. Maybe they do not know work, and they do know you.

B) Call it what it is: Quarter-Life Crisis

C) Recognize your options are not either or. Concretely :

      1 + 2
      1 + 3
      2 + 3 ( as consultant )

D) Read the Alchemist if you have not done so. Ask yourself what signs recur in your life and ponder what such may be suggesting to you about your path from here.

E) Recognize that choosing to do nothing is also a possibility. So is deferring your choice until an answer presents itself.

F) Quantum Jump : ask versions of your future self what path they picked and what happened doing so.

G) Be thankful for the life you have. It's yours, live it your way.

</comment><comment><USER10> 150k job. Bite their hand off.</comment>


Google will Collapse (2017) - <AUTHOR> https://hackernoon.com/how-google-collapsed-b6ffa82198ee <comment><USER2> Maybe the author is just early in stating the truth.

Two factors he didn't consider: the rise of privacy concerns and the forthcoming availability of open source Linux phones. Both of these will, hopefully, speed Google's demise.

It's worth pointing out that no company survives over the long haul without innovating. Apple used to be an innovator but that died with their co-founder. Google never was an innvoator, merely an opportunist copycat. That's not a sustainable business model.

<comment><USER3> These are some outlandish claims without much in the way of evidence.

<comment><USER2> They're opinions.

</comment></comment></comment><comment><USER4> The author must be feeling somewhat foolish for having this article on their record now that 2019 has come along.

Somewhat similar to the recently resurfaced [https://news.ycombinator.com/item?id=18844821](https://news.ycombinator.com/item?id=18844821) I must say. It seems like 2017 is quite a popular year of pessimism for some reason.

</comment><comment><USER5> Didn't happen: [https://www.macrotrends.net/stocks/charts/GOOG/alphabet/reve...](https://www.macrotrends.net/stocks/charts/GOOG/alphabet/revenue)</comment>


Liverpool DoES Startups.  Learn from the masters - <AUTHOR> https://plus.google.com/116059998563577101552/posts/HBBVsj1kChW

<comment><USER2> Holy carp, a thread related to Liverpool. Didn't think I'd ever see that :-)

How many HNers are from Liverpool or the Wirral then?

<comment><USER3> Not I (my family comes from there, but not myself, except for visiting). However I share your surprise - good luck to them :)</comment></comment>


Hackers steal Bitcoin through large-scale exploit on Tor - <AUTHOR> https://decrypt.co/38359/hackers-stealing-bitcoin-tor-exploit <comment><USER2> Why are sites handling transactions even offer http in the first place?</comment>


Louis CK is the world's first auteur filmmaker - <AUTHOR> https://www.reddit.com/r/TrueFilm/comments/43hwdj/louis_ck_is_the_worlds_first_auteur_filmmaker/ <comment><USER2> This piece seems to want to redefine 'auteur' to mean "there is nobody else". However, and quoting "auteur theory" on Wikipedia:

> In film criticism, auteur theory holds that a film reflects the director's > personal creative vision, as if they were the primary "auteur" (the French > word for "author"). In spite of—and sometimes even because of—the production > of the film as part of an industrial process, the auteur's creative voice is > distinct enough to shine through studio interference and the collective > process.

The American Heritage Dictionary describes 'auteur' as:

> A filmmaker, usually a director, who exercises creative control over his or > her works and has a strong personal style.

The author acknowledges that "filmmaking is where auteur theory first got developed and still where it feels the most comfortable and dominant", so knows there are already auteur filmmakers, which makes it impossible to accept the qualifier "first".

Sticking "auteur filmmaker" into Google newspaper search shows that Woody Allen, Sergio Leone, Quentin Tarantino, Spike Lee, Cronenberg, Yahoo Serious and others have all been given that label. These all fit the above description.

Thus, this piece only makes sense if 'auteur' is being used with some alternate definition. But that was never given. Nor does it make sense to re- use a well-known term. Nor is there any reason why these filmmakers should not deserve the term 'auteur'.

For that matter, there are any number of films which were made completely free of the studio system. "El Mariachi" comes to mine, which "helped usher in the independent movie boom of the early 1990s." Or Andy Warhol's films, which were avant-garde films completely outside of the film industry. "Sleep", for example, was created as an "anti-film."

The author uses the waiver "I am far from a film historian", but I am likely even less of a film historian, and still know enough to refrain from saying "world's first auteur filmmaker", so can only assume it's meant as clickbait, and the waiver disingenuous.</comment>


How Dr Andy Hildebrand invented AutoTune - <AUTHOR> http://www.irishtimes.com/newspaper/finance/2011/1202/1224308464745.html

<comment><USER2> From the article: "There were other consequences from the adoption of Auto- Tune. Hildebrand tells the story of a music producer who jokes that once he used to look for good singers, now . . . it's pretty faces."

This is the reason that a lot of recent popular commercial music is crap to my ears. A lot of the real talent is hidden by "cosmetic imperfections" and isn't suited for the mass marketing machine that desires pretty faces. If you go back before the modern era of digital manipulation, you'll be amazed at the vocal talent that is represented.

<comment><USER3> There's still plenty of legitimate vocal talent out there, but if you spend your time with your ears turned towards the noise machine of the big music distributors you might miss it.

The world is changing. Technology is making it easier for talented artists to make a living outside the traditional confines of the industry, even producing and distributing music themselves. The industry has fallen back to relying on the sorts of "media phenomenon" type artists (face, lifestyle, music, in that order) who get the greatest boost from what the industry can provide and are thus the most dependent on that industry.

Someone with solid pipes and solid musical skills will find it easier to DIY their tours, albums, etc. and make a decent living while in complete control of their music. Someone who's just a face and an approximation of a singing voice who requires autotune, requires others to write their songs, requires a backup band, etc. that person is going to be welded to their producers like nobody's business. And their producers are going to use every tool at their disposal to ride them for everything their worth (publicity blitz, etc.) It doesn't help that modern broadcast radio is feckless and moribund.

</comment></comment><comment><USER4> Note than when surgeons were barbers, the Sorbonne was awarding PhD's....

Aside from the staggering memorization load in Med School, I would think the typical STEM PhD involves more work, and more creative work, than the MD. Certainly a lot more writing.

<comment><USER5> My understanding is that it's common for PhDs to feel they worked harder to get their degree than MDs, and MDs laugh at this.

Don't forget that earning the degree only gets you half way to being a practicing doctor. It's a little like the difference between the police and the military, maybe.

</comment></comment><comment><USER6> While I don't mean to make light of the effort and prestige behind earning a PhD, I can't be the only one who expected this article to be about how a medical doctor originally invented the technology behind AutoTune, possibly to help people who had trouble hearing certain types of audio.

Still an interesting background for the tech, mind you, but not what I was expecting from Dr. Andy Hildebrand (rather than Hildebrand, PhD).

<comment><USER7> That's interesting. I work with many PhDs and always refer to them as Dr so- and-so in formal settings or introductions. Most of the doctors I know aren't MDs.

I do see your point though. There are quite a few doctorate degrees, and even in the professional field they aren't all referred to as Doctor (take a DDS for instance, Doctor of Dental Surgery).

<comment><USER6> I do too, when I'm speaking aloud. In my experience, though, when writing, the actual degree is listed(PhD, MD, EdD, JD, DDS, etc.), rather than the more generic "doctor".

edit: Just checked; the AP and Reuters style guides both seem to recommond only using Dr for Medical Doctors. That's probably where my memory comes from.

<http://www.sandiego.edu/web/pdf/brief_ap_style.pdf> <http://handbook.reuters.com/index.php/D#doctor>

<comment><AUTHOR> My mistake, apologies. PhD would have made more sense.

I thought the guy's background was interesting. It shows the utility of software/computing for solving such diverse problems as oil exploration and poor pitch using similar techniques. I find that amazing.

<comment><USER8> The rule I was taught was that PhDs use the title Doctor in contexts related to their professional expertise, but not in generic social situations. Going by that rule, Doctor Hildebrand is perfectly correct in this instance.

</comment></comment></comment></comment></comment><comment><USER9> I want an Android app that will autotune my voice as a microphone so I sing quietly into it and midi out is sent autotuned realtime voice.

<comment><USER10> That's not how MIDI works. For the most part, it just carries Note On / Note Off / Velocity messages. There's provision for system-defined data. But MIDI's bandwidth, if I remember correctly, is only 31kbps, so it's not enough to carry sampled audio with any fidelity.

<comment><USER9> It would be ok for a 2 second delay. I want to sound like Darth vader.

<comment><USER11> MIDI doesn't pass audio streams at all. It's purely a message-passing protocol. Per the Wiki article:

 _MIDI's primary functions include communicating event messages about musical notation, pitch, velocity, control signals for parameters (such as volume, vibrato, panning, cues, and clock signals (to set the tempo)) between two devices in order to complete a signal chain and produce audible sound from a sound source._

<http://en.wikipedia.org/wiki/MIDI></comment></comment></comment></comment>


Jewish nation state: Israel approves controversial bill - <AUTHOR> https://www.bbc.com/news/world-middle-east-44881554 <comment><USER2> Why is this news if the state of Israel has finalized and normalized the practise of it's neighboring billion people - all proud to live in "Islamic" states, mostly under Islamic Sharia law.

<comment><AUTHOR> Because Israel is supposed to be better than their neighbors? At least that was my perception of them.

<comment><USER2> This selective application of reason makes no sense. Trigger a wave of secularism in the Islamic world that surrounds Israel, get them to acknowledge Israel as a country and take off their agenda the destruction of Israel. Maybe then, we can opine on Israel's proclamation as a Jewish state, which BTW, is the reason their neighbors want them off the map. Put another way "we want you gone because you're Jewish, but you're not allowed to officially claim to be a Jewish state" is the hypocrisy we're dealing with</comment></comment></comment>


Null References: The Billion Dollar Mistake – Tony Hoare (2009) [video] - <AUTHOR> https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare <comment><USER3> One of my absolute favorite things about Rust is that nulls can't be used to circumvent the type system. They must be explicitly accounted for via an option type in all cases. It's very hard to go back to a language that doesn't do this after getting used to it. I get so frustrated by constant null dereference errors when that entire category of error can be avoided.

<comment><USER4> I'd rather have explicit seperation of concern for UB-causing behavior than have a generic monad approach.

Perhaps the examples I've seen in Rust just don't do that, because part of the appeal of Rust is that you sort of don't have to.

That makes the cognitive load acceptable and documents all the UB prevention in source code. It's a habit arrived at from using formal instantiation protocols that were driven from external to the device being made - <USER2> with RFC1695.

</comment></comment><comment><USER5> The problem isn't null itself, but that many languages use nullable types by default.

Null is a damn useful construct and while there may be better solutions to using a null reference they're often not as clear as using null or worth the time investment to develop properly.

So yea, I generally try to avoid null's and completely understand how they've caused a lot of problems, but I'm not willing to say we shouldn't have them or use them when appropriate.

<comment><USER6> You don't just not use nulls, you replace them with something like Optionals. With a bit of language support, they can compile down to nulls but provide a layer of type safety and convenience functions.

<comment><USER7> It's perfectly fine to use nulls in languages that encode them in their type system, e.g. Kotlin.

<comment><USER8> Exactly. The problem is not that there is a null, it is that it is a valid value for all types (e.g. you can pass null to a function that expects a String).

Allowing nulls explicitly, like with a "String?" type, is the way to go in languages where Option is not an option.

<comment><USER9> Isn't it, in practise, basically the same thing though? The theoretical difference is this:

1\. Option is a regular data type/object that represents "a collection of at most one value". It's similar to a list, set, heap, tree or whatever other collection types you have, except it can not contain more than one value.

2\. With explicit nulls I guess any data type (e.g. Integer) will automatically get a clone of itself (a different type named Integer?) where also null is a valid member.

From a purely theoretical standpoint, I like #1 better.

<comment><USER10> I think Option[String] and "String?" are semantically both a union type–they both effectively add one possible value to the underlying type, along with a constructor for naturally extending functions on that type–Kotlin's "?" operator is equivalent to Scala's map or Haskell's fmap, etc.

<comment><USER11>
      Option[Option[String]] != String??

<comment><USER10> My impression, though I'm not sure, is that Kotlin simply won't allow you to do a double "??". Scala etc. will technically allow Option[Option[Something]], but in practice you would almost never want to use it, and can easily avoid it with flatMap.

<comment><USER11> The whole point of this was to show that Scala's types preserve the structure of the computation.

It might not be very interesting in the Option[Option[String]] case but imagine Try[Either[String, Int]] or List[Future[Double]].

It's a very important distinction.

Collapsing cases is one of the primary thing why exceptions sometimes get a bad rap, and Kotlin (and Ceylon) do the same with ? (and |, &) at the value level.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> Just to add my two cents to the discussion, Typescript is implementing Non nullable types [1]. I think i'd be convenient that any language being used for large projects would support this feature.

[1] [https://github.com/Microsoft/TypeScript/pull/7140](https://github.com/Microsoft/TypeScript/pull/7140)

<comment><USER13> Some functional language use non-nullable types by default. Haskell, ML, OCaml, f.ex.

Java has the checker framework that supports `@Nullable` annotations and will allow only those vars/fields to contain `null`.

</comment></comment><comment><USER14> Why are option types that force you to check the value for null good, but checked exceptions are frowned upon?

<comment><USER9> The arguments I've heard against checked exceptions are that they're hard to compose.

If you write the `send_mail` procedure you might only want it to throw `MailException`s of various kinds. But if you use a TCP procedure inside, you'll have to declare `send_mail` to also throw `ConnectionError`s, thus revealing its implementation. To correctly hide/abstract over the implementation, you have to internally _catch_ any `ConnectionError`s thrown by the TCP procedure, and re-throw them as `MailException`s. That's a lot of manual work that shouldn't be needed.

Another similar problem is what someone else mentioned: if you don't actually know which specific exceptions your method can throw until runtime, what do you declare?

\----

 _Note that this is also the case for some "null alternatives"_. Sure, the `Option`/`Maybe` type is easy to compose, but as soon as you start inserting error information in there (with an `Either` type) you run into some of the same problems. This is acknowledged by language communities where that is practised, and some of them prefer unchecked exceptions to `Either`-style types for that reason.

<comment><USER4> Unless there's a full discipline built into the system for addressing TCP errors that your "mail" thingy can rely on, you'll need to address it.

And how can you _not_ know the specific exceptions you need to handle? Don't you need to test all of those?

I am sure you didn't mean it to, but this reminds me of meetings where people say "oh, we don't have to worry about that. TCP is reliable."

 _Twitch_ :)

</comment></comment></comment><comment><USER15> I posted a very closely related article about this last year ([http://mattdavey.logdown.com/posts/259807-avoiding-the- billi...](http://mattdavey.logdown.com/posts/259807-avoiding-the-billion- dollar-mistake)) - it's C# focused but the idea should carry over to similar languages. It summarizes 5 strategies for dealing with nulls, rather than just jumping straight into monads.

<comment><USER16> I think the section dealing with the Optional monad sort of glosses over their composability, which is one of the primary reasons we use monads. Multiple functions that all return an optional can be composed; for instance, if we had

      Optional<WidgetFriend> GetWidgetFriend(Widget widget)

and WidgetFriend had an Optional<FriendName> property, we could simply write [1]

      from widget in _widgetRepository.FindById(widgetId)
      from friend in _widgetRepository.GetWidgetFriend(widget)
      from name in friend.Name
      select name;

and get an Optional<FriendName>, without having to repeat all the tedious pattern matching of Some or None for every call. If any of those calls returns a None, the entire evaluation short-circuits and we get a None result at the end.

Of course, we can still write

      Optional<Widget> widget = null;

which is the problem with not fixing this issue on a language level.

[1] You'd have to implement Select and SelectMany, instead of Map and Bind, to get query syntax like this.

<comment><USER17> I think you'd like C#'s linq syntax and null coalesce operator. While obviously they don't get away from null, they go a long way to making this type of syntax and null safety much easier to implement.

</comment></comment></comment><comment><USER18> So that's the famous Tony Hoare. Nice trip down memory lane there.

Who was the guy at the end from the Erlang community? (The one who drew a chart with the axes useful/useless versus unsafe/safe that he claimed he got from Simon Peyton-Jones?)

</comment><comment><USER19> I have a question about null being able to subvert types, using Java an example, if I write foo.upperCase() and foo is a string, the type check succeeds but will produce an NPE at runtime. Why doesn't javac catch that foo is not set i.e is "null." Why is null above type checks?

<comment><USER20> Because whether foo's _value_ is null is for _most_ cases only detectable at runtime precisely because java doesn't have the capability to express disjoint type sets in it's type system the way that say Haskell or F# do. This inability means that the programmer can't tell the compiler what code paths produce null vs what code paths produce string. As a result the compiler has to assume that all codepaths could produce both.

There are some trivial cases where the compiler could figure it out for you but most of those cases are not very useful in practice.

<comment><USER19> Interesting, is there a formal name for this kind of type system that has the ability to look at the code paths and express disjoint type sets?

Is this a trend in newer languages in general or an FP specific thing?

<comment><USER20> Typically it's referred to as an Algebraic Data Type [https://en.wikipedia.org/wiki/Algebraic_data_type](https://en.wikipedia.org/wiki/Algebraic_data_type). Any Type System that can express this type will be able to do the above.

It's not necessarily new since the ML family of languages has had it for a while now. It's also not limited to FP languages but it best known from ML the ML family. Rust has it though as well as Swift i think.

<comment><USER19> I see. Thank you for the follow up. This is really helpful. Haskell implements this data type which is why it has come up in this discussion. I need to spend some time with something from the ML family.

</comment></comment></comment></comment></comment><comment><USER21> Nulls are not a mistake. They are a trade-off as so many other things in language design.

<comment><USER22> Benefits of nullable by default: -

Drawbacks: numerous

How is this a trade-off?

<comment><USER21> Null as a default is useful / a big simplification when it comes to reflection/meta-programming.

Consider this piece of pseudo-Java/Spring code and think how you would do it if the platform you were using forced you to either declare a and b as optional (which they are not) or assign them some value between the IoC container instantiates the class X and wires the values for a and b.

       public class X {
           @Autowired
           ServiceA a;

           @Autowired
           ServiceB b;

           @PostConstruct
           void init() {
               // a and b are instantiated by the IoC container and
               // are fully valid for the rest of the execution
           }
       }

<comment><USER16> Constructor injection?

<comment><USER21> Yes. But then you have to define an explicit constructor. Also X maybe auto wired into ServiceA or B making it impossible for the IoC container to create the intended object graph without splitting construction and injection into two passes.

<comment><USER23> 1\. Lombok @RequiredArgsConstructor?

2\. Do you not consider cyclic dependence a code smell? At least I have always avoided cyclic dependencies.

<comment><USER21> I personally consider the example I gave as being a nicer way of doing dependency injection than the more verbose constructor based injection.

But in general yes; cyclic dependencies are a bad idea.

</comment></comment></comment></comment></comment></comment></comment><comment><USER24> You're gonna need nulls until databases stop supporting nulls. And everyone would need to use 6th normal form for that to happen, and nobody wants that

<comment><USER25> .NET uses DBNull.Value, which is not null.

Also 6th normal form?? What is that?

<comment><USER26> [https://en.wikipedia.org/wiki/Sixth_normal_form](https://en.wikipedia.org/wiki/Sixth_normal_form)

Not something I'd like to use.

<comment><USER17> I work with an engineering application that uses a 5th/6th normal form database that is implemented in standard SQL server/Oracle DBs. It is awful and painful. A simple query with maybe five properties and 2 relationships takes upwards of 20 joins. Yet the database only has 4 tables...</comment></comment></comment></comment>


Is Apple destroying a generation of tech whizzes? - <AUTHOR> http://www.economist.com/blogs/freeexchange/2010/04/innovation

<comment><USER2> Here's my take. When I was a kid, yes I had the Apple II, I had HeathKit radio kits, etc. And yes we now have iPhone, iPad, etc. But folks those all have SDK's. And Linux exists now. Arduino. Mindstorms. Roomba. All kinds of electronic and computer kits for experimentation. Make magazine. Mainstream bookstores now actually have lots of geeky computer magazines and books on the shelves. And the Internet: tons of free software and documentation, all at your fingertips -- all of this quite unlike the 70's/early-80's.

So no, I don't think somehow the iPad is part of some new Dark Age. If anything, we live in a Golden Age for hackers. More so now than back then, taking into account what I cited above.

<comment><USER3> The iPhone and iPad are not the machines that ship with an SDK, though. That lies entirely on the Mac. And yeah, the Mac is definitely part of the hacker's Golden Age.

<comment><USER2> Good point. About Mac, agreed, especially software-wise. Hardware-wise, it may not be as hackable as the Apple II was, but it comes with way more powerful and interesting and useful software.

</comment></comment></comment><comment><USER4> They'll just do something else. I think it's a mistake to assume that if kids aren't exposed to what we were exposed to as kids then they won't learn anything. I could see kids writing iPhone apps to impress their friends these days. I know I'd be impressed if my kid did something equivalent to that when she's that age.

I probably would have when I was 16 or 17 just for that reason-let alone the fact that it's cool.

</comment><comment><USER5> I think the single device which got most people into programming in my generation was the Nintendo Entertainment System, and I do not remember it as being a playground of hackability. It just showed six year olds that if you ate your carrots and studied math you would eventually be able to do magic.

<comment><USER6> In my opinion the Commodore/Amiga and later the PC computers created a lot more programmers than the Nintendo Entertainment System did. The North European game industry (DICE, Starbreeze, Remedy, etc.) was more or less based on the demoscene i.e. hacking for fun, not math education. Sure, the NES inspired a lot of people. But the real questions is: What if the NES would have been hackable?

</comment></comment><comment><USER7> Actually, it might give students a real incentive to tinker: "hey, you might make thousands of dollars on the App Store". Parents? Spend $100 for a curious kid's birthday to get a dev kit, it would be a great investment. Especially if it takes away from time they'd spend doing passive things like watching TV.

<comment><USER8> Back in 1985, I remember bugging my Mom to get me the Radio Shack Assembler for the Color Computer and a book on Assembly language programming and I wouldn't be surprised if she spent around $60 or so back then. Using this calculator ( <http://www.measuringworth.com/uscompare/> ) that works out to between $100 to $200 in 2009 dollars (depending upon which inflation scale is used).

</comment></comment><comment><USER9> The iPad isn't going to destroy tinkering. The whole "oh no one will tinker and no one will want to be a software engineer" complaint is getting old. If closed platforms abound, tinkerers will create an open and adaptable one. There is a wealth of tools and systems available to tinkerers today. Widespread adoption of the iPad is not going to change that. iPads aren't going to destroy the hobbyist electronics market. And as for the software development - what's stopping someone from providing a good programming experience that is web based? (surely someone has to be building a web based IDE, say, that compiles from whatever language to javascript?)

<comment><USER10> 280atlas.com

</comment></comment><comment><USER11> I've always believed the biggest single moment of destruction of future programmers is when Microsoft stopped shipping BASIC (plus the full source code of the games GORILLA.BAS and NIBBLES.BAS) with DOS/Windows.

<comment><USER12> I loved Gorillas. But Windows ships with .NET, including a C# and VB.Net compiler. I'd rather have hacked on that than BASIC, nostalgia value notwithstanding.

<comment><USER13> Now yes - as I much prefer Ruby, C++ and a wee bit of Haskell these days. But to learn? Absolutely not. The beauty of BASIC was that everything was simple enough that a 10 year old kid could comprehend it: type in instructions, and run them. No compilers, no CLR, no API calls. All of those things make the barrier to entry too high.

I started out writing things like:

      10 PRINT "Jason"
      20 GOTO 10

The reason why that's so important is that it can be comprehended, and it provides a base to which more knowledge can be added _in very small pieces_. Once the hypothetical 10-year-old has grasped the above - and there are a few fundamental concepts to grasp in there, they can start adding to that. Say:

      10 FOR I = 1 TO 10
      20 PRINT "Jason"
      30 NEXT

And from there, it's just a matter of learning more and more until you're dealing with abstract syntax trees, NP-hard problems, functional languages, multi-threaded programming and whatever else we get to deal with.

But if that first step is too high, many people will never be able to climb it.

<comment><USER14> That's true, but these days most people have always-on broadband internet connections, so prebundling with windows is not as important as it once was.

I don't think something like Processing is any harder to get into than basic was. I started programming with GW-BASIC, LOGO and QBasic myself - the first thing that I thought when I started playing around with Processing is that it is remarkably similar to a modern QBasic.

</comment></comment></comment></comment><comment><USER15> This is honestly one of the most poorly-written 'articles' I've ever read: "The process of simplification of consumer goods in response to demand is what has delivered the enormous productivity gains that generate much of the wealth of modern life."

What does that even mean? How about this: "Think about light switches, for example. Homebuilders, these days, put all the wiring inside the walls where you can't see it, and power is generated miles away from sources. Most people couldn't generate a current if their life depended on it; they just know that if you flick the switch the light turns on and if it doesn't you change the bulb or check the circuit breaker (the equivalent of hitting restart) before calling in the experts."

I know that dumbing ideas down to the point of meaninglessness is sorta the status quo of mainstream journalism, but at least have a little respect for your readers...

</comment><comment><USER16> It's naive to think these kids will commit themselves into any one device. Maybe they'll have a tablet but they'll also have access to a desktop or laptop, probably a gaming console and a SmartPhone too. Of course they'll also have nearly constant access to the Internet which is more than most of us had at that age and we turned out just fine.

</comment><comment><USER17> While I generally enjoy a Cory Doctorow opinion I can't help but to think he is off on this one. The iPad is analogous to a newspaper, both used for consuming content and both gated from seeing how they work on the inside. The Apple IIgs' of today are Arduino's, FPGAs, and the like. Mostly or fully open source and customizable.

</comment><comment><USER18> I initially thought the same thing, but then I realized that the iPad may actually inspire more kids to become hackers and programmers.

They may start with the iPad because it's the number one tablet but that doesn't mean they will stay with the iPad.

Future hackers will probably be inspired by the iPad and want to figure out how it works and how to program for it. Then these hackers may get tired of Apple's tightly controlled platform and may move to an open platform like Android to hack on.

</comment><comment><USER19> At a family event recently, my 13 y.o. cousin was playing with his new iPod Touch. So I started asking him questions about it, and he tells me about how he's going to root it, going into some decent detail. I was pretty impressed! It just goes to show, Apple engineers can't keep kids from learning about their iPod Touch/iPhone/iPad, no matter how hard they try.

</comment><comment><USER20> "If I had a clunkier technology in front of me, I might learn more about programming"

This article seems to pursue an odd dichotomy, that the platform can either be openable or slick - never both.

Surely those two aren't completely mutually exclusive.

</comment><comment><USER21> No - because they are expensive. It's like claiming that Mercedes is destroying the hot-rod industry because kids can't get the engine management codes.

Macs were never for hackers now iApple isn't - so what?

<comment><USER22> _Macs were never for hackers_

Sure they are. Macs are full Unix workstations that can also run Office and Photoshop, with a much better UI than Linux. The meme that Apple's computers are deliberately unfriendly to hackers has never been true, until the iPhone and iPad.

<comment><USER23> Wait a second, a challenge, an obstacle, an opponent.

This is not being unfriendly to hackers.

This is like one of those cat toys with the wand and the feather at the end to a rambunctious kitten. In some respects it's the most hacker friendly device out there right now because of the bragging rights it creates.

</comment></comment></comment><comment><USER24> I didn't realize _everyone_ would buy iPads for their kids to the exclusion of everything else. It must be like the 80s when Speak and Spell destroyed that generation of tech whizzes.

</comment><comment><USER25> People who look at the iPad and declare the death of hacking remind me of the people who in the middle of the internet boom saw the AOL-TW merger as the death of independent content.

</comment><comment><USER26> Are "apps" so bad? In a perfect world, everything would work great on all standards-compliant browsers. But here I am, using Google Docs on Opera and it's destroying my homework.

</comment><comment><USER27> As far as operating systems go, MS-DOS did more to encourage my technical knowledge than Windows ever did, and I stopped using DOS around the time Windows 98 came out.

But people who are drawn to tinkering probably wind up with better uses for their mental energy when they have easy-to-use operating systems. Pretty much everyone who has an iPad also has access to a machine they can do development on.

<comment><USER28> "Pretty much everyone who has an iPad also has access to a machine they can do development on."

For now.

To be honest - it feels ridiculous that the iPhone seems to need a computer so much. And I would imagine the iPad (or perhaps the iPadHD/iPadCamera/iPadNextGeneration) will feel slightly the same way.

</comment></comment><comment><USER29> This blog post (thankfully the economist hasn't published it as an article) is just another excuse to mention the word "iPad".

</comment><comment><USER30> Apple IIgs opened the programming world to me back then. I have to give a big thanks to Apple

</comment><comment><USER31> "Apple is watering down computing" has been the principle argument governing the PC v. Mac holy war since the Macintosh made its debut. Nothing has changed.

<comment><USER32> which is odd considering every mac ships with Apache, Python, Ruby and who knows what else _installed_ , ready to go. Windows ships with... (honestly, I have no idea)

</comment></comment><comment><USER33> Yes.

<comment><USER34> How exactly? care to elaborate?

<comment><USER33> No.</comment></comment></comment>


13 Questions with Mark Cuban - <AUTHOR> http://techcrunch.com/2015/01/30/13-questions-with-mark-cuban/

<comment><USER2> I liked #12 "Didn't respond". It should be "12 Questions with Mark Cuban"

</comment><comment><USER3> 13 softball questions with Mark Cuban. What a load of crap.</comment>


Using node.js, backbone.js, socket.io, and redis to make a real time chat app - <AUTHOR> http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/

<comment><USER2> _> Yes, you read correctly. JavaScript on the server. Weird huh? That's what I thought._

Really? It wasn't so odd back in 1996 when the Netscape web server supported it. To be sure, V8 and node have wildly better performance characteristics..but the _idea_ of js on the server isn't exactly new: <http://en.wikipedia.org/wiki/Server-side_JavaScript>.

</comment><comment><USER3> For those interested, I made a simple multiplayer Facebook card game[1] for a client using the same technologies, plus Redis and CouchDB.

The source is unobfuscated, so you can check it out if you want.

[1] <http://apps.facebook.com/alloutcricket/>

<comment><USER4> Just curious, how well did your card game scale? How many concurrent users could it handle? And could you easily balance the load by firing up more servers if you needed to?

The reason I ask is that everything sounds all good on paper, but how scalable is this "stack" in the real world. Would it be more scalable than relying on an xmpp network (which can be scaled wide if need be)?

</comment></comment><comment><USER5> > _If you haven't been reading about backbone.js, you might want to start > (heh, see what I did there?)._

Er, no, actually. Quick, someone sharper than I help me out!

<comment><USER6> The more you think about it the harder it becomes.

</comment></comment><comment><USER7> I think this is fast becoming a stack of sorts - I just used it on an app and it scaled to 400 concurrent users beautifully.

<comment><USER8> What kind of hardware?

<comment><USER7> One Core i7 box with 8GB ram and a second database slave (for replication) with only 1GB of ram. I was running node.js, mongodb and redis all on the same box. I believe it could have handled a lot more, because it wasn't really breaking a sweat on CPU or memory usage, and my dataset was small enough to fit into memory.

Perhaps "scaled" was the wrong word, as I wasn't using multiple nodes horizontally, but you'd only have to add more database servers to scale as the load contribution of node.js was absolutely tiny.

If you were doing huge numbers you could probably also put a load balancer in front of a couple node.js application servers, each connecting to the same mongodb replica set (which you could easily scale by just throwing in more nodes). But if you're doing an app like this one, you couldn't use nginx as a load balancer because it won't proxy WebSockets.

</comment></comment></comment><comment><USER9> Chat app could easily kill a server just a few years ago, at least using the "default" technology available for the mass. Now there are many solutions to write a scalable chat application. This is definitely a good point :)

</comment><comment><USER10> I like the idea of transport transparency on the client, yet very much unlike the idea of writing JavaScript on the server.

I've never tried node.js but I'm very curious to know what it offers that, say, Twisted or .NET or any other framework with proper IO facilities doesn't.

</comment><comment><USER11> I know its on Github, but a hosted demo would've been nice. I finally understood what backbone.js is. Seen posts all over HN not knowing what it is. Guess i had to understand what MVC is first(!) . Can you tell im new to programming? ;-)

<comment><USER12> I was afraid of the internet, but here you go. <http://fzysqr.no.de:8000/> Don't use your real passwords.

<comment><USER13> Watch out for xss! use `.text()` :)

<comment><USER12> Yep. Required a few hotfixes.

</comment></comment></comment></comment><comment><USER14> ah, another chat program on node.js

<comment><USER15> It's node.js' equivalent to a Haskell monad tutorial.

<comment><USER14> Good point. Never thought of it that way. Even so there are a lot that seem to make it to the front page.

</comment></comment></comment><comment><USER16> Quick survey: if you could have the equivalent of this stack, with persistence, as a service, would that be interesting to you?

It would be RESTful relational database-as-a-service but where any individual item could show updates in real time. (E.g. real-time chat would just be a Javascript component.)

<comment><USER16> Yes

</comment></comment><comment><USER17> I've been looking for something like this! Can't wait to get started and fire up my chat server. Thanks!

</comment><comment><USER18> I made a real-time chat app at a hackathon using this stack - minus backbone:

<http://www.hubabl.com></comment>


Any HNers in Los Angeles interested in a meetup? - <AUTHOR> http://groups.google.com/group/los-angeles-hners-hacker-news

<comment><AUTHOR> There's already been interest expressed by about 5 other HNers, if you'd like to meet some of your fellow LA dwelling HN readers, join the discussion with the group!

</comment><comment><USER2> just joined!

<comment><AUTHOR> Cool, welcome!</comment></comment>


The Seductive Appeal of the "Nazi Exception" - <AUTHOR> https://www.popehat.com/2017/04/18/the-seductive-appeal-of-the-nazi-exception/ <comment><USER3> Reminds me of this excerpt from _A man for all seasons_ [1]:

Roper: So now you'd give the Devil benefit of law!

More: Yes. What would you do? Cut a great road through the law to get after the Devil?

Roper: I'd cut down every law in England to do that!

More: Oh? And when the last law was down, and the Devil turned round on you — where would you hide, Roper, the laws all being flat? This country's planted thick with laws from coast to coast — man's laws, not God's — and if you cut them down — and you're just the man to do it — d'you really think you could stand upright in the winds that would blow then? Yes, I'd give the Devil benefit of law, for my own safety's sake.

[1]: [https://en.wikiquote.org/wiki/Robert_Bolt](https://en.wikiquote.org/wiki/Robert_Bolt)

<comment><USER4> Ah, good ol' unbiased, unchanging, divined law. Good job it's never been changed to favor ordinary people as the result of protest or disregard, or to centralize power as the result of corruption. I think I'll be spending this year's EFF and ACLU dues on a new armchair.

<comment><USER5> I think you somewhat missed the point of the passage. It says nothing of unchanging divine law--it explicitly claims law is man-made, and it serves to protect men from forces more evil than they. Whether it's imperfect at any given time and amenable to improvement is not a point anyone would reasonably contend.

</comment></comment></comment><comment><USER6> Generally speaking, there are two avenues people have to change quote-unquote undesirable behavior: legally and socially.

Legally, we should vociferously oppose any restrictions on speech, including hateful speech. This is a pretty banal point; most people not to the far left or right can agree on it.

Socially, I think it's pretty clear that we need not tolerate a lot of speech that should be legal. Milo Yiannopolous is free to spew his garbage, but we have no obligation to hear him out, or let him speak at our schools or events. Freedom of speech does not mean we have an obligation to let people who mean harm speak unencumbered. We should protest and block them however we can.

<comment><USER7> That may work in theory, but it depends on people being rational actors when they aren't. This being politics, it's driven a lot more by emotions and what's fashionable than it is reason, which ought to be the primary domain of a university. And the boundaries of what is or isn't acceptable is being determined by people who as a group have significant biases. That is detrimental to an open debate and exchange of ideas.

I would much rather have a system where even the most offensive people are encouraged to speak, and there can be a debate over their bad ideas. Right now, speakers who have already been invited are being shut down with violent protests which are met with little to no disciplinary action from the school.

<comment><USER6> > I would much rather have a system where even the most offensive people are > encouraged to speak, and there can be a debate over their bad ideas.

Why on earth should we bother to entertain clearly bad ideas? If you're espousing white nationalism or transphobia or something, I don't want you speaking anywhere near anyone you might convince. End of story.

"But who says what ideas are clearly bad?" We all do! Neil Gaiman has a great essay called "Why Defend Freedom of Icky Speech?"[1] in which he says:

> The Law is a blunt instrument. It's not a scalpel. It's a club. If there is > something you consider indefensible, and there is something you consider > defensible, and the same laws can take them both out, you are going to find > yourself defending the indefensible.

The difference here is that my opinion _is_ a scalpel. Everyone's is! There's no obligation for me to treat Milo Yiannopolous and Geraldo Rivera the same, even though they both have political opinions that fall far to the right of mine. One of them is indefensible, and it's not at all hypocritical or unrealistic for me (and millions of other people) to try to take only that one out.

[1] [http://journal.neilgaiman.com/2008/12/why-defend-freedom- of-...](http://journal.neilgaiman.com/2008/12/why-defend-freedom-of-icky- speech.html?m=1)

<comment><USER8> >Why on earth should we bother to entertain clearly bad ideas?

The problem is not entertaining the bad ideas, but failing to continue to defend the good ones, once the bad ideas have been forced out of the realm of public debate. You entertain bad ideas for the same reason the body entertains disease and inoculation - to build up and maintain immunity.

>If you're espousing white nationalism or transphobia or something, I don't want you speaking anywhere near anyone you might convince. End of story.

And guess what? While you feel safe and secure that white nationalists and transphobes can't speak openly, they'll not only continue to speak covertly, and continue to convince people of their beliefs, but will do so where you cannot see them and despite your refusal to publicly rebuke them. And the fact that the "system" denies them the freedom to express their beliefs only convinces them that those beliefs are true, and gives them a common bond and identity, and turns them into a _culture._

We fought an entire _war_ against Nazis and white supremacists - <USER2> threw millions of bullets at them and burned their cities to the ground. It stopped the Nazi armies and the Nazi state, but the Nazi _ideas_ came back after a few generations, if one can even say they ever left.

Society can't assume that subsequent generations will hold the axioms of the past to be true - they must be reproved, over and over.

</comment></comment></comment></comment><comment><USER4> In these debates I always struggle with the idea that free speech exists in the first place. Taking the Wikipedia definition:

> _Freedom of speech is the right to articulate one 's opinions and ideas > without fear of government retaliation or censorship, or societal sanction._

We all know that this isn't true in almost any country with the resources for mass surveillance. People get put on watch lists and interrogated at airports for years because of their beliefs or circumstances.

What people often seem to mean is _speech free of social consequences_. For example, I should be able to say that your wife is ugly, and then be outraged (and tout myself as a victim) when your drink is in my face.

This is simply childish entitlement.

<comment><USER9> >when your drink is in my face

That's assault. One could quite easily say that demanding the ability to hit people with something because you don't like what they say is "childish entitlement." There's a reason why public protests are governed around "touching/hitting an opponent" as the line to not be crossed, and why pepper- spraying someone is for self-defense and not for disagreement.

"Social consequences" should mean disassociation or loss of reputation -- not physical attack. It's a dangerous precedent to allow the state to lose that monopoly on the use of physical violence; that way lies lynch mobs.

As to your point about surveillance states and ideological watchlists, I agree with you that those are often violations of the principle of free speech. I'd rather argue against those rather than use them as precedent to throw the whole thing away.

</comment></comment><comment><USER10> The fundamental failure of most SJW and some populist attitudes: committing varying levels of disproportionately evil behaviors in the name of self- righteousness, when a decent person aims to be relatively consistent _no matter what other people do_.

Chris Hedges was shoutted down for opposing the Iraq war, and Phil Donahue push out of mainstream media.

</comment><comment><USER11> While I don't disagree with the point of the article, it seems that shooting down a bunch of undergrad student newspaper columns is needlessly punching down. When I was an undergrad, reading the daily student paper was a way to enjoy a parade of knee-slapping unintentional comedy and breathtakingly embarrassing writing.

<comment><USER12> Agreed, but plenty of countries have these rules in law (you can maybe justify why Germany and Austria do, but not the rest of Western Europe). The US does too, but not explicitly, they are structured into in crimes of violating peoples' civil rights.

It's one of the great things about the USA that they at least have a determined effort to try to live up to embracing free speech. That's very difficult in practice

</comment></comment><comment><USER13> Yes, punching Nazis in the face (who are nationalist, woman hating white supremacists) should be illegal. Antifa knows this, and takes measures to evade the law.

Hate speech laws are a separate issue, and no, they are not the end of the world. There are many countries with hate speech laws, some reasonable, others extremest.

The author makes many assumptions and selective interpretations. Punching a nazi in the face is a crime of passion I deeply sympathize with. I don't think it should be legal, but confronted by nazi salute I'm not sure I wouldn't do the same.

<comment><USER7> They'd like to be punched, it benefits their arguments. It'd be better to belittle them. If you're lucky, maybe someone gets a picture of them taking a swing at you instead :)

</comment></comment><comment><USER14> Even the language is insane: is there a "Commie Exception" we are considering too?

Certainly communists objectively killed more people than nazis in the last 100 years.

<comment><USER7> Well of course these students and their professors aren't going to advocate for limiting their own speech ;)

In all seriousness though, there seems to be no attempt whatsoever at restricting "dangerous" speech coming from leftists by these people, so that alone ought to make it clear they aren't making a logical argument. It's emotions and regurgitation. Basically the same thing as the worst of the alt- right.

A good example of how absurd their criteria is too: At Norte Dame they're attempting to prevent the _Vice President_ from speaking at their commencement because they claim he makes them feel unsafe.

<comment><USER6> You say that as if the _Vice President_ weren't a driving force behind the very bigotry and discrimination that makes people feel unsafe.

This is a man who passed a law _forcing women in Indiana hold funerals for their miscarriages_.

Edit: didn't realize they didn't have to attend and pay for the funerals themselves (addressed below; comment left in its original state for context).

<comment><USER7> That is not what that law did, although there are a lot of memes like this that have been making Pence out to be a boogeyman that he is not.

[http://www.snopes.com/pence-law-forcing-fetus- funerals/](http://www.snopes.com/pence-law-forcing-fetus-funerals/)

<comment><USER6> "Mostly false" is misleading; the only way in which the law differs from my summary is that women are not required to hold the funerary rites themselves:

> The law, which was passed by the Republican-heavy state legislature, does > require that aborted or miscarried fetuses be buried or cremated. It also > requires that women involved in these cases be given the chance to decide > how this is carried out.

> However, it did not require the women involved to be present during — or to > pay for — the disposal of the material. Instead, that fell to the facility > in which the miscarriage or abortion took place:

It's also worth noting that the law was struck down by a judge before it could take effect, lest anyone think this law was a reasonable or even legal.

<comment><USER15> Yea, you were misleading.</comment></comment></comment></comment></comment></comment>


Show HN: Devslist – Browse hundreds of remote developer jobs in one place - <AUTHOR> https://devslist.co <comment><USER3> These remote job aggregator sites have been popping up everywhere lately but virtually none of them solve the problem I face routinely - <USER2> compensation. Companies often post stuff like "competitive pay" or "market rate" but that means nothing. Further, conversation regarding pay with these types of companies usually comes up after an initial screen, a tech screen and maybe a take-home assignment. All that just to find out the job pays $55k? Yeah, no thanks.

If you can create a job board that has pay listed upfront and prominently (nothing cagey like a massive range), then not only would I sign up for the service, I would pay for it. Somewhere in the neighborhood of $10-$20 a month.

<comment><USER4> I think you need to combine the data from these boards with levels.fyi or Glassdoor for salary data. Also if you are employed in FAANGMULA companies, you need to be aware that the compensation from your remote board jobs or unknown startups will mostly never reach your current take home .

<comment><USER3> I understand that. I'm not asking for these jobs and small startups to match FAANG level pay. I just want transparency. There's a big difference between $50k and $150k and both are still well below FAANG pay. Just be upfront is what I'm saying.

</comment></comment></comment><comment><USER5> Maybe it is the HN Traffic, but I just tried a couple of keyword searches and the site just hangs. It just shows the spinner for minutes on end. I turned off all ad-blockers in case that was the problem, but no dice.

In case it helps the devs, there is this error I see in devtools console: GET [https://devslistjules.uk.r.appspot.com/api/jobs?limit=10](https://devslistjules.uk.r.appspot.com/api/jobs?limit=10) net::ERR_SSL_PROTOCOL_ERROR

 __edited to include console error

<comment><USER6> Same. Think it just got snowballed

<comment><AUTHOR> Can't find anything. Think that might be the case.

</comment></comment></comment><comment><USER7> Applying for some jobs sends you to other remote job aggregators. Are the listings scraped from other remote listing sites?

<comment><AUTHOR> The listings are pulled from the other sites via rss feeds, or API's. We currently have 5 different sources that we are fetching jobs from. A cron job fetches the jobs every 4 hours.</comment></comment>


Heartbleed Update - <AUTHOR> https://blogs.akamai.com/2014/04/heartbleed-update.html

<comment><USER2> > Do you have any evidence of a data breach?

> No. And unfortunately, this isn't "No, we have evidence that there was no > breach of data;" rather, "we have no evidence at all." We doubt many people > do - and this leaves data holders in the uncomfortable position of not > knowing what, if any, data breaches might have happened

I like their honesty - many organizations simply stated "our evidence suggests there was no breach"

</comment><comment><USER3> Maybe Akamai and other large internet companies (Google, Facebook, Cloudflare etc) contribute now financially and/or with engineers towards openssl development or create an alternative.

This whole thing has been one giant clusterfuck, I myself seen one rather larger alexa top 1000 site being exploited by sessions being hijacked.

<comment><USER4> Akamai posted its special heap implementation</a> to openssl-dev yesterday: <[http://marc.info/?l=openssl- users&m=139723972124003&w=2>](http://marc.info/?l=openssl- users&m=139723972124003&w=2>). We'll follow that up with help to adapt it to openssl's needs---which are much, much broader than our set of problems. We run 100k machines, sure---but all x86-64, almost all Linux, and all running substantially the same software. We don't use DTLS. We don't use any PAKE systems. We are, in some sense, an easy problem.

The OpenSSL Foundation is trying to help people with those needs and needs varying on every imaginable dimension communicate with secrecy and strong authentication. We should expect them to need several times as many developers full time on that problem as any of the planetary-scale computing companies.

</comment></comment><comment><USER5> Maybe Akamai should create a challenge just like Cloudflare did...

<comment><USER6> What would that solve? We already know that it's _possible_ to compromise the private key using this bug. The problem is that no one knows whether attackers have actually done so, since very few organizations will log all the data going in and out of their servers.

<comment><USER7> Does it matter? Once you know they might have, you have to assume they did. That's why the Cloudflare challenge was watched so closely.

</comment></comment></comment><comment><USER7> It seems interesting that Akamai protected itself from heartbleed by implementing a custom allocator, which was in some respects at least part of what caused heartbleed.

<comment><USER4> In some sense, yes, the special free list caused it. In another sense, the missed bounds check caused it. In a third sense, the lack of proofs of safety, or informal code review process, "caused" it---that one's harder for me to argue.

My own preferred sense is that mixing network code with soft real time performance requirements with crypto in a single library, single process, all in C---maybe that caused it, and will cause problems for any channel-oriented crypto network system. Imagine trying to mix GnuPG with high performance networking! Boom.

My preferred tools for thinking about what causes accidents like this are Leveson's systems-oriented frameworks, explained in Engineering a Safer World. The text is available free from MIT Press, I believe. If you're responsible for the safety of a planetary computer system, you should read it and it's principal competitors.

And if you do, Akamai Infosec is hiring.

<comment><USER7> I'll keep that in mind, Brian, although my reading list is long, and not getting any shorter.</comment></comment></comment>


iPad writing app showdown: four apps enter, one app leaves - <AUTHOR> http://arstechnica.com/apple/2012/07/ipad-writing-app-showdown-four-apps-enter-one-app-leaves/

<comment><USER2> Thanks for that. Isn't syncing to both iCould and DropBox against Apple's TOS? That would explain why many are not supporting it.</comment>


Here's Apple's first design for a wearable device-from 1985 - <AUTHOR> http://qz.com/123847/heres-apples-first-design-for-a-wearable-device-from-1985/

<comment><USER2> The post on frog design's site has more details and imagery: [http://designmind.frogdesign.com/blog/snow-white-steve- jobs-...](http://designmind.frogdesign.com/blog/snow-white-steve-jobs-and- apples-awakening-as-a-global-design-leader.html)</comment>


Ask HN: open wifi? - <AUTHOR>

I am considering opening up my wifi as a minor public service to my neighbors. They say you should assume that things sent over the Internet are snooped, so theoretically making that possible for those with close proximity to me should not make my life much more dangerous, right? I would have to put rate limits, which I think my router supports. But just imagine what it would be like in the city if everyone opened their wifi! I'd like to be part of that dream, but the only question is whether I am putting myself at significantly higher risk of harm by doing so. <comment><USER2> Many people do this accidentally, and it's how many connect while away from home. If you want to do it, and don't mind the ramifications, it's not a terribly big deal. Note however that if they are connected to your network, you can have a higher risk of infection, so lock down your Windows boxes. And note that it won't just be your neighbors connecting (it could be their friends, etc.).

</comment><comment><USER3> Do not do it. It means that anyone can logon to wifi and engage in lots of illegal activity and it will be traced back to you - eg kiddie porn.

Just imagine that happened - regardless of whether you could prove your innoncence, just imagine the amount of hassle you would have to go through.

<comment><USER4> Or you could post a sign for neighbours saying "free wifi, post your MAC address, name and phone number and I'll add your to our free wifi list". Then simply ring them, check that they're the neighbour you think they are, tell them to connect, check their MAC and then enable that.

Remember to tell them that any illegal activity will be traced to their MAC/IP address.

For added complexity you could have per user passwords into the mix but to be honest if they're at the level they're going to spoof MAC addresses and things then they'll crack your WPA and do what they want anyway.

</comment></comment><comment><USER5> You might be interested in the FON open wifi community.</comment>


Linkedin oAuth API is down - <AUTHOR>

Erroring with "we were unable to find the authorization token" <comment><AUTHOR> Looks like some other people are seeing it too [http://developer.linkedin.com/forum/has-authentication- url-c...](http://developer.linkedin.com/forum/has-authentication-url- changed-0#comment-26641)

I'd have posted too, but their login is broken [http://developer.linkedin.com/user/login](http://developer.linkedin.com/user/login)</comment>


My Knowledge Wiki - <AUTHOR> https://wiki.nikitavoloboev.xyz <comment><USER2> There's a difference between Real Analysis and Functional Analysis, but you probably knew that. You might be interested in the ideas chart I produced to work through for a Maths Club:

[https://www.solipsys.co.uk/images/RealAnalysisThoughts.png?H...](https://www.solipsys.co.uk/images/RealAnalysisThoughts.png?HNri25)</comment>