• Что мы сделали с личным кабинетом
    0
    аналогично
  • Комментировать или не комментировать?
    +2
    Нашел текст в викиучебнике, исходный вариант которого написал Непейвода. Там есть что почитать любителям философии от IT.
  • Комментировать или не комментировать?
    +10
    Есть такой интересный ученый — Непейвода Николай Николаевич.
    Он сформулировал короткий и четкий ответ на этот вопрос: комментировать нужно «призраки» и «подпорки».

    Подпорки — (ЕСТЬ В КОДЕ, НЕТ В ТЕОРИИ) это отклонения от основного случая алгоритма; то что присутствует в коде, но отсутствует в словесном описании сути работы функции
    * отклонения от теорем, на основе которых строится код
    * дурацкие крайние cлучаи
    * учет несовершенства работы используемых внешних функций, подсистем

    Призраки — (ЕСТЬ В ТЕОРИИ, НЕТ В КОДЕ) это знания, заложенные в алгоритм; то, что есть в теории, на основе которой был построен алгоритм, но отсутствует явно в коде.
    * математические теоремы; например в RSA алгоритме заложена формула a^(phi(n)) === 1 mod (n) и нужно в коде в комментариях написать ссылку на эту теорему и случай n=p*q.
    * инварианты в циклах
    * то, о чем полезно знать при чтении кода, но что никак в этом коде не отобразилось, так как является абстракцией более высокого уровня, нежели код


    Он этому учил студентов в Ижевске
  • Эксперимент в Яндексе: как роботы помогают тестировать сервисы
    +4
    Очень интересно!

    Интеграционные тесты (цель которых — иметь большое покрытие и, грубо говоря, отлавливать 404) в UI действительно могут быть автоматизированы влоть до автогенерации множества сценариев.

    Текстовые поля (в том числе с числами) можно заполнять одной из подсказок, всплывающей после ввода одной буквы/цифры или пары символов. Правда возникает требование, иметь такие подсказки для все текстовых полей, но это требование вполне разумно и не повредит юзабилити. Для особых текстовых полей, где подсказки вредят юзабилити, можно договорится с разработчиками, что подсказки возникают только для определенного юзерагента. Разработка подсказок для каждого поля проще, тем поддерживать руками интеграционные тесты.

    Ну и, конечно, как уже сказали, можно заставить разработчиков давать подсказки роботу через семантику HTML. Семантика кнопок Вперед, Назад, Расширенные настроки, например, позволит роботу не гулять по циклу в длиных визардах, а веса у ссылок и значений позволят в первую очередь покрывать типичные сценарии).

    Разработчикам больше работы, зато тестеры будут заниматься только функциональными тестами бизнес логики.
  • Покорим Ruby вместе! Капля одиннадцатая
    0
    Да, именно так

    И как праивльно замечено, если что-то хочется выполнить по-любасу, нужно помещать код в блок ensure.
    А то, что помещено после end может не выполнится, если в begin или rescue будет выполнен оператор return
    Закрыть открытые сокеты — один из важных юзкейсов

    $ cat  a.rb
    def foo(x)
      begin
        return 1 / x
      rescue
        return 1 / (x + 1)
      ensure
        puts "Hi #{x}"
      end
    end
    
    puts foo(1)
    puts foo(0)
    
    $ ruby  a.rb
    Hi 1
    1
    Hi 0
    1
    
  • 1. Metaprogramming patterns — 25кю. Метод eval
    0
    Да
  • Online — обучение программированию на Ruby без хабраэффекта
    0
    пока нет
  • Обучение программированию на Ruby — занятия продолжаются
    0
    * По сути своей, ++ содержит в себе неявное присваивание в любых формах

    — ну вообще говоря, ++ ассоциируется не с присваиванием, а с изменением объекта (в с++ в 99% этот оператор используют для смещения итераторов). А matz пишет про assignment, так как в Руби про потенциальный новый оператор ++x сложно думать иначе как (x+=1)

    * Инкремент в префиксной форме является сахаром для операции += 1

    — О каком языке идет речь? Полагаю что, о Си или С++ или о Java.
    — Си: оператор ++ можно назвать сахаром для +=1, но суть в том, что там он не может менять типа переменной.
    — С++: оператор ++ для новых классов обычно определяют так, что он меняет объект на месте и, конечно, не меняет класса объекта (оператор += можно определить независимо от ++ как захочется, в том числе, этот оператор может возвращать объект нового класса). И конечно, в Си++ оператор ++ не является сахаром для +=1.

    — Проблем с преобразованием, а точнее, с созданием нового объекта нового класса, конечно, нет. Просто никто не ожидает, что оператор ++ будет создавать новый объект. Никто не ожидает, что x++ может сменить класс x, так как в других языках так не делают. И этой проблемы не было бы, если бы в Руби был один класс Integer===Bignum, и не было бы Fixnum и Bignum. Объекты Bignum действительно на месте можно увеличить на 1. Именно поэтому я и написал то, что написал. Укажите пожалуйста, какие идеологические проблемы были бы с введением оператора ++, если бы был один класс для всех целых чисел.

    * Отказ от ++ скорее не вяжется с философией руби по возможности возвращать последнее вычисленное значение (а в случае использования постфиксной формы инкремента в си-подобных языках возвращается исходное значение)

    — никакой неувязки бы не было; можно было бы реализовать и постфиксную и префиксную форму оператора с правильным возвращаемым значением. Чем вас так напугало, то что последнее вычисленное значение является возвращаемым значением метода?
  • Обучение программированию на Ruby — занятия продолжаются
    0
  • Обучение программированию на Ruby — занятия продолжаются
    0
    См. Mumble, VLC.
  • Обучение программированию на Ruby — занятия продолжаются
    0
    потому что Fixnum может сменится на Bignum, и преобразование объекта на месте невозможно
  • Обучение программированию на Ruby — занятия продолжаются
    +3
    Пока нет, но я все собираюсь начать их писать. Сорри, что никак не доберусь.
  • Дистанционное обучение программированию на Ruby
    0
    Пока нет. Думаю это будут отдельные скринкасты по материалам занятий, которые я буду готовить самостоятельно.
  • Дистанционное обучение программированию на Ruby
    0
    спасибо, исправил
  • Дистанционное обучение программированию на Ruby
    0
    Прошло всего два занятия и там было мало посетителей. Я просто пробовал. Убедился, что все проходит хорошо, и теперь готов повторить. Многое я буду повторять. Считайте, что начну сначала.
  • Услуга «Ваш персональный компьютер»
    0
    Аренда больших хранилищ + бутовая флешка (или хотя бы с автозапуском виртуальной машины) — все это есть уже сейчас. Сервиса нет. Возможности есть, хоть и без поддержки игр. С ирами готов терпеть. Чип в мозг, так и быть, тоже мне не нужен.
  • Услуга «Ваш персональный компьютер»
    0
    www.acronis.eu/homecomputing/products/trueimage/tour/3/ — Full, incremental and differential backup…
  • Неуловимое нейтрино
    +1
    Спасибо за статью!
  • 3. Metaprogramming patterns — 20 кю. Замыкания
    0
    Что-то не очень нравитсяопределение в википедии.
    Я бы написал

    Замыкание — это функция, которая создается во время работы программы. Из тела этой функции доступны все переменные и функции, которые дотсупны в контексте, в котором создано замыкание. Для корректной работы замыканий необходимо, чтобы при жизни замыкания жили и локальные переменные, доступные из нее. В идеале в теле замыкания должна быть возможность делать всё, что можно делать в контексте, в котором оно было создано.
  • 3. Metaprogramming patterns — 20 кю. Замыкания
    0
    Да, есть такая возможность. Код
     class A; def a;  puts "A#a";  end; end
     class B < A;  def a; puts "B#a";  lambda { super };  end; end 
     B.new.a.call
    

    выведет
     B#a
     A#a
    

    Термин «переменные родителя» мне непонятен. Переменные объекта не знают к какому из классов в иерархии наследования они относятся. И никто не знает. То же самое касается переменных класса.
  • W3Schools статистика браузеров в январе 2009 года: FF > IE
    0
    Согласен, ошибочка вышла. Но цифры, публикуемые на marketshare.hitslink.com/browser-market-share.aspx?qprid=0 несколько отличаются, но там я вообще не нашел информации об источнике статистики.
  • 3 простых совета, которые сделают ваше Rails приложение быстрее, часть #3
    0
    И еще о производительности — railscasts.com/tags/1, в частности railscasts.com/episodes/98-request-profiling и railscasts.com/episodes/150-rails-metal
  • 3 простых совета, которые сделают ваше Rails приложение быстрее, часть #3
    0
    Если уж на то пошло, то самый мегакрутой совет — профилируйте, анализируйте и оптимизируйте важные места кода.
    То что можно и нужно кэшировать статические страницы — это, конечно, суперновость, на на сайтах которые приходилось мне разрабатывать таких страниц был малый процент. В деле оказываются гораздо более полезны caches_action и cache do… end. см также railscasts.com/tags/18, плагин cache_fu ( errtheblog.com/posts/57-kickin-ass-w-cachefu ), ну и конечно www.railsenvy.com/2007/2/28/rails-caching-tutorial
  • О комментариях в коде
    0
    Есть более конкретное высказывание Непейводы Н.Н., — комментировать нужно подпорки и призраки.

    Подпорка — некоторое исключение из теории или общего алгоритма; специальный код, рассматривающий отдельно особый крайний случай, и т.д. и т.п. Подпорки мы все писали, так что знаем.

    Призрак — дуальная сущность, она есть в теории, но отсутствует в коде (единственная возможность ей там появиться — в виде комментария). Это теоремы, которые использовались при написании кода, различные инварианты, математические идеи, которые не извлекаются из кода непосредственно.

    Все остальное должно быть таким (модульность, именование функций, переменных, классов, ), чтобы комментарии были не нужны.
  • 4. Metaprogramming patterns. 19 кю. Спасение утопающих дело рук самих утопающих
    +2
    ok
  • 3. Metaprogramming patterns — 20 кю. Замыкания
    0
    done!
  • Ruby-фишки
    0
    Multiple assignement есть в Perl, Python, Lua, Magma,…

    Он был придуман давно и отчасти для того, чтобы делать a, b = b, a. Поэтому сомнений насчет логики выполнения здесь быть не может.

    Для этой конструкции все уже описано и обсуждено. В Ruby сделано так, как все давно уже привыкли — сначала целиком вычисляется правая часть, потом все присваивается левой. Не Matz это придумал и не ему менять логику multiple assignement.
  • 2. Metaprogramming patterns — 22кю. Reuse в малом — bang!
    0
    тут также вопрос оптимальности. В частности при выполнении sort! не хотелось бы, чтобы делались malloc'и. Если bang делать из nobang, точно будет происходит выделение новой памяти для промежуточного массива. В большинстве случаев для bang методов можно написать алгоритмы, не делающие запросы на выделение памяти
  • Об информатике вообще
    +1
    На этот вопрос ответил Клод Шеннон в сработе «Mathematical Theory of Communication». Формулы написал. Очень интересно и внятно ответил. Я бы даже сказал, что это был прорыв (перепост, так как промазал)
  • О программировании
    +1
    ни о чём :) просто так, мысли вслух. Пост для непрофессиональных программистов, ещё выбирающих путь.
  • Об информатике вообще
    +2
    На этот вопрос ответил Клод Шеннон в сработе «Mathematical Theory of Communication». Формулы написал. Очень интересно и внятно ответил. Я бы даже сказал, что это был прорыв.
  • 1. Metaprogramming patterns — 25кю. Метод eval
    +1
    Стал использовать vim. Там есть необходимая фича, которая выдает HTML, который не портится хабрахабровским обработчиком. Но ой как сильно мне бы хотелось писать код так:
    <source lang="ruby">
     puts "Hello"
    </source>
    

    Это же просто сделать. Алё, админы!
  • Покорим Ruby вместе! Капля десятая
    0
    > Windows Live Writer + Visual Studio + VSPaste + HTML Snippet + PowerGREP + регулярные выражения + некоторая работа ручками

    мне кажется, по количеству действий Gvim (в том числе под виндами) будет давать результат несколько быстрее: меню Синтаксис -> Сделать HTML с подсветкой. Пробелы он превращает в  , такой умница.
  • Покорим Ruby вместе! Капля одиннадцатая
    +3
    О конструкции begin полезно расказать в полной мере:
    begin
      Ух!  мы тут 
      такого сейчас понаделаем !
    rescue MySiimpleError => e
      ошибка вроде простая, 
      сейчас  мы её пофиксим и будем щастливы
      retry if пофиксилась
    rescue MyUrecoverbleError => e
      ууупс!
      puts "У нас серьезные неприятности " + e.message + "\n" + e.backtrace
    else 
      итак, ошибок нет, и кое что еще осталось 
      сделать
    ensure
      а вот кое-что нужно полюбому сделать (есть исключения или нет),
      например, закрыть все открытые соединения
    end
    
  • 1. Metaprogramming patterns — 25кю. Метод eval
    0
    Да, верно. Но есть такие объекты для которых inspect возвращает нечто, не являющееся Ruby выражением, равное им
    $ ruby -e  "puts lambda{|x| x*x}.inspect"
    #<Proc:0xb7d17df8@-e:1>
    

    Кроме того иногда хочется дефолным значением иметь конкретный объект в памяти, а не нечто ему равное, но другое.

  • 1. Metaprogramming patterns — 25кю. Метод eval
    +1
    А как здесь это делают? Постят подсвеченый html или есть специальные теги?