• Как я продолжил дело Дота-лиги

      Предыдущие части (не за моим авторством): раз и два.

      Возвышение Хоруса


      Тимс был автором бота, а я был тем самым «прошаренным админом», который допиливал его код.

      Можно долго спорить, кому что принадлежало, кто прав и кто виноват, но факт остается фактом — одна лига раскололась на две. Владелец бренда say-plz и спонсор поставил меня админом sP Dota League, а Тимс в тот же момент развернул RIHL (Russian In-House League). Между лигами была война за игроков используя любые средства, кроме разве что ядерного оружия.

      Как произошел развал с моей точки зрения
      Владельцем домена и хостинга say-plz был менеджер команды и спонсор под ником Матрикс. Он не знал, что происходит на лиге и не особо вникался в подробности. И после того, как Тимсу были предъявлены обвинения в неадекватном поведении и продаже модераторского доступа за деньги, у него был диалог со спонсором, в котором Тимс заявил примерно следующее: «это моя лига, что хочу, то и делаю». После чего Матрикс спрашивает меня — смогу ли я потянуть всё без участия Тимса? Я отвечаю ему — да. Ну а потом Матрикс снял права доступа с Тимса, сделав меня новым СЕО.

      После того, как админом стал я, были внесены некоторые изменения в политику лиги.

      1. Никаких необоснованных банов по личной неприязни.
      2. Равные наказания и для известных игроков, и для новичков. Бан на 14 дней за намеренный выход из игры.
      3. Моментальный демоут (из модеров в юзеры) тех, кто злоупотребляет своими правами — разбанивал друзей, или например пытался продать воучи (доступ к лиге) за деньги.
      Читать дальше →
    • Шаблонизатор Slim — альтернатива Haml'y

        Давно хотел попробовать Haml, но всё не было времени. Но вот недавно обнаружил новый шаблонизатор, который мне сразу понравился. По словам создателей, он взял лучшее от Jade и Haml. Основная задача — сократить объем кода, при этом не делая его страшным и непонятным.

        Вот так выглядит шаблон с использованием Slim:
        doctype html
        html
          head
            title Slim Examples
            meta name="keywords" content="template language"
        
          body
            h1 Markup examples
            #content.example1
              p Nest by indentation
        
            = yield
        
            - unless items.empty?
              table
                - for item in items do
                  tr
                    td = item.name
                    td = item.price
            - else
              p No items found
        
            #footer
              | Copyright © 2010 Andrew Stone
        
            = render 'tracking_code'
        
            script
              | $(content).do_something();

        Читать дальше →
      • Обзор новинок в Ruby on Rails

          Для начала мы обратим внимание на Rails 2.3.8 — многие из вас слышали о нем, но не все знают, что конкретного там поменялось. К слову, основные нововведения произошли в версии 2.3.6, а .7 и .8 версии лишь исправляли ошибки.

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

          1. Переработан флеш, рекомендуется использовать два базовых типа — alert и notice. А еще его можно использовать с редиректом.
          Вот как было:
          flash[:notice] = 'Статья добавлена'
          redirect_to @article
          И как можно писать теперь:
          redirect_to(@article, :notice => 'Статья добавлена')
          Стоит учесть, что если у вас есть свой тип флеша, например, flash[:error], то добавить его к редиректу не получится.
          Читать дальше →
        • Tips & Tricks

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

            Совершенствование кода и его оптимизация порой отнимает больше времени, чем заняло написание первой версии. Вы часто встречали новый для вас код или интересную реализацию, и говорили себе: «Оказывается, это можно сделать стандартными средствами, а я изобретал велосипед»? Лично я — да. Поэтому в этой статье я собрал свою коллекцию «велосипедов», и рассказал, как от них можно избавиться.

            Методы массивов


            Простой пример — допустим, у вас имеется массив объектов класса User. У них есть свойство activated, которое выставляется на 1, если юзер активировал свою учетную запись. Вам нужно проверить, все ли юзеры из массива активированы. Не берем во внимание ActiveRecord (там можно и по-другому сделать), моя цель — показать работу с массивами.

            Способ первый, самый примитивный:
            1. @users = User.find(:all)
            2. activated_users = 0
            3. foreach user in @users
            4.   activated_users += 1 if user.activated == 1
            5. end
            6.  
            7. # если количество совпадает, значит все юзеры активированы
            8. activated_users == @users.size
            Читать дальше
          • Создание мульти-модельных форм

            • Перевод
            Иногда требуется создать форму, данные которой связаны с несколькими таблицами. К примеру, у вас имеется две модели: Owner и Car. При добавлении нового Owner'a хотелось бы, чтобы была возможность сразу добавить машину. С появлением Rails 2.3 это стало проще.

            # Старый вариант (приблизительный)<br/>def create<br/>  @owner = Owner.new(params[:owner])<br/>  ...<br/>  if @owner.save<br/>    @car = Car.new(params[:car])<br/>    if @car.save<br/>    ...<br/>end<br/><br/># Новый вариант, Rails 2.3+<br/>def create<br/>  @owner = Owner.new(params[:owner])<br/>  ...<br/>end

            Где же магия?