skysight-inc/HackerNews huggingface dataset:
> What's amazing is that Indian classical music has no key. There is no absolute sense of middle C or whatever. It is relative to the tuning of the drone

Yes, but practically there are standard pitch zones based on the tunability of certain instruments, particularly percussion.

> Going up in the scale is different than going down and there are some key phrases that identify a raga. Then its all about interpretation.

Sometimes but not always. Most ragas are the same ascending and descending. They are more like the western modes system.

> Then its all about interpretation.

There is actually a huge body of fixed compositions, for both melodic and rhythmic instruments, especially in Carnatic and Dhrupad traditions. Of course improvisation still plays a more important role vs. western classical music, but it is driven by a set of standard canonical themes.

> Is there any specific tabla percussion associated with a Raga?

Not formally, but as one develops as an Indian classical percussionist, you develop an ear for what sorts of rhythmic passages pair with certain types of melodic structures. For example, the rapidly rolling rhythmic structure known as a Rela pairs with steady fast pulsating melodic patterns.

In terms of the actual type of percussion instrument there is a strong pairing, however. Tabla in particular is used in the Khyal style (the most prominent style of North Indian classical music and what you have likely been listening to), and is also used extensively in folk music. The Pakhawaj, a much lower pitch drum, is used with the Dhrupad style. Carnatic percussion, however, comprises a much larger variety of instruments, prime among them and closely related to the aforementioned Pakhawaj is the Mridangam.
yah, here's the code, I'm not going to excuse it being terrible, it's mostly copy-pasta from the ssh2 readme :)

// Main.js

var fs = require('fs');
var crypto = require('crypto');
var inspect = require('util').inspect;

var ssh2 = require('ssh2');
var utils = ssh2.utils;

var allowedUser = Buffer.from('foo');
var allowedPassword = Buffer.from('bar');
var allowedPubKey = utils.parseKey(fs.readFileSync('foo.pub'));

const EventEmitter = require('events');

let watchers=0;
class Framer extends EventEmitter {
constructor() {

super();

const borderline = '*----------------------------------------------------------------------*\r\n';
const fd = fs.openSync('./cam', 'r+');
const stream = fs.createReadStream(null, {fd});

let frame = '';
const len = 160*60+60;

stream.on('data', (d)=> {
if (d.toString().trim() === '[stdin end]') {
console.log('stdin end?');
} else {
const bytes = d.toString();
frame = frame+bytes;

if(frame.length > len) {
const out = frame.substr(0,len);
frame = frame.substr(len);

let lines = out.split('\n');
lines.pop();
lines = lines.map ( (l)=> '|'+l.substr(40, 70) +'|');
const fin = borderline + lines.join('\r\n') + '\r\n' + borderline + '\u001b['+(lines.length+2)+'A\u001b[32D';
this.emit('frame', fin);
}
}
});
}

}

const grabber = new Framer();

new ssh2.Server({
hostKeys: [fs.readFileSync('foo.key')]
}, function(client) {

client.on('authentication', function(ctx) {
var user = Buffer.from(ctx.username);
console.log(new Date().toISOString()+ ' username:',ctx.username,' watching:', watchers);
ctx.accept();
}).on('ready', function() {

client.on('session', function(accept, reject) {
var session = accept();

session.on('pty', (accept)=>{
accept();
});

session.on('shell', (accept)=>{
const stream = accept();
const listener = (frame)=>{stream.write(frame);};
grabber.on('frame', listener);
watchers++;

stream.on('data', (d)=>{
console.log('data:',d);
if(d[0] === 0x03 || d[0] === 0x1b || d[0] == 0x71) {
console.log('client left peacefully');
stream.write('\r\n Thanks for watching, have a nice day, there were '+watchers+' watching when you logged off. \r\n');
grabber.removeListener('data', listener);
stream.exit(0);
stream.end();
watchers--;
}
});
});
});
}).on('end', function(test) {
console.log(new Date().toISOString()+' Client disconnected', test);

});

}).listen(2222, '0.0.0.0', function() {
console.log('Listening on port ' + this.address().port);
});

