scr

A Scramble for Virus Apps That Do No Harm

Dozens of tracking apps for smartphones are being used or developed to help contain the coronavirus pandemic. But there are worries about privacy and hastily written software.




scr

Exporting modules in JavaScript

In my latest entry I explain the difference about exporting a module between server side or CLI environments such Nashorn, SpiderMonkey, JSC, or micro controller and embedded engines such Duktape, Espruino, KinomaJS, and Desktop UI space via GJS.
Using this is a universal way to attach and export properties but when it comes to ES2015 modules, incompatible with CommonJS and with an undefined execution context.
Enjoy




scr

The missing analysis in JavaScript "Real" Mixins

I love hacks and unusual patterns! As logical consequence, I loved this post about "Real" Mixins!!!
The only hitch about that post is that I believe there are few points closer to a "gonna sell you my idea" discussion than a non disillusioned one.
Let's start this counter analysis remembering what are actually classes in latest JavaScript standard, so that we can move on explaining what's missing in there.

JavaScript embraces prototypal inheritance

It doesn't matter if ES6 made the previously reserved class keyword usable; at the end of the day we're dealing with a special syntactical shortcut to enrich a generic prototype object.

// class in ES2015
class A {
constructor() {}
method() {}
get accessor() {}
set accessor(value) {}
}

// where are those methods and properties defined?
console.log(
Object.getOwnPropertyNames(A.prototype)
// ["constructor", "method", "accessor"]
);
Accordingly, declaring a generic class consists in bypassing the following procedure:

function A() {}
Object.defineProperties(
A.prototype,
{
// constructor is implicitly defined
method: {
configurable: true,
writable: true,
value: function method() {}
},
accessor: {
configurable: true,
get: function get() {},
set: function set(value) {}
}
}
);
If you don't trust me, trust what a transpiler would do, summarized in the following code:

var A = (function () {
// the constructor
function A() {
_classCallCheck(this, _temporalAssertDefined(A, "A", _temporalUndefined) && A);
}
// the enriched prototype
_createClass(_temporalAssertDefined(A, "A", _temporalUndefined) && A, [{
key: "method",
value: function method() {}
}, {
key: "accessor",
get: function get() {},
set: function set(value) {}
}]);

return _temporalAssertDefined(A, "A", _temporalUndefined) && A;
})();
If there is some public static property in the definition, its assignment to the constructor would be the second bypassed part.

The super case

The extra bit in terms of syntax that makes ES6 special is the special keyword super. Being multiple inheritance not possible in JavaScript, we could think about super as the static reference to the directly extended prototype. In case of the previous B class, which extends A, we can think about super variable like if it was defined as such:

// used within the constructor
let super = (...args) => A.apply(this, arguments);

// used within any other method
super.method = (...args) => A.prototype.method.apply(this, args);

// used as accessor
Object.defineProperty(super, 'accessor', {
get: () => Object.getOwnPropertyDescriptor(
A.prototype, 'accessor'
).get.call(this),
set: (value) => Object.getOwnPropertyDescriptor(
A.prototype, 'accessor'
).set.call(this, value)
});
Now that we have a decent understanding on how inheritance works in JavaScript and what it means to declare a class, let's talk about few misleading points sold as pros or cons in the mentioned article.

Prototypes are always modified anyway!

We've just seen that defining a class technically means enriching its prototype object. This already invalidates somehow Justin point but there's more to consider.
When Justin exposes his idea on why current solutions are bad, he says that:
When using mixin libraries against prototype objects, the prototypes are directly mutated. This is a problem if the prototype is used anywhere else that the mixed-in properties are not wanted.
The way Justin describes this issue is quite misleading because mutating prototypes at runtime is a well known bad practice.
Indeed, I believe every single library he mentioned in that post, and he also forgot mine, is not designed to mutate classes prototypes at runtime ... like: not at all!
Every single mixin proposal that is capable of implementing mixins via classes is indeed designed to define these classes at definition time, not at runtime!
Moreover, whatever solution Justin proposed will not guard any class from being modified at runtime later on!
The same way he's defining his final classes during their definitions, mixins-for-classes oriented libraries have exactly the same goal: you define your class and its mixins during the class definition time!
The fact mixins add properties to a prototype is a completely hidden matter that at class definition time is everything but bad.
Also, no property is modified in place, because mixins are there to enrich, not to modify ... and having a prototype enriched means also that it's easier to spot name clashing and methods or properties conflicts ... but I'll come back to that later ...

super actually should NOT work!

