Постоянно отваливается - если не указать stateful encryption в настройках.
Нет пинга при сплите (использовать это соединение только для ресурсов в этой сети) потому, что в Network Manager баг, и надо маршруты прописывать ручками
https://bugs.launchpad.net/ubuntu/+source/network-manager-pptp/+bug/953861
Прикрепляю картиночки, чтоб не забыть этот ужас грёбаный.

[ ]
 

Сначала сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро.

Особенно в юности следует остерегаться приписывания себе избытка сил, которого на самом деле нет.

 

Данное сообщение то появлялось, то исчезало, без видимых причин. Проблема появилась из-за использования VGA-удлиннителя на мониторе и с заменой пары VGA-кабель->VGA удлиннитель на простой длинный VGA провод, проблема исчезла.

Лучше задать глупый вопрос, чем сделать глупость.

 

Весной 2012 года разразился скандал, когда отец двенадцатилетней школьницы пожаловался, что его дочери присылают буклеты с предложениями для беременных. Когда сеть Target уже приготовилась признавать ошибку и извиняться перед обиженными покупателями, выяснилось, что девочка действительно была беременна, хотя ни она, ни ее отец на момент жалобы не знали об этом. Алгоритм отловил изменения в поведении покупательницы, характерные для беременных женщин.

 

I got an F and a C, and I got a K too
And the only thing that's missing is you

 

Наиболее перспективен, на мой взгляд, JSONSelect поскольку всё остальное мало понятная неудобная хрень. Но json:select() ешё не доделан до конца, там не так много фич, поэтому мы будем страдать.

json:select() http://jsonselect.org/#tryit

 ".author .drinkPref :first-child"

{
  "author": {
    "name": {
      "first": "Lloyd",
      "last": "Hilaiel"
    },
    "drinkPref": [
      "whiskey",
      "beer",
      "wine"
    ],
  },
  "thing": "JSONSelect site",
  "license": "(cc) BY-SA"
}

Result: "whiskey"

JSONSelect = require("JSONSelect")
JSONSelect.forEach(".points_to_delete .id",args,function(){
    result.push(arguments)
})

jsel https://github.com/dragonworx/jsel

dom.select('count(//*)') === 5;
dom.select('@title') === 'abc';
dom.select('//children/*[1]/@foo') === 'bar';
dom.select('count(//@foo)') === 2;
dom.select('//@foo[2]') === 555;
dom.select('count(//children//*)') === 2;
dom.select('//children/*[2]') === 'val';
dom.select('name(//children/*[2])') === 'string';
dom.select('name(*/*[2])') === 'subData';
dom.select('*/children/*[2]/text()') === 'val';
dom.selectAll('//@foo') === ['bar', 555];

JSPath https://github.com/dfilatov/jspath

 Quick example

JSPath.apply(
    '.automobiles{.maker === "Honda" && .year > 2009}.model',
    {
        "automobiles" : [
            { "maker" : "Nissan", "model" : "Teana", "year" : 2011 },
            { "maker" : "Honda", "model" : "Jazz", "year" : 2010 },
            { "maker" : "Honda", "model" : "Civic", "year" : 2007 },
            { "maker" : "Toyota", "model" : "Yaris", "year" : 2008 },
            { "maker" : "Honda", "model" : "Accord", "year" : 2011 }
        ],
        "motorcycles" : [{ "maker" : "Honda", "model" : "ST1300", "year" : 2012 }]
    });

Result will be:

['Jazz', 'Accord']

JsonPath http://goessner.net/articles/JsonPath/

$['store']['book'][0]['title']
$.store.book[*].author
$..author
$.store.*
$.store..price
$..book[2]
$..book[(@.length-1)]
$..book[-1:]
$..book[0,1]
$..book[:2]
$..book[?(@.isbn)]
$..book[?(@.price<10)]
$..* 

jLinq http://hugoware.net/Projects/jLinq

//select records
jlinq.from(data.source)
  .starts('first', 'a')
  .select();
 
//complex queries - no need to repeat names
//when querying the same field
jlinq.from(data.source)
    .starts('first', 'a')
    .or('b')
    .or('c')
    .sort('last')
    .select();
 
//sorting - multiple field
jlinq.from(data.source)
  .greater('age', 40)
  .sort('age', 'name');
  .select();
[ ]
 

http://espadrine.github.io/New-In-A-Spec/es6/

EcmaScript Sixth Edition

let, const (define block-local vars), function in block scope

destructuring: let {x, y} = pt; let [s, v, o] = triple(); (assuming let pt = {x:2, y:-5}, for instance).