// running it takes two terminals, one for node, one for the hasciicam:

mkdir lava && cd java
npm install --save
while true
do
node main.js
done

// camera:
cd lava
mkfifo cam
hasciicam -m text -o cam
I added astroip.co to my comparison of geolocation APIs:

https://resolve.rs/ip/geolocation.html
Sean Carroll has a great podcast episode with the author of this article: https://www.preposterousuniverse.com/podcast/2020/11/16/123-...
You have to make some allowances for first movers. The designs of new tools are often ill conceived because they have no templates to steal ideas from. But the emotional investment often keeps them from switching to better tools because We’ve Always Done Things This Way.

The thing that bugs me most about my company’s tools are the ones that are enough younger than OSS solutions that someone either didn’t look very hard, or didn’t want to find anything (so they could write their own). Other priorities come along and those tools eventually can’t keep up with OSS alternatives, but the apologists take over.

You will not continue to get accolades for tools you wrote three years ago. The only “value” you derive is the time and effort it saves, offset my the effort expended. The time and effort expense of external tools are often lower. And, when the tools are annoying, you can commiserate with your coworkers instead of being the target of their criticisms. Which is often under-appreciated.
One thing that I haven't been able to get is if this makes things like DPDK or user mode tcp stack unnecessary since the system call overhead is gone.
Beautiful C and C++ Documentation with Sphinx
you probably hit those two minutes when it was offline :)
> It might be preferable if everyone dealt in facts all of the time, but political influence is a competitive game.

And how is playing Liar's Poker with a pandemic virus working out for you?

Read the mood, man. Like they say, "It's only when the tide goes out that you learn who has been swimming naked."
Themes of .NET: High-level plans for .NET 6
This remind me that Chesterton in his book Orthodoxy said that if Nietzsche was really an egoist, he would not be preaching it.
I guess my point is that the parent comments referred to Maradona rather than to Diego. The documentary made me realize that it is actually not him but all those Napoli fans that grasped him that caused his demise. If he were able to leave Napoli for a calmer retirement perhaps he would not become what he eventually became. It was the greed of Ferraino (Napoli FC President) which kept him in Napoli and caused him to become infamous, according to the documentary.
The VDSL2 remote terminal that services my house cuts off the second utility power does. So don't count on copper working. Although when the utility power outage was due to a downed line between me and the remote terminal, the DSL didn't drop.
Using parsing and abstractions for safety is the basis of why Clojure, even though dynamically typed, is a relatively safe language[1]. The abstractions are safer in Clojure: no for loops, no while loops, only higher level iteration and transformation constructs, data interfaces are all immutable and functional. Shared state can only be used through higher level managed APIs, numbers auto-promote themselves to higher precision, there's no linear search APIs to force the use of indexed data-structures instead, etc.

And for parsing: Spec is a way to define contracts, but it's actually a parser DSL. User defined macros which specify a Spec will have their input parsed by the Spec at read-time, and if the Parser fails, a read error will show up. Unfortunately, this only happens for macro, but the article made me curious about possible value of having this done on functions as well.

An example of this is say you have some macro which would let you do:

(:from coll :take 5)

Your Spec can parse this, and error if the first element isn't :from, the second element isn't a reference or a collection literal, the third element isn't :take, the fourth element isn't a reference or an int, as well as if it isn't called with exactly 4 elements. And all this happens at read time, when the code is parsed. You could go further, and if a collection literal was used, you could assert that the take int isn't bigger then the number of elements in the collection literal.

Now, what I've observed is that reference types kind of limit what the parser can do. I'm not sure the article addresses that. Like in my last example, I can validated the range of take over the size of the collection, but not if the collection is a variable. How do I track those references? Maybe somewhere else in the program you can find the collection literal, but not here.

P.S.: It's hard to know why Clojure demonstrates relative safety, and I assume here it has a little bit to do with the abstractions it uses and this parser Specifying mechanism. But it's also likely it's all due to the REPL or something else.

