si

Unit Operation in Downstream Processing / Husnul Azan Tajarudin, Mardiana Idayu Ahmad & Mohd Nazri Ismail

Online Resource




si

Psychoactive medicinal plants and fungal neurotoxins Amritpal Singh Saroya, Jaswinder Singh

Online Resource




si

Novel drug delivery technologies: innovative strategies for drug re-positioning / Ambikanandan Misra, Aliasgar Shahiwala, editors

Online Resource




si

Gas Leak in India at LG Factory Kills 11 and Sickens Hundreds

Residents in eastern India woke up in the middle of the night surrounded by a cloud of styrene vapor. Many couldn’t breathe.




si

Dayside Magnetosphere Interactions


 

Exploring the processes and phenomena of Earth’s dayside magnetosphere

Energy and momentum transfer, initially taking place at the dayside magnetopause, is responsible for a variety of phenomenon that we can measure on the ground. Data obtained from observations of Earth’s dayside magnetosphere increases our knowledge of the processes by which solar wind mass, momentum, and energy enter the magnetosphere.



Read More...




si

Resident Foreigners: A Philosophy of Migration


 

From the shores of Europe to the Mexican-US border, mass migration is one of the most pressing issues we face today. Yet at the same time, calls to defend national sovereignty are becoming ever more vitriolic, with those fleeing war, persecution, and famine vilified as a threat to our security as well as our social and economic order.

In this book, written amidst the dark resurgence of appeals to defend ‘blood and soil’, Donatella Di Cesare challenges



Read More...




si

Resident Foreigners: A Philosophy of Migration


 

From the shores of Europe to the Mexican-US border, mass migration is one of the most pressing issues we face today. Yet at the same time, calls to defend national sovereignty are becoming ever more vitriolic, with those fleeing war, persecution, and famine vilified as a threat to our security as well as our social and economic order.

In this book, written amidst the dark resurgence of appeals to defend ‘blood and soil’, Donatella Di Cesare challenges



Read More...




si

A Simplified EU Cookie Law Approach

Update
Thanks for everyone starring the repo, cookies-monster made it to cdnjs!


I've already talked about the EU cookie law, but moaning about it won't solve the issue. Until common sense and competence will reach European politics so that this law can be erased, we should provide some info to our users.

Not Another Library

There are already few solutions that require a manual or libraries plugins that will cost much bandwidth.
I've decided to use my "special vanilla powers" and go lightweight for real: 578 bytes once "minzipped".
There is absolutely nothing else to do than just including the script. Zero config, drop in and go.

You Are Free To Text & Style

There's no predefined template, there's no predefined style, unless you'd like to use the same I've used for the following page:



You are in charge of the message to show, and you could put an optional link or a button in it with the class cookies-monster-accepted.
If the script will find such button, it will configure it as explicit call to action and once such link/button has been clicked, it will set a cookie that will expire in a year, and it will add the class hidden to the main container which should have a cookies-monster id.
Following an example of the most basic layout.

<div id="cookies-monster" class="hidden">
This sites uses cookies. <a
class="cookies-monster-accepted"
href="#cookies-monster"
>Accept</a>
</div>

Nothing else ... really

Since you are in charge of pretty much everything, you know what to write on your banner, with the needed language, and with any extra link or option you want. Just stick the script in and you are ready to go!

What would be awesome though, is some star to its repo, even if you have your own solution, so that we can move the script in cdn.js and forget once for all about this problem.

Thank You for reading and contributing!




si

The Dumb Side Of Technology

How many times you told a machine "how stupid" it was? How much technology are you surrounding with these days? This is a quick rant about few situations I've found myself involved: enjoy!

The one with the light sensor

This is the most hilarious story I could tell these days. I've found an office (it's just a room in a renewed building) that's so sophisticated and full of sensors, that I have nothing to do when I get into the room. The conditioner and the lights switch on thanks to a sensor!
"so what's the problem?" you ask? I have a projector and there's no bloody sensor switch so I can't see anything because as soon as I move the light goes on again. More over, the sensor activates also the conditioner, and what about the window? ... well, there is one, but I cannot open it.
They'll never come back with a solution, I'll probably change office because not being in control of keeping lights switched off in your own, freaking expensive office, is very frustrating!
This is also how the conversation with office management went:
  • me: I need to keep the light off
  • they: Sir, we have highly automated office and a green policy, we have sensors for lights
  • me: I have said, I need to keep the light switched off
  • they: why would you need that Sir?
  • me: I have a projector, I can't see a thing with such bright illumination
  • they: I see, we'll ask about it and let you know how much will it cost. Meanwhile, have you tried shutting down the blinds?
  • me: .... walk away astonished ...

The 7GB free SD card that Android will not use to update

