• Стоит ли открыть исходный код ORM для PHP?

    EugeneOZ
    @EugeneOZ
    Я буду критиковать за говнокод :) Статические методы — это не ООП, это просто процедуры, не более. С глобальной видимостью, зависимостями.
    Ну и очень, очень хреново, что у вас сущности должны от чего-то экстендится. Между наследованием и аггрегацией выбирайте аггрегацию.
    Я такую хрень пару лет назад писал, сейчас вспоминать стыдно :)
    Ответ написан
    3 комментария
  • Стоит ли открыть исходный код ORM для PHP?

    @egorinsk
    Сам по себе ORM — банальная ничем не примечательная хрень. Это уже много раз делали в других фреймворках (например, RoR, Java) и описано в книгах про паттерны. Берешь, делаешь как в Руби и пользуешься хоть до посинения.

    Пример с User::create() неудачный: у реальных объектов бывает по 20 свойств и фукнция с 20 аргументами будет выглядеть дико. Функции с подчеркиванием в начале — уродливые. Передавать __CLASS__ и подобные магические методы тоже не очень как-то.

    Один из сложных моментов в проектировании ORM — оптимальная организация взаимодействия с хранилищем. Например, этот ваш пример:

    > foreach(UsersGroup::getPremiumMembers()->orderBy('registration_date')->limit(10) as $user){
    > echo $user->getCountry()->getCurrency()->getCode()."
    ";

    Сколько запросов сгенерирует при использовании SQL-хранилища? По идее, должно быть в районе 3-4, причем данные справочников еще бы и стоило кешировать (ибо валюты у стран меняются очень редко) и обойтись 1-2 запросами. Если у вас в цикле для каждого юзера делается запрос — хлам это, а не ORM.

    Второй момент — оверхед. Вы когда-нибудь считали, какая разница по времени выполнения запроса через ваш ORM и через mysqli_query() (включая время на загрузку и инициализацию классов ORM)? Посчитайте, наверняка у вас после этого вообще пропадет желание использовать ORMы.

    Третий момент — масштабирование. Можно ли, к примеру, сделав огромный сайт на вашем ORM, не переписывая кода, реализовать расшардивание базы на 100 серверов (чтобы справиться с нагрузкой). Можно ли на нем делать проекты уровня хотя бы игр для соцсетей или вконтакта?

    Если у вас есть решение хотя бы некоторых из описанных 3 проблем проектирования ORM, ваша статья на тему архитектурных решений и программистских хитростей была бы крайне интересна. Если нет решения — то такой орм любой школьник может сделать, как я уже сказал, прочтя мануал к рубионрейлс.
    Ответ написан
    3 комментария
  • Python IDE

    @switlle
    www.jetbrains.com/pycharm/

    По-моему что-то луче чем JetBrains найти будет тяжело. Вы для начала попробуйте — потом купите когда будет очередная волна скидок. Уверяю Вас покупать будете с великолепным чувства радости!
    Ответ написан
    1 комментарий
  • Python IDE

    @sanzstez
    Eclipse + PyDev
    Ответ написан
    Комментировать
  • Порядковый номер из выборки SQL

    @rPman
    Поиграйся так, не идеальное решение но иногда спасает:
    SET <hh user=rank>=0;
    SELECT <hh user=rank>:=<hh user=rank>+1 AS rank, id FROM menu;
    
    Ответ написан
    3 комментария
  • Как сделать Draggable block с привязкой к одной точке?

    vermilion1
    @vermilion1
    Как по мне — SVG
    www.w3schools.com/svg/svg_path.asp
    Получаем координаты блока и соединяем три точки
    Ответ написан
    1 комментарий
  • Beautiful Soup, html5lib или lxml?

    @kmike
    У html5lib самый корректный и надежный парсер (по спецификации), но она медленная. lxml быстрее всех и парсит достаточно хорошо. Вместо SAX можно iterparse использовать, это удобнее часто, и часто быстрее.
    Ответ написан
    3 комментария
  • Совет чайнику - как запустить sh скрипт на сервере через браузер?

    BuriK666
    @BuriK666
    Компьютерный псих
    Запускайте его как cgi
    Ответ написан
    Комментировать
  • Статьи/хелпы по настройке высокопроизводительного веб-сервера. Что почитать?

    @max_rip
    Вы знаете, думаю конкретно ничего не будет. Максимум описания своих проектов, но они вам сильно не помогут. Так как у всех высоко нагруженных проектов есть нюансы и на этих нюансах строится вся стратегия.
    Кому-то надо:
    -скорость
    -стабильность
    -распределенность
    -пинг

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

    Нужно иметь мониторинг и контролировать ситуацию, а меры принимать до того как что-то померло или отвалилось.

    Как минимум, постарайтесь вообще избавиться от апача +).
    Ответ написан
    2 комментария
  • Redis vs SQLite vs PostgreSQL

    CKOPOBAPKuH
    @CKOPOBAPKuH
    Молоток vs Кувалда vs Отвёртка

    Я решил выяснить, какой из инструментов лучше. Представил одинаковую задачу — ударять себя по большому пальцу ноги. Отвёртку решил держать за ручку и ударять наконечником, так как неудобно держать за наконечник и ударять ручкой. Для молотка и кувалды это одинаковые схемы. Запросы: ударить по большому пальцу и измерить время, сколько болит.

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

    PS: Что вы используете для надёжного перманентного отбивания пальцев? Холивар классический русский молоток vs молоток из икеи можно опустить, разницы между ними практически не будет.
    Ответ написан
    4 комментария
  • Запрос для выборки комментариев

    почитайте про nested sets — это техника позволяющая хранить древовидные структуры в БД так, что большинство выборок делаются в один SQL запрос. en.wikipedia.org/wiki/Nested_set_model
    Если кратко — то там к каждой записи добавляются еще два поля, которые потом и используют для выборок. Упрощается выборка но усложняется вставка.
    Если сайт маленький и с nested sets разбираться не хочется (хотя весьма полезно, да и готовых реализаций полно), то можно сделать как угодно — начиная от рекурсивной выборки несколькими SQL запросами и до костыля с добавлением еще одного поля типа строка, в который прописывать «путь» к этому элементу в дереве (например айдишники узлов разделенные символом «0>12>45>») а потом делать выборку по этому полю используюя LIKE
    Ответ написан
    Комментировать
  • Запрос для выборки комментариев

    @Hint
    Ищите по «Nested Sets». На хабре, в том числе, довольно много статей.
    goo.gl/UnA1h
    Ответ написан
    Комментировать
  • Django timezones?

    DmZ
    @DmZ
    У питона все прекрасно описано в документации:
    classmethod datetime.now([tz]): Return the current local date and time.
    classmethod datetime.utcnow(): Return the current UTC date and time, with tzinfo None.

    Т.е. now() возвращает время с учетом временнОй зоны, а utcnow() возвращает в UTC:

    >>> import datetime
    >>> datetime.datetime.now()
    datetime.datetime(2012, 4, 22, 8, 51, 41, 549137)
    >>> datetime.datetime.utcnow()
    datetime.datetime(2012, 4, 22, 5, 51, 49, 174015)


    У джанго тоже все прекрасно описано в документации, с дополнением, что если включено использование таймзон (USE_TZ=True, обычно включено), то на уровне DB будут использованы типы которые умеют сохранять информацию таймзоны.
    Ответ написан
    Комментировать
  • Посоветуйте корпоративный мессенджер

    alekciy
    @alekciy
    Вёбных дел мастер
    Jabber без вариантов. Для организации есть такая полезная штука как shared roster. Пришел новый человек, добавили его туда, он появился в контакт листе у все. Снимает вечное «у нас в отделе Х новый человек, вот его контакты, добавьте».
    Ответ написан
    Комментировать
  • Посоветуйте корпоративный мессенджер

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    jabber. Плагины для хранения логов есть. Видео/аудио через jing реализованы во многих клиентах.
    Ответ написан
    Комментировать
  • Посоветуйте корпоративный мессенджер

    moderatorh
    @moderatorh
    +1000 Jaber. Аргументы следующие:
    1. Свой сервер (не зависите от внешних серверов) своя политика безопасности, настройки и тд…
    2. Шифрование. Любое, вплоть до маниакальнонаправленного!
    3. Клиенты подо все! Включая любые недокомпьютеры и сматфоны.
    4. Возможность говорить и голосом, а при прямых руках и видео…
    Ответ написан
    Комментировать
  • Посоветуйте корпоративный мессенджер

    @add1ct
    jabber
    Ответ написан
    Комментировать
  • Sleep(delay) в javascript?

    Меня укусил комар, нога страшно чешется. Подскажите, как правильно отрезать ногу?

    Особенности национальных форумов: в америке ответят, в европе пошлют, а в россии объяснят, почему ты дурак (анекдот). К чему это?
    Не надо мне предлагать перетерпеть это. Нога безумно чешется, потому её надо именно отрезать.
    Ответ написан
    7 комментариев
  • Переводить ли калькизмы, и если да, то как?

    Dormidont
    @Dormidont
    Стоит. Все, конечно, и так поймут, но при зашкале англицизмов со временем как-то притупляется внимание у тех, кто на 100% в это не окунается.
    deployment — развёртывание, внедрение
    production — продуктив, производственная («боевая») среда
    provisioning — выделение (ресурса), или как и советует гуглтанслэйт — резервирование (не путать с бэкапом)
    in-house — внутренний, «свой», внутрикорпоративный наконец
    traceable — прослеживаемый

    Тот же частый «деплоймент на продакшн» можно будет уже перевести как «частое развёртывание на продуктивном окружении». Как-то так.
    Ответ написан
    5 комментариев