Streaming Services Help Global Music Industry To Fastest Growth in Nearly 20 Years Slashdotby msmash on music at January 1, 1970, 1:00 am (cached at April 25, 2017, 11:36 pm)

The global music industry grew by 5.9 percent in 2016, its fastest rate of growth since 1997, as revenue generated by streaming services surged 60 percent. From a report: The IFPI's Global Music Report (previously known as the Digital Music Report) states that trade revenue generated by the global recorded music industry climbed by 5.9 percent to $15.7 billion, with digital sales up 17.7 percent across the board. After digital revenue surpassed physical for the first time in 2015, digital hits another milestone in 2016, accounting for 50 percent ($7.8 billion) of all music sales for the first time. More importantly, 2016 marked the second successive year that the recorded music market grew after nearly two decades of continually falling sales during which revenues dropped by almost 40 percent at their lowest point. [...] Breaking down the Global Music Report findings, the mass adoption of streaming services such as Spotify, Amazon and Apple Music in both established and emerging markets is -- as expected -- the main driver behind the industry's sustained upturn.

Read more of this story at Slashdot.

Streaming Services Help Global Music Industry To Fastest Growth in Nearly 20 Years Slashdotby msmash on music at January 1, 1970, 1:00 am (cached at April 25, 2017, 11:36 pm)

The global music industry grew by 5.9 percent in 2016, its fastest rate of growth since 1997, as revenue generated by streaming services surged 60 percent. From a report: The IFPI's Global Music Report (previously known as the Digital Music Report) states that trade revenue generated by the global recorded music industry climbed by 5.9 percent to $15.7 billion, with digital sales up 17.7 percent across the board. After digital revenue surpassed physical for the first time in 2015, digital hits another milestone in 2016, accounting for 50 percent ($7.8 billion) of all music sales for the first time. More importantly, 2016 marked the second successive year that the recorded music market grew after nearly two decades of continually falling sales during which revenues dropped by almost 40 percent at their lowest point. [...] Breaking down the Global Music Report findings, the mass adoption of streaming services such as Spotify, Amazon and Apple Music in both established and emerging markets is -- as expected -- the main driver behind the industry's sustained upturn.

Read more of this story at Slashdot.

My Microblog inessential.comat January 1, 1970, 8:00 am (cached at April 25, 2017, 11:33 pm)

I’m on Manton‘s cool new microblogs system. Here’s where you can follow me, once you’re on the system: http://micro.blog/brentsimmons.

And here’s my microblog: http://brent.micro.blog/. (Which you can read using RSS, whether you’re on the system or not.)

I wrote about three-quarters of my own single-user microblog system — and then stopped because I didn’t feel like running a server and because Manton’s service is so good.

My Microblog inessential.comat January 1, 1970, 8:00 am (cached at April 25, 2017, 11:33 pm)

I’m on Manton‘s cool new microblogs system. Here’s where you can follow me, once you’re on the system: http://micro.blog/brentsimmons.

And here’s my microblog: http://brent.micro.blog/. (Which you can read using RSS, whether you’re on the system or not.)

I wrote about three-quarters of my own single-user microblog system — and then stopped because I didn’t feel like running a server and because Manton’s service is so good.

More Russian hacking (IT Toolbox Blogs) SANS ISC SecNewsFeed(cached at April 25, 2017, 11:30 pm)

After blitzing FlexiSpy, hackers declare war on all stalkerware makers: 'We're comin SANS ISC SecNewsFeed(cached at April 25, 2017, 11:30 pm)

IBM Watson Now Being Used To Catch Rogue Traders Slashdotby msmash on ai at January 1, 1970, 1:00 am (cached at April 25, 2017, 11:04 pm)

IBM is piloting its Jeopardy-winning Watson technology as a tool for catching rogue traders at large financial institutions, executives said in an interview Monday. From a report: Referred to as Watson Financial Services, the new product will become a monitoring tool within companies to search through every trader's emails and chats, combining it with the trading data on the floor. The objective? To see if there are any correlations between suspicious conversations online and activity that could be construed as rogue trading.

Read more of this story at Slashdot.

Primitive human 'lived much more recently' BBC News | Science/Nature | UK Edition(cached at April 25, 2017, 11:00 pm)