parameter default values: function f(x, y=1, z=0) {⋯}

rest: function g(i, j, ...r) { return r.slice(i, j); } (instead of using arguments like a madman).

spread: let a = [0,1,2,3], o = new Something(...a);

proxies: let obj = Proxy.create(handler, proto). Long story short: ~ operator overloading with object-like elements.

weak map: let map = new WeakMap. Use it if you have circular references in it.

generators: function* gen() { yield 1; yield 2; } Actually, gen() returns ~ an object with a next() function property.

iterators: for (var [key, val] of items(x)) { alert(key + ',' + val); }. Iterators can be generators or proxies.

array and generator comprehension: [a+b for (a in A) for (b in B)] (array comprehension), (x for (x of generateValues()) if (x.color === 'blue')) (generator expression).

binary data: const Pixel = new StructType({x:uint32, y:uint32, color:Color}) (if Color is itself a StructType), new ArrayType(Pixel, 3).

class syntax, with extends, prototype, and super:

class Point extends Base {
constructor(x,y) {
super();
this[px] = x, this[py] = y;
this.r = function() { return Math.sqrt(x*x + y*y); }
}
get x() { return this[px]; }
get y() { return this[py]; }
proto_r() { return Math.sqrt(this[px] * this[px] +
this[py] * this[py]); }
equals(p) { return this[px] === p[px] &&
this[py] === p[py]; }
}

modules:

module math {
export function sum(x, y) {
return x + y;
}
export var pi = 3.141593;
}

import {sum, pi} from math;
alert(sum(pi,pi));

quasis: multiline, substitution-ready strings with extensibility. `You are ${age} years old.`.

// The following regexp spans multiple lines.
re`line1: (words )*
line2: \w+`

// It desugars to:
re({raw:'line1: (words )*\nline2: \w+',
cooked:'line1: (words )*\nline2: \w+'})

[ ]
 

Запишу сюда, вдруг понадобится. Один раз уже пригодилось. Работающий пример javascript прокси.

function handlerMaker(obj) 
{
    return {

        getOwnPropertyDescriptor: function(name) 
        {
          console.log("getOwnPropertyDescriptor",name)
          var desc = Object.getOwnPropertyDescriptor(obj, name);
          // a trapping proxy's properties must always be configurable
          if (desc !== undefined) { desc.configurable = true; }
          return desc;
        },

        getPropertyDescriptor:  function(name) 
        {
            console.log("getPropertyDescriptor",name)
            var desc = Object.getPropertyDescriptor(obj, name); // not in ES5
            // a trapping proxy's properties must always be configurable
            if (desc !== undefined) { desc.configurable = true; }
            return desc;
        },

        getOwnPropertyNames: function()
        {
            console.log("getOwnPropertyNames")
            return Object.getOwnPropertyNames(obj);
        },

        getPropertyNames: function()
        {
            console.log("getPropertyNames")
            return Object.getPropertyNames(obj);                // not in ES5
        },

        defineProperty: function(name, desc) 
        {
            console.log("defineProperty", name, desc)
            Object.defineProperty(obj, name, desc);
        },

        delete: function(name) 
        {
            console.log("delete", name)
            return delete obj[name];
        },   

        fix: function() 
        {
            console.log("fix")
            if (Object.isFrozen(obj)) 
            {
                var result = {};
                Object.getOwnPropertyNames(obj).forEach(function(name) 
                {
                    result[name] = Object.getOwnPropertyDescriptor(obj, name);
                });
                return result;
            }
            // As long as obj is not frozen, the proxy won't allow itself to be fixed
            return undefined; // will cause a TypeError to be thrown
        },

        has: function(name) 
        { 
            console.log("has",name)
            return name in obj;
        },

        hasOwn: function(name) 
        { 
            console.log("hasOwn",name)
            return ({}).hasOwnProperty.call(obj, name); 
        },

        get: function(receiver, name) 
        { 
            console.log("get", receiver, name)
            return obj[name]; 
        },

        set: function(receiver, name, val) 
        { 
            console.log("set", receiver, name, val)
            obj[name] = val; 
            return true; 
        }, // bad behavior when set fails in non-strict mode

        enumerate: function() 
        {
            console.log("enumerate")
            var result = [];
            for (var name in obj) { result.push(name); };
            return result;
        },

        keys: function() 
        { 
            console.log("enumerate")
            return Object.keys(obj); 
        }

    }
}

var proxy = Proxy.create(handlerMaker({key:"asdf"}));

return proxy
[ ]