• InnoDB Buffer Pool и его стабильность

    @Masterme
    На случай, если проблему решить не сможете — попробуйте сделать денормализацию — разбить таблицу на две. В одной оставьте столбцы, необходимые для выполнения запроса, в другой остальные. Тогда загружаться будет не гиг, а меньше. Да, в логику приложения придётся внести изменения.
    Ответ написан
    Комментировать
  • Стоит ли регистрировать .com/.net./.org у российского регистратора?

    @Masterme
    .org-ами заведует ICANN, у ICANN есть регламент, и там наверняка прописан этот момент — может ли регистратор по своему усмотрению изменить регистрационные данные. Не удивлюсь, если регламент говорит, что может по решению суда страны, в которой находится регистратор. И не удивлюсь, если регистратор положит болт и заблокирует домен в частном порядке. То есть, здравый смысл подсказывает, что ситуация с rutracker.org была бы аналогичной.

    Ну и денег жалко. Домен .com стоит 10 баксов, а у руцентра — почему-то 20. За что? Если разница кажется незначительной — то домен .com можно зарегистрировать на 10 лет, это уже 100 долларов против 200.
    Ответ написан
    Комментировать
  • Посоветуйте онлайн консультанта для сайта

    @Masterme
    Vorchun я понял. В таких ситуациях владелец сайта никак не страдает, он вообще неудобств не испытывает, потому что на свой сайт не заходит, либо заходит не как пользователь. А все неудобства достаются пользователям.
    То есть, вы не получали жалоб, потому что у ваших заказчиков всё Ок, а у посетителей их сайтов нет возможности пожаловаться.
    Ответ написан
    Комментировать
  • «Срывается» загрузка страницы

    @Masterme
    а ошибки точно в лог пишутся? error_reporting какой? и в тот ли лог? а то пых может писать как в свой лог, так и в лог апача
    сделайте фейл какой-нибудь, например, деление на ноль, и проверьте, отобразится ли это в логе
    Ответ написан
  • Создание объекта с использованием jQuery селекторов?

    @Masterme
    Работа с объектами в JS немного отличается от классической схемы в других языках. Нет ключевого слова class и нет деструкторов. Вот так объявляется класс и создаётся экземпляр класса:

    var Obj = function Obj(){
      this.wrapper = $('.prx')
      this.slides = $('.prx_slides')
      this.slidesItems = this.slides.children()
    }
    
    var obj = new Obj()
    

    функция — это конструктор, автоматически вызываемый при создании

    Моар: learn.javascript.ru/constructor
    Ответ написан
    Комментировать
  • Что почитать в глубину?

    @Masterme
    Привет.

    Гугл по запросу «руководство Linux» выводит более чем достаточное количество статей. На английском, вероятно, всевозможных материалов ещё больше.
    Поставьте какую-нибудь сборку GNU/Linux на рабочий и домашний компы в качестве основной ОС — получите опыт, который намного лучше голой теории. Винду можно будет запускать в virtualbox. Можете начать с ubuntu или kubuntu 12.04.03. Когда освоитесь — попробуйте собрать Gentoo.
    Ответ написан
    2 комментария
  • Руби или же питон?

    @Masterme
    Есть язык (синтаксическая и семантическая модель), есть интерпретатор (скорость работы, внутреннее устройство, индивидуальные особенности, отсутствие багов) и среда (IDE, модули, интеграция). Каждое нужно сравнивать отдельно.

    Синтаксис особо не важен.
    Семантика богаче и гибче у ruby, на нём можно творить больше всяких интересных непотребств, питон же плоский как змея. Ruby больше пригоден для eDSL-построения, питон больше подходит для обучения программированию вообще (ну он и попроще, говорят).

    Интерпретатор тоже много значит, долгое время у ruby нормального не было (так бывает, ага, когда язык придуман, а интерпретатор ещё не сделали), ну он там глючил, тормозил, такое. Сейчас есть MRI 2.0 и уже MRI 2.1 preview. Нормальные. Есть альтернативные типа jruby, rubinus, они отличаются от MRI в некоторых деталях, в многопоточности, в управлении памятью.
    У питона с интерпретатором давно всё ок, классический, ставится из репов, запускается, никаких проблем, писать особо не о чем.

    Окружение у ruby построено на мой взгляд удачнее — есть RVM, есть bundler, есть gems.
    У питона похуже, virtualenv по элегантности до rvm не дотягивает, хотя существующих библиотек — на порядок больше.

    Если охарактеризовать одним словом, то питон — это строгость, а ruby — это fun. Соответственно, выбор зависит от того, что нравится больше лично Вам, не в программировании, а в жизни. Нравится раскладывать всё по полочкам и придерживаться мудрости предков — питон, нравится получать удовольствие и испытывать себя — ruby.
    Ответ написан
    1 комментарий
  • Проблема с file_get_contents: failed to open stream: Operation now in progress

    @Masterme
    Для многопоточной загрузки — curl конечно
    Ответ написан
    1 комментарий
  • Второй вопрос к толковым web-разработичкам, знакомым с паттернами

    @Masterme
    здесь я уже писал свои соображения по теме, так что просто дополню:

    нужно правильно обработать ситуацию с пустым массивом $cities, иначе получим ошибку SQL, если в нём 0 элементов — то не включать условие

    class SomeController extends BaseController {
      function search($params){
        $where = array();
        if ($params['tariff']) $where['tariff'] = $params['tariff'];
        if (is_array($params['cities']) and count($params['cities'])) $where['cities'] = $params['cities'];
        $uses = $this->Users->find($where); // массив cities будет автоматически сджойнен
        return compact('users');
      }
    }
    


    лучше сделать $params объектом с интерфейсом ArrayAccess, и на все несуществующие параметры возвращать null

    то что Вы сейчас пишете — это инъекция на инъекции, достаточно в tariff передать что-нибудь вроде ROBIN DROP TABLE `users`…
    Ответ написан
    Комментировать
  • Несколько вопросов к толковым разработчикам относительно mvc и php?

    @Masterme
    Привет.

    Вот так удобно работать с данными:

    Открываем страницу /articles/, либо /articles/123, либо /articles/?date=2013-10-22

    class ArticlesController extends BaseController {
      # для страницы /articles/
      function index ($get_params){
        if ($get_params->date){
          $articles = $this->Articles->find_by_date($get_params->date); // выбираем все статьи за заданную дату
        } else {
          $articles = $this->Articles->all(); // выбираем все статьи из таблицы
        }
        return compact('articles'); // этот массив пойдёт в шаблонизатор
      }
    
      # для /articles/123
      function item($get_params){
        if ($article = $this->Articles->find_first_by_id($get_params->id)){
          return compact('article');
        } else {
          throw new Exception404;
        }
      }
    }
    


    $this->Articles вызывает __get класса BaseController, в нём ленивая загрузка, если первая буква аргумента большая — то модель создаётся на лету. Аналогично, find_by_* и find_first_by_* — обращаются к __call родительской модели и преобразуются в SELECT.

    Ещё примеров.
    Создать пустую запись в таблице
    $this->Article->create();
    


    но обычно создают не пустую, а с данными, потому (в контексте контроллера)
    $article = $this->post('article); // массив
    if ($id = $this->Articles->create($article)){
      $article['id'] = $id;
    }
    
    

    Найти статьи и пользователей, их создавших:
    $articles = $this->Articles->find_by_date('2013-04-15');
    if ($authors_ids = array_map(function($article) {return $article['author_id'];}, $articles)){
      $authors = $this->Authors->find_by_id(array_unique($authors_ids));
    }
    return compact('articles', 'authors');
    

    В модели эти команды преобразуются в
    SELECT * FROM `articles` WHERE `date`='2013-04-15'
    SELECT * FROM `authors` WHERE `id` IN (1, 2, 3, 4, 5);
    if ($authors_ids = ...) — проверка, не пустой ли получится массив

    Чем модель отличается от датасета.
    $article = array('id' => 123, 'title' => 'Зима в деревне!', 'content' => 'Однажды в студёную зимнюю пору лошадка примёрзла ...', 'date' => '2014-06-01', 'author_id' => 1);
    это датасет

    а
    $article = new ArticleModel(array('id' => 123, 'title' => 'Зима в деревне!', 'content' => 'Однажды в студёную зимнюю пору лошадка примёрзла ...', 'date' => '2014-06-01', 'author_id' => 1))
    это модель

    Разница в том, что на модель можно навешать методов и юзать такой синтаксис
    $articles = $this->Articles->all();
    foreach ($articles as $article){
    print $article->author['name'];
    }
    т.е. в этом случае мы прописываем классу ArticleModel метод author, который возвращает значение типа AuthorModel и т.д.

    $article->author->articles; // все статьи автора, написашего данную статью.

    иногда так удобнее, иногда нет. с моей точки зрения разница невелика. я пользуюсь датасетами и примерно таким синтаксисом
    $articles = $this->Articles->find_by_author_id($article['author_id']);
    на один запрос меньше.

    — примечание: есть модель в терминологии MVC, означает программный слой. а есть модель — как объект, соответствующий строке таблицы. я говорил про вторую. а первая модель это
    $this->Articles
    $this->Authors
    Ответ написан
    1 комментарий
  • SSD для ноутбука

    @Masterme
    Ах да, на новом SSD не забудьте в fstab указать опцию discard (для работы TRIM). Подробнее здесь tokarchuk.ru/2011/01/enable-trim-support-in-ubuntu/
    Ответ написан
    Комментировать
  • Какой cdn выбрать? И нужен ли он?

    @Masterme
    проект будет бюджетный и для фана

    тогда вам CDN не нужен. храните гифки на хостинге и не парьтесь
    Ответ написан
    1 комментарий
  • SSD для ноутбука

    @Masterme
    Crucial M4, меньшее энергопотребление (если это имеет значение).

    А так без разницы.

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

    @Masterme
    лучше site.com/ru/article/25/

    > На каждой из этих страниц интерфейс на соответствующих языках, но сама статья везде только на русском. Как поисковые системы будут обрабатывать подобную ситуацию и как облегчить им эту работу?

    Как дубликаты. Облегчить — никак (а зачем?).
    Ответ написан
  • Apache + MySQL на Windows в production — как убедить людей что это плохо

    @Masterme
    С технической точки зрения, линукс/фря предпочтительнее потому что намного проще ситуация с обновлениями и версиями софта. Когда я сидел на винде — мне была проблема найти какое-нибудь php_foo_5.2.12.dll, потому что имеющаяся на руках php_foo_5.2.13.dll уже не подходила. В GNU/Linux всё собирается и компилируется без проблем. Линукс лучше потому что он со своей инфраструктурой дружественнее к разработчику на PHP/MySQL (а также ruby/python/lisp/ и т.д.). Винда тоже дружественна, но к другим технологиям типа ASP, MSSQL.
    Поэтому для активной разработки и поддержки удобнее линукс. А для просто «чтоб работало» и винда сойдёт. Наверное. Но Вы на всякий случай откажитесь от ответственности за это приложение, можно письменно :3
    Ответ написан
  • Был ли на Хабре опрос о том как часто/давно хабраюзеры чистили свои ноутбуки/настольные компы?

    @Masterme
    Как одежду: запачкалась — почистил. Дело 10 минут.
    Ответ написан
    Комментировать
  • Где лучше всего регистрировать свои домены сейчас?

    @Masterme
    Ок, давайте разберёмся, какие могут быть риски при регистрации доменов.

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

    Можно выбрать другое государство (региональные домены других стран) либо ICANN (международные домены). Однако, нужно помнить, что ICANN подчиняется США. И если у Вас на сайте будут материалы, нарушающие законы именно США, то и международный домен может не помочь.

    Если у вас контент нейтральный, неполитический (не против США), и Вы доверяете ICANN — то с первым риском мы разобрались. Можно теперь повыбирать регистратора для зоны .com. Цены там примерно от 10 usd. Я предполагаю, что и разницы между ними особой нет. То есть, можно брать любого и вперёд. Но мы ищем самого лучшего, так что покопаемся ещё.

    Открываем гугл и ищем «best icann registrar forum», «best com registrar forum», «best domain registar forum» и т.п. и читаем про самых популярных. Наберётся с десяток-другой. Затем по каждому "%registrar_name% reviews", "%registrar_name% problem", "%registrar_name% sucks", "%registrar_name% lost domain" и т.п. Скажем, поиск по sucks сделал мой выбор не в пользу goDaddy, хотя очень популярный регистратор (ну как обычно, чем компания популярнее, тем больше про неё негатива, но тем не менее).
    Подобный поиск примерно покажет ситуацию с чистоплотностью и техническим обеспечением регистратора.

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

    Это был длинный ответ. Короткий: я выбрал moniker, но не буду его рекомендовать, потому что пока не имею достаточно опыта использования.
    Ответ написан
    Комментировать
  • Надежная пайка

    @Masterme
    на случай, если нет возможности показать, то пайка проводов из нескольких жил должна выглядеть вот так, «лесенкой»

    ---*---------------
    -------*-----------
    -----------*-------
    ---------------*---

    тогда при натяжении они испытают нагрузку одновременно.

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

    @Masterme
    Покажите фотографию Вашего результата пайки без изоляции
    Ответ написан
    Комментировать