Итак, что прежде всего нужно сделать, чтобы понять: что Вам нужно и для чего - если Вы хотите слушать дома максимально качественный (для Вас) звук...
1. Прежде всего проверьте Ваши уши...
Как ни смешно звучит (я, конечно, не предлагаю идти к отоларингологу, хотя почистить уши надо) многие "забывают" сделать это, в том же время с яростью участвуя в спорах по поводу качества звука и затрачивая немалые деньги на аппаратуру и "особые" коллекции... Мало того, если Вы даже некогда делали это, то тесты, описанные ниже, имеет смысл повторить - ибо время идет...
Поставьте на Вашей аппаратуре тестовый диск (с чистыми! синусовыми сигналами - "гудочки") - можно использовать и софт-генератор - и оцените - какие реально высокие частоты Вы слышите - 14 kHz - 16 kHZ - 18 khz - 20 khz - 22 kHz...
Лучше всего сделать это в качественных наушниках (чтобы не "грешить" на Ваши колонки)...
Дело в том, что (по усредненным данных серьезных международных тестов - 2006 год) дело для нынешних поколений обстоит примерно вот как (в соответствии с Вашим возрастом, генетикой, образом жизни, и т.п. - кто что реально слышит "вверху"):
16 лет - иногда до 22 kHZ
18-20 лет - до 20kHZ
22-26 лет - до 18kHZ
28-32 лет - до 17kHZ
34-38 лет и более - до 16kHZ
40-50 лет - до 16kHZ и (часто) ниже - 14kHZ - 12kHZ... вот и беда пришла...
Когда я сам первый раз прочитал это (официальные материалы на зарубежном аудио-сайте), то был очень неприятно удивлен и поспешил проверить себя... К счастью, я "кое-что" еще слышу - м.б. и Вы окажетесь исключением из правил - в любом случае - удачи!
Зачем это нужно? А именно исходя из этого Вы будете действительно разумно определять Ваши требования к Вашей аппаратуре и Вашим коллекциям музыки - слушать-то Вам! Если, к примеру, Вы не слышите частот выше 16 kHZ - какой смысл Вам, скажем, тратить деньги на навороченные четерыхполосные колонки с супер-твитером (до 32-38 kHz), и т.п., или обязательно гоняться за за особым японским "золотым" переизданием диска? - или, скажем, Вы любитель музыки 60-х-70-х-80-х - большинство исходного (!) материала тех лет вообще не имеет полезных частот выше 16-18 kHz... - если только не применять Magix и т.п....
(Дело здесь, конечно, не только в частотах - настоящее воприятие сложнее - но об этом потом - а это первое грубое приближение к Вашему реальному идеалу и разумным запросам...)
2. Еще раз проверьте Ваши уши...
Теперь - на музыкальном материале!
Возьмите самый качественный (фирменный) СD, доступный Вам - лучше именно с той музыкой, какую Вы любите (но можно и специальный, аудиофильский).
Извлеките из него (с помощью EAC - см. тех вопросы VIP) правильным (!) образом *wav с подходящего Вам трека, сохраните.
Конвертируйте этот *wav (c помощью lame - см. тех вопросы VIP) правильным (!) образом в mp3 c битрейтами: 320kB - 256kB - 220 kB - 190kB - 160kB - 128kB.
Попросите ближних Ваших помочь Вам (для "слепого" тестирования) и прослушайте это трек (на свежую голову, в хорошем расположении духа. лучше утром или днем) в попарных комбинациях в разной последовательности... Вы всякий раз не должны знать, что именно и с каким битрейтом, или *wav звучит - (дабы избежать известного эффекта "плацебо" и другого самовнушения) отмечая результаты: (так же; лучше; хуже: =; +; -) :
a) CDDA - *wav (вполне возможно, что Вы даже услышите разницу, и *wav будет лучше - ибо это тот "мастер", с которого делали диск, (без интерполяцио��ной отсебятины работы "на лету") Вашего проигрывателя...)
б) *wav - 320 kB mp3
c) *wav - 256 kB mp3
d) *wav - 220 kB mp3
e) *wav - 190 kB mp3
f) *wav - 160 kB mp3
f) *wav - 128 kB mp3
Если Вы слушали и оценивали это на Вашей "окончательной" хорошей аппаратуре (которая Вас всем устраивает), то можете переходить к раскрытию и оценке результатов...
Думаю, они Вас удивят - если Вы были абсолютно честны и аккуратны в соблюдении "слепого" условия тестирования...
Если же Вы хотите иметь запас и некий "абсолютный" результат на будущее - лучше воспользуйтесь максимально качественными наушниками (лучше профессиональными - я, например, использую студийный эталон Fostex T40RP-markII с технологией RealPhase - потому что в музыкальном аудио верные фазовые соотношения в сигнале (особенно для mp3) подчас гораздо важнее диапазона частот, и т.п. - а Ваши колонки, даже очень хорошие, в сочетании с реальной комнатой прослушивания - это предмет особого разговора - разбросы параметров и восприятия могут быть критическими...)
Таких тестов в мире проводилось немало (на серьезном уровне и в "правильных условиях прослушивания") - оценки слегка разнятся, но ясно примерно одно:
- более 80% людей не могут отличить *wav и 320 kB mp3
- более 70% людей не могут отличить *wav и 256 kB mp3
- более 50% людей не могут отличить *wav и 190 kB mp3
Парадоксально, но 30% даже отдают предпочтение mp3 - с более низким битрейтом...
Но - здесь не научная статья - слушать-то и радоваться Вам (!) и поэтому просто максимально честно определите для себя - где Ваш реальный порог восприятия! - и, исходя из этого, формируйте свою аппаратуру и свою коллекцию...
(Как все время настырно говорят в TB-рекламе - если эффект тот же - зачем платить больше?)
Конечно, в разделе VIP Lossless большинство серьезных любителей музыки слушают ее с СD - и это правильно - но Ваши персональные результаты (вполне вероятно) помогут Вам преодолеть некоторые личные и общие "мифы" и пересмотреть некоторые постулаты отношения к звуку вообще и сжатым форматам, в частности (в связке с Вами лично!).
http://www.sqlite.org/wal.html
A database in WAL mode cannot generally be opened from read-only media because even ordinary reads in WAL mode require recovery-like operations.
<?
if(isset($_SERVER['QUERY_STRING']) && strpos($_SERVER['QUERY_STRING'],"utm_source=Yandex-Direct") !== false)
{
echo "This page was visited through Yandex-Direct.";
}
?>
str = ".htaccess"
str.replace(/^\./, '').split('.').slice(-2)[1] || ''
TEST TO SEE WHAT WILL HAPPEN:
rsync --recursive --verbose --progress --dry-run --rsh='ssh -p 22' /local/source/path/trailing/slash/is/recommended/ user@100.100.100.100:/remote/server/destination/path
COPY FILES
rsync --recursive --verbose --progress --rsh='ssh -p 22' /local/source/path/trailing/slash/is/recommended/ user@100.100.100.100:/remote/server/destination/path
Полезные материалы:
The OpenNET Project: Полезные рецепты при работе с rsync.mht
Using rsync to mirror data between servers - LinuxQuestions.org.mht
Ссылки на оригиналы:
http://www.opennet.ru/tips/info/1768.shtml
http://www.linuxquestions.org/linux/answers/Networking/Using_rsync_to_mirror_data_between_servers
print(tonumber(nil)) -- nil
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
Земля не вращается вокруг солнца.
Воистину, уровень грамотности населения в вопросах космоса за последние годы снизился до неприличия. Иначе, как можно объяснить то, что ролики, подобные тем, о которых сегодня пойдет речь, собирают такое огромное количество просмотров.
Наверное, кто-нибудь из вас уже успел посмотреть в интернете ролик с красноречивым названием «Земля не вращается вокруг Солнца». Если еще не успели ознакомиться с этими «шедеврами» окучивания мозга, то вот они:
На самом Youtube были отключены комментарии, что и понятно, учитывая вероятное содержание этих самых комментов. Но, если посмотреть на то, как на ролик отреагировали посетители других сайтов, начинаешь понимать, что зря в школах перестали преподавать астрономию, особенно для детей средних классов. «Профессионалы», кстати, тоже отметились. На некоторых сайтах контент данного ролика был оформлен в духе новости об очередном открытии ученых. Правда, учитывая качество этого самого контента, получилось примерно то же самое, что и показ узбекских «Врат ада» центральными каналами, выдававшими их за кратер Челябинского метеорита.
Если сказать об увиденном вкратце, то автор берет общеизвестные факты, выставляя их в выгодном себе свете (рекламу портала вначале все заметили?), при этом обертывая все в оболочку «Сенсации» и «Шока». По словам создателя (-ей) видео, наша планета, оказывается, обращается не вокруг Солнца! Движет же, и ей, и Солнцем, и даже волосами на вашей макушке некая «спиральная энергия». В доказательство, автор приводит несколько примеров со спиралями, включив туда даже молекулу ДНК. Будто для круга этих самых примеров не найти.
Тут надо отметить, что планета наша действительно движется по спирали, и это вполне логично, ведь само Солнце также не стоит на месте, а движется в космическом пространстве со скоростью в 217 километров в секунду. Таким образом, проходя свою орбиту и оказываясь в той ее точке, что и год назад, Земля будет почти в 7 миллиардах километров от своего прошлого положения. Если смотреть на все это сбоку, то и в самом деле планета движется по спирали. Но это, простите, еще не говорит о том, что Земля не вращается вокруг Солнца. Гравитацию, по понятным причинам, еще никто не отменял.
Автор, по сути, показывает все правильно, но преподносит это как «обман властей». Естественно, ведь, если общество узнает, что Земля, гипотетически, вращается не вокруг Солнца, (не смотря на то, что светило регулярно встает на востоке и садится на западе), то в мире начнутся войны и воцарится хаос. Вот власти и скрывают. Комедия – не иначе. Но больше всего смешит та наглость, с которой все это преподносится. В видео прямым текстом говорится о том, что «Вы нигде не найдете информацию о движении Солнечной системы в нашей галактике». И самое печальное, что некоторые в это верят, что и проявляет все недостатки современной системы образования. А все доводы, приводимые авторами, очень хорошо объясняются с научной точки зрения и разбиваются о простую логику.
Но, стоит отметить, что сами ролики сделаны очень качественно, от созвездия Ориона в самом начале, до музыкального сопровождения от группы «Two Steps From Hell». На этом, все положительные моменты заканчиваются. С их вычетом, в сухом остатке мы имеем деструктивный контент, зомбирующий школьников и других излишне доверчивых личностей не хуже вечерних телешоу, так любимых почти всей страной. Не удивительно, что в Роскосмосе наблюдается острый недостаток кадров, даже в отряде космонавтов. Ведь люди просто забыли о существовании чего-то, за границами голубого неба, а звезды воспринимают, как простые огоньки в ночной черноте.
Delegating yield
The yield* operator delegates to another generator. This provides a convenient mechanism for composing generators.
The expression yield* <
> is equivalent to: let (g = <>) { let received = void 0, send = true, result = void 0; try { while (true) { let next = send ? g.send(received) : g.throw(received); try { received = yield next; send = true; } catch (e) { received = e; send = false; } } } catch (e) { if (!isStopIteration(e)) throw e; result = e.value; } finally { try { g.close(); } catch (ignored) { } } result } This is similar to a for-in loop over the generator, except that it propagates exceptions thrown via the outer generator’s throw method into the delegated generator.
http://wiki.ecmascript.org/doku.php?id=harmony:generators
Delegating to another generator means the current generator stops producing values by itself, instead yielding the values produced by another generator until it exhausts it. It then resumes producing its own values, if any.
For instance, if secondGenerator() produces numbers from 10 to 15, and firstGenerator() produces numbers from 1 to 5 but delegates to secondGenerator() after producing 2, then the values produced by firstGenerator() will be:
1, 2, 10, 11, 12, 13, 14, 15, 3, 4, 5
http://stackoverflow.com/questions/17491779/delegated-yield-in-generator-functions