• Не срабатывает removeClass в скрипте как исправить?

    dummyman
    @dummyman
    диссидент-схизматик
    document.body.classList.remove('mobile-menu-open')
    Ответ написан
    Комментировать
  • Актуален ли ассемблер?

    dummyman
    @dummyman
    диссидент-схизматик
    В целом, ассемблер актуален. Начинать ли с него... ну это здорово. Но, вы должны понимать, что на сколько глубоко вы бы изучали ассемблер, до решения прикладных задач вам, все равно, очень далеко. То есть, это может демотивировать вас. Говоря о себе, первым языком я освоил Си. Вторым - ассемблер. И только с изучения ассемблера смог делать разные прикольные вещи, то есть, решать прикладные задачи. Но программировал при этом на Си, для доса. На винду пересел только в 1997. Многие более старшие коллеги начинали с ассемблера, т.к. на тот момент вообще ничего не было. Си с плюсами мне как то не очень нравился, и не нравится по сей день. Сейчас, в основном, bash, javascript и python.
    Ответ написан
    Комментировать
  • Как сделать подобный интерактивный 3D план?

    dummyman
    @dummyman
    диссидент-схизматик
    Извиняюсь, поздно ответил на вопрос. Все это и многое другое, не показанное на сайте "Русский Дом" реализуется с помощью openlayers.
    Если непонятно как, спросите у этих ребят, у них тоже много опенсурсных проектов. Возможности openlayers можно заценить на демке на главной странице https://www.mapbox.com/ http://projectatlas.io. Да если обладать фантазией можно сделать и круче

    Нашел еще одну прикольную демку c 3d-домами на openlayers
    osmbuildings.org
    Ответ написан
    Комментировать
  • Где здесь утечка памяти?

    dummyman
    @dummyman
    диссидент-схизматик
    Во первых, вы неправильно используете анонимные функции, например
    const startTimer = (){ ... }
    и все остальные.
    Анонимные функции можно использовать только в ситуациях, когда их вызывают "не по имени" для сохранения контекста. Например, аргументом forEach().
    В данной ситуации лучшей синтаксической формы ничего не придумали:
    function startTimer(){ ... }
    Второй момент
    for ( const key in _headers ) {
            if ( {}.hasOwnProperty.call( _headers, key ) ) {
                headers.append( key, _headers[ key ] );
            }
        }

    и конкретно
    if ( {}.hasOwnProperty.call( _headers, key ) )
    Вы в цикле каждой итерацией создаете новый объект, это крайне не рациональное использование метода hasOwnProperty()
    по мне
    if (_headers != null && !!_headers[key] )
    может выглядело бы не так красиво, за то потребляет памяти по-меньше.
    Третий момент
    .catch( console.error )
    Вы можете немного сэкономить памяти использовав как раз по назначению анонимную функцию
    .catch( e => console.error(e) )
    В этом случае интерпритатор не будет искать ссылку на console.error при создании каждого промиса, и будет искать, соответственно, только в исключитальных ситуациях.
    Четвертый момент
    Поменьше пользуйтесь ключевым словом const, особенно, внутри методов и функций. Во-первых, так как они не выгружаются из памяти. Во вторых, const не дает никаких преимуществ в производительности, только лишь накладывает на интерпритатор обязанности следить чтобы ее случайно не перегрузили.
    Ответ написан
  • Необходимые знания для моделирования геометрических объектов на js?

    dummyman
    @dummyman
    диссидент-схизматик
    Начать можно с рафаэля https://dmitrybaranovskiy.github.io/raphael/
    Ответ написан
    Комментировать
  • Идеальная база данных для хранения большого числа уникальных строк?

    dummyman
    @dummyman
    диссидент-схизматик
    Я раньше очень часто пользовался базой Пастухова.
    Теперь мне хватает ключевиков, собранных собственным трудом.
    Но принцип хранения не поменялся - текстовый файл рулит!
    Позже прикрутил индексы на первые 6 байт в каждой строке и на первые 2 байта в каждом слове (кодировка cp1251).
    Короче, удобно хранить, копировать, использовать на разных компьютерах запуская прямо с флешки, максимальная скорость работы!
    Ответ написан
    Комментировать
  • Можно ли делать клон [железной] игрушки?

    dummyman
    @dummyman
    диссидент-схизматик
    Вот не надо подходить к делу по-еврейски, решайте проблемы по мере их появления.
    Зачем по зашквару думать? Надо делать! А потом будешь думать, что будешь делать!
    Компания Лего тоже 1000 раз подумает стоит ли судиться с тобой, что, чем и как будут доказывать суду.
    Если по юридическим вопросам задумываться - вы сможете сделать первое изобретение ровно в тот момент, когда падут все мировые правительства.
    Ответ написан
  • Как поправить код, что бы отсчет прошедшего времени от даты создания был от 1 до 12 месяцев?

    dummyman
    @dummyman
    диссидент-схизматик
    Я бы советовал обратить внимание на js-библиотеку https://momentjs.com/
    moment("20111031", "YYYYMMDD").fromNow(); // 5 лет назад
    moment("20120620", "YYYYMMDD").fromNow(); // 5 лет назад
    moment().startOf('day').fromNow();        // 10 часов назад
    moment().endOf('day').fromNow();          // через 14 часов
    moment().startOf('hour').fromNow();       // 12 минут назад
    
    moment().subtract(10, 'days').calendar(); // 02.04.2017
    moment().subtract(6, 'days').calendar();  // В прошлый четверг в 10:12
    moment().subtract(3, 'days').calendar();  // В прошлое воскресенье в 10:12
    moment().subtract(1, 'days').calendar();  // Вчера в 10:12
    moment().calendar();                      // Сегодня в 10:12
    moment().add(1, 'days').calendar();       // Завтра в 10:12
    moment().add(3, 'days').calendar();       // В субботу в 10:12
    moment().add(10, 'days').calendar();      // 22.04.2017
    Ответ написан
  • Какую систему HelpDesk выбрать для интеграции в корпоративный портал?

    dummyman
    @dummyman
    диссидент-схизматик
    Ну из совсем готовых можно посоветовать только https://trello.com/
    а если чуть "подадминить", то можно на основе сервера taskwarrior собрать.
    Тут есть список прикручиваемых фич https://taskwarrior.org/tools/
    Ответ написан
    Комментировать
  • Не работает плавный скролл Jquery. В чем ошибка?

    dummyman
    @dummyman
    диссидент-схизматик
    Вот бог его знает что там у вас не так, уже нет времени разбираться. Я вам оставлю мою версию демо-странички для плавного скролинга, там все в одном jade-файле
    doctype html
    html
        head
            style.
                html, body {background: white; background: #2c2c2c; }
                body, div { margin: 0; padding: 0;}
                html, body { width: 100%; height: 100% }
                body { padding-top: 50px; }
                nav { position: fixed; top: 0; height: 50px; width: 100%; background:#444444; border: 1px solid #313131; z-index: 1000; }
                nav ul { text-align: center; }
                nav ul li { display: inline-block; }
                nav ul li a { color: #D07C40; display: inline-block; text-decoration:none; margin: 0 7px; font-family: Diskoteque;  text-shadow: 0 0 0.5em #241600, 0 0 0.1em #000000; }
                nav ul li a:hover { color: #94D040;}
                nav ul li a:visited { color: #EFC75E; }
                nav ul li a:focus { color: #94D040; }
                nav ul li a:target { color: #94D040; }
                nav ul li a:active { color: #94D040; }
                .anchor { display: block; position:absolute; margin-top: -60px; }
                .photo { object-fit: contain; margin: 0 auto; position: relative; padding: 10px; margin: 15px 10px; background: white; box-shadow: 2px 2px 5px black;}
                .photo.hor { width: 640px; height: 480px; }
                .photo.vert { width: 480px; height: 640px; }
                .photo .num { position: absolute; z-index: 100; color: red; font-family: Tiza; width:2.5em; height: 2.1em; text-align: center; margin: .5em 0 0 .2em; }
                .photo img { width: 100%; height: 100%; display: block; margin: 0 auto; position: relative; max-width: 100%; max-height: 100%; object-fit: contain; }
                .photo .filename {position: absolute; z-index: 100; width:100%; height: 1.5em; margin-top: -2.1em; padding: .2em; }
                .photo .filename span { display:inline-block; color: #96969c; text-shadow: 0 0 0.5em #101c5d, 0 0 0.1em #000000; font-family: ZOMBIFIED; padding: .4em .2em 0 .2em; }
            script.
                function scrollTop(to, duration) {
                    if (document.body.scrollTop == to) return;
                    var diff = to - document.body.scrollTop;
                    var scrollStep = Math.PI / (duration / 10);
                    var count = 0, currPos;
                    start = document.body.scrollTop;
                    scrollInterval = setInterval(function(){
                        if (document.body.scrollTop != to) {
                            count = count + 1;
                            currPos = start + diff * (0.5 - 0.5 * Math.cos(count * scrollStep));
                            document.body.scrollTop = currPos;
                        }
                        else { clearInterval(scrollInterval); }
                    },10);
                }
    
                function scrollTo(e)
                {
                    e.preventDefault();
                    e.stopPropagation();
                    //var dest = document.getElementById(elID);
                    var destName = this.hash.substr(1);
                    if(destName.length> 0){
                        var dest = document.querySelector('a[name='+destName+']');
                        var destRect = dest.getBoundingClientRect();
                        var content  = document.querySelector('.content');
                        var contentRect = content.getBoundingClientRect();
                        var bodyRect = document.body.getBoundingClientRect();
                        var contentHeight = contentRect.height + 120;
                        var bodyHeight = bodyRect.height;
                        var offsetTop = destRect.top - bodyRect.top;
                        if(offsetTop > contentHeight - bodyHeight)
                            offsetTop = contentHeight - bodyHeight;
                        scrollTop(offsetTop, 200);
                    } else {
                        scrollTop(0, 200);
                    }
                }
        body
            nav: ul
                each photo, idx in photoList
                    li.item: a.nav-link(href="#"+(idx > 0 ? photo.name : ''))= idx+1
            script.
                Array.from(document.querySelectorAll('a.nav-link'))
                	.forEach((a)=>a.addEventListener('click', scrollTo));
            .content
                each photo, idx in photoList
                    div(style='clear:both;')
                    a.anchor(name=photo.name)
                    div(class=photo.vertical?'photo vert': 'photo hor')
                        .num
                            span= idx+1
                        img(src='file://'+photo.path)
                        .filename
                            span= photo.name
    Ответ написан
    Комментировать
  • Какая программа менеджмента паролей подойдет для совместной роботы в IT отделе?

    dummyman
    @dummyman
    диссидент-схизматик
    Тов Сергей прав, KeePass, расшаренный через Dropbox подойдет.
    Но есть одна особенность, открыв файл с базой паролей в одном месте, KeePass рядом создает lock-файл. Если не закрыв в одном месте, попытаться открыть в другом, выдаст сообщение о том, что база где-то уже открыта. Потому папку, где хранится база паролей, необходимо защитить от записи. Если у вас есть сервер, и не хочется покупать Enterprise-версию Dropbox, можно использовать бесплатно, установив на свой сервер ownCloud
    Ответ написан
    Комментировать
  • Как получить название метода внутри метода?

    dummyman
    @dummyman
    диссидент-схизматик
    Писал на вскидку, могут быть косяки, не судите строго
    "use strict";
    var test={
      blabla:function(){
        console.log(fullTrace()[1].funcName);
      },
      blabla1:function(){
        console.log(fullTrace()[1].funcName);
      },
      blabla2:function(){
        console.log(JSON.stringify(fullTrace(), null, 4));
      }
    };
    
    (function start(){
        test.blabla();
        test.blabla1();
        test.blabla2();
    })();
    
    function fullTrace(){
        let stack;
        try{ throw Exception() } 
        catch(e) { stack = e.stack.split(/\n/g); }
        /* exp msg */ stack.shift();
        return stack.map(s => { 
            let row = s.replace(/^\s*at\s+/,''), m;
            if(m = row.match(/([^\s\(]+) \(([^:]+):(\d+):(\d+)\)/))
                return {funcName:m[1],filePath:m[2],strNum:m[3],colNum:m[4]}
            else if(m = row.match(/([^:]+):(\d+):(\d+)/))
                return {filePath:m[1],strNum:m[2],colNum:m[3]}
        } )
    }

    выведет
    Object.blabla
    Object.blabla1
    [
        {
            "funcName": "fullTrace",
            "filePath": "<anonymous>",
            "strNum": "22",
            "colNum": "10"
        },
        {
            "funcName": "Object.blabla2",
            "filePath": "<anonymous>",
            "strNum": "10",
            "colNum": "32"
        },
        {
            "funcName": "start",
            "filePath": "<anonymous>",
            "strNum": "17",
            "colNum": "10"
        },
        {
            "filePath": "<anonymous>",
            "strNum": "18",
            "colNum": "3"
        }
    ]
    Ответ написан
    Комментировать
  • Интерфейс для бота?

    dummyman
    @dummyman
    диссидент-схизматик
    Посмотрите примеры к программе slimerjs. Разберитесь, что они делают, запустите их по очереди, понаблюдайте, как это работает...
    Сначала из документации, потом переходите на примеры из исходных кодов:
    https://github.com/laurentj/slimerjs/tree/master/e...
    https://github.com/laurentj/slimerjs/tree/master/test
    Ответ написан
    Комментировать
  • Как решить проблему с созданием ноды на isp vm manager kvm?

    dummyman
    @dummyman
    диссидент-схизматик
    Смотрите, тут на модели постарее без проблем завели debain. Есть возможность установить LHG для экспресс-теста по совместимости "ядро-железо"?
    Ответ написан
  • Как запретить ребёнку просмотр видео на Squid3?

    dummyman
    @dummyman
    диссидент-схизматик
    Squid вам уже не поможет. Время кальмара уже близко к окончательной бесполезности в качестве фильтра. Теперь либо устанавливать настройки Google-аккаунта, благо они довольно гибкие. Либо как запасной вариант происталить скрытый userscript во все браузеры. Чтобы было неприметно, подобрать ему правильные иконку и название. Принимать решения блокировать или нет, можно на том же сервере где стоит squid. Но в любом случае что-то придется настраивать на самом гаджете, MitM-атаку постоянно проводить не получится.
    Ответ написан
    2 комментария
  • Какой фон лучше сделать на сайте для текста?

    dummyman
    @dummyman
    диссидент-схизматик
    У Adobe есть отличный инструмент по подбору цветов
    https://color.adobe.com/create/color-wheel/
    Вот здесь есть немного теории
    www.tigercolor.com/color-lab/color-theory/color-ha...
    А здесь можно подобрать пример для себя
    iterm2colorschemes.com
    Я постоянно работаю с небольшим количеством серверов, но все равно путался, стал для управления каждым подбирать свои цвета, но это не просто сайт, мне за этими терминалами каждый рабочий день приходится сидеть...
    Ответ написан
    Комментировать
  • Как прочесть отдельные части текстового файла в C++?

    dummyman
    @dummyman
    диссидент-схизматик
    не знаю, как вы, а я бы для таких целей использовал бы awk
    Ответ написан
  • Почему не подключается внешний скрипт?

    dummyman
    @dummyman
    диссидент-схизматик
    во-первых, уже лет 10 все используют querySelector вместо getElementById и getElementsByClassName.
    во-вторых время выполнения скрипта, так, как вы его подклдючили, - до появления элемента #scroller на странице.
    document.addEventListener("DOMContentLoaded", function(event) {
       
    var scroller = document.querySelector('#scroller');
    var main = document.querySelector('.main');
    var other = document.querySelector('.other');
    var container = document.querySelector('.container');
    
    scroller.onclick = function () {
      var topPosition = getComputedStyle(container).marginTop;
      container.style.marginLeft = parseInt(topPosition) - window.innerHeight + 'px';
    }
    
      });
    Ответ написан
    3 комментария
  • Перемещение элементов по DOM?

    dummyman
    @dummyman
    диссидент-схизматик
    Все правильно, оберните текст в <span> и работайте с ним из span.text();

    $('.tn-manager').text() выдаст вам не только текст непосредственно внутри себя, а весь текст, встречающийся в нем и в дочерних элементах. Соответственно, $this.text('') удаляет по тем же принципам.
    Ответ написан
    Комментировать
  • Влияют ли следующие факторы на сео?

    dummyman
    @dummyman
    диссидент-схизматик
    Походу, сеошник там что-то свое мутит, что ж... делать придется... тут (по ситуации) главное, не мешать людям...
    Конкретно по вопросам:
    1. сложно сказать, позитивно повлиять может, но временно. вообще, прятать что-либо в h1 и тому подобных сеошных тэгах может привести к фатальным результатам.
    2. тут по обстоятельствам, зависит все от содержания.
    3. тут тоже полезность спорна, но я бы делал файлом, может, чтобы пользователи не видели, а может и поисковики...
    4. по ссылкам так: может быть, сеошник собирается вставлять ссылки в неуместные для человека места, в этом случае seo-ссылки визуально должны быть максимально приближены к тексту и "не выделяться" из общей картины. Скорее, это больше для восприятия людьми, чем как-либо влияет на seo.
    5. такие ошибки исправляет и сам бутстрап, не думаю что необходимо бежать вперед паровоза, периодически обновляйте версии. время течет, все меняется, что раньше было правильно, завтра будет выдавать warning.
    6. по сертификатам верно следующее утверждение: чем дороже серт, тем он лучше. Правда, тут маленькая поправка на реселеров. Некоторые сертификаты можно купить за разные деньги у разных реселеров - тут уже надо смотреть.
    Ответ написан
    2 комментария