The main bummer about the article is that it starts in a very reasonable way, describing mixins and classes, and also analyzing their role in a program.
The real, and only, difference between a mixin and normal subclass is that a normal subclass has a fixed superclass, while a mixin definition doesn't yet have a superclass.
Justin started right at the very beginning, and then degenerated with all sort of contradictions such:
Then finally he's back to Sanity Village with the following sentence:
super calls can be a little unintuitive for those new to mixins because the superclass isn't known at mixin definition, and sometimes developers expect super to point to the declared superclass (the parameter to the mixin), not the mixin application.
And on top of that, Justin talks about constructors too:
Constructors are a potential source of confusion with mixins. They essentially behave like methods, except that overriden methods tend to have the same signature, while constructors in a inheritance hierarchy often have different signatures.
In case you're not convinced yet how much messed up could be the situation, I'd like to add extra examples to the plate.
Let's consider the word area and its multiple meanings:
  • any particular extent of space or surface
  • a geographical region
  • any section reserved for a specific function
  • extent, range, or scope
  • field of study, or a branch of a field of study
  • a piece of unoccupied ground; an open space
  • the space or site on which a building stands
Now you really have to tell me in case you implement a basic Shape mixin with an area() method what the hack would you expect when invoking super. Moreoever, you should tell me if for every single method you are going to write within a mixin, you are also going to blindly invoke super with arbitrary amount of arguments in there ...

So here my quick advice about calling blindly a super: NO, followed by DON'T and eventually NEVER!

Oversold super ability

No kidding, and I can't stress this enough ... I've never ever in my life wrote a single mixin that was blindly trusting on a super call. That would be eventually an application based on mixins but that's a completely different story.
My feeling is that Justin tried to combine at all cost different concepts, probably mislead by his Dart background, since mentioned as reference, where composition in Dart was indeed classes based and the lang itself exposes native mixins as classes ... but here again we are in JavaScript!

instanceof what?

Another oversold point in Justin's article is that instanceof works.
This one was easy to spot ... I mean, if you create a class at runtime everytime the mixin is invoked, what exactly are you capable of "instanceoffing" and why would that benefit anyone about anything?
I'm writing down his very same examples here that will obviously all fail:

// a new anonymous class is created each time
// who's gonna benefit about the instanceof?
let MyMixin = (superclass) => class extends superclass {
foo() {
console.log('foo from MyMixin');
}
};

// let's try this class
class MyClass extends MyMixin(MyBaseClass) {
/* ... */
}

// Justin says it's cool that instanceof works ...
(new MyClass) instanceof MyMixin; // false
// false ... really, it can't be an instance of
// an arrow function prototype, isn't it?!
Accordingly, and unless I've misunderstood Justin point in which case I apologies in advance, I'm not sure what's the exact point in having instanceof working. Yes, sure the intermediate class is there, but every time the mixin is used it will create a different class so there's absolutely no advantage in having instanceof working there ... am I right?

Improving **Objects** Composition

In his Improving the Syntax paragraph, Justin exposes a very nice API summarized as such:

let mix = (superclass) => new MixinBuilder(superclass);

class MixinBuilder {
constructor(superclass) {
this.superclass = superclass;
}

with(...mixins) {
return mixins.reduce((c, mixin) => mixin(c), this.superclass);
}
}
Well, this was actually the part I've liked the most about his article, it's a very simple and semantic API, and it also doesn't need classes at all to be implemented for any kind of JS object!
How? Well, simply creating objects from objects instead:

let mix = (object) => ({
with: (...mixins) => mixins.reduce(
(c, mixin) => Object.create(
c, Object.getOwnPropertyDescriptors(mixin)
), object)
});
It could surely be improved in order to deal with classes too but you get the idea:

let a = {a: 'a'};
let b = {b: 'b'};
let c = {c: 'c'};
let d = mix(c).with(a, b);
console.log(d);
Since the main trick in Justin proposal is to place an intermediate class in the inheritance chain, defining at runtime each time the same class and its prototype, I've done something different here that doesn't need to create a new class with its own prototype or object each time, while preserving original functionalities without affecting them.

Less RAM to use, a hopefully coming soon native Object.getOwnPropertyDescriptors that should land in ES7 and make extraction faster, and the ability to use the pattern with pretty much everything out there, modern or old.
The gist is here, feel free to reuse.

As Summary ...

Wrapping up this post, with latter proposal we can actually achieve whatever Justin did with his intermediate classes approach but following different goals:
  1. Mixins are added to the prototype chain.
  2. Mixins are applied without modifying existing objects.
  3. Mixins do no magic, and don't define new semantics on top of the core language.
  4. super.foo property access won't hopefully work within mixins but it will with subclasses methods.
  5. super() calls won't hopefully work in mixins constructors because you've no idea what kind of arguments you are going to receive. Subclasses still work as expected.
  6. Mixins are able to extend other mixins.
  7. instanceof has no reason to be even considered in this scenario since we are composing objects.
  8. Mixin definitions do not require library support - they can be written in a universal style and be compatible with non classes based engines too.
  9. bonus: less memory consumption overall, there's no runtime duplication for the same logic each time
