• Как вы пришли в PHP ?

    Попросили сделать инет-магазин. После нескольких попыток C++ отпал, выбирал между PHP и Perl — выбрал PHP (тогда ещё PHP3) по причине его большей близости к Си-синтаксису.
    Ответ написан
    Комментировать
  • Python приложение и хранение настроек

    Можно хранить настройки пользователей (хоть сам файл sqlite, если шаринга данных между пользователями не требуется) в каталоге os.path.join(site.getuserbase(), 'appname'), но в винде это не совсем нативно выглядит. Вот платформонезависимого решения как получить путь к дефолтным настройкам не знаю. Наверное, всё же, следует анализировать платформу (отличия, как минимум, *nix, WinNT <6.0 и >=6.0) и хранить настройки и вообще данные в соответствии с гайдами ОС.
    Ответ написан
    Комментировать
  • Есть ли стандарт, регламентирующие обязательные требования для обеспечения безопасности web приложений (сайтов)

    Возможно будет полезным приказ ФСТЭК «ОБ УТВЕРЖДЕНИИ ПОЛОЖЕНИЯ О МЕТОДАХ И СПОСОБАХ ЗАЩИТЫ ИНФОРМАЦИИ В ИНФОРМАЦИОННЫХ СИСТЕМАХ ПЕРСОНАЛЬНЫХ ДАННЫХ»

    ispdn.ru/law/5821/#text
    Ответ написан
    Комментировать
  • Автоматическое включение компьютера после появления электричества в сети

    Если упс отключает комп штатно («умный», подключен по usb/com, идёт завершение работы), то он должен уметь и его включать (в настройках упса и в биосе «wake up on usb/com»). Если он отключает его просто обрубая питания, а потом питание обрубает, то настройка в биосе типа «on power fail» — «power on». Если же упс просто обрубает питание и ждёт пока на нём кнопку нажмут, чтобы снова его подать, то надо кнопку нажимать…
    Ответ написан
    Комментировать
  • Правильная реализация ActiveRecord в PHP на манер Rails?

    Если у нас на странице 800 комментариев (или других сущностей), то действительно где-то хранить 800 экземпляров объектов? И ->all где то в цикле создаёт объекты, привязывает к таблице и заполняет их полученными данными?

    Если использовать наследника от ArrayObject, то необязательно хранить все 800 в памяти. Например,

    UserCollection extends ArrayObject {
      private $ids;
    
      function __construct($where) {
         $ids = db::query("SELECT id FROM Users WHERE $where")->getColumnValues('id');
      }
    
      public function offset($index) {
        return new User(db::query("SELECT * FROM users WHERE id={$ids[$index]}"));
      }
    }


    Пример грубый, небезопасный, фактически псевдокод. Но с 800 записями возникет проблема, известная как «1+N» — foreach в шаблоне вызовет 801 запрос к БД. Хранить 800 не хорошо, 801 запрос к БД ещё хуже. Выход — «страничный» кэш. При запросе, например, $users[73] выбираем (если ещё не выбрано) первые сто записей (при [173] вторые сто), инстанцируем 100 объектов в кэше (массив объектов), затирая те, что были раньше (вторая сотня затирает первую) и возвращаем 73-й (в обоих случаях). Особенно эффективен если вся обработка идёт последовательно (foreach и т. п.) — на 800 записей 9 запросов и максимум 100 объектов в памяти (вернее от работы сборщика мусора зависит, можно форсировать его работу при затирании ненужной сотни через gc_collect_cycles()), главное их в другом массиве не сохранять :)
    Ответ написан
    1 комментарий
  • Установка Linux в файл-образ?

    Не знаю, правильно ли понял вопрос, но LiveCD Ubuntu работает с ISO образа на винте. Правда со всеми ограничениями присущим LiveCD, прежде всего read-only. Инструменты для кастомизации установки есть.
    Ответ написан
    Комментировать
  • Бухгалтерия vs программисты как победить?

    Пойти к генеральному и сказать что-то вроде «Я этот проект вовремя не закончу потому, что администратор на объетках вечно пропадает, а бухгалтера постоянно отвлекают от работы».
    Ответ написан
  • Реакция на изменение состояния объекта

    Если гибкость (другие методы, включая других обхектов, не один метод и т. п.) не важна, то вполне нормальное решение, имхо. Единственный нюанс, что отслеживаете присваивание, а не изменение. Следуя букве задачи и абстрагируясь от языка перед присваиванием и вызовом сначала нужно сравнить, а не присваивается ли то же самое значение и, соответственно, лишний раз вызывается метод, а если нет то и не присваивать, и не вызывать.
    Ответ написан
    Комментировать
  • Какими свойствами и возможностями должна обладать современная CMS?

    Возможность создания пользователем (веб-мастером, не разработчиком) произвольных сущностей с произвольным набором атрибутов. Возможность создания произвольных связей между сущностями (как детерминированных (явно задаваемых а-ля расходники к такому-то принтеру), так и автоматически вычисляемые (а-ля «также выбирают»)), а не только одномерная иерархия (ака каталог/категории) и/или «облако тэгов». Гибкий роутинг. Поддержка всего этого в шаблонах.
    Ответ написан
  • Что делать, если люблю компьютер, но плохое зрение?

    Как ни странно, но мне, имхо, помогло сохранить зрение (с 14 лет за компами, причем первые 3 года монитор — телевизор, почти все остальные годы — ЭЛТ-мониторы) курение. Минимум раз в час выходишь покурить к окну или на балкон и смотришь вдаль — глаза отдыхают.
    Ответ написан
    2 комментария
  • Symfony 2 или YII?

    Для начала изучить паттерны (что такое и для чего), имхо. Тогда будет более глубокое понимание того, что собственно происходит в фреймворках (особенно в симфони) когда будете писать блог на двух разных для выбора. Не знаю как yii, но в Symfony2 паттерны на каждом шагу и без их понимания часть кода может казаться (а для конкретных задач и быть) излишней.
    Ответ написан
    5 комментариев
  • Термин для слова "говнокод"?

    Некрасивый код
    Ответ написан
    Комментировать
  • Предоставление заказчику результатов работ по электронной почте

    Один из относительно юридически легитимных способов отправки сообщений и даже заключения договоров — использование системы сообщений WebMoney (прости господи). По крайней мере владельцы сертификатов от персонального и выше удовлетворяют требованию ч.2 ст. 434 ГК РФ к письменной форме договора о возможности достоверно установить стороны. Вот только не помню, есть ли там какие-то виды уведомления о прочтении (хотя бы визуально) и возможность передавать большие объёмы текстов (прикреплять файлы). В крайнем случае можно уведомлять по их «почте» об отправке по обычному мылу и в договоре предусмотреть пункт, согласно которому если в течении N дней после отправки уведомления об отправке по вебмани не получено сообщение там же о неполучении, то будет считаться, что доставлено. А если до суда дойдёт, то на логи ВебМани можно будет сослаться.
    Ответ написан
    Комментировать
  • Выбор языка и БД для высоконагруженного веб-приложения?

    Какой из следующих языков программирования: PHP, Ruby, Perl или Python является самым быстрым

    По моему опыту (Perl в него не входил, насчёт него экстраполирую) они все в одной весовой категории, на одних задачах один покажет себя быстрее, на других другой, особенно если пишет для одного теста на всех языках один программист, хорошо знающий один язык и поверхностно конкурентов.

    Выбор надо начинать, имхо, с архитектуры, а уж потом искать оптимальные средства для её реализации.
    Ответ написан
    Комментировать
  • Закон о защите информации?

    и могут ли воспользоваться сами?

    Статья 6. Условия обработки персональных данных

    2. Согласия субъекта персональных данных, предусмотренного частью 1 настоящей статьи, не требуется в следующих случаях:

    2) обработка персональных данных осуществляется в целях исполнения договора, одной из сторон которого является субъект персональных данных;
    Ответ написан
  • В каких CMS сделана наиболее правильная шаблонизация?

    Правильная — действительно XSLT (UMI?)

    Гибкая — PHP и прочие средства встраивания ЯПОН :) в шаблоны (drupal, wordpress, прости господ, CMS На рельсах с шаблонами на erb)

    Удобная — субъективно
    Ответ написан
    Комментировать
  • С чего начать? нужно создать сайт в короткие сроки своими руками

    Для статического сайта хватит любого WYSIWYG (или близкого к нему) редактора, в том числе различных SaaS типа народа, юкоза или гуглосайтов.
    Ответ написан
    Комментировать
  • Как найти кодера на GAE?

    Кодера или программиста? :)

    Шарахаются многие из-за нереляционного хранения данных, с которым многие привычные средства или не работают, или работают кривовато. Невозможность хранить что-то (фотки, документы и т. п.) в файлах тоже многих отпугивает.
    Ответ написан
    2 комментария
  • Для чего нужна ORM?

    Вы не путаете ORM с DBAL? ORM это не технология замены SELECT * FROM goods WHERE cost < 100.00 на $db->select()->from('goods')->where('cost < 100.00'). ORM это способ задания связи объектов и РСУБД. По сути позволяет абстрагироваться от способа хранения объектов вообще, с лёгкостью переходя от SQL к NoSQL, memcache, файлам или REST/RPC API на удалённом сервере, оперируя на уровне модели (если говорить о MVC и т. п.) простыми plain old objects, а их персистентность отдать контроллеру. Не $db->select()->from('goods'),, не mysql_query('SELECT * FROM goods'), а $goodsRepository->findAll(), а уж будет репозиторий формировать SQL запрос, читать файлы или память, а может стучаться на Гугл и парсить его вывод — его, репозитория, личное дело (а также разработчика(ов), отвечающих за подсистему хранения).

    Кроме того ORM, как правило не исключает обращение к БД на уровне произвольных SQL запросов, оно лишь преобразуют результаты этих запросов в объекты модели предметной области (и наоборот), которые ничего не знают (в идеале) о таблицах, WHERE, HAVING и т. п.

    ORM это не только инструмент архитектурного разделения областей ответственности объектов и классов приложения, а также инструмент облегчения разделения труда разработчиков: кто хорошо шарит в SQL вообще и особенностях конкретного движка в частности — работает по «ту сторону» ORM, оптимизирует его как хочет, может нормализовывать и денормализовывать, например; кто хорошо разбирается в дебетах и кредитах — работает с plain old objects в терминах предметной области и может вообще ничего не зная об SQL, ему лишь нужно знать, что он всегда может получить объект или их коллекцию обратившись к методам вроде findById() или findAll() и сохранить результат работы методом save() или flush().
    Ответ написан
    3 комментария
  • Кому жаловаться на DDOS?

    Можете попробовать заявление в полицию или прокуратуру об установлении личности и привлечении к уголовной ответственности лиц, создавших, распространявших и использовавших вредоносные программы, использование которых повлекло блокирование доступа к информации и нарушение работы ЭВМ.
    Ответ написан
    Комментировать