[1] https://www.i-programmer.info/news/98-languages/11184-which-... - Shows Clojure as having some of the least number of defects per commits
Haskell has been around for a really long time, almost 4 decades. It's used quite a bit by programming language theorists and category theorists to prove their mathematical theorems in a real language. It's not trendy or experimental, although some parts are one or both. There are about 5 ways to do everything in Haskell, but that's not bad once you understand it. It's not a language you can just pickup in a weekend and easily Google questions about, it's generally used for applications that require some higher level of data and quality assurance, from a fully proven program using Coq to simply a program that's easier to use equatorial reasoning on, like industrial processes or stream processing pipelines.

Erlang has been around about as long. It's also not trendy, and it's designed for telecommunications applications, where the extremely distributed actor model is great. Others might try to shoehorn it everywhere, mostly via elixir, but it's a very reasonable language for many uses, like chat programs or distributed in memory stores.

You might want to understand something before you crap all over it, everything exists for a reason, try to figure out the reason.
The batch system call part is not so hard on its own: https://github.com/c-blake/batch
Not in Ireland ;o)
My 2011 Mac Mini is running under the TV, serving files, running some small docker containers. It works fine for that workload.

I just use VNC into it to manage anything. Another little machine that does what it needs. It's quiet and doesn't need much.
It's not just a question of driver support. Apple is doing a lot of custom stuff with their architecture that might not have an analogue on current ARM systems, meaning that it might require not just new or updated drivers, but effectively a completely new architecture variant added to Linux before you can even boot.

Also, with the T2 chip in Intel Macs, there was a lot of nonstandard behavior[1], like the keyboard not being just a standard USB device.

Linux can run on ARM processors, but it's the architecture that can make a huge difference. Heck, even Apple's Lightning-to-HDMI adapter has an ARM chip in it[2], but that doesn't mean you can boot it to Linux very easily.

[1] https://news.ycombinator.com/item?id=25221804

[2] https://www.theverge.com/2013/3/1/4055758/why-does-apples-li...
On Domain Expertise
I'm curious what you think is the difference between Japan's response to growth versus other places. Given the fact that Japan zones on a federal vs local level, this already reduces the potential of NIMBYists blocking new development. However this does not mean that NIMBYism does not exist there.
Shush you, you're giving away the secret to my 6 figure salary.
It might be noise; I wouldn't try to publish these results in an academic journal, but I'd keep digging.

The title uses the word 'superforecasters', which makes me think the author has read some of Philip Tetlock's work, and is trying to apply it to their situation, which I find admirable.
For anyone looking for a serious answer, the 1977 experiment seems to have extended life for several months (which is almost double the lifespan in some species), before they died for another reason which was not explained.

What I gather is that the optic gland controls all hormone secretion, and although they were able to prevent the digestive system from being blocked by removing it, the same gland likely is necessary in other areas.
Same feeling here! Bless this community and happy Thanksgiving everyone!
Guix system uses linux-libre currently
GDPR personal data is anything relating to an identifiable person. It’s not an expectation of privacy standard. Data gathered by observing you in public is protected the same as data you share with the controller in confidence.
When they required proof on HN it was basically a spam problem. I see the change to karma points hasn't completely mitigated that problem, as your submissions proves.
That’s the entire problem with Facebook ads: they are extremely targeted so only the people they are specifically trying to flip see them. Everyone only sees what’s in their own bubble.
The sparrow with four sexes (2016)
A few interesting points:

- The Simple Apps epic should greatly simplify writing tiny standalone programs. Feels like a natural evolution of the recent top-level statements feature: https://github.com/dotnet/core/issues/5473

- The "Improve inner-loop performance for .NET developers" theme. Looks like tons of perf-related PRs have already been submitted for this. https://github.com/dotnet/core/issues/5510