I still want to thanks Justin because he made it quite clear that still not everyone fully understands mixins but there's surely a real-world need, or better demand, in the current JavaScript community.

Let's hope the next version of ECMAScript will let all of us compose in a standard way that doesn't include a footgun like super through intermediate classes definition could do.
Thanks for your patience reading through this!




scr

JavaScript Interfaces

In this Implementing Interfaces in JavaScript blog entry I'll show a new way to enrich prototypal inheritance layering functionalities a part, without modifying prototypes at all. A different, alternative, and in some case even better, approach to mixins.




scr

Description approaches and automated generalization algorithms for groups of map objects / Haowen Yan

Online Resource




scr

NEW ONLINE: Rare Buddhist Scroll

The Library of Congress has restored and made available online the Gandhara Scroll, a manuscript dating back to around the first century B.C., that offers insight into the initial years of Buddhism. The scroll is one of the world’s oldest Buddhist manuscripts.

The scroll originates from Gandhara, an ancient Buddhist region located in what is now the northern border areas of Afghanistan and Pakistan. The scroll tells the story of buddhas who came before and after Siddhartha Gautama, the sage who reached enlightenment under the Bodhi tree in eastern India around the fifth century B.C. and the religious leader on whose teachings Buddhism was founded.

Click here for more information.




scr

Irresistible : why we can't stop checking, scrolling, clicking and watching / Adam Alter

Alter, Adam L., 1980- author




scr

All our realities [manuscript] : a fantasy for radio / by Ken Methold

Methold, Ken, 1931-




scr

The Bastille variations [manuscript] / by Mike Ladd

Ladd, Mike, 1959-




scr

The Beethoven tapes [manuscript] : a fictional documentary / by David McRobbie

McRobbie, David




scr

The feet of Daniel Mannix [manuscript] / by Barry Oakley

Oakley, Barry, 1931-




scr

Forest of night [manuscript] / by Noni Braham Durack

Durack, Noni, 1917-




scr

Macker's reef [manuscript] : ca radio play / by F.J. Willett

Willett, F. J. (Fred J.)




scr

Mars in scorpio [manuscript] / by Kurt von Trojan

Von Trojan, Kurt, 1937-




scr

Olive [manuscript] : a radio play / by Anthony Wheeler

Wheeler, Anthony




scr

One tango with Juan Peron [manuscript] / by John Griffin

Griffin, John, 1935-




scr

Out of mind [manuscript] / by Stephanie McCarthy

McCarthy, Stephanie




scr

The return of Ida Mulloy [manuscript] / by Mike Giles

Giles, Mike




scr

Stardance [manuscript] / by Spider & Jeanne Robinson ; adapted for radio by Ken Methold

Methold, Ken, 1931-




scr

They're playing my song [manuscript] / by Donovan O'Malley

O'Malley, Donovan




scr

Timothy Gedge [manuscript] / adapted by Ken Methold ; from the novel, The Children of Dynmouth, by William Trevor

Methold, Ken, 1931-




scr

Typeface [manuscript] / by Mike Ladd

Ladd, Mike, 1959-




scr

Verbal assaults [manuscript] / by Kevin Scully

Scully, Kevin




scr

Young eyes [manuscript] / Donovan O'Malley

O'Malley, Donovan




scr

Stories : screen narrative in the digital era / edited by Ian Christie and Annie van den Oever




scr

Silver screen Buddha : Buddhism in Asian and Western film / Sharon A. Suh

Suh, Sharon A., author




scr

Screen culture : a global history / Richard Butsch

Butsch, Richard, 1943- author




scr

Possession [videorecording] / Marie-Laure Reyre presents a film by Andrzej Zuławski ; original screenplay, Andrzej Zuławski ; adaptation and dialogue, Andrzej Zuławski, Frederic Tuten ; produced by Marie-Laure Reyre ; a co-production Oliane Productions, M




scr

2010 [videorecording] : the year we make contact / Metro-Goldwyn-Mayer presents a Peter Hyams film ; written for the screen, produced and directed by Peter Hyams




scr

Climate mathematics: theory and applications / Samuel S.P. Shen (San Diego State University), Richard C.J. Somerville (Scripps Institution of Oceanography, University of California, San Diego)

Dewey Library - QC981.S52275 2019




scr

Vibration of discrete and continuous systems / Ahmed Shabana

Online Resource




scr

Discrete-time stochastic sliding mode control using functional observation Satnesh Singh, S. Janardhanan

Online Resource




scr

Subscribe to the CT Women Newsletter

