Pull to refresh
4
0
Send message
Для примера рассмотрим код ECMAScript 2015:
Хм… Все еще пользуюсь промисами, как и многие другие. На самом деле, код гораздо проще и читабельнее, чем в статье. Возвращать new Promise из then() — глупо. Как я бы переписал:

function apiDoSomethingMoreComplex(withThis) {
    const urlA = '...';
    const urlB = '...';

    httpLib.request(urlA, withThis)
        .then(result => {
            const parsed = parseResult(result);
            return database.update(updateStatement, parsed);
        }).then(result => {
            return httpLib.request(urlB, result);
        }).then(result => {
            return worker.processData(result);
        }).then(result => {
            logger.info(`apiDoSomethingMoreComplex success (${result})`);
        }).catch(error => {
            logger.error(error);
        });
}

Добавил .catch() — похоже на try, видно, где отлавливаются ошибки. Убрал вложенный new Promise.


Здорово, что ввели async/await, но программировать с промисами не сильно сложнее. Обещаю, что буду использовать Babel

Проблема реализации в том, что такой язык все еще не естественный. И по сути это:
meaningful.query('добавить {} Земля {} в {} planets', { execute: true });
не сильно отличается от
planets.push(Earth);
Да и {скобки} все еще напоминают о тупости программ. Если бы можно было в добавить Земля в planets находить ключевые слова, (добавить, в) решение уже можно было бы использовать.
Было бы из-за того, что решение

function getVolumeOfBall(diameter) {
    if (diameter === 2)
        return 4.1887902047864;
    if (diameter === 142984)
        return 1530597322872155.8;
}

не подходит. Код должен мыслить иначе:

function getVolumeOfBall(diameter) {
    return Math.PI * 4 / 3 * Math.pow(diameter / 2, 3);
}

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

PS.
expect(planets).toEqual([ 'Земля', 'Юпитер' ]);
Тогда уж лучше будет
meaningful.query("{группа} Земля, Юпитер {должна являться значением} planets", {execute: true});


PPS.
eval(list + '.push(\'' + element + '\')');

Убивал Наказывал бы за такой код. Ну почему, почему нельзя сделать так?
window[list].push(element);
 В любом случае, смысл остается.

За Mozilla подписался CEO. Tor Project опубликовали твит. Так что все грустно.

Собственно, репа из оп-поста косвенно это подтверждает — 1200 подписей за против сотни лайков в issue от imachug с предложением против.

Не-а. Владелец репозитория закрыл доступ к issue на запись, так что все лайки старые. Цензура. Та сотня собралась за первые 3 часа. Сейчас их гораздо больше на https://rms-support-letter.github.io

Я черканул пару строк в GitHub issue против этого 'письма', ожидаемо, ее сразу закрыли, но за пару часов человек 20 отметились, так что адекватные люди есть. Никто еще не писал письмо 'против'? :)

А что это за утилита wtf в начале поста?

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

А в случае шеринга ключа на несколько клиентов — любой может представляться любым.

Нет, если для шифрования и аутентификации используются разные ключи.

10 участников могу сгенерировать общий ключ для симметричного шифрования. Не совсем классический end-to-end, но условие, что сервер не может расшифровать данные, сохраняется.

Обновления должны выполняться экономно, поскольку при каждом изменении, которое вы вносите в двоичный объект, пространство для его хранения удваивается.

Насколько я помню, это не так. Если в бинарнике изменилась небольшая часть, то в паках git не будет сохранять обе версии целиком, будет храниться только diff. А без паков дублируются не только бинарные объекты, но и текстовые тоже.


Хранить в репозитории бинарники — плохая идея, но не по соображениям занимаемого места.

Сравнение всегда обозначалось как >= — "больше или равно", а не символами =>. PHP, например, спокойно использует последние в определении массивов.

Почему же? Переход из real mode в protected mode никто не отменял.

Кстати, вы по сути описали то, как peer discovery сделан в ZeroNet. Любой может поднять трекер с помощью встроенного плагина (дальше просто даешь остальным IP или домен). Пиры сохраняются в peers.json. Руками тоже можно добавить, но тут придется руками peers.json менять, а не через UI, это минус.

Нда… Главное, нельзя сказать, что это вообще имеет смысл. Не хочу флеймить, но чем SOLID лучше ZeroNet? Вон, в зеронете есть форумы, соцсеть, вики, чаты, даже какой-то прототип онлайн-игр (disclaimer: мой) и т.д. При этом, о нем мало кто знает. Но стоит Бернерсу-Ли объявить о платформе (которая умеет гораздо меньше), как сразу начинает бурлить весь интернет… Это как?

Ну, нет. Давно уже сделали PEX. Привязку к трекерам можно отключить, руками добавить одного пира и пошло-поехало. Да, могут быть проблемы со скачиванием новых сайтов, но они решаются.

На самом деле, все проблемы из-за default — когда используешь require(), нужно постоянно добавлять .default. Случаев, когда нужно использовать одновременно и export default, и named export — ужасно мало. Проще было бы сделать export default = module.exports и import = require.

Ох, это, пожалуй, мне и не нравится в деструктизации. Постоянно забываю, в каком порядке идут переменные: src: dst или dst: src. Странно сделали — но, видимо, чтобы легче было парсить. Сравните:


const {
    authors: [
        {
            name: {
                full: fullName
            }
        }
    ]
} = post;

(да, это скорее пример непонятного кода, но все же)


И:


const {
    [
        {
            {
                fullName: full
            }: name
        }
    ]: authors
} = post;

Чтобы понять, что речь идет об авторах, нужно дочитать до конца, или читать снизу вверх, что еще хуже.


Сразу ли привык? Нет, до сих пор не привык полностью. Мне деструктизация больше нравится, когда имя переменной и свойства совпадают, например:


const {
    authors: [
        {fullName},
        ...moreAuthors
    ]
} = post;

Такой код смотрится элегантно.

Information

Rating
Does not participate
Registered
Activity