• SAP UI5 и окна подтверждений: снова о контексте
    0
    Благодарю за внимание к мелочам, однако скажу следующее:
    Оператор delete удаляет свойство из объекта. В данном случае объектом является this, а полями — ссылка на родительскую View и функцию-обработчик. Можно присвоить и null, удалив ссылку, но само поле в объекте останется.
    Весь код модуля диалога у меня практически один-в-один (за исключением бизнес-логики) совпадает с sap'овским из урока по использованию диалогов курса ui5, в т.ч. exit.
    По поводу создания/удаления диалога: самая затратная операция здесь — подгрузка xml-фрагмента, и именно она выполняется лишь первый раз. Ну а инициализация начальными значениями полей объекта при новом открытии — штука необходимая.
  • Заметка о void в JavaScript и TypeScript
    +1
    Не понял, зачем вообще огород городить, явно указывая void/undefined. Вот же:
    var f1 = () => {
        // dosmth
        return;
    },
    f2 = () => {
        // dosmth
    };
    console.log(f1(), f2());
    

    undefined undefined
    
  • Node.js и новый фронтенд в вебе
    0
    Нет.
    Зачем паясничать, вроде и так понятно что я имел в виду — при продакшне и так проблем хватает, зачем «искуственно» добавлять ещё и связанных с кривостью особенностью языка?

    Я сужу по своему опыту: развёртывание и сопровождение сайтов на python+django, либо node.js — значительно проще и очевиднее чем написанных на php.
    Конечно, дело в опыте, но меня удивляли советы действительно опытных php-программистов по устранению тех или иных проблем — настолько это порой было неочевидно.
  • Node.js и новый фронтенд в вебе
    0
    Я не совсем понял что вы хотели сказать, но вы достучились до моего сердца!
  • Node.js и новый фронтенд в вебе
    +1
    в php отладка — это один из основных плюсов языка, большинство разработчиком даже дебагером не пользуются, т.к. язык изначально выбрасывает всю нужную информацию.

    Ну не скажите. С node.js у меня не было трудноуловимых проблем на продакшне только из-за того что где-то в каком-то конфигурационном php.ini-файле установлено значение, отличное от девелопмент-сервера.
    И я всегда уверен, что js-скрипт либо отработает на «отлично», либо корректно обработает ошибку и опять же что-то ответит, а не молча проигнорирует ошибку (или не проигнорирует — надо глянуть в конфиг!) и продолжит. Или не продолжит.

    К слову, Webstorm — очень удобный отладчик, и совсем не страшный даже учитвая асинхронность node.js.

    PS. и вообще, в php плохо всё.
  • Нам не нужен ваш кофе
    +2
    Ну на счёт востребованности всё же не соглашусь: выбирая из двух кандидатов, я бы отдал предпочтение более «сильному» javascript-программисту, которого можно легко научить coffee script'у, нежели более «слабому», но знающему CS.
  • RESTful API на Node.js + MongoDB
    0
    Не могу себе представить более правильную IDE, нежели Webstorm :)
    Отмечает как warning. И вот кроме конкретно этого случая — хендлинга ошибок экспресса — подобные варнинги очень информативны и полезны.
    А если использовать ещё и встроенные JSLint и JSHint…
  • RESTful API на Node.js + MongoDB
    0
    А уж использовать next внутри функции, или нет, это на усмотрение разработчика.

    А IDE ругается — unused parameter next
    и приходится ставить костыли а-ля
    if (next) {}
    

    чтобы было хоть какое-то упоминание функции, хех.
  • RESTful API на Node.js + MongoDB
    0
    Поясните пожалуйста, зачем в функции обработок ошибок передаётся параметр next, если он не используется в теле функций?
  • Comment from a drafted post.
  • NodeJS красивый, модульный, объектный или делаем его таким с помощью redis и nohm
    0
    «middleware» прослойки роутов удобнее группировать и задавать в виде массива.
    например:
    // ..
            mwLogged = [auth.isLogged, auth.checkUser],
            mwAdmin = [auth.isLogged, auth.checkUser, auth.isAdmin];
    // ..
        app.post('/user/login', routes.user.login);
        app.get( '/user/logout', mwLogged, routes.user.logout);
        app.post('/user/list', mwAdmin, routes.user.list);
        app.post('/user/add', mwAdmin, routes.user.insert);
    
  • Вертикальная черта, затем ноль
    +4
    Ну дык это и не магия — а просто несколько нестандартное использование привычного инструмента.
    Так, например ''+x всегда возвращает строку, +x — число, !!x — булевское значение. Тоже, казалось бы, ничего магического — но при этом удобная штука для быстрого приведения типов.
  • Изометрический сапёр на LibCanvas (html5)
    +1
    Ох, сколько раз я подобную ситуацию встречал, играя в стандартного виндового сапёра. Ну и в жизни тоже, хе-хе.
  • Ошибка 451, ошибкою 404 имитируемая
    0
    Ошибка 451: Поросёнок Пётр.
  • Прохождение капчи «Лабиринт» на Javascript
    0
    Это тонкий ход — дать возможность программистам и поиграть, и подзаработать (продавая скрипты игрокам).
    А там, глядишь, авторов лучших скриптов и на работу позовут, хех.
  • Решение проблемы «EMFILE, too many open files»
    0
    В первоначальной версии программа упадёт только если ни открытие, ни запись в файл не вернули ошибку, а закрытие внезапно ДА.
  • Решение проблемы «EMFILE, too many open files»
    0
    Да, пожалуй, правильнее действительно использовать асинхронную версию.

    Однако на практике это вряд ли даст сколько-нибудь заметный прирост в производительности — всё-таки закрытие файла — операция шустрая.

    Сейчас подредактирую пост. Дьявол кроется в мелочах.
    Спасибо.
  • Решение проблемы «EMFILE, too many open files»
    0
    Нет, дело не в этом — если бы я использовал асинхронную версию close, то ф-ию callback приходилось бы вызывать всё равно в её коллбеке:
    // синхронная версия
    fs.closeSync(file_handle);
    callback();
    
    // асинхронная версия
    fs.close(file_handle, function () {
        callback();
    });
    

    Так что по сути разницы никакой — в обоих случаях сначала закрываем файл, и только потом рапортуем о том что можно открывать следующий.
  • Решение проблемы «EMFILE, too many open files»
    +1
    Только тем, что не попался мне на глаза раньше. Ну а теперь и смысла в нём нет.
  • Решение проблемы «EMFILE, too many open files»
    +2
    И до каких пор поднимать? Предпочитаю прогрессивные решения.
  • Простой сайт с возможностью авторизации на node.js
    +1
            hasPrivilege: function (priv) {
                return function (req, res, next) {
    
    // тут всяко-разные проверки - по свойствм req.session смотрим, имеет ли данный 
    // пользователь привилегию priv и если да - result=true.
    // ну а далее либо просто передаём управление дальше если всё ок, 
    // либо передаём ошибку "недостаточно прав"
    
                    if (result) {
                        next(); 
                    }
                    else {
                        next({ msg: const.ERR_AUTH_PERMISSION_DENIED, status: 403 });
                    }
                };
            }
    
  • Изучение Node.js от начала до конца на практике. Часть 1
    –1
    И ещё. Думаю, будет нелишним собрать в одном месте всякие полезные плюшки, типа такой:

        var mem,
            oldmem;
    
        setInterval(function () {                               
    // выводим кол-во занимаемой памяти только если оно изменилось с последнего замера
            mem = process.memoryUsage().rss;
            if (mem != oldmem) {
                console.log('Memory usage, MB: ' + (mem / (1024 * 1024)).toFixed(3));
            }
            oldmem = mem;
        }, const.MEM_OUTPUT_INTERVAL);
    


    Так, тестируя проект, можно интерактивно наблюдать за кол-вом потребляемой памяти. Впрочем, сейчас есть куча способов следить за этим с помощью стороннего софта, но вышеприведённый код я написал ещё давно, хех.
  • Изучение Node.js от начала до конца на практике. Часть 1
    –1
    По поводу оформления модулей: структура, которую я привожу ниже, кажется мне более изящной:
    someunit.js
    var someunit = function () {
        "use strict";
                                                // private переменные и методы
    // ..
            
        return {
                                                // public переменные и методы
    // ..
        
    }();
    
    module.exports = someunit;  
    
  • Изучение Node.js от начала до конца на практике. Часть 1
    –1
    Я делал так:
    В самом конце файла routes.js (у меня все маршруты в одном файле) вставляю примерно такой код:

    app.use(errorNotFound);
    
    function errorNotFound (req, res) {
        var html = utils.acceptHtml(req); 
    // ф-ия acceptHtml смотрит заголовок запроса и -
    // если true, то генерим ответ в виде html, иначе в json
    
        if (html) {
            res.writeHead(404);
            res.end('error 404\n' + 'url ' + req.url + ' (' + req.method +') was not found on the server.');
    // res.end по желанию можно заменить например на res.render('404', { params: params })
        }
        else {
            res.json({ error: const.ERR_ROUTES_404 });
        }
    }
    
  • Лексическая область видимости функций в JavaScript
    –1
    Толково написано.
    Вот только когда речь идёт о замыканиях, сразу вспоминаются утечки памяти — и на этом аспекте хорошо бы остановиться подробнее. Дабы начиная использовать этот мощный инструмент JS, люди не делали таких трудноотлавливаемых ошибок.
  • Робот-разведчик на Ubuntu и Node.js
    –1
    Google V8 Benchmark ;)
  • Маленькие хитрости: автоматическое восстановление вида указателя курсора
    +3
    *чешет затылок*
    А я по-старинке делал что-то типа
    procedure busy(flag: boolean);
    begin
        if flag then
            screen.cursor:=crSQLwait
        else
            screen.cursor:=crNormal;
        PanelWait.visible:=flag
    end;
    

    Ну и перед тяжёлыми вычислениями вызывал busy(true), а по завершении — busy(false).
  • Web-разработка на node.js и express. Изучаем node.js на практике
    0
    Сейчас в 99.9% случаев падение происходит из-за своей ошибки. И правильный подход будет — вычислить её и исправить.

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

    Разного рода «перезапускатели» создают вокруг node.js атмосферу ненадёжности, хотя это не так.

    Да к чёрту атмосферу — те кто написал что-то более-менее серьёзное на ноде, понимает что из себя представляет этот инструмент, и это зачастую положительная оценка.
    Тот же популярный apache тоже временами падает, и ничего.

    В общем, я конечно же за правильный код, но перестраховаться не помешает.
  • Web-разработка на node.js и express. Изучаем node.js на практике
    –1
    Кстати да — по поводу развёртывания проекта есть вопрос: какими средствами удобнее пользоваться для поддержания проекта в запущенном состоянии?
    Скажем, cron, который дёргает localhost:3000/ раз в минуту, и перезапускает проект в случае если тот не откликается — по-моему ужасный костыль.
  • Web-разработка на node.js и express. Изучаем node.js на практике
    0
    Да, но при таком подходе не столкнусь с проблемой, что на боевом сервере программа будет работать некорректно из-за того что на локальной машине (на которой всё тестировалось), другие версии модулей.
    Обновил lib локально, проверил, работает? — закидывай на сервер и будь уверен в работоспособности.
  • Web-разработка на node.js и express. Изучаем node.js на практике
    0
    Расскажите, пожалуйста, чуть подробнее про package.json.
    Его смысл я понимаю, но практическая ценность не совсем ясна: в частности, вместо того чтобы указывать в нём версии и зависимости, я, подключаю модули не из node_modules, а из папки ./lib своего проекта (конечно же, предварительно положив туда их исходные коды).
    Таким образом при развёртывании проекта на сервере я не забочусь об установленных пакетах и их версиях, а просто копирую всю папку проекта со своей машины — и потому получаю стопроцентно работающий проект.
    Какие плюсы-минусы и такого подхода?
  • FuckItJS: принудительное исполнение JavaScript-кода
    0
    Ну наконец-то мои скрипты заработают…
  • Энергонезависимое решение
    0
    Ну вот, если бы не парочка дурацких комментариев, получился бы пост добра…
  • Как отличить версию iPad в Safari
    +5
    Предполагаю что речь о программе с имущественным цензом.
  • Brackets — Open Source IDE для веб-разработки от Adobe
    0
    Могу вызваться добровольцем, дабы помочь вам взрастить проекты!
  • Встречайте WebMatrix 2 RC: поддержка Node.js, Jade, EJS, LESS, CoffeeScript и многое другое
    +4
    «Более лучше» — это же мем!
  • Приватный чат на node.js — что может быть проще?
    0
    Мне интересно всё новое, но групповое использование канваса прям заинтересовало :)
    Я вообще что имел в виду — вот недавно пост был о роутинге в node.js — и имхо это было изобретение велосипеда, причём не лучшего.
    Потому и говорю — от примеров и подробного описания более прикладных задач, нежели хитрого чата, пользы будет больше.
  • Приватный чат на node.js — что может быть проще?
    0
    Вот-вот.
    Node.js — любопытная платформа, но информации по ней не так уж много, а судя по разделу q&a далеко не все даже знают основы.
    И очередной пост — опять чат — тема, которая на здесь уже не раз была.
    Писать посты нелегко, но давайте всё же в их основу вкладывать какую-то новизну?
  • Простой сайт с возможностью авторизации на node.js
    0
    Отдельный рукописный модуль — auth.js, в котором как раз и описаны функции проверки.
    Могу описать подробнее, если надо.
  • Простой сайт с возможностью авторизации на node.js
    0
    Как вариант. Но я использую другой подход, который даёт больше гибкости — проверка на уровне прослоек маршрутов:
    var //...
        middleWare_isLogged = [auth.checkUser],
        middleWare_canEditUsers = [auth.checkUser, auth.hasPrivilege('editUsers')];
    
    app.get('/', function (req, res) {
    // просто отдаём страницу
    
    // some code here
    });
    
    app.get('/users', middleWare_isLogged, function (req, res) {
    // проверям, залогинен ли пользователь
    
    // some code here
    });
    
    app.post('/users/edit', middleWare_canEditUsers, function (req, res) {
    // проверяем, имеет ли залогиненый пользователь привилегию "editUsers"
    
    // some code here
    });