Homo naledi could be from just 200,000 years ago, not three million, a study suggests.
NSA backdoor detected on gt;55,000 Windows boxes can now be remotely removed (ArsTec SANS ISC SecNewsFeed(cached at April 25, 2017, 11:00 pm)

Frontier Diary #5: Values and Progress on the Language inessential.comat January 1, 1970, 8:00 am (cached at April 25, 2017, 10:32 pm)

I put the Frontier repository up on GitHub.

(The build is currently broken. This is bad discipline, but since it’s still just me, I forgive myself. Sometimes I run out of time and I just commit what I have.)

The repo has my new code and it also contains FrontierOrigFork, which is the original Frontier source with a bunch of deletions and some changes. The point is to give me 1) code to read and 2) a project that builds and runs on my 10.6.8 virtual machine.

The original code is in C, and the port is, at least so far, all in Swift. In the end it should be almost all in Swift, but I anticipate a couple places where I may need to use Objective-C.

Here’s one of the Swift wins:

Values

Since Frontier contains a database and scripting language, there’s a need for some kind of value object that could be a boolean, integer, string, date, and so on.

Original Frontier used a tyvaluedata union, with fields for the various types of values.

This is a perfectly reasonably approach in C. It’s great because you can pass the same type of value object everywhere.

Were I writing this in Objective-C, however, I’d create a Value protocol, and then create new value objects for some types and also extend existing objects (NSNumber, NSString, etc.) to conform to the Value protocol. This would still give me the upside — passing a Value type everywhere — while reducing the amount of boxing.

But: this still means I have an NSNumber when I really want a BOOL. Luckily, in Swift I can go one better: I can extend types such as Bool and Int to conform to a Value protocol.

This means passing around an actual Bool rather than a boxed boolean. I like this a ton. It feels totally right.

Other topic:

Language Progress

I’m still in architectural mode, where I’m writing just enough code to validate and refine my decisions. A couple days ago I started on the language evaluator — the thing that actually runs scripts.

It works as you expect: it takes a compiled code tree and recursively evaluates it. It’s not difficult — it’s just that it’s going to end up being a fair amount of code.

I’ve done just enough to know that I’m on the right path. (The Swift code looks a lot like the C code in OrigFrontier’s langevaluate.c. See evaluateList, for instance.)

The next step is for me to build the parser. I thought about writing a parser by hand, because it sounds like fun, and it would give me some extra control — but, really, it would slow me way down, so forget it.

OrigFrontier generated its parser by passing a grammar file — langparser.y — to MacYacc (there was such a thing!), which generated langparser.c.

I’ll do a similar thing, except using Bison (which is compatible with Yacc). Or, possibly, using the Lemon parser generator instead. Either way, I’ll want the generated code to be Objective-C. (Well, mostly C, but with Objective-C objects instead of structs.) (I don’t know of a generator that would create Swift code.)

This is completely new territory for me, and is exciting.

(Almost forgot to mention: I’ll also need to write a tokenizer. This means porting langscan.c. I’ll need to do this first, since the parser generator needs it. So this is the real next step.)

Frontier Diary #5: Values and Progress on the Language inessential.comat January 1, 1970, 8:00 am (cached at April 25, 2017, 10:32 pm)

I put the Frontier repository up on GitHub.

(The build is currently broken. This is bad discipline, but since it’s still just me, I forgive myself. Sometimes I run out of time and I just commit what I have.)

The repo has my new code and it also contains FrontierOrigFork, which is the original Frontier source with a bunch of deletions and some changes. The point is to give me 1) code to read and 2) a project that builds and runs on my 10.6.8 virtual machine.

The original code is in C, and the port is, at least so far, all in Swift. In the end it should be almost all in Swift, but I anticipate a couple places where I may need to use Objective-C.

Here’s one of the Swift wins:

Values

Since Frontier contains a database and scripting language, there’s a need for some kind of value object that could be a boolean, integer, string, date, and so on.

Original Frontier used a tyvaluedata union, with fields for the various types of values.

This is a perfectly reasonably approach in C. It’s great because you can pass the same type of value object everywhere.