Know what's being discussed on CT Women, Christianity Today's special section for women. We report on news and give our opinion on topics such as church, family, sexuality, discipleship, pop culture, and more!




scr

Law Library: News & Events: Uncover historical treasures at the Herencia Transcribe-a-thon on March 19!

To celebrate the launch of the Herencia: Centuries of Spanish Legal Documents campaign, we will be hosting an on-site transcribe-a-thon here at the Library of Congress on March 19, 2020 at 5:00 pm ET! 

Register to join us in person in the Great Hall of the Thomas Jefferson Building for a fun evening of transcribing with fellow volunteers. You do not need to read Spanish, Latin, or Catalan to participate in this project!

Can't make it to the event? We will have a virtual transcribe-a-thon happening ALL DAY on March 19! Register as a virtual attendee to join a worldwide community of transcribers.

Want to know more about how to host a Transcribe-a-thon so you can join in virtually? Register for our upcoming webinar on instructions and tips for hosting a successful transcription event! We’ll cover how to join in on March 19 and how to organize independently.




scr

[ASAP] Microfluidics Platform for Polymorph Screening Directly from Powder

Crystal Growth & Design
DOI: 10.1021/acs.cgd.0c00181




scr

Keyboard music from Fitzwilliam manuscripts / edited by Christopher Hogwood and Alan Brown

STACK SCORE M2.M9872 v.102




scr

Restoration music for three violins, bass viol and continuo / transcribed and edited by Peter Holman and John Cunningham

STACK SCORE M2.M9872 v.103




scr

Fantasia-suites. John Jenkins ; transcribed and edited by Andrew Ashbee

STACK SCORE M2.M9872 v.104




scr

Sonata in G minor, op. 19, for viola and piano / Rachmaninoff ; edited by Leonard Rose ; viola part transcribed and edited by Elaine Fine

STACK SCORE Mu pts R114 sovcp ar




scr

Information structure in lesser-described languages: studies in prosody and syntax / edited by Evangelia Adamou, Katharina Haude, Martine Vanhove

Barker Library - P291.I42 2018




scr

Effects of Scrum methodology on students’ critical scientific literacy: the case of Green Chemistry

Chem. Educ. Res. Pract., 2020, Accepted Manuscript
DOI: 10.1039/D0RP00066C, Paper
Open Access
Johannes Vogelzang, Wilfried Admiraal, Jan Van Driel
Secondary science education plays a key role in students’ process to become scientifically literate citizens. However, teaching students to acquire the necessary skills and knowledge to deal with complex societal...
The content of this RSS Feed (c) The Royal Society of Chemistry




scr

15 Blogs Every Javascript Developer Should Follow in 2020

I’ve been following the most interesting JavaScript blogs quite for a while now (this is a part of my job running https://weekendjs.com/). There are many of them. More than you might think. There are blogs started more than ten years ago, and there are relatively new ones. Some bloggers are JavaScript superstars, and others are regular […]

The post 15 Blogs Every Javascript Developer Should Follow in 2020 appeared first on DevelopIntelligence.




scr

The Weird World of Infinity in JavaScript

You are probably aware that ECMAScript has something called Infinity, which is a numeric value that you can apply to any variable, the same way you can apply other numbers as values for variables.

Infinity of course is not the same as other numbers, so I thought I’d summarize, with examples, many of the quirks and useful facts around JavaScript Infinity and how it works.

The post The Weird World of Infinity in JavaScript appeared first on Impressive Webs.



  • JavaScript & jQuery
  • Web Design Tutorials

scr

[ASAP] Small Molecule Inhibitor Screen Reveals Calcium Channel Signaling as a Mechanistic Mediator of <italic toggle="yes">Clostridium difficile</italic> TcdB-Induced Necrosis

ACS Chemical Biology
DOI: 10.1021/acschembio.9b00906




scr

Laboratory astrophysics / Guillermo M. Muñoz Caro, Rafael Escribano, editors

Online Resource




scr

Formal labour market in urban India: job search, hiring practices and discrimination / Rajendra P. Mamgain

Dewey Library - HD5819.M354 2019




scr

[ASAP] Chlorines Are Not Evenly Substituted in Chlorinated Paraffins: A Predicted NMR Pattern Matching Framework for Isomeric Discrimination in Complex Contaminant Mixtures

Environmental Science & Technology Letters
DOI: 10.1021/acs.estlett.0c00244




scr

[ASAP] A Bifunctional Nucleoside Probe for the Inhibition of the Human Immunodeficiency Virus-Type 1 Reverse Transcriptase

Bioconjugate Chemistry
DOI: 10.1021/acs.bioconjchem.0c00191




scr

Transnational Screens [electronic journal].

Taylor & Francis




scr

Redescriptions: Political Thought, Conceptual History and Feminist Theory [electronic journal].

Manchester University Press