- AOT and trimming are getting a ton of investment
When you have a non-emptiness property on a type, the compiler can guarantee you that all current and future occurences of values of that type in the system will be interacted consistently with the specified non-empty property. Or in other words, the accent is moved from the limited set of units that you are able (and willing) to test to the invariants that will be held for all occurences of the type at all times, regardless of an unlimited number of units that are willing to use them.
Probably more than you'd think, although they'd not be so dumb as to vocalise it as one's career depends entirely on one's percieved capabilities.
You too stay safe and enjoy your thanksgiving
Are you serious?? I don’t think that has happened.
And there's a vibrant community ! We are having the linux audio conference online right now : https://lac2020.sciencesconf.org/ with tons of cool talks and workshops
Depending on the sources, between 45 or 53 millions shell were fired for the battle of Verdun (it lasted 10 months).

My great grandfather was wounded there and subsequently died from his wounds. I still have his medals.

"The battle lasted for 302 days, the longest and one of the most costly in human history. In 2000, Hannes Heer and Klaus Naumann calculated that the French suffered 377,231 casualties and the Germans 337,000, a total of 714,231, an average of 70,000 a month. In 2014, William Philpott wrote of 976,000 casualties in 1916 and 1,250,000 in the vicinity during the war. In France, the battle came to symbolise the determination of the French Army and the destructiveness of the war."

https://en.wikipedia.org/wiki/Battle_of_Verdun
Only works wih visual studio 2015, this is old tech.
It's not a comprehensive list of things this individual doesn't know. It's limited to technologies which other people assume they would know.
If they resell all of them then the same number of people will have access to a PS5 as before, no?
>I’m saying stage0 is a massive incomplete lift. If you notice that Rust chain starts at g++ - can g++ be built from the basic assembler you listed?

Not yet, but gcc can be built starting from Mes and a few bootstrap binaries (xz, bash, tar, etc): https://bootstrappable.org/projects/mes.html - and that initial version of gcc is 2.95.3, which does have C++ support.

...and there's work being done towards building Mes with M2-Planet (another C compiler by the same author as stage0): https://www.gnu.org/software/mes/

(Although I think the Guix project has shifted to an approach that starts with Scheme instead these days; they have a Scheme implementation of most of those bootstrap binaries now in the form of Gash and Gash Core Utils: https://guix.gnu.org/en/blog/2020/guix-further-reduces-boots....)

In any case, if you can connect the two, and it feels like that's very close at this point, you've got a bootstrap path from that basic assembler to gcc, and from there to... well, the rest of the distro.

>Beyond that, as you can tell from your graph there’s an enormous amount of code that’s part of a build from a large amount of projects. Explode that by a factor of 100000x to get the number of lines of code. So even once you’ve proven the source matches the binary, you are still trusting that the source code is of a trustworthy nature in the first place. You can move the trust required around and in some cases reduce it, but ultimately you’re trusting a lot of people and code (heck you’re trusting the good will of general OSS to validate the source itself isn’t malicious).

Of course, yes, this is a problem. At least once you're able to bootstrap entirely from source you can be pretty confident that the source code you're looking at is what's in the binaries on disk. But yes, that doesn't solve the problem of having a ton of code to review if you need to review it.

But what's the alternative?
Yes, you need to pay the $99 to have a registered developer account, which is required to digitally sign apps to distribute through the App Store. Of course, you can download and use the dev tools for free, and distribute/sell your apps any way you like, without paying Apple anything. So if the App Store isn't worth $99 as a sales channel, don't pay it.
There might be, but it probably hasn't been studied and would be highly controversial to try to document it. To most people, that will smack of racism and have echoes of incidents where, for example, it was assumed some ethnicities naturally have lower IQs than others.
The Caesar Legacy: Politics and Leadership from Julius to “Apes”
>Really? I thought that HN commentators were typically smarter ...

That's a common sentiment.[0]

I've made money on forex, but to be clear -- I made the trade knowing it was a gamble and made out. This isn't smart behavior.. but I'm surely not the only one here.

It's a 'hobby' that appeals to people who like to automate and script things, even if the exchanges are actively malicious towards hobbyist-'quants'.

[0] : https://en.wikipedia.org/wiki/In-group_favoritism
You're paying much more than that in taxes per year.
Isn't the first step of writing a type checker to write a parser?
Fair enough, the one thing it requires is that the base is kept on a reasonably flat incline (ie it’s fine on your lap if you are sitting, but not if you are reclining on a sofa with your knees up).

Each to their own. It works better for me personally, because usually if I’m in a position where the keyboard isn’t suitable, it’s better to rip the iPad out of the keyboard and use it as a tablet. It’s held on with magnets so it’s pretty satisfying to rip it off anyway
I’ll add that being able and willing to communicate these is crucial for job seeking. It’s been years since my resume included a list of responsibilities or products; instead I list achievements and the value they provided/enabled/enhanced.
I see, thank you! Will try to not be like any other spammer ;-)
> What does John Carmack not know?

