• Разница между: транспайлер, транслятор, компилятор?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Ну если в двух словах, то компиляция - процесс получения программы (исполняемые машиной команды) из исходного кода на неком языке программирования.

    Трансляция - преобразование исходного кода программы из одного ЯП в другой. Обычно компиляторы (например для C/C++) транслируют исходник в программу на асемблере, и уже потом ее компилируют.

    Что касатеся транспайлера (Transpiler) - это тот же транслятор с той лишь разницей, что у результата примерно тот же уровень абстракции, что и у исходного текста (ну например транслятор из Java в C++).

    Ссылки:
    Source-to-source compiler
    Compiler
    Translator
    Ответ написан
    Комментировать
  • Где поизучать исходные коды крупных проектов?

    matroskin13
    @matroskin13
    JavaScript developer, GO developer
    Ответ написан
    Комментировать
  • Как с помощью CSS сделать угол на блоке?

    teotlu
    @teotlu
    Навёрстываю упущенное
    Сгенерите себе вот здесь стрелочку из прямоугольника, с помощью наклона, поворота и изменения ширины, чтоб получился нужный угол. А дальше сможете к ней применить box-shadow, как к обычному элементу. Но его значения, конечно, придётся подбирать). Поддерживаться будет в IE9+.
    Ответ написан
    Комментировать
  • Как использовать API VK в Yii2?

    EagleMoor
    @EagleMoor
    PHP Yii2 RESTful API Developer
    1. Авторизоваться через oAuth yii2-authclient https://github.com/yiisoft/yii2-authclient
    2. Использовать curl для работы с vk api
    Ответ написан
    2 комментария
  • Как кешировать внешние ресурсы?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Никак.
    Ответ написан
    Комментировать
  • В чем могут помочь js фреймворки(React, Angular)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    C MVC фреймворками все понятно, но они меня не интересуют. А что делать с инструментами, нацеленными больше на фронтенд (React, Angular) ?


    Открою вам страшную тайну - MVC фреймворки как раз на фронтэнд и нацелены, а не на бэкэнд.

    ReactJS - библиотека, а не фреймворк. Это вопервых. И решает эта библиотека задачу оптимизации взаимодействия с DOM при связывании данных между представлением и моделью данных.

    Angular - полноценный фреймворк, к которому можно подключить тот же React для вьюх. Используют его в основном при реализации Single Page Application-ов.

    Были ли у вас практические задачи, с которыми мог справиться только js фреймворк? Какие?

    Все задачи можно решить на чем угодно. Вопрос в сроках и кривости. Angular позволяет организовать структуру приложения, разделить его на слои, предоставляет ViewModel... все то что писать с нуля маленький ад и скучно. Ну и опять же все можно покрыть тестами и т.д.

    Могут ли быть полезны данные инструменты в совместной работе с Rails, например?

    Если брать ангуляр - я его использую только в контексте SPA. Это может быть не все приложение а только какая-то его часть но все же... А для SPA разницы нет вообще на чем бэкэнд реализован. От бэкэнда нужна только апишка.

    Реакт же можно использовать в принципе для построения view на клиенте. Так что можно и его юзать. Зависит от задачи. Скажем если в задачи входит организация работы жирной формы - то лучше взять knockout.js. А если вам нужно рендрить какие-то данные в реалтайме - можно вооружиться реактом.

    Нужно ли вообще тратить время и искать себе задачи, которые можно решить привычным jQuery, который в большей степени знают все (вопрос дальнейшей поддержки) ?

    Куча народу знает jQuery но не знает JS. И это грусть и печаль. Скорее всего если у вас в задачах стоит реализовать слайдер какой или что-то такое то ни Angular ни React вам не нужны. Ну или в контексте сайтиков тоже не особо есть от них польза (только в специфических случаях). А вот если пишите приложения какие-то, можно уже задуматься ибо если вам придется реализовывать весь бойлерплейт, да еще и не будет DI то с высокой долей вероятности (все же нормальные разработчики существуют) вы получите шматок гуано дико связанный и приносящий боль при рефакторинге. А еще использование только jQuery это на 99% отсутствие каких-либо тестов на фронтэнде.

    p.s. Я на ангуляре пишу админки к примеру для своих проектов. Ну и все все все что вписывается в концепцию SPA. Реакт планирую использовать как альтернативу phonegap (react-native вышел), поскольку он является слоем абстракции над формированием представления (за счет промежуточного виртуального DOM).
    Ответ написан
    1 комментарий
  • Чем оптимизировать, сжимать изображения для веб?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Для png - только pngquant.org
    Использую настройки
    pngquant --force --skip-if-large --speed 1 256 --output выход вход

    Для jpeg без потерь jpegtran
    jpegclub.org/jpegtran
    настройки
    jpegtran -copy none -optimize -progressive вход выход

    Для сжатия jpeg с потерями можно что угодно взять.
    Ответ написан
    5 комментариев
  • Чем логировать ошибки frontend и backend?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    yii2 умеет из коробки
    Ответ написан
    1 комментарий
  • Стоит ли обращать внимание на валидатор?

    @IceJOKER
    Web/Android developer
    причину которой я не совсем понимаю....Может кто объяснит? - https://translate.google.com/
    Ответ написан
    1 комментарий
  • Как избавиться от нескольких сообщений, после переподключения к webSockets?

    Sanasol
    @Sanasol Куратор тега JavaScript
    нельзя просто так взять и загуглить ошибку
    не биндить события внутри подключения.

    при реконнекте срабатывает connect событие и снова все socket.onы биндятся.

    В итоге сколько реконнектов столько и дублей
    Ответ написан
    Комментировать
  • Как экономично хранить в MySQL данные о просмотрах материалов конкретных?

    silentvick
    @silentvick
    Кроме проверки IP есть смысл идентифицировать пользователя еще по какому-нибудь параметру, иначе все люди с одним адресом (серые подсети) будут считаться за одного человека. Можно добавить хотя-бы User-Agent, а в базе хранить хеш от IP+User-Agent.
    Ответ написан
    1 комментарий
  • Что выбрать для Unity3D? JavaScript или C#?

    GavriKos
    @GavriKos Куратор тега Unity
    Лучше c#. В юнити вроде не чистый JavaScript, и мануалов по шарпу для него больше.
    Ответ написан
    Комментировать
  • Nginx redirect from http to https?

    @metajiji
    Согласно официальной документации рекомендуют использовать такую конструкцию:
    server {
            listen 80;
            server_name example.com;
            return 301 https://$server_name$request_uri;  # enforce https
    #        rewrite ^(.*) https://www.example.com$uri permanent;
    }
    Ответ написан
    6 комментариев
  • Как сделать замену текста на ссылку с помощью JavaScript?

    mokeev1995
    @mokeev1995 Автор вопроса
    fullstack web dev
    так, я разобрался, всем спасибо. код

    функция для сего действия
    //------------------------------------------------------------------------------
    //-----------------------------findAndReplaceLink-------------------------------
    //------------------------------------------------------------------------------
    
    function findAndReplaceLink(inputText) {
        function indexOf(arr, value, from) {
            for (var i = from || 0, l = (arr || []).length; i < l; i++) {
                if (arr[i] == value) return i;
            }
            return -1;
        }
    
        function clean(str) {
            return str ? str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;') : '';
        }
    
        function replaceEntities(str) {
            return se('<textarea>' + ((str || '').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;')) + '</textarea>').value;
        }
        function se(html) {return ce('div', {innerHTML: html}).firstChild;}
        function ce(tagName, attr, style) {
            var el = document.createElement(tagName);
            if (attr) extend(el, attr);
            if (style) setStyle(el, style);
            return el;
        }
        function setStyle(elem, name, value){
            elem = ge(elem);
            if (!elem) return;
            if (typeof name == 'object') return each(name, function(k, v) { setStyle(elem,k,v); });
            if (name == 'opacity') {
                if (browser.msie) {
                    if ((value + '').length) {
                        if (value !== 1) {
                            elem.style.filter = 'alpha(opacity=' + value * 100 + ')';
                        } else {
                            elem.style.filter = '';
                        }
                    } else {
                        elem.style.cssText = elem.style.cssText.replace(/filter\s*:[^;]*/gi, '');
                    }
                    elem.style.zoom = 1;
                };
                elem.style.opacity = value;
            } else {
                try{
                    var isN = typeof(value) == 'number';
                    if (isN && (/height|width/i).test(name)) value = Math.abs(value);
                    elem.style[name] = isN && !(/z-?index|font-?weight|opacity|zoom|line-?height/i).test(name) ? value + 'px' : value;
                } catch(e){debugLog('setStyle error: ', [name, value], e);}
            }
        }
        function extend() {
            var a = arguments, target = a[0] || {}, i = 1, l = a.length, deep = false, options;
    
            if (typeof target === 'boolean') {
                deep = target;
                target = a[1] || {};
                i = 2;
            }
    
            if (typeof target !== 'object' && !isFunction(target)) target = {};
    
            for (; i < l; ++i) {
                if ((options = a[i]) != null) {
                    for (var name in options) {
                        var src = target[name], copy = options[name];
    
                        if (target === copy) continue;
    
                        if (deep && copy && typeof copy === 'object' && !copy.nodeType) {
                            target[name] = extend(deep, src || (copy.length != null ? [] : {}), copy);
                        } else if (copy !== undefined) {
                            target[name] = copy;
                        }
                    }
                }
            }
    
            return target;
        }
    
        var replacedText = (inputText || '').replace(/(^|[^A-Za-z0-9А-Яа-яёЁ\-\_])(https?:\/\/)?((?:[A-Za-z\$0-9А-Яа-яёЁ](?:[A-Za-z\$0-9\-\_А-Яа-яёЁ]*[A-Za-z\$0-9А-Яа-яёЁ])?\.){1,5}[A-Za-z\$рфуконлайнстРФУКОНЛАЙНСТ\-\d]{2,22}(?::\d{2,5})?)((?:\/(?:(?:\&amp;|\&#33;|,[_%]|[A-Za-z0-9А-Яа-яёЁ\-\_#%?+\/\$.~=;:]+|\[[A-Za-z0-9А-Яа-яёЁ\-\_#%?+\/\$.,~=;:]*\]|\([A-Za-z0-9А-Яа-яёЁ\-\_#%?+\/\$.,~=;:]*\))*(?:,[_%]|[A-Za-z0-9А-Яа-яёЁ\-\_#%?+\/\$.~=;:]*[A-Za-z0-9А-Яа-яёЁ\_#%?+\/\$~=]|\[[A-Za-z0-9А-Яа-яёЁ\-\_#%?+\/\$.,~=;:]*\]|\([A-Za-z0-9А-Яа-яёЁ\-\_#%?+\/\$.,~=;:]*\)))?)?)/ig,
                function () { // copied to notifier.js:3401
                    var matches = Array.prototype.slice.apply(arguments),
                        prefix = matches[1] || '',
                        protocol = matches[2] || 'http://',
                        domain = matches[3] || '',
                        url = domain + (matches[4] || ''),
                        full = (matches[2] || '') + matches[3] + matches[4];
    
                    if (domain.indexOf('.') == -1 || domain.indexOf('..') != -1) return matches[0];
                    var topDomain = domain.split('.').pop();
                    if (topDomain.length > 6 || indexOf('info,name,aero,arpa,coop,museum,mobi,travel,xxx,asia,biz,com,net,org,gov,mil,edu,int,tel,ac,ad,ae,af,ag,ai,al,am,an,ao,aq,ar,as,at,au,aw,ax,az,ba,bb,bd,be,bf,bg,bh,bi,bj,bm,bn,bo,br,bs,bt,bv,bw,by,bz,ca,cc,cd,cf,cg,ch,ci,ck,cl,cm,cn,co,cr,cu,cv,cx,cy,cz,de,dj,dk,dm,do,dz,ec,ee,eg,eh,er,es,et,eu,fi,fj,fk,fm,fo,fr,ga,gd,ge,gf,gg,gh,gi,gl,gm,gn,gp,gq,gr,gs,gt,gu,gw,gy,hk,hm,hn,hr,ht,hu,id,ie,il,im,in,io,iq,ir,is,it,je,jm,jo,jp,ke,kg,kh,ki,km,kn,kp,kr,kw,ky,kz,la,lb,lc,li,lk,lr,ls,lt,lu,lv,ly,ma,mc,md,me,mg,mh,mk,ml,mm,mn,mo,mp,mq,mr,ms,mt,mu,mv,mw,mx,my,mz,na,nc,ne,nf,ng,ni,nl,no,np,nr,nu,nz,om,pa,pe,pf,pg,ph,pk,pl,pm,pn,pr,ps,pt,pw,py,qa,re,ro,ru,rs,rw,sa,sb,sc,sd,se,sg,sh,si,sj,sk,sl,sm,sn,so,sr,ss,st,su,sv,sx,sy,sz,tc,td,tf,tg,th,tj,tk,tl,tm,tn,to,tp,tr,tt,tv,tw,tz,ua,ug,uk,um,us,uy,uz,va,vc,ve,vg,vi,vn,vu,wf,ws,ye,yt,yu,za,zm,zw,рф,укр,сайт,онлайн,срб,cat,pro,local'.split(','), topDomain) == -1) {
                        if (!/^[a-zA-Z]+$/.test(topDomain) || !matches[2]) {
                            return matches[0];
                        }
                    }
    
                    if (matches[0].indexOf('@') != -1) {
                        return matches[0];
                    }
                    try {
                        full = decodeURIComponent(full);
                    } catch (e){}
    
                    if (full.length > 55) {
                        full = full.substr(0, 53) + '..';
                    }
                    full = clean(full).replace(/&amp;/g, '&');
    
                        url = replaceEntities(url).replace(/([^a-zA-Z0-9#%;_\-.\/?&=\[\]])/g, encodeURIComponent);
                        var tryUrl = url, hashPos = url.indexOf('#/');
                        if (hashPos >= 0) {
                            tryUrl = url.substr(hashPos + 1);
                        } else {
                            hashPos = url.indexOf('#!');
                            if (hashPos >= 0) {
                                tryUrl = '/' + url.substr(hashPos + 2).replace(/^\//, '');
                            }
                        }
                        return prefix + '<a href="'+ (protocol + url).replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;') + '" target="_blank">' + full + '</a>';
                });
    
        return replacedText;
    }
    Ответ написан
    Комментировать
  • Какой CSS, HTML фреймворк выбрать для сайта визитки

    jarvis
    @jarvis
    Раз знаете bootstrap то и используйте его, на официальном сайте его можно кастомизировать и включить в сборку только необходимые компоненты.
    Ответ написан
    Комментировать
  • Backbone. Коллекция внутри модели?

    bazilio91
    @bazilio91
    tochka.com, developer experience
    Сделать коллекцию частью другой коллекции стандартными методами не получится. Почему бы просто не добавлять модель в общую коллекцию и в коллекцию в модели?

    var Model = Backbone.Model.extend({
        collection: null,
        initialize: function(){
            this.collection = new Collection();
        }
    });
    
    var Collection = Backbone.Collection.extend({
        model: Model
    });
    
    var collection = new Collection([{}]),
        submodel = new Model({});
    
    collection.add(submodel);
    collection.at(0).collection.add(submodel);
    
    console.log(collection.at(1) === collection.at(0).collection.at(0)); // true


    jsfiddle.net/bazilio91/rpuT8
    Ответ написан
    Комментировать
  • Как победить ошибку Nginx "upstream closed prematurely"?

    Anonym
    @Anonym
    Программирую немного )
    Потому что надо так
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;

    Если не поможет, попробуйте добавить эти строки в секцию http, а не server
    Ответ написан
    5 комментариев