I have finally received the Lollipop 5.1 update for my Motorola E, a very Essential device that might be enough for 80% of people out there. The Motorola E first generation has its own storage of 2.something GB. Android fits together with all its pointless apps I don't use (pointless because mandatory) and it says it needs at least 850MB to be installed. I check the storage, there are 300MB left plus more than 7GB on the SD card. The SD card is mounted in recovery mode, so it's perfectly usable as alternative storage to execute a System update. No way, I had to remove a couple of apps because it is not possible to move Apps to SD card, only few awesome apps can do that, and I wonder why on earth this is not a requirement in order to be accepted in the Android store.
Why are these app so obtrusive that need to be installed in the equivalent of the Linux /boot, /etc, and /system folder? Why on earth there is an SD card if for an update I'll have same problems iPhone C had a while ago? At least iPhone C does not even accept an SD card. How dumb is being unable to use free space? What is that free space useful for? Why are all these Google apps I don't use incapable of being moved to the SD card?
These and many more questions that will never be answered in the next episode of: How dumb is the free space management in every Phone OS!

Not just updates

If you have your app in your SD card you are free to move that card in your new shiny phone and keep the precious data with you if you are still in the same OS, or a newer version of such OS. There is no reason your app needs to be in the main storage and I hope these will all change their requirements, beside modern phones have more than 2GB of main storage, the point is a completely different one.

The slower automatic checkout

Have you ever found at some supermarket an automatic checkout that won't scan the next item until it has said entirely the price of the previously scanned one? I did, and I've imagined myself staring in front of the working person telling me the price loudly of everything I've bought. What the actual heck were they thinking when they released the software for that machine?

The classic airport double lifts paradox

The book I've started and never completed is entitled: 20 Floors of JavaScript. Its title is inspired by the fact it's the 20th anniversary of JavaScript, and also its aim is to discover how to program multiple Array of lifts/elevators.
I've realized in 37 years of life that lifts are the most stupidly programmed software you can imagine, and there are tons of solutions that could be implemented but apparently the software is the same that somebody wrote in 1978 or similar years.
Just to name one utterly idiotic situation with lifts, try to take one at the airport, in a place where there are at least two lifts.
One will be inevitably full, and while its doors are closing, somebody will press the button in order to call the other lift.
The drama begins.
The lift that was going upstairs will interrupt its closing doors procedure, opening them back, and waiting other 5 seconds before eventually closing them again. While doors are closing again, the second impatient person will press the button again.
People will start shouting "DON'T PRESS THE BUTTON" and some fight might have already picked up in the queue or someone got angry with the person that is pressing the button, calling him/her idiot.
Truth is, the only idiot, and the elephant in the room nobody wants to see because it not a real entity, is the lift and its software. Not only these lift have a weight sensor, so that eventually these could ignore changing floor if the weight is too high, these lift also have a camera. Having a camera means that when the weight is 0, the lift can take a screenshot of its internal. When the weight is not zero and doors are closing, the lift can take another screenshot of its internal and compare that image, pixel per pixel, with the initial empty one, and unless every person of the lift managed to dress like a part of that lift interiors and in camera prospective, the lift could easily tell if its full enough to ignore any extra request to re-open the door and let somebody else get in. This is not too sophisticated at all, this is just basic common sense applied. Moreover, every extra button push could simply be counted as unsigned short which, if more than 2, should ignore the request. This will avoid deadlocks when people for the third time see doors closing, and somebody from the outside call the lift again. This would surely be over-engineered in any single lift situation, but it can actually speed up the logic when there are at least 2.
This, and many other little tricks I've no idea why whoever is programming lifts software is not thinking about. They are more like dumb, passive, queues, incapable of optimizing a single operation.

Rant over, share your funny story if you like!




si

Object.assign Side Effects and How To Copy

In How To Copy Objects post I'll explain the difference between various native ways to copy own keys and properties, describing also the fact that Object.assign is full of surprises and side effects.

As example, assigning to an object something like {get next() {return ++this.i}, i:0} instead of {i:0, get next() {return ++this.i}} will result in different values copied over: next === 1 and i === 1 in the first case, next === 1 and i === 0 in the second one.




si

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!





si

Mapping the country of regions: the Chorographic Commission of nineteenth-century Colombia / Nancy P. Appelbaum, the University of North Carolina Press, Chapel Hill

Hayden Library - GA693.7.A1 A77 2016




si

Spatial big data science: classification techniques for Earth observation imagery / Zhe Jiang, Shashi Shekhar

Online Resource




si

Hyperspectral remote sensing: fundamentals and practices / Ruiliang Pu

Online Resource




si

Integrating scale in remote sensing and GIS / [edited by] Dale A. Quattrochi, Elizabeth A. Wentz, Nina Siu-Ngan Lam, Charles W. Emerson

Rotch Library - G70.212.I565 2017




si

A Louisiana coastal atlas: resources, economies, and demographics / Scott A. Hemmerling

Dewey Library - G1362.C6A5 H46 2017




si

Sustainable tourism on a finite planet: environmental, business and policy solutions / Megan Epler Wood

Dewey Library - G156.5.S87 E64 2017




si

Comprehensive remote sensing / editor in chief: Shunlin Liang

Online Resource




si

