Задать вопрос
  • Как создаются крупные интернет проекты? Типа того же habrahabr?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала нужна идея, потом начинается разработка, потом релиз и начинается раскрутка. То есть нам нужна идея, разработчики и деньги. Вопрос только в том как будет организована разработка и последующее сопровождение проекта. Аджайлы всякие, BDD и т.д.

    Хабр написан на PHP, язык роли не играет особо.
    Ответ написан
    Комментировать
  • Поможете рассмотреть модуль в js под микроскопом?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    модуль предоставляет нам область видимости, в которой мы прячем реализацию, а фасад в этом случае будет интерфейсом, то есть публичными методами. Пример на самом деле кажется мне немного странным...
    Ответ написан
  • Объект function?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В JS все является объектом.
    function A () {
        // пустой конструктор
    }
    var Unnamed = function () {
    };
    var b = new A(); // цепочка прототипов у a будет такой: A <- Function <- Object
    var c = new Object; // синоним {}, прототипом будет Object.
    var d = new Unnamed();
    console.log(b.constructor.name); // "A"
    console.log(d.constructor.name); // ""
    console.log(b instanceof Object); // true
    console.log({} instanceof Object); // true


    Скажем у Object и Number это базовые типы и у них общий прототип. Просто {} или new Object - просто интанс Object-а, и именованные функции - новые типы, прототипом которого будет Object (так или иначе если спускаться вниз по цепочке прототипов).

    Внутри все веселее. Вируатльной машине вообще нет дела что у нее, Object или его потомок Foo, доступ к каждому свойству или методу всеравно в рантайме вычисляется. Она только оптимизировать это дело может для своего внутреннего представления. У каждого объекта в JS есть хидден-класс. То есть:
    var a = {x: 1}, b = {x: 2}, c = {y: 3};
    в этом случае a и b будут иметь один и тот же хидден класс, а c - другой.

    Когда мы пишем вот такой вот код:
    function foo(bar) {
        this.bar = bar;
        if (bar === false) {
            this.falthy = true;
        }
    }
    
    var a = new foo(true), b = new foo(bar);


    То типы этих двух переменных будут совпадать, а хидден классы нет. Таким образом во внутреннем представлении это будут два разных типа и оно не сможет применить одни и те же оптимизации. Так же если у нас был объект с одним свойством, а мы туда добавили еще десяток (цифра с потолка), то оптимизирующий компилятор перестает заниматься этими оптимизациями и будет думать что наш объект используется как простая хэш-мэпа.

    То есть виртуальной машине как бы плевать на тип объекта, так как она понимает, что объекты меняются в рантайме и могут поменяться когда захотят. Она смотрит на тип только при сравнении. В целом же ей фиалетово, Object у нас или наш Foo, она будет смотреть только на хидден класс и исходить из того, что оно раньше делало с объектами с таким хидден классом.
    Ответ написан
  • Поиск до первого символа?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Раз-два-три-четыре-пять,
    Знаете наверно,
    Раз-два-три-четыре-пять,
    Жадность - это скверно.
    Раз-два-три-четыре-пять,
    Скажем без подвоха,
    Раз-два-три-четыре-пять,
    Жадность - это плохо,
    Жадность - это плохо,
    Жадность - это плохо.

    (с) Остров Сокровищ

    Жадные выражения
    Ответ написан
    Комментировать
  • В чем минус хоститься на github pages?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А с чего вы взяли что какие-то минусы есть? Ну... гитхаб не гарантирует вам аптайм 100% вот и все минусы.
    Ответ написан
    2 комментария
  • Нужно ли в javascript думать о private свойствах и методах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Инкапсуляция это всегда хорошо. Вопрос в том нужны ли вам приватные методы и свойства? Они хороши в контексте классов, что бы разграничить интерфейс и реализацию. В JS же объект является интерфейсом. То есть он не может иметь скрытого состояния. Точнее может но не в самом объекте, а в другом каком...

    В Python-мире есть такая точка зрения по поводу отсутствия модификаторов досупа, которая выражается выражением "We're all consenting adults here" (все мы тут взрослые люди). То есть по мнению большинства поставить _ перед названием приватных методов достаточно что бы разработчики их не использовали. В JS даже это крайне не рекомендуется делать, так как у вас есть скоупы и все что нужно спрятать вы можете сокрыть там. Так же в ES6 появится WeakMap которые помогут хоть немного упростить разруливание скрытого состояния и уменьшит вероятность утечек памяти.

    Если посмотреть на фреймворки, например AngularJS активно использует $$ перед именем приватного свойства или метода. Причем в добавох в jsdoc эти свойства отмечены как private и если указать соответствующие опции для минификаторов, то те переименуют эти свойства и тогда разработчику будет уже тяжело предсказать как оно будет называться в следующем релизе.
    Ответ написан
    7 комментариев
  • Почему не выводится цикл в twig?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Во имя сатаны конечно!

    Мне кажется вам стоит все же почитать документацию по twig. Я без понятия зачем вам этот foreach там где вы данные посылаете. Я так же не понимаю почему у вас в цикле posts in key хотя должно быть post in posts. И я не понимаю почему mysql_* а не mysqli/PDO. Прекратите использовать устаревшие расширения.

    $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
    $twig->render('template.twig', compact('posts'));

    {% for post in posts %}
        {{ post.name }}
    {% endfor %}
    Ответ написан
  • В каких случаях лучше использовать lockfree структуры данных, а когда на мютексах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мне казалось что вся соль lock-free алгоритмов раскрывается тогда, когда критическая секция отрабатывает за время меньше чем требуется на переключение контекста. Скажем если у вас запись в файл разруливается - то можно и старый добрый мютекс применить без всяких там спинлоков, потому что писать он будет явно дольше чем переключается контекст. А если у вас доступ в буфер какой разруливается или в очередь, то тут lock-free будут сильно эффективнее.

    Так же при большом количестве потоков и высоком уровне конкуренси lock-free предпочтительнее.
    Ответ написан
  • Как созадть интерфейс в JavaScript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    JS динамический язык с утиной типизацией. Собственно как в Ruby или Python. Наследование в нем реализуется через объекты и прототипы объектов. То есть места интерфейсу тупо нету.

    Грубо говоря, если допустить наличие "классов" в JS, то интерфейсом будет как раз таки абстрактный класс, у которого реализация всех методов выбрасывает ошибку not implemented. Во всяком случае люди которые еще не отвыкли писать интерфейсы на все и вся в Python или Ruby так обходятся.

    Но вообще вы должны подчиниться правилам утиной типизации и делать как-то так:

    function can(obj, methodName) {
         return ((typeof obj[methodName]) == "function");
    }
    
    // вот так вот сурово мы подаем вместо объекта словарь!
    var dict = {
       quack: function () {
           console.log('Quack! Quack!');
       }
    }
    
    // метод требует объект реализующий метод quack
    function test(obj) {
        if(!can(obj, 'quack')) { throw "Object should implement quack method" }
        obj.quack();
    }
    Ответ написан
    4 комментария
  • Что мне использовать: mysql или mysqli?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Используйте то что умеете и любите. Можно еще на php4 откатиться, зачем вам это ООП, late static binding... А еще никогда, никогда не экранируйте вывод. Это тормозит генерацию страницы. И всегда все пишите с нуля.

    mysql_* расширение deprecated, то есть использовать его не стоит. В PHP7 вообще не будет оного. Только mysqli/pdo. Prepared statements нужны для предотвращения sql инъекций. И опять же вы можете просто воспользоваться каким doctrine/dbal.
    Ответ написан
    4 комментария
  • Какие есть проекты с открытым кодом на Laravel?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    builtwithlaravel.com/categories/open-source

    Расчитывать что там будет все по бест-практис не приходится.
    Ответ написан
    2 комментария
  • Туториалы по express.js и mysql?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Даже на haskell можно сайты писать. Гугл вам в помощь.

    teknosains.com/i/simple-crud-nodejs-mysql
    Ответ написан
    Комментировать
  • Нужно ли патентовать интернет - проект?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Или же, интернет проекты не патентуют?

    Как-то так. Патентуют идеи. Каталог объявлений вам запатентовать не дадут. Алгоритм показа объявлений - дадут.
    Ответ написан
    Комментировать
  • Допустимы ли во VIEW условия?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А почему нет? Много if/else это в любом месте не сильно хорошо и стоит подумать о том как бы избавиться от лишних условий и вынести эту логику в компонент хелпер (судя по всему у вас так и есть).

    VIEW в контексте MVC это слой конвертирующий данные из формата приложения в формат требуемый клиентом на выходе, так что без условий сложно. То есть в вашем случае трансформация доменных моделей в HTML. То есть вообще весь код который занимается такими трансформациями это view. Шаблонизатор, хелперы и т.д. Внутри этого слоя все те же правила что и для других слоев. DRY и все такое.

    p.s. Приведите пример "много условий".
    Ответ написан
    9 комментариев
  • Может ли NodeJS работать как PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Я думаю вам просто не нужен Node.js а нужен PHP, так как ваш подход убъект весь профит от node.js. Если нужна производительность - HHVM или HippyVM.
    Ответ написан
    Комментировать
  • Как использовать локальную память видеокарты и быстрее ли она по сравнению с разделяемой?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Локальная и глобальная память самая медленная. Регистровая самая быстрая, переменные объявленные внутри ядра по идее в ней хранятся. shared память разделяется на пул тредов (варп в контексте CUDA).

    www.microway.com/hpc-tech-tips/gpu-memory-types-pe...

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Cordova/Phonegap + ionic
    Ответ написан
    Комментировать
  • Есть ли какие-то библиотеки для доступа к MySQL-серверу через PHP-мост?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если не хотите заморачиваться с реализацией вэб сервиса вот вам два варианта. Судя по всему оба вам подойдут (раз уж вам только база нужна то у вас не сильно сложная бизнес логика и от сервера нужен старый добрый CRUD)

    Возможно вам стоит посмотреть в сторону СУБД которые из коробки (или почти) предоставляют REST интерфейс? Например mongodb. Есть так же mongolab.com и compose.io

    а так есть parse.com
    Ответ написан