Vim or Emacs IIRC.
you are doing it right. if you want to use fancy jargon for what you're doing say "I use apache as the controller, the database as the model and php for the view". that's how it's supposed to work since the first version of php/fi. php is primarily a templating engine.

but I disagree concerning register globals. I think it was the single thing that made php the most accessible language. we should bring them back but as a special variable with it's own prefix instead of $
What strikes me about this post is the game immediately invokes fond memories from playing LAN Q3 and UT circa about 20 years ago with curiosity that comes with having yet to mess with Q3A.js mentioned in this article. One of my main rivals from those days of teenage gaming (not much of a rival since he pwned me regularly) went on to earn a number of degrees and ended up working in finance at EA before going into investment banking.

We live in an age of marvels. So many technologies and novelties.

I wonder what today’s “e-sports” champions will do when they “retire” from the game.
Fugitive couple found after 9 months on the lam because of ‘Words with Friends’
Moore said investigators caught a break several months later, saying they were able to track her after she used an app on her new phone. Warfield's defense attorney, Joseph Balter, said later in the hearing that it was Warfield's "Words with Friends" app, which is a game similar to Scrabble.

From there, authorities were able to learn an alias email address Warfield was using, and used that to determine the phone she was using and its location, Moore said. They were arrested by law enforcement including federal agents from the ATF in Baltimore and Louisville, U.S. Deputy Marshals from Indiana, and officers from the Southeast Indiana Regional SWAT Team.
European Parliament approves Right to Repair (now wating on European commision)
> But probably the most important thing is that .NET on Linux is very new (banks are very conservative, small companies, not so much).

They are. However I'd say, based on what I saw at Pivotal, that .NET Core is sweeping all before it. It's faster, less crufty and so on. But the real win is that (1) most of it is familiar to folks with previous .NET experience, but (2) your ops teams can get out of running two very different platforms in Windows and Linux.
If you record the license plates or images of the drivers, 100%.

If you record something like make and model, and you catch a car that’s rare enough in the area that there is only one person it could be, then also yes.

It’s absolutely wild to me that someone’s own observations of a public place can be legally restricted, but that’s GDPR.
Yes, it was something of a disappointment to me, too.
Thanks a lot for the warm welcome to HN :D
> that infamous "please leave your politics at home" post.

Why is that 'infamous'? It's entirely reasonable to want to avoid political discussion at a workplace, in favour of work.

Especially considering a particular political group (BLM) seems to have been the cause of issues at Coinbase.

> an already incriminating attempt to preempt it

Wanting to have your own say in advance of a newspaper that is objectively creeping towards the left (http://evoweb.net/blog2/20190630-islamophobia-nyt-timelines.... as mentioned elsewhere) writing an article criticizing your company is not evidence of guilt.
An expressive language should let programmers reason about code, including parsers, for their correctness.

You know it is correct when you see it, and you get more confidence in not making silly mistakes with unit tests. This is a different approach to formal verification using logic solvers or theorem provers.

For an example of parsing with Haskell, see this recent discussion: https://news.ycombinator.com/item?id=25212372

This approach, as hinted in Parse, Don’t Type-Check, is to raise the level of abstraction. The jargons are to create a domain-specific language (DSL) to model the problem, as in language-oriented programming.

With this approach, you understand what the code is trying to do and can change it easily because it reads like pseudo-code. (Pseudo-code is usually a synonym for code at the right level of abstraction.)
Hopefully you are right and software will not not being to lean too much on direct io_uring instead of some kind of wrapper. Thanks for the comment it was pretty educational.