Were I writing this in Objective-C, however, I’d create a Value protocol, and then create new value objects for some types and also extend existing objects (NSNumber, NSString, etc.) to conform to the Value protocol. This would still give me the upside — passing a Value type everywhere — while reducing the amount of boxing.

But: this still means I have an NSNumber when I really want a BOOL. Luckily, in Swift I can go one better: I can extend types such as Bool and Int to conform to a Value protocol.

This means passing around an actual Bool rather than a boxed boolean. I like this a ton. It feels totally right.

Other topic:

Language Progress

I’m still in architectural mode, where I’m writing just enough code to validate and refine my decisions. A couple days ago I started on the language evaluator — the thing that actually runs scripts.

It works as you expect: it takes a compiled code tree and recursively evaluates it. It’s not difficult — it’s just that it’s going to end up being a fair amount of code.

I’ve done just enough to know that I’m on the right path. (The Swift code looks a lot like the C code in OrigFrontier’s langevaluate.c. See evaluateList, for instance.)

The next step is for me to build the parser. I thought about writing a parser by hand, because it sounds like fun, and it would give me some extra control — but, really, it would slow me way down, so forget it.

OrigFrontier generated its parser by passing a grammar file — langparser.y — to MacYacc (there was such a thing!), which generated langparser.c.

I’ll do a similar thing, except using Bison (which is compatible with Yacc). Or, possibly, using the Lemon parser generator instead. Either way, I’ll want the generated code to be Objective-C. (Well, mostly C, but with Objective-C objects instead of structs.) (I don’t know of a generator that would create Swift code.)

This is completely new territory for me, and is exciting.

(Almost forgot to mention: I’ll also need to write a tokenizer. This means porting langscan.c. I’ll need to do this first, since the parser generator needs it. So this is the real next step.)

Cassini set for first Saturn gap plunge BBC News | Science/Nature | UK Edition(cached at April 25, 2017, 10:31 pm)

The probe will be out of radio contact as it dives in between the planet's rings and cloudtops.
Cassini set for first Saturn gap plunge BBC News | Science/Nature | UK Edition(cached at April 25, 2017, 10:31 pm)

The probe will be out of radio contact as it dives in between the planet's rings and cloudtops.
In Costly Bay Area, Even Six-Figure Salaries Are Considered 'Low Income' Slashdotby msmash on money at January 1, 1970, 1:00 am (cached at April 25, 2017, 10:07 pm)

An anonymous reader shares an article: In the high-priced Bay Area, even some households that bring in six figures a year can now be considered "low income." That's according to the U.S. Department of Housing and Urban Development, which recently released its 2017 income limits -- a threshold that determines who can qualify for affordable and subsidized housing programs such as Section 8 vouchers. San Francisco and San Mateo counties have the highest limits in the Bay Area -- and among the highest such numbers in the country. A family of four with an income of $105,350 per year is considered "low income." A $65,800 annual income is considered "very low" for a family the same size, and $39,500 is "extremely low." The median income for those areas is $115,300. Other Bay Area counties are not far behind. In Alameda and Contra Costa counties, $80,400 for a family of four is considered low income, while in Santa Clara County, $84,750 is the low-income threshold for a family of four.

Read more of this story at Slashdot.

In Costly Bay Area, Even Six-Figure Salaries Are Considered 'Low Income' Slashdotby msmash on money at January 1, 1970, 1:00 am (cached at April 25, 2017, 10:07 pm)

An anonymous reader shares an article: In the high-priced Bay Area, even some households that bring in six figures a year can now be considered "low income." That's according to the U.S. Department of Housing and Urban Development, which recently released its 2017 income limits -- a threshold that determines who can qualify for affordable and subsidized housing programs such as Section 8 vouchers. San Francisco and San Mateo counties have the highest limits in the Bay Area -- and among the highest such numbers in the country. A family of four with an income of $105,350 per year is considered "low income." A $65,800 annual income is considered "very low" for a family the same size, and $39,500 is "extremely low." The median income for those areas is $115,300. Other Bay Area counties are not far behind. In Alameda and Contra Costa counties, $80,400 for a family of four is considered low income, while in Santa Clara County, $84,750 is the low-income threshold for a family of four.

Read more of this story at Slashdot.