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

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

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


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

      Можно долго спорить, кому что принадлежало, кто прав и кто виноват, но факт остается фактом — одна лига раскололась на две. Владелец бренда 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

              Где же магия?