How to hack your body: Can you get fit in six minutes a week - <AUTHOR> http://well.blogs.nytimes.com/2009/06/24/can-you-get-fit-in-six-minutes-a-week/

<comment><USER2> Rock climbers have known this for a while. Climbing long sustained routes builds endurance, but not strength. Short strenuous bouldering problems build both endurance and strength.

Personally I think climbing is the perfect hacker sport. Climbing nearly always favors forethought and elegance over brute force. Bouldering problems are so named because they ideally require several iterations to find the optimal path. Sometime a single moment of insight is all it takes for a problem to go from very hard to trivial (in the hacker sense of the word); yet there is always something new to learn, even from trivial problems.

</comment><comment><USER3> Well it worked for rats. And looks pretty good for youth. But there need to be caveats.

?How many in middle age will respond to "a few minutes of intense exercise to point of pain" with heart attack?

?What about mental health? Research findings in recent decades suggest something more sustained is needed for the endorphin boost that fights depression.

</comment><comment><USER4> Every day, I bike from downtown SF (work) to the top of Russian Hill (home) on a fixed gear bike (~1 mile, ~500ft elevation gain).

About once every month or two, I bike 50-150 miles in a day, and don't find it problematic.</comment>


Ask HN: Do you monitor your REST APIs? - <AUTHOR> I have a lot of APIs for different apps that I've built for customers.
And most of the time it is when the customer calls me I get to know that the API is down!
Maybe after some data changes, or some random code changes.
I'm now having nightmares about API services going down.
Do you continuously monitor your APIs and get notified when something goes down? (It's not just like monitoring a website using Pingdom, but the actual data responses, like for example check if a particular JSON field exists in the response) <comment><USER2> Yes, I for every API I build I setup a few specific heartbeat style endpoints. I have done this since I was a consultant and even now I do it within the company I am at now.

1\. Heartbeat, which checks the service is responding. Used for HTTP monitoring services to make sure the route is up mainly.

2\. Heartbeat which checks the service is up and validates all database connections are up and I can get data from the database (usually a trivial query on a small table). Used as the primary detection for internal failures.

3\. For any 3rd party services I depend on I setup a heartbeat endpoint for them that will check the service is up (but not necessarily giving me good data). Usually I group them, sometimes I group and separate them under like /heartbeat/services, /heartbeat/service1, /heartbeat/service2. Sometimes you can validate the service is returning good data but not all the time is it easy to do that, so I do what I can.

4\. I setup a 3rd party service to monitor the heartbeats and the return code to validate they are up and properly returning what I expect, notify me if not. I don't have to do sophisticated response processing at the 3rd party service because I can just use http return codes 99% of the time. The detailed response checking is done at the heartbeat level, then a response code generated. And of course, any failure to respond shows too.

This is still not perfect, but it has proven to make sure we know before anyone else when something fails. I still have one product that we haven't converted to this process right now but we are migrating to a new version that has these checks so it will help me sleep better the faster that happens.

One key thing is don't make the check interval too crazy, the general http is used a lot for the load balancers, but the others are spread out a lot more to reduce creating artificial load. When we build an independent service (microservice etc) I make sure they have these same checks, although it might not be http based. But since they have the same basic methodology a service watcher can remove any instance from the registry if a check fails after some configured number of failures & retries etc.

*edit a few words

<comment><AUTHOR> Sounds good. Do you use any platform to setup this monitor?

<comment><USER2> I have used lots of different ones over the years, right now I am using one I don't want to mention simply because we won't be staying on it ourselves (and I won't recommend something I won't use).

That said, there are lots of services that do it well, the key of course is the service itself has to be reputable and solid, not knocking anyones homespun version, but your monitoring is only as reliable as their service. This is why we are going to move ourselves again.

For one I have used in the past, "uptime" worked well for a couple of my clients, was reliable and stable.

</comment></comment></comment><comment><USER3> Low-tech / small-scale solution: Similar to what you're doing, UptimeRobot lets us monitor and alert on status codes for free, which works for a lot of simple APIs. I also write a few simple tests for my most important API routes (sort of like a heartbeat or a self-check / test) that return a 500 on failure (when health of the actual API might not be surfaced by a simpler test). 50 "tests" for free goes pretty far.

I also tried a product recently that I really liked, [https://checklyhq.com/](https://checklyhq.com/) \-- They'll give you more advanced ways of vetting your API responses from multiple locations (along with averaging request time and monitoring that).

<comment><USER4> Checkly founder here! We are a dedicated API monitoring solution mixed with synthetic monitoring using Puppeteer scripts. A bit like if RunScope, GhostInspector and Pingdom had a baby. And the baby was born in a Javascript, Cloud Native, DevOps world...

As the parent mentions, we give you way more advanced tools to customize, monitor and alert than many simpler products like Setup/Teardown scripts, Puppeteer, GitHub, Prometheus and other integrations.

</comment></comment><comment><USER5> Yes and I find it helpful to have both black box monitoring and white box monitoring with my previous experience.

For black box monitoring we just set up a prober that runs periodically and sends requests. It then checks responses to see if they are what is expected. Bonus if you place multiple such probers across the globe and that also exercises your load balancing and tests the geographic replication of your services.

For white box monitoring we instrumented the code itself to export information about events and metrics. For example, application-level things like the metadata of each request and response, response status, time to generate the response, internal errors encountered; system-level things like memory allocation and CPU time for the container; and dependencies like database query times, and the durations and statuses of external requests, etc. We used [http://riemann.io/](http://riemann.io/) to collect and process these streams and set up alerts. I find it really powerful to adopt this paradigm where streams of data are exported from your app and processed externally; though getting used to the stream processing mentality could be something extra to learn.

</comment><comment><USER6> My general approach is to create monitors (in something like Splunk or ELK) that watch logs and fire alerts (email, SMS, PagerDuty, etc) if their conditions are met.

I create monitors for health issues like watching for out of memory or pod failures. I create monitors that compute the error rate and trend for each endpoint and alert if it crosses a threshold. Similarly, I'll create monitors for dead letter queues or email send failures or anything else that might go wrong in an app.

This may sound like a lot of monitors, but I try to log things in common ways, so a handful of monitors can watch hundreds of endpoints or queues.

Finally, for complicated mission critical systems, I build in support for synthetic transactions that avoid undesired side effects. These may generate extra trace logs in the app. Such requests are submitted on a regular schedule and the input and output logged. Then I build more monitors on these logs.

</comment><comment><USER7> I use [https://n8n.io](https://n8n.io) (full disclosure, I am the creator) for it. It is free and fair-code licensed. I did not write it esp. for this use case but have to say works very great.

</comment><comment><USER8> Yep, I use Google Analytics

server-side you can track using the measurement protocol

few years ago I did a prototype test with PHP, example here [https://pastebin.com/PQCRcJXq](https://pastebin.com/PQCRcJXq)

with something like Slim PHP you can add a middleware and automatically track everything, but you can also customize on a needed basis

I use the same logic with different PL on different backends etc.

for a starter it is cheap to implement and put in place, and cover almost everything

</comment><comment><USER9> We have built into a common layer in all our APIs to record the HTTP status code it is returning to a redis counter . We have a monitor job that runs every 1 minute checking the error % ( 200 vs others) and raise an alert when the threshold is exceeded. This way we get to know api failure errors and potential security issues such as http 403 returned %.

We also monitor the % requests logged every minute and if that drops by say 50% we know something is down.

</comment><comment><USER10> What I've done in the past is build a library for functional testing of the API. You can use that library writing functional tests, and to create an API status test that runs periodically to provide monitoring.

This generally does require that your APIs have some idea of multi-tenancy, as you don't want your tests modifying some customer's data.

</comment><comment><AUTHOR> Or is it like, I'm missing an intermediate step that will solve this "monitoring" problem for me?

</comment><comment><USER11> Yep I use [http://uptimerobot.com](http://uptimerobot.com) for it. It's mostly just keyword alerts where it expects a certain keyword is in the reply. If there isn't, it's probably down and it alerts me. The alerts I get via Telegram.

</comment><comment><USER12> Shameless plug but I created an app exactly for this purpose: [https://www.apilope.com](https://www.apilope.com)

You can schedule test flows and validate responses as well.

Edit: my cert is expired, I'll fix this (now that I have a lot of time to spare:)

<comment><USER13> FYI I got an SSL Cert expired error when accessing the url you provided.

</comment></comment><comment><USER14> One of our APIs is powered by a cloud function that we monitor (and keep it warm to avoid cold start time) using [https://www.statuscake.com](https://www.statuscake.com)</comment>


Planting Perennials Next to Potholes: Silos, bikesheds, and how to prioritize - <AUTHOR> https://bravenewgeek.com/planting-perennials-next-to-potholes/ <comment><AUTHOR> I slightly modified the title in order to convey its original meaning _and_ fit within length constraints.</comment>


Would You Bet $100,000,000 on Your Pet Programming Language? (2007) - <AUTHOR> http://prog21.dadgum.com/13.html

<comment><USER2> That's the great thing about a mix of C++ and Python - you can scale up, scale down, port as you wish, program quickly, program detailed, etc. Such questions are not even relevant, because it's clear that the languages will not limit you.

</comment><comment><USER3> I know this is an old article but Jane street Capital makes that bet on O'Caml.

</comment><comment><USER4> Lua actually fits his criteria quite well, IMHO. It's fast, written in fully compliant ANSI C for portability, and very explicitly designed to be embedded in C / C++. It's also been in use in industry (such as at Petrobras, a big Brazilian oil company) for over a decade, as well as numerous games (<http://www.lua.org/history.html>). While the language isn't hard real-time, you can control (and just pause, or completely replace) the garbage collector.

As per the OCaml example, you could either change what C type Lua uses for its primary numeric type (it uses doubles by default) or use C userdata (a garbage-collector-managed pointer to a C struct), since the collection of numbers probably has some algorithmically relevant characteristics beyond just being a huge set of numbers.

</comment><comment><USER5> Actually, if I was concerned about scaling to a 20-core CPU[0], I probably wouldn't use anything mainstream. It depends on the exact problem, of course, but that sort of thing is generally easier in functional languages.

Many of the author's questions can be reduced to "does it have a good C FFI?", but I'm not sure what the overall point is, or if these are just generalized suggestions to think about before starting a project. I'd like to know what the author would use in this situation.

[0] AMD has announced a 12-core Opteron for next year, so this isn't far- fetched at all.

<comment><USER2> In my opinion, that would be a pretty poor decision. Most functional languages have not actually been tested on a 20 CPUs. You have no idea how optmized it will run there. You have no idea how it will scale.

You can't have strange hardware, and then decide to go with experimental software. Stateless programming can be done in any imperative language, and there are lots of languages that allow you to scale to 20 CPUs, but are very mainstream.

Parallel-Processing is not much easier in functional languages. But optimizing to place specific tasks on specific processors is much easier in low level languages. I'd say your design decision is wrong.

</comment></comment><comment><USER6> Doesn't the recent port of many languages to the JVM somewhat nullify his concerns?

I am curious, because I don't know much about programming language implementations yet, just enough to know what I don't know.

<comment><USER4> Not entirely. While I haven't done much with the JVM-based languages, I've spent a lot of time dabbling in obscure programming languages (it's a fun and often very educational way to procrastinate), and many language problems are fundamentally _social_ : spotty-to-nonexistent documentation, tutorials or references that are three versions out of date, important libraries on websites that look like ghost towns ("last updated jan 17, 2004"), etc. can kill a language, or at the very least encourage the idea that it's abandoned. A language without a community of people to answer questions, etc. is going to be very hard to use.</comment></comment>


How to boost your brain - <AUTHOR> http://www.newscientist.com/article/mg20827801.300-mental-muscle-six-ways-to-boost-your-brain.html

<comment><USER2> The article discusses half a dozen things that "improve" or "increase" brain function, without ever reporting on the amount of the improvement. Rather than with numbers, a finding of improvement is followed by a quote from the researcher making the finding, who shockingly thinks the results are important.

<comment><USER3> NewScientist and hard evidence are like cats and water. Every issue is filled with breathtaking discoveries that will revolutionize the way we do X.

<comment><USER4> I guess it's quantity not quality with NewScientist. They write a bunch of articles in the hopes that one of them will break.

<comment><USER5> It takes all kinds. Without things like this, there would be less interest in some of the new stuff, and more might fail to be investigated further. And "improvement" in a brain is a pretty difficult thing to measure; at the most objective, you can do an FMRI and check overall bloodflow, but that's not conclusive either.

I would _really_ like them to have more concrete information more often though, I wholly agree there. It'd go a long way towards capturing people who are more skeptical :)</comment></comment></comment></comment>


Setup Raspberry Pi GPIO pins using a configuration file, not boilerplate - <AUTHOR> https://github.com/projectweekend/Pi-Pin-Manager

<comment><USER2> Looks like a sane approach to configuring the GPIO pins.

It would be nice if one could give the pins names in the config file, and somehow use this to refer to them in the code to avoid 'pins.read(18)' and instead have 'pins.read(pins.get("name"))' [or whatever is the best way to write it in Python...]

This would avoid problems when changing the config but forgetting to change the source, and vice versa, and getting weird bugs because it is out of sync somewhere.</comment>


How to get consistent results when benchmarking on Linux? - <AUTHOR> https://easyperf.net/blog/2019/08/02/Perf-measurement-environment-on-Linux <comment><USER2> Benchmarking is hard -- I've spent far more time investigating it then I ever wanted to. Much of the advice in this article matches the advice I give when people are foolish enough to ask me (though CPU pinning can have very odd results for systems which expect to use all of a CPU's cores). However, there are two related points where I respectfully disagree with the author: disabling ASLR is probably not a good idea for most people; and using minimum values is almost never a good idea. Ultimately, the traditional idea that programs have a single performance number doesn't generally hold true on modern systems: one needs to accept that programs have a set of performance numbers. The Stabilizer paper [1] does a very good job of articulating this, IMHO, and does so particularly in the context of ASLR. As soon as you accept the idea that programs don't have a single performance point, it then becomes fairly clear that the best way to get a good idea of a program's performance is to run it as many times as possible and compute some basic statistics over that. ASLR is one aspect where simply running a program enough times gives you some idea of the overall performance of the program. Some modern benchmarking tools make calculating reasonable statistics fairly painless (e.g. things like Criterion for Rust). But, overall, this is still a painful area and there's a lot of work we could do to make life easier for people measuring software IMHO.

[1] [http://www.cs.umass.edu/~emery/pubs/stabilizer- asplos13.pdf](http://www.cs.umass.edu/~emery/pubs/stabilizer-asplos13.pdf)

<comment><USER3> > using minimum values is almost never a good idea

Care to explain why? I find the argument in [http://blog.kevmod.com/2016/06/benchmarking-minimum-vs- avera...](http://blog.kevmod.com/2016/06/benchmarking-minimum-vs-average/) for using the minimum to be pretty compelling.

Also, FWIW, Julia's automated performance tracking determines likely regressions based on the minimum. Their reasoning is explained in [http://math.mit.edu/~edelman/publications/robust_benchmarkin...](http://math.mit.edu/~edelman/publications/robust_benchmarking.pdf).

<comment><USER2> In my experience people think/hope that the minimum tells them the performance of their program when all noise is removed. However, this is based on the assumption that programs have a single performance point which, as the Stabilizer paper shows, is rarely the case on modern systems. Rather, what the minimum tells you is the behaviour of your program at one given point in the non-deterministic performance space. This might seem like a minor, perhaps even a pedantic, difference, but I have found it to be a profound observation.

Imagine, for example, your program has 100 possible ASLR states: in 99 of those states it takes 1s to run and in the 1 remaining state it takes 0.8s to run. Using the minimum, you will think your program takes 0.8s to run even though there's only a 1% of chance of observing that performance in practise. That's bad, IMHO, but the problem compounds when you compare different versions of the same program. Imagine that I optimise the program such that in those 99 slow states the program now takes 0.9s to run, but in the remaining state it still takes 0.8s. The minimum will tell me that my optimisation made no difference (and thus should probably be removed) even though in 99% of cases I've improved performance by 10%.

<comment><USER4> It says something like "without interference, some execution path has proven to be as fast as x". This probably isn't exactly what you wanted to know (e.g. expected time), but is likely to be much faster to compute for some thing that's probably usually strongly correlated.

The problem with the existence of 100 independent states is that you need a very large number of trials to get a performance measurement of each—and you're still left with the problem of statistic to reduce each to (min? mean? and how??). Attempting to take the mean with the CST should eventually work, but it might need a very long time. Instead, the minimum lets to pick whichever mode was fastest and compare the time of that mode. Sure, that might not be great for all cases, but if that's the worst problem with the benchmark suite, I'd say you're in pretty good shape. I've run into issues where the CPU appears to have memorized the random number sequence in the test data—how are you supposed to pick the better algorithm when the CPU won't let you run the 99% case under a benchmarking harness...

Yeah, minimum isn't perfect, but it's at least pretty clear what it says, as long as there isn't incentive to abuse it (I might say the same about p-value vs bayesian).

disclosure: worked with the author of the Julia paper cited above.

<comment><USER5> > Yeah, minimum isn't perfect, but it's at least pretty clear what it says

You've lost me. What is the single, obvious meaning of the minimum measurement, and what are you benchmarking against, and what do you intend to get out of the benchmark? Typically the minimum just means "program ran x input as fast as y", which doesn't actually help with most questions about performance.

If X is constant, and time is the only thing you care about, then maybe that works.

<comment><USER6> > which doesn't actually help with most questions about performance.

well, from a marketing standpoint it means that you are able to write

OBSERVED MAXIMUM SPEED : 789634 gigabrouzoufs per second on a core i5-xxxx

on your brochure, and you wouldn't be lying, and it would be better that a majority of products which don't even give an observed speed but just a theoretical one.

</comment></comment></comment></comment></comment></comment><comment><USER7> When Intel benchmarks the performance of certain instructions, they compile the code into a kernel module, and run them with interrupts turned off[0]. Even then there are additional considerations like OoO execution, pipelining, etc. This could be applicable in some narrow scenarios but for most it's overkill. So the question is, how much of this consistency is really needed?

[0]: See sample code in [https://www.intel.com/content/dam/www/public/us/en/documents...](https://www.intel.com/content/dam/www/public/us/en/documents/white- papers/ia-32-ia-64-benchmark-code-execution-paper.pdf)

<comment><USER8> I'm a bit afraid to mention this, but you can do iopl(3) and then use CLI and STI from user code. I try to keep this from breaking the kernel _too_ badly.

</comment></comment><comment><USER9> Good information but it rather depends on what the goal of the benchmarking is. Many (most?) of those changes aim for consistency at the expense of making the benchmark server vastly different from the configuration of a normal end- user server, raising the question of how to translate the benchmark results into usable information for the end-user.

<comment><USER10> Yep. And I think I stated that in the beginning of the article. :)

This one:

> It is important that you understand one thing before we start. If you use > all the advices in this article it is not how your application will run in > practice. If you want to compare two different versions of the same program > you should use suggestions described above. If you want to get absolute > numbers to understand how your app will behave in the field, you should not > make any artificial tuning to the system, as the client might have default > settings.

</comment></comment><comment><USER11> Temci is a tool which tries to provide such techniques and more in an easy way: [https://github.com/parttimenerd/temci](https://github.com/parttimenerd/temci)

<comment><USER12> (I'm the author of temci) After you installed temci, you can just open a shell via `temci short shell --sudo` and get a shell in an environment that implements the guidelines mentioned in the article.

</comment></comment><comment><USER13> A couple of minor typos and nits:

The for loop body should use > $i

Inconsistent use of redirection (which requires a root shell) and sudo <command> | tee, which doesn't.

I think the S in SMT is for _symmetric_

And a comment - I liked the mention of mean vs minimum, though I would have liked the median to be included as well, and more info on when and why each may be more appropriate. Minimum is good when you want to answer "how much time is required to do just what is required for what this code is trying to accomplish". The minimum is the closest approximation you can get; the "true time required" can never be more than the minimum. Mean is good for something you'll be doing a lot of, and want to predict how much total time it'll take. Median gives you a realistic measure of how long a task will take; if you tell someone that phase X will take 3 seconds, and 3 is the median, then you'll be too high half the time and too low the other half, which is better than reporting the minimum which will be too low nearly 100% of the time. But then again, your article is more about eliminating noise when measuring the effects of changes, so minimum is probably generally the most reasonable thing to be looking at. (Though if it's a large phase with many constituent sources of variance, you have to be careful because your minimum will keep shrinking the more repetitions you do!)

<comment> mh- >The minimum is the closest approximation you can get; the "true time required" can never be more than the minimum.

I think you meant to say "never be _less_ than the minimum." Agree about its utility here.

<comment><USER14> If the performance bounces around, how do you know you hit the _true_ minimum? Therefore the true time can be less than the observed minimum.

On the other hand, the true time required fits in the observed minimum, so it cannot be more.

</comment></comment></comment><comment><USER12> Benchmarking is hard and the best combination of configuration settings for one benchmark, measurement one property (e.g. run-time or branch-misses) might not be useful for another benchmark.

If we look for example on disabling turbo-boost (the first point on the list in the article), then there is some evidence that this might increase the variance of benchmarks that measure the amount of cache references. This might also be the case for dropping the file system caches.

The same can be seen for disabling address space randomization: It seems to increase the variability when measuring the wall-clock but decreasing the variability when measuring the number of branch misses.

Furthermore setting the process priority or the CPU governor might not have any effect at all. Setting the process priority might even increase the variability of your measurements due to e.g. priority inversion.

Setting the CPU affinity, preferably using CPU sets ([http://man7.org/linux/man- pages/man7/cpuset.7.html](http://man7.org/linux/man- pages/man7/cpuset.7.html)), seems to be helpful most of the time, but only really plays out if your benchmarking system is running other resource intensive processes.

On a busy system disabling turbo boost might increase the variability of your benchmarks too.

For the evidence: I ran the lean4 benchmarking suite with different environment configurations multiple times and looked at the standard deviation, a presentation covering the results can be found at [https://pp.ipd.kit.edu/~bechberger/2m.pdf](https://pp.ipd.kit.edu/~bechberger/2m.pdf).

Overall the best environment setup seems to really depend on the state of your benchmarking system, the benchmarks themselves and the properties you focus on.

P.S.: Three configurations that are not in the article but can be helpful are preheating your CPU with CPU bound task (thermal capacity of CPUs…), letting your system rest quietly between the program runs, syncing the file system and disabling the swap. P.P.S.: An automatic environment configuration selector is currently being developed for temci ([https://temci.readthedocs.io/en/latest/](https://temci.readthedocs.io/en/latest/), I'm its author), this will help tailoring the configuration to your setup and benchmarks.

<comment><USER10> Thanks for the great comment. Where I can read more about the impact of each item on variability?

</comment></comment><comment><USER15> > Drop file system cache

It's mentioned in the text, but... This should be "consider the impact of fs cache". Sometimes you want a cold run, sometimes you want to explicitly get a warm run. The only case you never want is mixing them up.

</comment><comment><USER16> 1, 3, 6 and 8 are generally good

for the rest, a lot depends on what your goal in doing the benchmarking is and what your target and testing machines are. if you're developing software to run in server environments under load then the rest don't make sense to me. 5 means you may be able to continue to use your machine for other light tasks and still get semi-reasonable numbers, so it's a maybe

one addition. if your tests are relatively short (and shorter is better in that it allows you to iterate quicker), they won't be run under thermal steady state. fixing the cpu freq, or setting a conservative max, will help

<comment><USER10> Thanks for the comment. As answered to the previous comment, yes, I agree. Likely I did a poor job of explicitly saying that those advises are not generally applicable. It usually makes sense to have a dedicated machine (pool of machines) that a properly configured to run perf tests. And nothing else is executed on them.

</comment></comment><comment><USER17> Hyper threading is Intel's marketing term, simultaneous multi-threading (SMT) is the general one (the article uses both in the same section).

</comment><comment><USER18> He forgot the most trivial of all: Check your load. If higher than x don't continue. That's what I do in my bench scripts.

x being something between 0.1 or 1, depending on your needed accuracy.

</comment><comment><USER19> How is Phoronix Test Suite these days? Back when it was announced, people looked at it and grilled it (IIRC at Slashdot). No idea how it is these days.

</comment><comment><USER20> All these proposals have their justification. Surprisingly only incomprehensible complications, is it easier to use

cpupower frequency-set -g performance

and use intel-speed-select tool [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/power/x86/intel- speed-select/isst-config.c)

<comment><USER21> Why did this get downvoted?

</comment></comment><comment><USER22> re: ASLR, there's probably no need to disable it globally, since you can do that on a per-process basis with `setarch -R`

</comment><comment><USER23> How does disabling ALSR help performance?

<comment><USER24> It doesn't help performance. It helps you get consistent results.

<comment><USER25> If it makes you get less consistent results, doesn't that imply that in some cases it hurts performance?

<comment><USER24> Sure.

</comment></comment></comment></comment><comment><USER26> in a recent set of math-related dot-so performance benchmarks on Linux, the following was included:

for more consistant testing results, test-app builds here assume the x86_64 environment and explicitly enable Intel AVX support

CXXFLAGS -march=sandybridge -mtune=sandybridge

see AVX [https://en.wikipedia.org/wiki/Advanced_Vector_Extensions](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions)</comment>


Show HN: Archetype, a Web Typography Design Tool - <AUTHOR> http://www.archetypeapp.com <comment><USER2> Hmm. This site doesn't seem to work well on my iPad.</comment>


A Formula That Will Make You and Everyone in Your Company  Write Better - <AUTHOR> http://inboundrocket.co/blog/a-formula-that-will-make-you-and-everyone-in-your-company-write-better/

<comment><USER2> I could use some of these tips since I failed my english language at school :-)</comment>


Ugly Common Lisp Data Type Questions - <AUTHOR> http://www.reddit.com/r/lisp/comments/citaa/ten_ugly_lisp_data_type_questions/

<comment><USER2> These questions are good, but there's something important to remember before drawing any real conclusions about common lisp: The spec is older than some few readers here at this site. Most useful programs deviate significantly from the spec in order to deliver features that modern systems consider essential but were not of tremendous import back when the spec was solidified.

So yeah, Common Lisp (the spec) has a lot of weird warts, compromises, and holes. That's why modern lisps like Clojure, Nu, Racket and the like are so exciting: they're taking a set of very good ideas and moving them into our modern 2010 network-driven-high-throughput-SIMD-demanding cloud-computing-era. The syntax and the semantics of syntax manipulation coupled with procedure- oriented programming are a powerful cocktail that was only briefly given the popularity it deserves in our software engineering culture.

<comment><USER3> Yes, good and fair questions. Indeed, Common Lisp isn't flawless or beautiful in every respect, and Steele would surely admit that himself. The Lisp concept is pretty beautiful, and CL, for better or worse, has been more ubituitous than most other dialects of Lisp.

When I hear people (including myself) wax eloquent about the beauty of Lisp, even Common Lisp in particular, I don't take that to mean that every detail of the design is beautiful, but rather, the whole of Lisp / Common Lisp is a beautiful programming system. I can look out my office window here and see a beautiful tree, though I know upon closer inspection I could find some flaws and imperfections in the tree. Perhaps a branch has broken off, or maybe an animal has gnawed away at some bark. That doesn't do away with its overarching beauty.

<comment><USER2> Right.

And there are features in common lisp that I really want to see escape into mainstream. Condition and signal handling, in particular, is an amazing thing that almost no language has a good answer to.

<comment><USER4> Yeah, I do hope they add conditions and restarts to C#5 (or any language that people will pay me to use).</comment></comment></comment></comment>


How Google and Others Are Plotting the Revenge of the Web App - <AUTHOR> http://www.fastcompany.com/3063420/elasticity/how-google-and-others-are-plotting-the-revenge-of-the-web-app <comment><USER2> Every app, for some unexplained reason, wants full access to my phone. This is a huge security/privacy problem for me. I think web apps can solve this problem.

<comment><USER3> Because even if they don't use those permissions today, it is easier to ask for them up front rather than reduce their update rate when rolling out stuff that does use it.

This is often combined with release notes like FB and Pinterest where they say something like "we're adding great stuff all the time but we won't tell you what it is until you've installed and can't roll back even if you hate it, so upgrade now to get the latest!"

The trend seems to be most prominent among ad supported apps, which doesn't surprise me. They need to future proof their data collection options. Can't say I blame them from a business standpoint as much as I dislike it as an end user.

</comment></comment><comment><USER4> > It seems, then, that the decade-old optimism around web apps and open > platforms still has a spark left. Why is that? "I honestly can't tell you," > Russell says. "I just feel very lucky."

Because...

1) Mobile apps require an install, mobile websites don't.

2) Content linked from my inbox lives on the web, not mobile apps.

3) Google search is a better way to find stuff than App store.

Solve these three problems and I'll start getting nervous. 'til then, I consider my job as a web developer pretty secure.

<comment><USER5> For anything that doesn't require actual hardware (like camera, touch-id, etc.) I completely agree:

1.b) Mobile apps require updates for any issues, which must pass slow app store guardians. 5) (user above did 4) browser navigates consistently between pages, while apps can all choose their own navigation scheme which could be unfamiliar. 6) Mobile websites can be browsed in incognito mode, while it's hard to install and use an app incognito. 7) Mobile apps can eat battery life when closed, unless you have tons of time to spend managing notification and background settings.

</comment></comment><comment><USER6> I build my web sites mobile first, then make sure they also work nicely on a laptop browser. However, I am a little skeptical about progressive web apps. I used to just install a very small number of apps on my Android phone for privacy reasons. Now, with Android 6 I can set fine grain permissions and I now have about 10 apps installed. For everything else, simple web sites are sufficient.

The article is right on, on the point tha SEO is a big win for web apps.</comment>


An in-app HTTP inspector for Android OkHttp clients - <AUTHOR> https://github.com/jgilfelt/chuck <comment><USER2> Woot!</comment>


Ask HN: When (do things that don't scale) == False - <AUTHOR> I get the idea PG says startups need to "do things that don't scale". When do you think this is a bad idea? Or is it? Is it possible to run oneself into a hole with this mindset?<p>Reference: http://paulgraham.com/ds.html <comment><USER2> I think there are cases you can work yourself into a tough spot.. but even there.. if you receive significant funding full rewrites are possible and often done. However, if the thing that doesn't scale is directly related to your business model you may be in trouble..

<comment><AUTHOR> This pertains to my business particularly, what if customer onboarding process takes a lot of effort for a Saas?</comment></comment>


Show HN: Low cost IoT Data plans - <AUTHOR> https://iotdataplans.att.com <comment><USER2> Hmm...

I was seriously ready to scoff at this when I saw a link to att.com in a show hn, but I'm not so sure this is scoff-worthy...

It's (basically) $25 per GB across a fleet + $1 per device per month. While that sounds bad for anyone comparing it to a individual device plan it's way better than anything I've personally seen for the 'IoT' plans before. The closest I've ever seen before was [https://hologram.io/pricing/](https://hologram.io/pricing/), but this seems to be better unless you use less than 2 KB a month (lol, no, you don't).

Now, does anyone know of a module I can use on this without paying out the ass for it? (Seriously, I want like 50 of em as long as I can get them for under ~$20.)

<comment><AUTHOR> Thanks for your feedback. You can see a list of certified modules here [https://www.business.att.com/enterprise/Service/internet- of-...](https://www.business.att.com/enterprise/Service/internet-of- things/networks/iot-tools/) or you can select "Not sure" if you are unsure about the module you may use this with. You can also use this with our starterkit (starterkit.att.com)

</comment></comment><comment><USER3> Serious limitation: "...use of AT&T certified device required."

</comment><comment><AUTHOR> connect up-to a 1000 devices on a single plan. Plans start at $25 for 1GB ( each device that is active and sends data will be charged $1 per month). Love to get some HN feedback.</comment>


(un)classroom: Learn PHP and build apps in your browser - <AUTHOR> http://www.unclassroom.com/

<comment><USER3> This looked like a cool idea.

However, it's clearly insecure so I can't recommend it to anyone.

You say a login is required to run code but I can simply enable the Submit button and everything works? That's just extremely poor design.

The same is true for all of your stuff behind your "paywall." Simply editing the HTML in an editor renders your site usable.

You need to have validation on the server and the client. Simply providing client-side validation is not enough, especially for something that should be considered a teacher or tutorial.

<comment><AUTHOR> We're actually moving to guest login and we will be removing the necessity to login but thanks for your feedback.

The login is required because otherwise we can't save and pre-load the code for you the next time you visit the same activity.

Edit: what I mean to say is the app itself is secure and so is our sandbox that runs the code and this is more of a UI issue that we'll fix immediately by removing the login prompt.

Edit: The paywall is going away as well :).

<comment><USER3> If your client-side code doesn't even require server-side validation, it does make it difficult to trust or believe your sandbox or app is secure.

As I said, it's a cool idea, but if you want developers to recommend this to people starting out, you need to make those developers confident that they're giving people something well-written and secure.

Edit: Well, cheers to your edits! As someone who is often helping people with learning PHP, I will definitely keep an eye on this project as something to recommend :)

<comment><AUTHOR> Point taken and thanks for your feedback. We've removed the pay wall for the PHP course for now until we fix the UI.

Thanks and you can also reach me at firstname.lastname@example.com.

</comment></comment></comment></comment><comment><USER4> neat idea and i like it, i am curious on what is your competitive advantage here - what would you say you do differently/better then let's say codeacademy ? And how much do you expect to charge people for this ?

</comment><comment><USER5> I went to this site and left immediately after seeing a combination of bootstrap and really poor design. Regardless of how nice the backend may be, a project like this needs a designer to be successful.

<comment><USER6> you were lucky to be able to go back. Me @ Chrome could not go back - <USER2> automatically was jumping "back" from HN to that website.

<comment><AUTHOR> Sorry about that. We've identified a bug with how we handle the history state. Thanks for pointing out.</comment></comment></comment>


Ask HN: Realtime video encoding: how to? - <AUTHOR>

I am thinking over an idea of adding realtime video streaming to an application. I.e. I want a desktop user working with an application to be able to start transmitting a video stream of what he's doing (whole desktop or window) to other interested users.
What kind of CPU power and bandwith will be needed for this? Or, what qind of quality is possible with todays CPU power?
What are the obstacles to doing this that you can see?
Are there any applications that do this already? <comment><USER2> The best approach would be to piggy-back on an existing protocol that works. VNC is the one that comes to mind first.</comment>


Censoring because you disagree? - <AUTHOR>

Some editors here are abusing [dead]. Perhaps the editors should be more accountable for censoring. This is the policy on eg. wikipedia.
Side note: I am happy to see now that at least ynews tells you if your comment/link has been censored.
Tip: Turn on "showdead" in your settings. <comment><USER2> They are trying to keep the site from becoming the next reddit.

</comment><comment><USER3> I turned on showdead. Everything recently killed appeared to be spam, duplicates, or incoherent crankery. Your allegations seem groundless.

<comment><USER4> How about this:

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

...seems like more of a joke, though.

One thing I've wondered about is why none of my comments have ever been "dead"ed. Maybe there is a policy to be lenient with people who have high karma.

</comment></comment><comment><USER5> ends always justifies the means

<comment><USER6> The means, not the intent, produce the ends.</comment></comment>


Show HN: Our logo as a WebGL shader - <AUTHOR> http://linkergames.com

<comment><AUTHOR> We wanted to make our logo animated and we wanted it to scale to different resolutions well so we gave WebGL a try. Check it out and tell us what you think. Feel free to inspect the source of the page. Big thanks to Mr. Doob and everybody else who made the GLSL sandbox ([http://glsl.heroku.com](http://glsl.heroku.com)).

P.S. If you see the alternative version of the logo with the white background then your browser does not like our WebGL stuff.

<comment><USER2> All I get is a black background Firefox/22.0 Linux

<comment><AUTHOR> Check if WebGL is working properly for you on [http://get.webgl.org/](http://get.webgl.org/) If you don't see a spinning cube there, try Chrome. If it does not work with Chrome too then there might be a problem with your video drivers.</comment></comment></comment>


Tesser – Clojure reducers, but for parallel execution on distributed systems - <AUTHOR> https://github.com/aphyr/tesser

<comment><USER2> Saw the presentation for this at ClojureX in London. I'm definitely interested to have a look

[https://skillsmatter.com/skillscasts/5738-keynote-by-kyle- ki...](https://skillsmatter.com/skillscasts/5738-keynote-by-kyle-kingsbury)

</comment><comment><USER3> This is designed to make statistic operations like finding correlations simpler.

From the author:

> Huuuge shout out to the amazing @natiwhite for her work on Tesser, > especially the statistical folds like variance, covariance, etc.

[https://twitter.com/aphyr/status/553737990309023744](https://twitter.com/aphyr/status/553737990309023744)

</comment><comment><USER4> Here's a crazy idea:

Cognitect creates a massively parallel CPU which fully demonstrates the power of parallel programming via Clojure.

ClojureMachines.com</comment>


Making sense of your credit card - <AUTHOR> http://www.mint.com/blog/trends/credit-card-code-01202011/

<comment><USER2> The original was posted a few days ago, <http://www.mint.com/blog/trends/credit-card-code-01202011/> this article really doesn't add anything.

</comment><comment><USER3> I feel I'm being moronic, and will come back to this in an hour or so once I've finished some work and do the maths again... but I've checked with four cards (two credit cards, two debit cards, all VISA) and none of them result in a number divisible by ten. Results were 107, 98, 107, 106.

Having read <http://en.wikipedia.org/wiki/Luhn_algorithm> I'm either doing it right, or I'm way more tired than I thought. Each card number is 16 digits long, so for (from the left) digits 1, 3, etc. I double them, then I add the sum of those doubles to digits 2, 4, etc.

i.e.

      1234 1234 1234 1234

Would be:

      ((1 * 2) + 2 + (3 * 2) + 4) * 4

I feel really dumb for writing that out given it's already written out in this article, and on Wikipedia, but either I _am_ being really dumb or my four cards are all invalid.

EDIT: Here is an old card number (card is long expired), and to be safe I've swapped various numbers around (but only swapped even position numbers with each other, and odd position numbers with each other, so it shouldn't effect the check sum). Could someone kindly tell me if I'm being an idiot?

      5658 4612 3826 9730

<comment><USER4> I get 80 with this number. When you sum, remember to handle two-digit numbers specially, for example 5 * 2 = 10 as 1 and 0, not 10.

<comment><USER3> Bingo. Well that solves the "none of my cards are valid" conundrum. Now I just need to work out why my mind isn't functioning properly this morning.

Cheers!

</comment></comment></comment><comment><USER5> I was under the impression that credit companies relied on the insanely big number of possible combinations in order to protect them selves. You can surely create a billion "valid" credit card numbers but the probability of a portion of them being in-use is very low.

<comment><USER2> I'm pretty sure the name and expiration date if not the security code on the reverse side come into play as well.

</comment></comment><comment><USER6> That's a weird way of doing checksums. Summing digits preserves residues mod 9, yet the final check is mod 10. Weird.

(Now how do the 3 additional verification digits on the back work?)

<comment><USER7> They're generated independently of the card number and, in principle, known only to the card issuer and verifiable only by asking them. Merchants are supposed never to record them.

(They don't really need to be independently generated for each card; instead they can be computed from the card number, expiry date, etc., using a secret key known only to the issuer and some cryptographic magic.)

</comment></comment><comment><USER8> I wrote this for a site I worked on. It uses prototype.js.

<https://gist.github.com/271597>

</comment><comment><USER9> >9 is national assignment

...as in state applications, like national ID cards?

<comment><USER10> Assignment by national assignment agencies (ABA in the USA), for domestic-only payment cards.</comment></comment>


Do no harm (tough choices for Covid-19 doctors) - <AUTHOR> https://thebaffler.com/the-medical-front/do-no-harm-zakaria <comment><USER2> This is not a new problem for the people who swears the Hippocratic oath (Primum non nocere [first, do no harm]). Been discussed in ethics circles since forever if doing nothing to prevent people from harming themselves fits within the hippocratic oath as well. Also regarding if doctors can participate in voluntary euthanasia as you'll end up killing the patient, on purpose.</comment>


Ask HN: Do you write your own content? - <AUTHOR>

Most of us are very tech savvy but if you're like me an average writer. Do you write your own blog posts, website pages, email newsletters etc? Or do you freelance it out? <comment><USER2> Writing is a skill. If you don't work on it, you will always be an average writer. The question then, is do you treat writing as a means to an end or a skill to be mastered?

I've been writing my own blog for 7 years. It still takes me at least half a day to write each of my posts (about 500 words). I post infrequently because of that. After all these years of writing on my blog, I only have a couple hundred subscribers. If I outsource it to post more regularly, would I be more efficient and effective? Probably.

The thing is, my writing is noticeably better over the years. I started out just brain dumping ideas and try to slip in screenshots whenever I can so my posts didn't look too pathetic (e.g. this one in 2008 [http://www.quantisan.com/trade-of-the-day-bailed-out-of-a- wr...](http://www.quantisan.com/trade-of-the-day-bailed-out-of-a-wrong- position/). Nowadays, I do the opposite. Getting your idea across simply and effortlessly for the reader is most important (e.g. this one from March, [http://www.quantisan.com/more-problem-solving-less- solution-...](http://www.quantisan.com/more-problem-solving-less-solution- glorifying/)). In recent years, my posts are getting more likes, more shares, and have been on HN a couple times.

Writing is like programming. Anyone can do it but to be good at it, you need to keep doing it and put in the effort to improve. Or, you can spend $300 for somebody else to do it for you.

<comment><USER3> How do you deal with continuity and being able to write articles weekly?. This is my biggest problem, if you are not dedicated and have other side projects, it will be very very difficult to sustain. Users want fresh content and will quickly disappear if you are not dedicated.

</comment></comment><comment><USER3> I do both on my blog ( [http://upgadgets.com](http://upgadgets.com) ), write my own and outsource some. The issue here, is just continuity and keep doing it. Make sure if you are outsourcing your articles to do the following:

1- Posts should have relevant pictures/video attached (Go to google > images > usage rights > and choose rights accordingly)

2- Make sure you read the articles afterwards to check any errors

3- Have a list of articles you want to write about each week and send them to your freelancer

4- Even better, if your freelancer can come up with ideas for your Blog posts

5- Compensate your freelancer accordingly (ie bonus if articles are really good)

6- Hire more than one freelancer if you want continuity. If one of your freelancer goes on holidays or is not interested anymore, you should have a backup ready.

</comment><comment><USER4> Yes. I've been a student of programming and design for over 10 years, but I've found I really love to write. The great part about writing technical content is the research involved. Sure you can just slap up a few paragraphs and publish it, but a truly successful post in my eyes has solid references.

</comment><comment> mck- I think the good side-effects of blogging or writing in general makes it worth your time and effort. It will make you a better coder for one, since it's both about elegance and readability, and expressing your thoughts structurally.

So my answer is yes :)

</comment><comment><USER5> Certainly my own blog posts. Copy for homepages, I tend to outsource editing. I'm probably going to have to outsource non-technical support articles too.

</comment><comment><USER6> I let the expert do that for me. I freelance it out.

<comment><AUTHOR> Hi Gary, curious as to what freelance service you use?</comment></comment>


Ask HN: Looking for contributors? - <AUTHOR>

Although a similar post was made a month ago <i>(see: https://news.ycombinator.com/item?id=7360491)</i>, I thought I'd post this again in case people may have missed it and are looking for contributors. <comment><USER2> I posted this on the last thread, but I am definitely still looking for volunteers.

I'm actually currently starting to look for a co-contributor or two, there is so much that I want to get done, and having an extra set of eyes and hands would be great.

I am working on a framework/concept called ghostream ([https://ghostream.com](https://ghostream.com) / [https://github.com/ghostream/ghostream](https://github.com/ghostream/ghostream))

ghostream is a stream processing framework, built in C++ - it is a data stream processing framework. Having used numerous commercial ones (most notably IBM's Streams), and building various other part-frameworks (i.e. for time and budget reasons focussed on one particular thing) I has an itch to build an open source one (while storm and samza are definitely related, I feel they fall into a slightly different category - I'm all about the streams :) )

It is still in very active development - but the base is solidified now and the new test framework is starting to shape up nicely. There are a whole list of issues on github + a roadmap waiting to be exploited.

I have already started dog-fooding it in my other personal projects - the most visual of which can be seen here: [http://jamielewis.me.uk/posts/2013-11-03-Mapping- Earthquakes...](http://jamielewis.me.uk/posts/2013-11-03-Mapping- Earthquakes..).

If this strikes your interest give me a shout: email@example.com.

</comment><comment><USER3> Noobs(and mentors) wanted!

I'm looking for people who have been through Codecademy, Codeschool or any other "teach yourself to code" platform and have learnt at least some frontend and some backend technologies.

I want to help you guys build real projects that you can show off on your resumes, etc.

If anyone is interested, just reply here and I will create some type of form to capture info.

Mentors welcome too!!!

<comment><USER4> I am very much interested and looking for a mentor. I have gone through a few online courses on Udacity, Codeacademy and Coursera and can work at an amateur level with the following:

\- Python

\- HTML5 and some javascript

\- Google App Engine

\- Git

\- Heroku

\- Some AWS

Here are a few things that I was able to ship :)

\- ishareflix.appspot.com

\- www.punjabirangmanch.com

\- gyaansharing.appspot.com

</comment></comment><comment><USER5> I'm working a JS 3D graph visualization library. Think Sigma.js, but 3D. You can see a fairly lame demo here:

[http://froosky.rwell.org/graphosaurus/examples/eve/](http://froosky.rwell.org/graphosaurus/examples/eve/)

and the source:

[https://github.com/frewsxcv/graphosaurus/](https://github.com/frewsxcv/graphosaurus/)

Check the source on the examples page if you want to see the API thus far. While progress is being made, having other contributors (especially ones with WebGL, Three.js, or graphics backgrounds) definitely helps. Please please please let me know if you have any comments about anything related to the project. If you have any ideas for demo/example graphs, please share them! I'm getting tired of staring at the EVE Online universe :P

</comment><comment><USER6> I'm always looking for Dart programmers to contribute to the Dart port of chess.js, chess.dart. [https://github.com/davecom/chess.dart](https://github.com/davecom/chess.dart)

</comment><comment><USER7> I have been working on [http://educatornews.net](http://educatornews.net). It's just getting off the ground, so if you like what HN offers and would like to see something similar for the education profession, feel free to get in touch.

EN is written in django, and the project is on github: [https://github.com/ehmatthes/educator_news](https://github.com/ehmatthes/educator_news)

</comment><comment><USER8> I'm writing a chat app in nodejs: [https://github.com/sdelements/lets- chat](https://github.com/sdelements/lets-chat)

It's coming along, but I'd love to have some ideas and code thrown at me.</comment>


Ask HN: Lisp and the Personal Computer Revolution - <AUTHOR> What impact did Lisp have on the Personal Computer Revolution?<p>I'm particularly wondering what, if any, the interplay with Apple Computer was. <comment><USER2> You might find the computer hobbyist magazine BYTE special issue on Lisp from August 1979 vol 4 no 8 to be interesting. It is linked here, with lots of discussion:

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

I don't recall much influence from Lisp on personal computing in its early days (late 70s early 80s). There were Lisp interpreters available for some of the popular computers but they couldn't do much besides pedagogical exercises like in The Little Schemer (which I think hadn't appeared yet) - I recall one system only supported about 1600 CONS cells.

I recall Pascal was much more influential with Apple users. There was a whole operating system UCSD Pascal which was somewhat popular in the late 1970s that ran on Apple II.

<comment><AUTHOR> Thank you!!!

</comment></comment><comment><USER3> The only impact I'm aware of Lisp having was on Zork - which was all the rage in the early 80s. Assembly, Basic and Pascal were the predominant languages of that era.

</comment><comment><USER4> I made years ago a presentation about Lisp on the Mac:

[http://www.music.mcgill.ca/~ferguson/Lisp%20Docs/lisp-and- ma...](http://www.music.mcgill.ca/~ferguson/Lisp%20Docs/lisp-and-macosx.pdf)

Generally the influence of Lisp on Apple was starting in the mid 80s. There were Lisps available for the Apple II, but they did not have much impact.

But a few highlights from the mid 80s on:

Coral developed a Lisp for the Macintosh. See for example:

[http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...](http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/Entries/2013/2/17_Macintosh_Common_Lisp.html)

and

[https://ccl.clozure.com/history.html](https://ccl.clozure.com/history.html)

Coral Lisp was developed into a Common Lisp and marketed under the name 'Macintosh Allegro Common Lisp' (MACL).

At some point MACL was bought by Apple. Why did Apple buy it? Well MCL was becoming popular at Apple and specifically at their research lab called the 'Advanced Technology Group' (ATG). A lot of ATG projects were Lisp-based. Lisp was used to develop a multimedia development tool called Sk8 (which was used in probably hundred projects with universities) - Sk8 had a scripting language called Sk8script, which was the model for AppleScript. So Apple used MCL for a bunch of research and production applications.

But the biggest reason for buying MCL and its development team was that Apple at that time was working a portable computers: tablet computers and small PDAs. Apple was developing a new Lisp dialect for that (Ralph, later renamed to Dylan) and had written an OS for and with it. The development environment was MCL and the later target were ARM-based tablets and PDAs running Dylan. For some reason (like not enough RAM on the production models) it was decided to write a new OS in C++ and Newtonscript - and another small group worked on a Lisp/Dylan based OS.

Apple later published a Technology Preview of their Dylan system for the Mac.

The first NewtonScript IDE was also written in Lisp. The production version was then written in C++. This was sometimes a strategy: write a prototype application in Lisp (with Mac UI) and then rewrite it in C++ for publication.

One of the main technologists at Apple was Larry Tesler (who came from Xerox) and he was a big user/promoter of Lisp technology at Apple - and he was responsible for the Newton project at some point. [https://en.wikipedia.org/wiki/Larry_Tesler](https://en.wikipedia.org/wiki/Larry_Tesler)

One of the ideas for further research was the Knowledge Navigator: [https://www.youtube.com/watch?v=p1goCh3Qd7M](https://www.youtube.com/watch?v=p1goCh3Qd7M)

Larry has written about Lisp at Apple: [http://lispm.de/docs/prefix- dylan/book.annotated/foreword.ht...](http://lispm.de/docs/prefix- dylan/book.annotated/foreword.html)

See also why Lisp was thought as a good base for their application/systems development for PDAs and even the Mac:

[http://lispm.de/docs/prefix- dylan/book.annotated/preface.htm...](http://lispm.de/docs/prefix- dylan/book.annotated/preface.html)

Apple also collaborated with Lisp Machine companies like Symbolics and TI. They developed Lisp processor boards for the Mac II and made it possible to run a separate Lisp OS in a Mac II. Symbolics for example also made a promo video for Apple and they used a bunch of Macs with their Lisp boards + their graphics software for it.

One of the most important influences came a bit later. A french developer had written the first interactive user interface designer - called SOS Interface - he used LeLisp on a Mac for that. This UI designer was later ported to other Lisps on the Mac and even to Lisp Machines running in a Mac II. At one point Steve Jobs got a demo of this interface designer. He hired the developer (JM Hullot) and it was rewritten as the Interface Designer for NeXT and later Mac OS X. The Interface Designer was one of the most important development tools and maybe still is - it is still a part of XCode.

Lisp at Apple mostly died when Steve Jobs closed the ATG group. He also closed the Newton group. The most important reasons were focussing on the Mac and cost cutting.

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

<comment><AUTHOR> Wow, thank you for the extremely thorough answer!</comment></comment>


Random Walks and Electric Networks [pdf]   - <AUTHOR> http://arxiv.org/PS_cache/math/pdf/0001/0001057v1.pdf

<comment><USER2> This seemed to lock up my rather elderly browser, so I attempted to get the PDF via wget from the command line and look at it offline. That got me a 403.

Clicking on the "scribd" link (reluctantly) I get

      Access Denied

      Sadly, your client "Wget/1.10.2" violates the automated
      access guidelines posted at arxiv.org, and is consequently
      excluded.

Any suggestions?</comment>


Exchange-traded funds have overtaken hedge funds as an investment vehicle - <AUTHOR> http://www.economist.com/news/finance-and-economics/21660169-exchange-traded-funds-have-overtaken-hedge-funds-investment-vehicle-roaring?fsrc=nlw|hig|30-07-2015|NA <comment><USER2> Realy its taken this long a "hedge" fund was always a niche investment option where etf's are more core investments for a portfolio.

</comment><comment><USER3> And still, 99% of retail investors should have a core in Vanguard Retirement or Lifestrategy funds.

<comment><USER4> Because...

<comment><USER5> Vanguard Target Retirement 20XX tend to shift from high growth, high vol into low growth, low vol towards the end of their lifetime.

This reduces your risk of a big stock market downswing hurting you just before you retire.

<comment><USER6> I did a search of Vanguard Target Retirement funds on google and came upon this[1] criticism of target retirement funds, as the second result. In short, it argues that target retirement funds are more costly than do-it-yourself funds, and you can halve your fees with a DIY portfolio. Thoughts?

[1][http://www.forbes.com/sites/baldwin/2013/06/05/the- trouble-w...](http://www.forbes.com/sites/baldwin/2013/06/05/the-trouble-with- target-funds/)

<comment><USER7> I've spent over a decade in finance and barely feel justified in an investment strategy beyond "target fund". Everything in that article is true, but immaterial. The vast majority of retirement investment strategies are beaten by target funds. Unless you are _sure_ you are the exception you can do much worse than a low fee target fund.</comment></comment></comment></comment></comment>


Air-Gapped Computers Can Be Compromised Using EM Side-Channel Attacks - <AUTHOR> http://www.tripwire.com/state-of-security/latest-security-news/air-gapped-computers-can-be-compromised-using-em-side-channel-attacks-says-researchers/#.VMuNXlwYNjE.hackernews <comment><USER2> I found this summary of the paper disappointing. The paper that this is reporting on is at

[http://users.ece.gatech.edu/~az30/Downloads/Micro14.pdf](http://users.ece.gatech.edu/~az30/Downloads/Micro14.pdf)

and describes a framework for measuring _how bad_ side channel risks are (using custom software that tries to create a worst-case scenario by intentionally signaling to the outside world). They then turn out to be pretty bad, in the intentional case, but a big part of the researchers' contribution is that perhaps this is quantifiable, for each particular kind of side channel that one wants to examine.

This paper did not introduce any new kind of side channel, and extensively cites literature in which other people introduced (and often demonstrated) the side channel and emanations risks. These risks are often very bad, governments have studied them intensively since at least the 1960s, and it's a great thing that academic researchers are now helping make the public familiar with them. Hopefully that will lead to some techniques for mitigating them in practice other than living and working in a SCIF.

Indeed, for timing-channel attacks there are lots of important mitigations that software developers are now learning about (having to do with performing operations in constant-time). Maybe this research can point to ways of making some operations (approximately) constant-power, so power and RF-related information leakages will be attenuated.

<comment><USER3> Power side channels are extensively studied. See, for instance, most smart card research.

<comment><USER2> You're right. Maybe I should just say that this research provides a possible way to measure how effective mitigations have been, if we believe that their metric is meaningful.

</comment></comment></comment><comment><USER4> Most of these attacks can be mitigated through physical separation; the official standards specify allowable signal strengths at perimeter for spurious emanations. (Obviously attackers can use directional/high gain antennas, but there are RF limitations.) The stuff Cryptography Research does vs. Android phones to extract keys from tens of feet is pretty terrifying. [http://www.cryptography.com/technology/dpa/dpa- qa.html](http://www.cryptography.com/technology/dpa/dpa-qa.html)

One interesting extension beyond the classical 1960s TEMPEST/Van Eck stuff is: If you can run malware on the target computer, you can obviously increase the effective gain through a variety of techniques.

What I'd be super interested in would be active RF attacks -- similar to the NSA toolkit with the passive external-RF-powered transmitter for implants, but ideally without modifications. Either causing specific errors or something else. Forcing resets might be enough. It'd be sort of a crossover between EMP and TEMPEST. Knowing, for instance, that the target security system controller is the only device connected to an 18.2m long wire within a facility might make it profitable to do a targeted attack on a certain frequency.

<comment><USER2> Cf. [https://spqr.eecs.umich.edu/emi/](https://spqr.eecs.umich.edu/emi/)

It would be very important to know if a digital equivalent is possible.

</comment></comment><comment><USER5> This type of attack is often mitigated by making the entire room a faraday cage. I know that many SCIF[1] facilities where top secret information is kept have more or less faraday cages as part of the walls to conform with the TEMPEST standards.

[1] [http://en.wikipedia.org/wiki/Sensitive_Compartmented_Informa...](http://en.wikipedia.org/wiki/Sensitive_Compartmented_Information_Facility)

[2] [http://en.wikipedia.org/wiki/Tempest_%28codename%29](http://en.wikipedia.org/wiki/Tempest_%28codename%29)

<comment><USER6> Would it be practical to turn a computer case into a faraday cage, or are there issues with the keyboard and screen as well?

<comment><USER7> Yes, and there was once a Tempest-qualified DEC VT100 terminal. Fine wire mesh over the CRT face, an RF-tight metal case, and fiber optic I/O. It looked much like a regular VT100.

The US military tests their gear for this. Their test facility: ([http://www.epg.army.mil/e3tf.aspx](http://www.epg.army.mil/e3tf.aspx)) has RF anechoic chambers big enough for a tank. They're interested in both "can it be eavesdropped upon" and "can it be interfered with".

Modern electronics is much RF-quieter than older stuff. This is because so much of it has radios inside. If your device generates much RF hash, the WiFi, Bluetooth, and cellular radios will all have much-reduced range. In the early days of personal computing, some devices were very noisy. A Radio Shack TRS-80 and a Milton Bradly Big Trak toy would both crash if operated near each other. We're way beyond that now.

The FCC's requirements on RF noise from electronics helped a lot. There was much grumbling at the time from hobbyists about RFI compliance requirements interfering with their freedom to tinker. The FCC was right, though. Today, almost no consumer electronics interferes with other consumer electronics. You can use a cell phone inside a data center and receive clear calls. Cell phones themselves have several radios, all going at once.

This is a remarkable achievement in RF compatibility. For a sense of how bad it once was, see the Marine Radio Society, ([http://www.radiomarine.org/](http://www.radiomarine.org/)), which has restored an abandoned ship-to-shore radio station in Marin County, CA. All the receivers are in one building. The transmitters are in another building, several miles away, to keep them from interfering with the receivers.

<comment><USER8> > A Radio Shack TRS-80 and a Milton Bradly Big Trak toy would both crash if > operated near each other. We're way beyond that now.

You just reminded me of something, back in the 80's I had a ZX Spectrum (I'm in the UK) which the TRS-80 was similar to.

The HAM operator down the road eventually figured out it was me with the computer, when I was using it, the RF bled across _everything_.

</comment></comment></comment></comment><comment><USER9> A year or so ago there was a security researcher who claimed that he had machines which were being compromised through some sort of side-channel attack like this. It was reported on a couple times on Ars Technica I know, and there was debate in the security community whether he was on to something or whether he had simply snapped and was being paranoid. As I understood it he was a well-respected guy in the field. What ever happened to him? After reading a couple reports, and that he was going to be sending hard drives to some colleagues to get a second opinion, I never saw any followup. Anybody know?

<comment><USER10> I would guess that you are thinking of Dragos Ruiu and the "BadBIOS" malware.

</comment></comment><comment><USER7> You have to have a program running on the computer under attack for this to work, because it has to execute specific instruction patterns. It can only send blind; it can't receive. The main situation in which this would be useful is when attack software has been placed on a laptop, then used by then target.

RF attacks on serial connections (which includes not just serial ports but USB and Ethernet) are much easier. All the bits you want are right there. Historically, Teletypes generated RF which was easy to monitor, and the Friden Flexowriter could be monitored from half a mile away.

</comment><comment><USER11> This sure seems like a problem for servers that are hosted in a Colocation facility where all of the hardware belongs to datacenter customers. You could easily outfit your server with equipment to pick up signals from nearby servers. Makes me wonder if any spy agencies have used this technique.

<comment><USER12> That's why you put your servers in cages.

<comment><USER13> It depends on the size of the gaps in the wire mesh around the cage.

</comment></comment></comment><comment><USER14> This is also called Van Eck phreaking and is a long-understood concept: [http://en.wikipedia.org/wiki/Van_Eck_phreaking](http://en.wikipedia.org/wiki/Van_Eck_phreaking)

</comment><comment> mark-r This explains how malware might get information out of an air-gapped computer, but how do you infect the machine in the first place? That would seem to be the harder problem.

<comment><USER15> If it communicates electronically, you could extract encryption keys and hijack communications.

</comment></comment><comment><USER16> Self-synchronous logic does not have this kind of RF patterns. Or, at least, has it in a much more smoother way.

Self-synchronous logic does not have global clock and operations have different timings.

As an example, in a synchronous logic one has to use carry-ahead variant of adder to get _worst case time_ to O(logN). In a self-synchronous logic regular ripple-carry adder will suffice and produce result in O(logN) time in average case (yes, O(N) in worst case, which will met with probability p=1/2^N). Even more, adding small integers of K bits will result in O(logK) operations.

This means that each operation will have different completion time in self- synchronous logic. This is due to variance in inputs and/or temperature variance.

This, in turn, means that radio emission from operation completion in self- synchronous CPU will be much more smooth than for regular CPU.

</comment><comment><USER17> I prefer this one: "RSA Key Extraction via Low-Bandwidth Acoustic Cryptanalysis"

"The attack can extract full 4096-bit RSA decryption keys from laptop computers (of various models), within an hour, using the sound generated by the computer during the decryption of some chosen ciphertexts. We experimentally demonstrate that such attacks can be carried out, using either a plain mobile phone placed next to the computer, or a more sensitive microphone placed 4 meters away."

[http://www.tau.ac.il/~tromer/acoustic/](http://www.tau.ac.il/~tromer/acoustic/)

Video: [http://youtu.be/DU-HruI7Q30](http://youtu.be/DU-HruI7Q30)

I'm pretty sure there's a better video of the attack being performed somewhere, but I can't find it right now.

</comment><comment><USER18> Welcome to (at least) 2004?

[http://eckbox.sourceforge.net/](http://eckbox.sourceforge.net/)

EDIT: Should have just linked to the paper instead. It looks like their primary contribution was an ability to measure the susceptibility of a device to these kinds of attacks.

</comment><comment><USER19> Semi-related: [http://fileperms.org/high-frequency-malware- communication.ht...](http://fileperms.org/high-frequency-malware- communication.html)

</comment><comment><USER20> Can this be mitigated by shielding the CPU? And are aluminum macbooks already shielded from this?

<comment><USER21> There are all kinds of exposed wires on a computer system that extend beyond the case. Even shielded, you could still get RF/EM off of something. To protect a system from this kind of an attack vector requires deliberate design choices and testing. You're not going to get it "by accident"

</comment></comment><comment><USER22> Makes me want to put an Ettus Research SDR board and a steerable Yagi antenna in my datcenter 😄</comment>


Ask HN: Better 1st person (My Photos) or 2nd (Your Photos)? - <AUTHOR>

In apps or web apps, in usability, UI and/or UX terms. <comment><USER2> How about option 3: "Items" and "Photos"? Unless of course you have to differentiate between "Mine" and "Everyone Elses"

<comment><USER3> Agreed. Users will be reading "My" every time they see it, so unless it's vital, leave it out.

For example, Microsoft abandoned the "My" prefix in Vista for Documents, Pictures, etc. in the UI.

<comment><USER4> _Microsoft abandoned the "My" prefix in Vista for Documents, Pictures, etc. in the UI._

And then they brought it back in 7. I guess people complained.

I agree that omitting the "My" or "Your" where possible is the right way to go. If the overall context of the web page or application doesn't make it clear whose items are in question, adding "My" isn't always going to help much, or at all.

Consider Facebook, for example. Look at a friend's page. It probably has a "Photos" link. Would "My Photos" be clearer? Would "My Photos" refer to photos belonging to the logged-in user or photos belonging to the person depicted above the link?

It's the context in which the "Photos" link appears that makes its purpose and meaning clear, and that is usually the case.

<comment><USER5> Actually, it took me a while to figure out why "Photos" _didn't_ take my to My photos, but to a photo stream of all of my friends. (Also, Win7 did not add the "My" prefix back to computer, documents, pictures, or anything.)

<comment><USER4> _Actually, it took me a while to figure out why "Photos" didn't take my to My photos, but to a photo stream of all of my friends._

Me too, but I believe that's a context problem, not a phrasing problem.

 _Also, Win7 did not add the "My" prefix back to computer, documents, pictures, or anything._

Well then somebody has some explaining to do.

<http://i.imgur.com/k9ppY.png>

In fairness, there are aliases of some kind set up such that "John\Documents" and "John\My Documents" are synonyms. But the GUI very much puts "My" front and center for me.

</comment></comment></comment></comment></comment><comment><USER6> I'm really shocked about the differing opinions on this. I have always thought that the "my X" label triggers selfishness and suspicion in users, putting their guard up. I prefer "Your X" so that people feel like a team has been formed. They trust you with their data because they are entering information into your site. We're a team.

I guess it is understandable that you might not have yet gained the user's trust but I feel like then they wouldn't be your user.

<comment><USER7> Qualification: This is based upon my personal experience and opinion but not on extensive work experience producing publicly published copy.

For many people, it's going to feel/be more natural to write in the second person. Writing in the first person, when you are instructing someone else rather than describing yourself, takes more conscious effort. It's easy to forget and slip tenses. Also, and important, the resulting language/copy often ends up reading "stilted" -- it doesn't seem natural.

Unless you have a particular impression in mind, and the skill to pull it off well, I'd consider going with second person. It will probably be quicker to write, and if you really need to switch to first person, you'll have pre- existing copy from which to start.

P.S. I also tend to favor leaving such qualifiers off of labels, except when they clearly help distinguish an item.

</comment></comment><comment><USER8> Yahoo's YUI has a whole write up on this in their design patterns: [http://developer.yahoo.com/ypatterns/social/core/yourvmy.htm...](http://developer.yahoo.com/ypatterns/social/core/yourvmy.html)

They explain why they've determined that "your" is best.

</comment><comment><USER9> "My Computer" et al. sounded patronising and childlike when it started and continues to do so now.

How about just "Items" and "Photos"? Unless there is something marked "Someone else's items" and "Someone else's photos", is it necessary to specify that they belong to the user?

<comment><USER10> I actually create a "my" subdirectory in my home directory that I put all my stuff under (~/my/videos/ ~/my/dotfiles/ etc.)

This is a reaction to being fed up with OSs and programs putting things in the predefined directories without asking.

</comment></comment><comment><USER11> A good discussion arose on this question a while back - it might be worth checking out <http://news.ycombinator.com/item?id=1714184> and the original article that spawned the discussion -> [http://weblog.muledesign.com/2010/06/unsuck_it_special_byeby...](http://weblog.muledesign.com/2010/06/unsuck_it_special_byebye_my.php)

I tend to prefer using the 2nd person, if I have to choose one over the other.

[edit] - Sorry, should also add the link to the Yahoo patterns article, which also recommends the 2nd person [http://developer.yahoo.com/ypatterns/social/core/yourvmy.htm...](http://developer.yahoo.com/ypatterns/social/core/yourvmy.html).

</comment><comment><USER12> All you have to do is list out all the things you want to say, and the answer becomes clear:

"My photos" v. "Your photos": both seem to work

"We weren't able to complete your request" v. "Someone else wasn't able to complete my request."

"Please enter your valid email address" v. "Please enter my valid email address"

"To (...), you need to upgrade to a Pro Plan" v. "To (...), I need to upgrade to a Pro Plan."

The user is the second person, because sometimes your app or company needs to speak to them using the first person.

</comment><comment><USER13> I noticed that Google uses +You in English (as a plug for Google+ if you're not logged in) and +Ich (= +I) in German. Maybe they really just want a three letter word.

Researching further: French: +Vous (polite 2nd person) Italian: +Tu (casual 2nd person)

German seems to be the exception, Googl prefers 2nd person.

<comment><USER14> In Google Scholar, though, the link to your own Scholar page (if you've set one up and are logged in) is "My Citations" in English, so they seem to be using it inconsistently between products.

</comment></comment><comment><USER15> Also, if you want to buy an AK47 do you google for "buy ak47" or "sell ak47" ? Its the prisioners dillema!

</comment><comment><USER16> If it's inherently private data, use first person. For shared/public stuff, use second person. 'Your passwords' sounds too much like someone else is talking about my confidential data.

<comment><USER17> Quoting cing:

        How about option 3: "Items" and "Photos"? Unless of course you have to differentiate between "Mine" and "Everyone Elses"

Combine these two ideas, and I think you're starting to make sense.

</comment></comment><comment><USER18> If you're talking about labeling things that belong to the user, and your site or app is supposed to feel like the site or app itself belongs to the user (their space), go with what the user would label them. For photos, what would the user write on a shoebox of their own prints? Most likely "My Photos", but they also could just "Photos" if nobody else's things are stored anywhere nearby.

If the app or site does not belong to the user, but is clearly a third party the user gives things to in order to process them or perform some action on or with them, label it as a service person would speak to the user. How would the service person at Costco refer to those same prints? Probably "Your Photos" in contrast with "Everyone's Photos". In this case, the label "Photos" would be most likely to apply to all photos, not just the user's own.

Going with conversational style, keeping in mind who is the speaker for a given action, goes a long way to clarifying which stories need which terms.

This gets more complicated in "the cloud" but the same distinction (ownership vs operation, and who is the speaker for an action) can apply.

</comment><comment><USER19> Once you've chosen "My" or "Your" it becomes a boobytrap you have to avoid in all your labels, navigation and copy.

See: [http://stackoverflow.com/questions/1924102/my-account-or- you...](http://stackoverflow.com/questions/1924102/my-account-or-your-account- labels)

The second most popular answer is the one I'd strive for.

</comment><comment><USER20> The technically more descriptive "Private" and "Public," perhaps?

</comment><comment><USER21> This is a classic example of a question that can only really be answered with data. Generic studies are good, but nothing beats data you gather about your particular UI.

</comment><comment><USER22> I'd probably see the website as a third entity presenting stuff to me, so it's coming down to:

Your = "I'm presenting you your photos which i just store for your convenience".

My = "You've uploaded your private photos, now they are mine, dumbass!"

Definitely "Your", in my oppinion.

</comment><comment><USER23> Never use second person for UI, it's alienating because it subconsciously tells people that they aren't a part of the group and they don't belong. Studies show that conversion rates are much lower when you talk to people in second person for this reason.

<comment><USER24> Do you have a reference for this? I'd love to see the stats.

</comment></comment><comment><USER25> I've actually been having a similar internal debate with an app I'm working on now, although for me it's between "My Whatever" and just "Whatever." Currently leaning towards "My."

"Your Whatever" isn't even an option though... don't like it at all.

</comment><comment><USER26> All else being equal, use the shorter word.

<comment><USER27> I agree with gerad, use "My" -- it's shorter, cleaner, and appeals to the user more. "Your" creates distance between the app and the user, if one were all alone, "My" would still exist, but "Your" would not.

</comment></comment><comment><USER28> Shouldn't this be a poll?

And "your" is very accusation and confrontational. "My" rubs the ego the right way. So, my vote goes for "my".

Have you considered just "Items" and "Photos"? If you end up splitting public/private, "My Public...", "My Private..." is a mouthful.

This ultimately is an exercise in KISS imo.

</comment><comment><USER29> It really depends, but whatever you choose, make it consistant.

</comment><comment><USER30> for a landing page where you tell them about the product, your.

for actual app interface, my is better</comment>


Serverspec - RSpec tests for provisioned by Puppet/Chef - <AUTHOR> http://serverspec.org/index.html

<comment><AUTHOR> It is very useful for continuous integration with vagrant.</comment>


Life on the slippery Earth - <AUTHOR> https://aeon.co/essays/aztec-moral-philosophy-didnt-expect-anyone-to-be-a-saint <comment><USER2> An important thing to remember when reading ancient western sources is that their culture is significantly different from our own, which can color our view of the language they use.

Honor and shame are pre-eminent, for example, Isocrates:

> Pursue the enjoyments which are of good repute; for pleasure attended by > honor is the best thing in the world, but pleasure without honor is the > worst.

> Strive by all means to live in security, but if ever it falls to your lot to > face the dangers of battle, seek to preserve your life, but with honor and > not with disgrace; for death is the sentence which fate has passed on all > mankind, but to die nobly is the special honor which nature has reserved for > the good

In many modern cultures you rarely see much talk about honor. We tend to be much more concerned with personal satisfaction or internal moral standards.

Honor is dynamic and relational. It is the esteem granted by one's community; the respect of others.

The reverse is shame, not a personal moral failing to your own standards (which we would likely call guilt), but a failing in the eyes of your community. Shame is a strange word, in that to have shame is good (meaning you are aware of the standards of your community and careful to stay within them), but to be shamed is the worst thing that can happen to you.

I'm not saying these concepts don't exist in our culture today, they do, perhaps most prominently when we celebrate courage on the battlefield, but in the Ancient world (and in may cultures in the world today), these concepts were much more important. To give a sense of the kinds of things that result from this:

\- Defending the honor of your community is extremely important. Honor challenges happen all the time - and to simply refuse to engage, is itself a kind of response - one where you "lose face". On the flip side, winning the challenge can enhance your place in society.

\- Relationships were structured around honor/shame dynamics through the use of patronage. A patron would be someone of means, with access to wealth, property, opportunities for advancement, and the patron would in return receive loyalty and an increase in their reputation. Think "The Godfather". This give and take, debt and payment, was fundamental. Seneca:

> We are to speak of benefits, and to define a matter which is the chief bond > of human society; [...] Men must be taught to be willing to give, willing to > receive, willing to return; and to place before themselves the high aim, not > merely of equalling, but even of surpassing those to whom they are indebted, > both in good offices and in good feeling; because the man whose duty it is > to repay, can never do so unless he out-does his benefactor

\- Kinship was extremely important. In general you were devoted to the well- being and status of your family, and were skeptical of outsiders. Honor is inherited, and your status is enhanced if your Father is an important figure in society. However this also means your status is diminished if members of your family (or tribe) commit shameful acts.

All that to say, I think the premise of this article is incorrect. The classical tradition is very much concerned with the social ramifications of behavior in ways a 21st century American would likely find quite distasteful.</comment>


Chinese consortium to acquire Opera's browser and other businesses for $600M - <AUTHOR> http://www.reuters.com/article/us-opera-software-m-a-china-idUSKCN0ZY0CA <comment><USER2> This is probably my paranoia but I really don't like this at all.

This gives access to the browsing history of all Opera users that use the compression features which route traffic through Opera servers. See:

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

<comment><USER3> Yup, uninstalled this morning.

</comment></comment><comment><USER4> Anaonsmet from the company: [http://www.newsweb.no/newsweb/search.do?messageId=406030](http://www.newsweb.no/newsweb/search.do?messageId=406030)

tl;dr:

The following business units of Opera will be included in the Transaction:

      * Mobile Browser, including Operator Co-brand solutions
      * Desktop Browser
      * Performance and Privacy Apps
      * Opera's technology licensing business outside of Opera TV
      * Opera's 29.09% ownership in the Chinese joint venture nHorizon

The following businesses are not included in the Transaction:

      * Opera Mediaworks
      * Opera Apps & Games (including Bemobi)
      * Opera TV</comment>