Endeavouring Banks: exploring collections from the Endeavour voyage, 1768-1771 / Neil Chambers, with contributions by Anna Agnarsdottir, Sir David Attenborough, Jeremy Coote, Philip J. Hatfield and John Gascoigne

Hayden Library - G420.B18 C43 2016




si

Basic Principles of Topography by Blagoja Markoski

Online Resource




si

Making maps: a visual guide to map design for GIS / John Krygier and Denis Wood

Rotch Library - GA105.3.K79 2016




si

Spatial Techniques for Soil Erosion Estimation: Remote Sensing and GIS Approach / by Rupesh Jayaram Patil

Online Resource




si

The technocratic Antarctic: an ethnography of scientific expertise and environmental governance / Jessica O'Reilly

Dewey Library - G877.O74 2017




si

Asian youth travellers: insights and implications / Chateryn Khoo-Lattimore, Elaine Chao Ling Yang, editors

Online Resource




si

Managing Asian destinations.

Online Resource




si

Target scattering mechanism in polarimetric synthetic aperture radar: interpretation and application / Si-Wei Chen, Xue-Song Wang, Shun-Ping Xiao, Motoyuki Sato

Online Resource




si

Urban Environment, Travel Behavior, Health, and Resident Satisfaction / Anzhelika Antipova

Online Resource




si

Web and wireless geographical information systems: 16th International Symposium, W2GIS 2018, A Coruña, Spain, May 21-22, 2018, Proceedings / Miguel R. Luaces, Farid Karimipour (eds.)

Online Resource




si

Exploration of subsurface Antarctica: uncovering past changes and modern processes / edited by M.J. Siegert, S.S.R. Jamieson and D.A. White

Hayden Library - G860.E97 2018




si

The solo travel handbook: practical tips and inspiration for a safe, fun and fearless trip / commissioning editors Jessica Cole, Sarah Reid ; editors Lucy Cheek, Kate Turvey ; assistant editor Christina Webb

Hayden Library - G151.S57 2018




si

Geo-Spatial Knowledge and Intelligence: 5th International Conference, GSKI 2017, Chiang Mai, Thailand, December 8-10, 2017, Revised Selected Papers. / edited by Hanning Yuan, Jing Geng, Chuanlu Liu, Fuling Bian, Tisinee Surapunt

Online Resource




si

QGIS in remote sensing set / edited by Nicolas Baghdadi, Clément Mallet, Mehrez Zribi

Rotch Library - G70.212.Q45 2018




si

Tribal GIS: supporting Native American decision-making / editors, Anne Taylor, David Gadsden, Joseph J. Kerski, Heather Guglielmo

Rotch Library - G70.215.U6 T75 2017




si

Data visualization for design thinking: applied mapping / Winifred E. Newman

Rotch Library - GA102.3.N49 2017




si

Geo-Spatial Knowledge and Intelligence: 5th International Conference, GSKI 2017, Chiang Mai, Thailand, December 8-10, 2017, Revised Selected Papers. / edited by Hanning Yuan, Jing Geng, Chuanlu Liu, Fuling Bian, Tisinee Surapunt

Online Resource




si

Ecosystem Services for Well-Being in Deltas: Integrated Assessment for Policy Analysis / edited by Robert J. Nicholls, Craig W. Hutton, W. Neil Adger, Susan E. Hanson, Md. Munsur Rahman, Mashfiqus Salehin

Online Resource




si

Statistical analysis of geographical data: an introduction / Simon J. Dadson

Rotch Library - G70.3.D35 2017




si

Remote sensing and cognition: human factors in image interpretation / edited by Raechel A. White, Arzu Coltekin, and Robert R. Hoffman

Online Resource




si

High spatial resolution remote sensing: data, analysis, and applications / edited by Yuhong He and Qihao Weng

Online Resource




si

Lidar remote sensing and applications / Pinliang Dong and Qi Chen

Online Resource




si

LiDAR remote sensing and applications / Pinliang Dong and Qi Chen

Rotch Library - G70.4.D66 2018




si

Mapping society: the spatial dimensions of social cartography / Laura Vaughan

Online Resource




si

Geospatial technologies in land resources mapping, monitoring and management / G.P. Obi Reddy, S.K. Singh, editors

Online Resource




si

A world of empires: the Russian voyage of the frigate Pallada / Edyta M. Bojanowska

Online Resource




si

Feasible management of archaeological heritage sites open to tourism / Douglas C. Comer, Annemarie Willems, editors

Online Resource




si

Asian Cultures and Contemporary Tourism / edited by Elaine Chiao Ling Yang, Catheryn Khoo-Lattimore

Online Resource




si

Asian Qualitative Research in Tourism: Ontologies, Epistemologies, Methodologies, and Methods / edited by Paolo Mura, Catheryn Khoo-Lattimore

Online Resource




si

Proceedings of the Tiangong-2 remote sensing application conference: technology, method and application / editors, Yidong Gu, Ming Gao and Guangheng Zhao

Online Resource




si

Information and Communication Technologies in Tourism 2019: Proceedings of the International Conference in Nicosia, Cyprus, January 30--February 1, 2019.

Online Resource