• Закон Деметры. Нужен ли?

    @StepEv
    А ваш пример закон не нарушает.

    В $user->getPosts()->getLast()->getComments(); каждый объект обращается только к одному знакомому ему объекту:

    posts = user.getPosts();
    lastPost = posts.getLast();
    comments = lastPost.getComments();

    Так что не переживайте, всё в порядке. Выше понаписали какой-то ереси, честно говоря.

    Нарушением было бы что-то типа $user.posts.last->getComments();

    Здесь получается что user знает о том, как устроен posts, а это не хорошо.

    Вообще-то по вашей же ссылке на википедии это всё хорошо расписано, даже с примерами.
    Ответ написан
  • Закон Деметры. Нужен ли?

    everzet
    @everzet
    Допустим вы хотите купить молоко:

    дом->лестница->машина_Opel->магазин->кассир_Люба->купить_молоко();

    Так как вы уважающий себя software developer который не видит смысла в законе Деметры, вы это скорее всего напишете в 10 разных местах системы.

    2 недели назад вы продали свой Opel и купили BMW. Вы теперь должны в 10 разных местах поменять код на:

    дом->лестница->машина_BMW->магазин->кассир_Люба->купить_молоко();

    Теперь, допустим вы начали переживать об экологии и хотите ездить за молоком не на машине, а на велосипеде. Вы теперь должны в 10 разных местах поменять код на:

    дом->лестница->велосипед->магазин->кассир_Люба->купить_молоко();

    Через пару дней Любу уволили и на работу взяли нового кассира Клаву? Меняем в 10 разных местах код на:

    дом->лестница->велосипед->магазин->кассир_Клава->купить_молоко();

    Через другую пару дней в вашем доме поставили лифт и вы не хотите бегать по лестнице за молоком? Меняем в 10 разных местах код на:

    дом->лифт->велосипед->магазин->кассир_Клава->купить_молоко();

    Мораль: этих всех замен можно мыло бы избежать, если бы для покупки молока вы использовали абстракцию:

    магазин->купить_молоко();
    Ответ написан
    8 комментариев
  • Аналог символа @ для тудулиста на русском

    Вообще, семантически подходят скобки. Ужин с женой (дома). Проблема в том, что скобки вообще много для чего подходят. Тут либо распознавать слова, либо использовать комбинации. Ну типа (- дома). Длинно.

    Есть ещё вариант типа //дома. Он также слишком общий, но по крайней мере в обычном тексте не используется.

    Хм, ну и последнее что придумывается — какой-нибудь значок в скобках (8) дома — восьмёрка немного похожа на русскую «в».
    Ответ написан
    1 комментарий
  • Поиск похожих изображений

    @egorinsk
    > — есть ли готовые наработки в плане реализации на php;

    Что значит «наработки»? Робот, индексирующий все картинки в интернете? Поверьте, доступ к АПИ будет стоить дешевле трафика от этого робота.
    Ответ написан
    Комментировать
  • Стоит ли покупать vBulletin 5?

    @Chii
    Нет смысла, если не планируется его использовать
    Есть смысл, если планируется его использовать
    Ответ написан
    2 комментария
  • Почему так мало вакансий Python и Ruby разработчиков в Новосибирске?

    ks7it
    @ks7it Автор вопроса
    Новосибирск — третий по величине город в России. За Нижнее Бирюлево точно не стал бы спрашивать :)
    Добавил в вопросе про крупные города.
    Ответ написан
    7 комментариев
  • Имеет ли смысл полный рабочий день для программиста? Производительность труда?

    tri_botinka
    @tri_botinka
    Вопрос крайне интересный. Но я бы поставил его не так — не как заставить программиста дольше работать, а как сделать так — чтобы он больше делал. Т.е. организовать эффективную работу. По опыту — удавалось повысить производительность программистов раз в 10, а аналитиков почти в 12 (!). Как?

    Во-первых — проанализировав процесс и устранив все точки, где возможен re-work, переделка ранее сделанной работы. Например слабый аналитик не разобрался в требованиях заказчика и вывалил весь это мусор на кодировщика. В итоге противоречия в голове заказчика и аналитика привели к противоречиям в коде. Как устранить? — проапгрейдить аналитика, сделать формальным процесс обследования, ввести приемку BRD старшим аналитиком.

    Во-вторых — навести порядок в своем коде. Периодически делать review, вносить комментарии и пр. т.е. это все про быстроту нахождения информации. Пусть программист не шарахается по офису — выспрашивая, знает ли кто что-то по существу вопроса — а быстро найдет его в корпоративной wiki или других порталах.

    В-третьих, как ни странно — это планировка офиса. Если за спиной у программера постоянно на трубке висит саппорт, продажник или аналитик — он будет постоянно срываться. Сделайте «тихую зону» или отдельное место для кричания с заказчиком.

    В четвертых, порядок коммуникаций. Возьмите за правило — не дергать программера чаще чем в 2-3 часа. Как правило он думает в «туннельном эффекте» — декомпозируя задачку и входя в режим творения. На такую подготовку уходит 20-30 минут. Если его в этот момент выдернуть тупым вопросом — мол, дай сигарету или ты не знаешь — а где лежит постановка — то опять потребуется полчаса…

    Ну и еще в-пятых, в-десятых и пр. В итоге вы поймете — что программист зачастую имеет «циклоидный характер» — т.е. периоды максимальной интенсивности чередуются с упадком сил и апатией. И мастерство менеджера заключается во вписывании задач проекта в эти особенности конкретного человека. Может нет смысла орать и теребить — а важно дать человек просто отдохнуть и набраться сил. Для чего в офисе должны быть и зоны отдыха.

    Да, кстати — офис — тоже интересная штука. Опытные капиталисты делают офис почти домашним не зря. И аутсорсят мелкие бытовые проблемы сотрудников — типа отвезти белье в химчистку, поискать подешевле квартиру, заказать билет в театр или место в ресторане, купить продукты по списку… Это позволяет удержать сотрудника на работе дольше, застав несколько его «пиков работоспособности». Причем сам сотрудник будет вам благодарен за комфорт и решение его мелких бытовых проблем. А работодатель значительно сэкономит на оплате овертаймов.
    Ответ написан
    3 комментария
  • Интерфейс админки: фиксированная или тянущаяся вёрстка

    Urvin
    @Urvin
    Мне нравится так:
    .wrapper
    {
      width: 100%;
      max-width: 1400px;
    }
    
    Ответ написан
    Комментировать
  • Как проверить, хорошо ли работает сборка мусора?

    jj_killer
    @jj_killer
    Не должно оно освобождать, если система не попросит. Так работает большинство сборщиков, они отдают память «обратно в программу».
    Ответ написан
    2 комментария
  • Новый продукт начинать на PHP 5.3 или PHP 5.4?

    charliez
    @charliez
    Please note that the PHP 5.3 series will enter an end of life cycle and receive only critical fixes as of March 2013. All users of PHP are encouraged to upgrade to PHP 5.4. © php.net
    Ответ написан
    Комментировать
  • Фриланс после 30

    7workers
    @7workers
    Еще вариант — найти постоянную удалённую работу на рабочих сайтах. Работать забесплатно не советую, просите хотя бы 10 баксов, не нарушайте всемирный баланс :)
    Ответ написан
    Комментировать
  • Python vs Perl

    Weageoo
    @Weageoo
    Python + Scrapy

    В pipelines.py в def open_spider(self, spider) открываем соединение с базой, в def close_spider(self, spider) закрываем.
    Для каждого сайта — свой паук (класс в .py-файле). Система продуманная, можно результаты парсинга развернуть даже в виде веб-сервиса встроенными средствами.
    Ответ написан
    Комментировать
  • Python vs Perl

    SLY_G
    @SLY_G
    журналист, переводчик, программист, стартапщик
    В пользу perl говорят те факты, что изучив его, вы сможете делать многие вещи многими способами, сможете присоединиться к ордену монахов perl, научитесь регулярно витиевато выражаться, и девушки будут восторженно ахать, узнав что вы перловщик.
    Насчёт последнего я наврал.
    Ответ написан
    Комментировать
  • Почему сайт может «моргать» при переходе по ссылкам?

    orloff
    @orloff
    у меня и там и там без моргания:)
    Ответ написан
    Комментировать
  • Лучший ЯП для парсинга веб-сайтов

    zarincheg
    @zarincheg
    В PHP есть работа с DOM, XPath. Ну и регулярные выражения разумеется. Что еще надо =)
    Ответ написан
    Комментировать
  • Лучший ЯП для парсинга веб-сайтов

    @mithraen
    Как только возникает слово «парсинг», в первую очередь стоит вспоминать о Perl (Practical Extraction and Report Language). Для решения этой задачи там есть:

    • модули для работы с HTTP — как низкоуровневые, так и специальные, типа WWW::Mechanize — удобен, если надо написать скрипт, который последовательно выполняет какой-то набор операций (например надо автоматизировать какие-то действия пользователя web-интерфейсе, а API никакого не предусмотрено);
    • модули для асинхронной работы по HTTP (AnyEvent::HTTP) — позволяют написать робота, который без необходимости создавать множество тредов будет выполнять одновременно несколько запросов;
    • регулярные выражения — мощнейший инструмент для парсинга данных, и в perl его использование наиболее удобно (это часть синтаксиса языка);
    • библиотеки для разбора HTML в дерево (например HTML::Parser);


    Python хороший скриптовый язык общего назначения, но для задач разбора данных код на Perl будет куда проще.
    Ответ написан
    1 комментарий
  • Phpstorm и документация кода

    resurtm
    @resurtm
    В докблоке со второй по пятую строчку у вас отсутствуют пробелы вначале. Т.е. должно быть:
    /**
     * Моя функция
     * @param int $user_id ID-пользователя
     * @return bool 
     */
    

    У вас:
    /**
    * Моя функция
    * @param int $user_id ID-пользователя
    * @return bool 
    */
    

    Попробуйте.
    Ответ написан
    Комментировать
  • Что использовать при кешировании запросов MySQL в PHP

    @edogs
    Одна из главных — сброс кеша при любом изменении таблицы — это критично, так как разрабатываемая система многопользовательская. Я уже задумывался, чтобы хранить результаты тяжелых запросов в файлах на сервере и при очередном выполнении запроса (с привязкой к пользователю системы) проверять, если уже такой запрос был, то брать из файла. Но в этом случае придется решать проблему именно отслеживания изменений в таблице.
    — Получается немного нелогично. С одной стороны Вас беспокоит сброс кэша при любом изменении таблицы, с другой стороны Вы говорите что на кэш изменения в таблице влияют и их надо отслеживать.

    Один из относительно легких вариантов для кэша, это memory таблица в mysql, куда складируются либо все данные которые часто выбираются либо ИД для их выбора из основных таблиц. Плюс по сравнению с 3rd-party решением тут то, что закэшить можно не прогоняя лишние данные через php и сеть, просто insert into select from — в большинстве случаев. Это во-первых. А во-вторых, триггерами при изменениях основной таблицы можно настроить апдейт кэширующей, более гибко чем просто тупой кэш запросов.
    Ну и наконец если база относительно небольшая, то innodb + большой размер пула/кэша — тогда вообще все в памяти будет постоянно считай.
    Ответ написан
    3 комментария
  • Кто использует GO в продакшене?

    Lerg
    @Lerg
    Defold, Corona, Lua, GameDev
    Можете смело делать на GO. Если будут вопросы есть форумы и irc канал #go-nuts.
    Сам использую его в качестве сборщика статистики с приложений, нагрузка маленькая, но писать было не сложно и работает стабильно.
    На хабре была статья, где описывался крупный проект с бэкендом на GO, не помню какая именно.
    Ответ написан
    1 комментарий