• Какой платный и достойный фреймворк/CMS на PHP можете посоветовать на сегодня (Q1 2015)?

    miraage
    @miraage
    Старый прогер
    Вопрос бредовый. Все топовые фреймворки и CMS - бесплатные.

    Yii2, Laravel, Symfony2.

    Wordpress, Drupal.
    Ответ написан
    Комментировать
  • Nodejs или php(yii2) для новичка?

    Ни то ни то, вам нужен просто php, голый php )) А уж потом подумаете о фреймворках
    Ответ написан
    Комментировать
  • Какой php framework самый простой для изучения?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Хотелось бы не только документацию, но и туториалы (уроки). В идеале как с zend framework 1 - целые обучающие диски ( например Евгения Попова)
    Поймите одну вещь пожалуйста - с учетом уровня зарплат в индустрии - если человек тратит время на запись каких то уроков - он может быть отличным "инфо"бизнесменом, но как программист-профессионал он скорее всего говно.

    Более того, если Вы не научитесь разбираться с любым продуктом по его документации (разумеется англоязычной, т.к русское комьюнити априори меньше мирового) - вы не далеко уйдете от таких вот поповых.

    Что касается современных фреймворков на которые стоит посмотреть - я бы посоветовал Вам начать с Yii2 или Laravel
    Ответ написан
    Комментировать
  • Какие http коды ошибок возвращать?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Есть 2 точки зрения.
    Классический REST говорит что надо отдавать ошибки в http кодах сервера.
    На практике занимались разработкой api под мобильные приложения несколько лет и столкнулись с тем, что многие библиотеки используемые для работы с апи на мобильных приложениях:
    а) хреново работают с любым заголовком отличным от 200
    b) хреново работают с любыми методами отличными от GET/POST

    В итоге пришли к следующему решению (кусок из внутренней документации):
    84e91208aadc415ea342aa6f822275ea.png
    где code 400 говорит о том что серверу не нравятся какие то данные в запросе, error_code говорит о том что именно не нравится (почта, пароль итд - список свой в каждом методе api)
    Ответ написан
    Комментировать
  • Какие знания и умения будут полезны для работы с чужим кодом?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все то же самое что и для работы со своим кодом (рефакторинг нужен всем). А так же крепкие нервы.

    Почитайте книжек по рефакторингу, видео-лекции дяди Боба (Боб Мартин)...
    Ответ написан
    4 комментария
  • Сколько памяти займет скрипт на питоне?

    Kademn
    @Kademn
    Злой
    Список хранит ссылки на переменные в памяти, а значит список длиной N в 32-х битных системах будет иметь размер (2*2)*N, а в 64-х битных (4*2)*N
    >>> from sys import getsizeof
    
    >>> l = list()
    >>> print getsizeof(l)
    32 (в 32 битной системе)
    64 (в 64 битной системе)

    Значит искомая величина 32 + (2*2)*N (в 32 битной системе), 64 + (4*2)*N (в 64 битной системе), где N - длина списка.
    Но список хранит указатели, а значит место займут еще и сами данные. В вашем случае данные имеют тип integer
    >>> from sys import getsizeof as gs
    >>> a = int()
    >>> print gs(a)
    12 (в 32 битной системе)
    24 (в 64 битной системе)

    Значит памяти всего израсходуется
    32 + (2*2)*N + N*12 (в 32 битной системе)
    64 + (4*2)*N + N*24 (в 64 битной системе)

    Для списка из 7млн чисел имеем:
    32 + (2*2)*7000000 + 7000000*12 = 112000032 байт = 109375 Кбайт = 106.8 Мбайт
    64 + (4*2)*7000000 + 7000000*24 = 224000064 байт = 218750 Кбайт = 213.6 Мбайт
    Ответ написан
    Комментировать
  • Сколько памяти займет скрипт на питоне?

    kivsiak
    @kivsiak
    software engineer
    Вот тут описанно как можно сделать такую оценку deeplearning.net/software/theano/tutorial/python-m...

    А так же есть хороший совет использовать numpy для таких задач
    Ответ написан
    2 комментария
  • Что должен знать middle PHP разработчик?

    @andreyqin
    Все ответы на вопросы вида "Что должен знать ..." находятся на хэдхантерских сайтах.
    Ответ написан
    Комментировать
  • Где найти самое простое объяснение Dependency Injection паттерна?

    iximiuz
    @iximiuz
    Мартин Фаулер круто пишет обо всех паттернах. Про DI можно почитать тут. Вообще у него отличный блог. И он же автор книги P of EAA. Правда русский ее перевод крайне не рекомендую читать, можно только запутаться, так что читайте в оригинале.

    Если хотите разобраться с паттернами, то самая простая (и при этом дельная!) книга - это Фриман&Фриман. Ее можно читать и на русском.

    Применительно к PHP - вот лучшая книга про шаблоны (и не только), которую я видел PHP. Объекты, шаблоны и методики программирования от Мэт Зандстра.

    Порядок прочтения рекомендую следующий: Фриман&Фриман, затем Мэт Зандстра, и на десерт Фаулера P of EAA.

    UPD:
    Важно отличать паттерн Dependency Injection от Dependency Injection Container.
    Простейший пример внедрения зависимости:
    interface IEngine {}
     
    class V8Engine implements IEngine {}
     
    class Car {
      public function __constructor(IEngine $engine) {
        $this->engine = $engine;
      }
    }
     
    $car = new Car(new V8Engine());

    Простейший пример игнорирования явного внедрения (для такого кода трудно писать unit-тесты, его труднее понимать и править):
    class V8Engine {}
    
    class Car {
      public function __constructor() {
        $this->engine = new V8Engine();
      }
    }
    
    $car = new Car();

    Отличный (и легковесный) пример DIC - это pimple:
    // define some services
    $container['session_storage'] = function ($c) {
        return new SessionStorage('SESSION_ID');
    };
    
    $container['session'] = function ($c) {
        return new Session($c['session_storage']);
    };

    Советую прочитать и понять его исходники, чтобы убедиться, что в DIC (во всяком случае для PHP) нет никакой магии. Первая версия была всего ~100 строк. Необходимо также отметить, что класс Session использует шаблон Dependency Injection, явно определяя свою зависимость от SessionStorage. А контейнер делает лишь правильную связку.

    И да, контейнер сам по себе можно использовать как service locator, если к нему, например, есть глобальный доступ. Но это очень плохая практика, потому что если что-то обращается к сервис локатору, то формально оно начинает зависеть сразу от всех компонентов системы.
    Ответ написан
    4 комментария
  • Как указать jsdoc для this в шаблонах (underscore)?

    affka
    @affka Автор вопроса
    http://affka.ru
    пока-что решил только таким способом:

    <%
    /** @typedef {String} qqq */
    /** @this {Jii.view.WebView} */
    (function() {
    %>
    
        <% this.registerCssFile('http://api.jquery.com/jquery-wp-content/themes/jquery/css/base.css'); %>
        <% this.registerJsFile('http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js'); %>
        <% this.registerCss('body {background: #eee;}'); %>
        <% this.registerLinkTag({
            rel: 'icon',
            type: 'image/x-icon',
            href: 'https://assets-cdn.github.com/favicon.ico'
        }); %>
        <% this.registerMetaTag({
            authenticity_token: 'csrf-param'
        }); %>
    
        <div>
            <%= qqq %>
        </div>
    
    <% })(); %>
    Ответ написан
    Комментировать
  • Заказчик вместо обещаных 3 часов моего времени делает правки уже 4й день, что делать?

    nowm
    @nowm
    Возвращайте деньги, если он вам что-то платил, закрывайте проект и ставьте заказчику отрицательный отзыв. Это будет проще всего. Перед тем, как закрывать проект, озаботьтесь тем, чтобы из переписки на сайте биржи было понятно, что он требует что-то ещё дополнительное, но не хочет за это дополнительно платить. Если я не ошибаюсь, то закрытый проект, за который не уплачено ни цента, в вашей истории не появится. Во всяком случае, так обстоит дело на oDesk.

    Так же, на oDesk есть правило, по которому заказчик не может быть агентством, если он зарегистрировался как заказчик. Если он «проксирует» работу, то он — агенство, а агенство не может публиковать заказы. Он нарушает правила. Это ещё один момент, который вам может помочь, если вы вступите с клиентом в какой-то диспут. Опять же, важно, чтобы он упоминал в личной переписке на сайте биржи, что он, дескать, посредник, а не заказчик — если он этого не упоминал, то нужно его как-то на это развести.

    В остальном, я в похожих ситуациях обычно упираюсь и говорю, что никак не могу продолжать работу, пока не получу оплату за то, что было оговорено. Приплетаю всякие фантастические истории, что, как будто, меня недавно так кинули и я никому не могу доверять и т.д. и т.п. — тут всё ограничено фантазией. Главное: ни в коем случае не грубите человеку, на три буквы можно и вежливо посылать, закрутив всё ещё таким образом, что заказчик останется в восторге.

    Главное, и не только в подобных ситуациях, не тянуть резину. Чем вы будете мягче и податливее, чем дольше вы будете откладывать «неприятные» для клиента вопросы, тем чаще этим будут пользоваться окружающие, продавливая вас насколько это возможно. Это не значит, что нужно всем направо и налево грубить и посылать, это значит, что нужно сразу же сообщать окружающим, что вас что-то не устраивает — вежливо, но твёрдо.

    Я могу только посочувствовать вашей ситуации, но рано или поздно каждый человек с таким сталкивается. Со временем просто развивается чуйка, которая позволяет сразу видеть что конкретный проект публикует неадекватный клиент. Как говорил alexgilev (полчаса назад :) ), всякие фразы, вроде: «срочно», «мне мой знакомый программист сказал, что тут дел — на пять минут», «час-два для тех, кто в теме», «быстрые деньги» и т.п. — это один из признаков неадекватности.
    Ответ написан
    1 комментарий
  • Заказчик вместо обещаных 3 часов моего времени делает правки уже 4й день, что делать?

    @alexgilev
    Мой Вам совет от человека, который уже 4 год на eLance. Никогда не подавайтесь на работы с названиями, которые содержат фразы типа: 'Urgent', 'Easy job', 'Should be a quick thing'. Во-первых, ничем хорошим это не кончится, во-вторых Вам вынесут мозг и в-третьих, вы эту работу даже в портфолио не добавите, потому что она окажется убогой, благодаря клиенту и его бесконечной фантазии.
    Ответ написан
    Комментировать
  • Зачем нужен Yii и другие подобные фремворки?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    CMS - обычно решают конкретные узко специализированные задачи. Тот же WP - это блог и для такого кейса он вполне ок. Если вам нужен не совсем блог, на том же WP разработка вероятно будет сопровождаться анальной болью)). Это просто не целевое применение. То, что на WP и эл. магазины пишут - это просто демонстрация, что вилкой можно в ухе ковыряться))

    Фреймворки обычно имеют более обобщенное целевое предназначение, по этой причине на них обычно легче сделать сайт-визитку, который эл. магазин, немного соц. сеть и частично CRM.

    Пример где стоит использовать CMS: нужен эл. магазин, маленький бюджет и сроки тоже. Берем PrestaShop, устанавливаем, прикручиваем тему, настраиваем. Следующий!

    Пример где стоит использовать фреймворк: вам нужен сайт на подобии того, на котором вы читаете мой ответ. Да, его можно за уши притянуть к понятию "блог", но переписывать и допиливать нужно многовато. Пойдем от обратного (вы таки выбрали WP)
    * Потом поймете, что нужно было еще абстрактный уровень над WP написать, потому как после обновления ваши правки затерлись.
    * Потом вдруг случается несчастье: ваш сайт стал популярным и железо не тянет, вы задумаетесь об масштабировании, но окажется, что система довольно таки целостная и что бы ее разделить придется не хило так по вкалывать.
    * Через какое-то время ваш проект будет на 50% состоять переписанного кода и костылей, обходящих логику WP.
    * Вдруг, на хабре вы читаете статью про уязвимость в вашей версии WP, начинаете ее прикручивать, при этом часть вашего сайта тупо отваливается из-за тех же артефактов и костылей. Вы, ясное дело, фиксите траблюки.
    * В один прекрасный весенний денек, когда птички поют, радость, счастье, улыбки и бла-бла-бла вам звонит руководство и говорит, что "ничего не работает ( с )", отчаянье-печаль-грусть-уныние-безысходность-тлен. Зайдя на главную вы увидите замечательный баннер:
    Вас взломал @ сраный_script_kid. Один глаз начнет немного дергаться, "это нормально ( с )". Восстановившись из бэкапа 4-х недельной давности, вы начинаете судорожно писать 1ккк проверок всего и вся. Система мутирует в еще более страшную и громоздкую хрень.
    * Через какое-то время вас просят добавить фичу "на вчера", а что бы это сделать придется переписать добрую часть вашего монстра, вы (ну судя по количеству факапов) уже с прокачанным скилом "тебе фича не нужна эта" убеждаете руководство в этом, подобные разговоры возникают все чаще и в один прекрасный момент вы, или вас - увольняют.
    * На смену вам компания набирает других человек, которые выльют пару ведер крови из глаз, убедят руководство, что код не саппортабельный и перепишут вашего монстра с 1,5кк строк до 0,3кк на нормальном фреймворке.
    Ответ написан
    1 комментарий
  • Почему mithril, vue, virtual-dom быстрее react?

    @lega
    Тесты замеряют разные действия, где-то добавление, где-то изменения, одни фреймворки быстрее в одном, другие в другом, отсюда и разные результаты.
    Ещё сами тесты вызывают сомнения, например в первом тесте у Angular.js приделан setTimeout что-бы не делать перерисовку на каждой итерации + при этом сам тест запускается не асинхронно - это "читерство".
    А при выполнении теста с React у меня браузер дергается (видимо из-за особого контента который выводится) - это бъёт по производительности, - возможно это было нарочно сделано. Так же каждый последующий тест работает в поле где есть "мусор" от всех предыдущих тестов - это тоже может снижать цифры.

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

    PS: Если вас не затруднит, не могли бы вы сюда добавить mithril или vue для сравнения.

    Дополнил про React
    Я особо не копал React, у меня такие мысли - они реализовали виртуальным DOM который максимально эффективно превращает один кусок документа в другой, проблема в том что на практике это не нужно - в других фреймворках делают просто сокрытие одного куска и показ другого куска - и это работает быстрее, чем перестройка DOM. Так же я слышал заявления, что React работает быстрее за счет того что они не делают чтения из DOM - видимо они сравнивают с jQuery (и vanilla js), т.к. в других MV* фреймворках, чтения из DOM делаются не часто (или только на стадии инициализации).
    Ответ написан
    Комментировать
  • Соотношение уникальных и повторяющихся символов в пароле, что лучше?

    @DaNHell
    Change the world
    Думаю так смысл понятнее будет :3

    Сисадмин желал подобрать себе стойкий пароль для централизованной авторизации через radius-сервер. Он обратился за советом к Инь Фу Во.

    Как вы думаете, Учитель, пароль "史達林格勒戰役" стойкий?
    Нет, – ответил мастер Инь, – это словарный пароль.

    Но такого слова нет в словарях…
    «Словарный» означает, что это сочетание символов есть в wordlists, то есть «словарях» для перебора, которые подключаются к программам криптоанализа. Эти словари составляются из всех сочетаний символов, которые когда-либо встречались в Сети.

    А пароль «Pft,bcm» подойдёт?
    Вряд ли. Он тоже словарный.

    Но как же? Это же…
    Введи это сочетание в Гугле – и сам увидишь.

    Сисадмин защёлкал клавишами.
    О, да. Вы правы, Учитель.

    Через некоторое время Сисадмин воскликнул:
    Учитель, я подобрал хороший пароль, которого не может быть в словарях.
    Инь Фу Во кивнул.
    Я ввёл его в Гугле, – продолжал Сисадмин, – и убедился, что в Сети такого сочетания нет.
    Теперь есть...
    Ответ написан
    Комментировать
  • Можно ли запустить composer из php скрипта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Боюсь смысла в этом будет маловато. Composer не включает в себя VCS типа git, hg, svn, они использует системные. Так что вас запуск с require phar://composer.phar/ и эмуляцией консольного ввода не особо спасет.
    Ответ написан
    1 комментарий
  • Какие впечатления от Phalcon по сравнению с Symfony / Yii?

    TrogWarZ
    @TrogWarZ
    web developer
    Переходил с Yii 1 на Phalcon 1.3.x. Сейчас крутится на проде, всё хорошо.

    Нижеописанное – субъективное имхо:
    – Проще понимать, но документация скуднее.
    – Допотопная ORM. После Yii кажется кастрированной, в некоторых случаях она ещё и неоптимально работает с базой by design. Если запилить свой велосипед типа OrmModel, который будет расширять функционал и уменьшать многословность, то более-менее пользоваться можно.
    – Чрезмерно многословная ORM: связи, события, валидация.. да всё. До лаконичности Yii с учётом идеологии Phalcon ей не добраться.
    – Отвратительный нефункциональный CLI (имею ввиду tasks), его даже кастрированным называть – преувеличивать.
    – Удобный встроенный cli для генерации шаблонного кода.
    – Очень удобные и простые конфиги, сервисы, DI, миграции. Архитектурно намного удобнее, чем в Yii.
    – Есть облегчённая версия (Micro) для мелких проектов – на ней писать REST API одно удовольствие.
    – Шустрый шаблонизатор.
    – Удобная работа с кэшерами, есть разделение на front/back кэши, дублирование данных и приоретизация по скорости между ними.
    – Удобно создавать свои расширения или инклудить в проект сторонние.
    – Несмотря на реализацию в виде .so, есть годный официальный автокомплит для IDE.
    – Есть полуофициальный(?) репозиторий удобных расширений – Incubator.

    В целом, впечатления хорошие, не считая ORM. Для прода готов (:
    Ответ написан
    2 комментария
  • Изучил JavaScript, что дальше?

    Symphony
    @Symphony Куратор тега JavaScript
    Значит вы еще не изучили его.
    Ответ написан
    Комментировать
  • Соотношение уникальных и повторяющихся символов в пароле, что лучше?

    Jump
    @Jump
    Системный администратор со стажем.
    Соотношение уникальных и повторяющихся символов в конкретном пароле значения не имеет, и на скорость брутафорса не влияет.
    Значение имеет количество символов которые можно использовать в пароле.

    Насчет длины пароля не согласен.
    Надежный пароль это не максимально длинный, а достаточной длинны.
    Излишне длинный пароль во многих случаях снижает защищенность системы.
    Ответ написан
    Комментировать
  • Где и как правильно хранить верстку страниц работая с GIT?

    @raiboon
    Я не рорщик, но за хранение шаблонов в бд я бил бы по рукам. Это простительно пыхоговноцмс, но так? Что вообще заставило вас прийти к такой идее?!
    И да. Вероятно лучше всего миграции - через админку ничего править не нужно.
    Ответ написан
    5 комментариев