• Где узнать всё о семантике вёрстки?

    hvdd
    @hvdd
    Кратко о себе
    Давайте разберёмся
    3fb27f0eccd54d829cdc6271fd558024.jpg

    Самый важный и простой шаг — лечение дивянки использование html5 тегов для разметки страницы.

    Вот здесь Вадим Макеев расскажет Вам, как и почему стоит использовать html5 теги.
    А вот здесь Ричард Кларк расскажет Вам, как и почему не стоит использовать html5 теги.
    А потом ещё можете прочитать вот эту статью, чтобы окончательно запутаться и уйти на бэк-энд.

    Но если вам это интересно настолько, что вы понимаете, что между SEO и семантикой не очень-то много общего, то можете ещё почитать вот эти статьи.

    Кстати, обязательно читайте комментарии к статьям, они тоже очень полезны.

    P.S. После просмотра этих видео вы поймете, почему картинка под спойлером очень крутая.
    Ответ написан
    1 комментарий
  • Может ли проект под лицензией MIT включать зависимости выпущенные под GPL?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Сравнение лицензий
    На сколько я понимаю, включая ссылку в документации на pm2 с примером как им пользоваться вы не будете нарушать лицензию, при этом в составе вашего ПО как зависимость этот пакет будет отсутствовать. Судя по примерам - он все равно глобально должен быть установлен, ваш же фреймворк (чисто по идее) станет подключаемой частью приложения.
    Если же pm2 будет именно частью вашего приложения - распространять придется на условиях GPL.

    На счет систем запуска процессов - посмотрите supervisord
    Ответ написан
    2 комментария
  • Можно ли asm.js модулю подменить heap-buffer без перезапуска модуля?

    bingo347
    @bingo347 Автор вопроса, куратор тега JavaScript
    Crazy on performance...
    Разобрался сам (ну и комменты от napa3um помогли), выложу тут, может пригодится кому

    Сам ArrayBuffer пока в него ничего не записать память не ест
    Но вот если в обычном js создать на его основе типизированный массив, то память съедается на размер буфера
    Пример:
    const heap = new ArrayBuffer(1 << 30); //создали буфер 1gb но память он пока не занимает
    const heapUI16 = new Uint16Array(heap); // создали типизированный массив связанный с буфером
     // здесь будет сожрана память на весь буфер (1gb + доп данные от v8)
     // + будет большой такой лок процесса пока буфер забьется нулями, что плохо

    Внутри asm.js типизированные массивы ведут себя совсем по другому, они просто связываются с буфером, но не заполняют его ничем и соответственно память не расходуется пока мы что-то куда-то не запишем.

    Собственно решение:
    Использовать в обычном js DataView для манипуляции heap извне, он так же не чем не заполняет буфер и память не ест
    Пример:
    const heap = new ArrayBuffer(1 << 30); //создали буфер 1gb
    const heapView = new DataView(heap); //интерфейс для управления heap снаружи
    
    //asm.js модуль
    const asmModule = (function(std, env, heap) { 'use asm';
    var HUI8 = new std.Uint8Array(heap); //это памяти пока не съест
    
    //...
    }({Uint8Array}, null, heap));
    
    //функция для помещения строки на heap
    function alocateString(pointer, str) {
      heapView.setUint32(pointer, str.length);
      for(let i = 0, p = pointer + 4; i < str.length; i++, (p += 2)) {
        heapView.setUint16(p, str.charCodeAt(i));
      }
    }
    
    //поместим не в начало буфера, а куда нить на позицию в 1мб длинную строку, 8кб:
    alocateString(1024*1024, 'test'.repeat(1024));
    Вуаля, после добавления в буфер 8kb расходуемая процессом память выросла так же на 8kb (ну с копейками)
    Ответ написан
    Комментировать
  • Как выполнить синхронную итерацию массива?

    Fzero0
    @Fzero0
    Вечный студент
    arr = Array.from({ length: 10 }, (v, k) => k);
    
    function timeout(val){
        return new Promise((resolve, reject)=>{
            setTimeout(()=>{
                console.log(val);
                resolve();
            }, 1000 * Math.random());
        });
    }
    (async () => {
      for (const val of arr) {
        await timeout(val);
      }
      console.log('Расчет окончен');
    })();
    Ответ написан
    Комментировать
  • Как строку преобразовать в объект?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Разбить в массив по точке-с-запятой. Затем каждый элемент разбить по запятой-с-пробелом в массив пар координат (они будут текстовыми строками "55.759906" и прогнать каждую через parseFloat чтобы стали числами:
    var coords = "55.759906, 37.622242;50.455898, 30.521481";
    coords = coords.split(';').map( e => e.split(', ').map(parseFloat));
    //[[55.759906,37.622242],[50.455898,30.521481]]
    
    // или вариант для старых браузеров:
    coords = coords.split(';').map( function(e){ return e.split(', ').map(parseFloat)});
    Ответ написан
    4 комментария
  • Где можно получить сертификат фронтенд разработчика?

    @LiguidCool
    Это все бумажки для подтирания ИМХО. Только одна ламинированная, а другая шершавая.
    Запомните раз и на всегда! Работодатель хочет заработать на вас денег! Из этого он будет смотреть что вы умеете и тут 2 варианта: вы красиво вешаете лапшу и продаёте себя, либо у вас есть портфолио работ.
    Так что по факту надежный вариант только 1 - делайте портфолио.
    От бумажки только 2 толку - увеличение ЧСВ или прохождение реальных курсов.
    Ответ написан
    Комментировать
  • Что не так с js?

    @Neyury
    Десятичные числа обозначаются через точку, а не через запятую.

    32d273a12f554fad8ed5c25fbb3d16b0.png

    Сейчас у вас получается так, что вы 100 умножаете на 0, а потом складываете 5+100+1000
    Ответ написан
    3 комментария
  • Не стартует Nginx на Ubuntu, в чем может быть дело?

    nazarpc
    @nazarpc
    Open Source enthusiast
    В том, что вы найшли статью десятилетней давности и запускаете nginx как там написано, либо сами криво приучились.
    1) sudo service nginx start вместо рукоблудия что вы написали
    2) Смотреть /var/log/nginx/error.log, там всё доступно написано
    Ответ написан
    4 комментария
  • Что выбрать для SPA?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Напишу про Ember.js

    1) Богатый интерфейс с множеством форм

    Используйте ember-easy-form

    2) Авторизация и разделение пользователей по ролям

    За роли не подскажу, а для авторизации ember-simple-auth лучший выбор, имеет несколько стратегий авторизаций из коробки, и можно дописать свои.

    3) Различные уведомления о новых событиях (пришла почта, менеджер спустил задачу, приближается срок выполнения и т.п.)

    Ember.js для работы своего хранилища использует адаптеры и сериалайзеры. Из коробки - REST, ActiveModel, Fixture. Их можно указывать для всего приложения разом, и для конкретного типа модели в частности. Мы для работы уведомлений и чата расширили адаптер и сериалайзер для WebSockets, и у нас все приложение работало через REST, а при авторизации поднимается сокетное соединение именно для этих моделей.

    5) Относительно быстрый старт для написания прототипа

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

    9c825e1346814dc480235fd95adfdbf7.jpg

    , нужно будет понять что переопределять и как, хотя тут может помочь какое-нибудь готовые решение.

    Материалы для изучения с официального сайта уж очень поверхностны на первый взгляд, а где смотреть готовые примеры не нашел.

    Я работаю примерно по такой схеме:
    1. Так как модели в DS по сути повторяют структуру БД (реляционной), начинаю я с созданя моделей. Если API не готов, использую FIXTURES.
    2. Затем пишем роутер, для нужного раздела.
    3. Если требуется - контроллер + темплейт делаются обычно одновременно так как взаимосвязаны.
    4. В зависимости от задачи, дописываются компоненты, расширяются классы и пр., если задача еще не решена, переходим к пункту 1.

    Возможно ли с ним быстро "стартануть" и сделать некий прототип приложения?

    Попробуйте написать прототип, без вещей которым могут вызвать сложности, если понравиться все походит, добавите и авторизацию и сокеты и пр.
    Ответ написан
    Комментировать
  • Где найти DOM дерево иерархии прототипов?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Там не всё так просто. Реализованы интерфейсы (Web IDL).
    Список интерфейсов можно встретить и в HTML5, и в DOM Core.

    В одной из предыдущих версий DOM Core можно найти картинку с пояснением, как это работает для элемента. На ней видно, что eventTarget подмешивается к основной модели (в нижней части Mixin prototype object).

    PrototypeRoot-example.png.

    Ну а полной графической версии всех интерфейсов не встречал, да и сомневаюсь в её наличии. Например, есть интерфейс Attr — в какую цепочку его воткнуть?..

    А вот архитектуру DOM встречал:)

    dom-architecture.png
    Ответ написан
    1 комментарий