• Рефакторинг при помощи композиции Клейсли

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


    Рассмотрим, например, функцию getByPath, которая извлекает элемент из XML дерева по его полному пути.

    import scala.xml.{Node => XmlNode}
    
    def getByPath(path: List[String], root: XmlNode): Option[XmlNode] =
      path match {
        case name::names =>
          for {
            node1 <- root.child.find(_.label == name)
            node2 <- getByPath(names, node1)
          } yield node2
        case _ => Some(root)
      }


    Эта функция отлично работала, но требования поменялись и теперь нам нужно:

    • Извлекать данные из JSON и, возможно, других древоподобных структур, а не только из XML;
    • Возвращать сообщение об ошибке, если данные не найдены.

    В этой статье мы расскажем, как осуществить рефакторинг функции getByPath, чтобы она соответствовала новым требованиям.
    Читать дальше →
  • Фриланс из палатки

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

    Но какой бы интересной не была работа программиста, рано или поздно она неизбежно превращается в рутину. В силу интересности задач, ежедневный восьмичасовой рабочий день пролетал практически незаметно и два с лишним года в офисе после университета промелькнули, словно две недели. Остерегаясь пропустить еще лет 10 своей жизни, я решил, что нужно что то менять. Параллельно с основной работой я иногда фрилансил для расширения стека технологий и небольшого дополнительного заработка, поэтому появилась идея на некоторое время полностью перейти на фриланс, поездить по миру и поработать из разных городов. При этом хотелось посетить как можно больше стран, и не просто посетить «для галочки» города и известные достопримечательности, а получше узнать культуру каждой страны, быт и особенности местного населения, увидеть, чем, к примеру, восточная Чехия отличается от западной… И тут мне в голову пришла гениальная идея, поехать в Европу на велике.
    Читать дальше →
  • Работа в офисе? Нет пути



      Я - фрилансер

      Поэтому я не хожу на собеседования. Собеседования противоречат самой идее фриланса. Если бы фрилансеров нанимали посредством собеседования, то фрилансеры тратили бы большую часть своего времени на посещения собеседований.

      Поэтому фрилансеры очень редко ходят на собеседования. За более чем 10 лет своего профессионального стажа я был на собеседованиях 4 (четыре) раза, включая вчерашнее.

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

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

      Однако, было поставлено условие — работа только в офисе. Никакой удалёнки.

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

      Я постараюсь рассказать, почему удалённая работа — это особенный статус, от которого очень сложно отказаться.
      Читать дальше →
    • Что нужно знать, чтобы хорошо рисовать?

      • Translation
      • Tutorial


      Давид Ревуа — прекрасный художник, работающий со свободным программным обеспечением, постоянный член сообществ Krita Foundation и Blender Institute, концепт-художник анимационных проектов Gooseberry Open Movie Project, Mango Open Movie Project (Tears of Steel) и Durian Open Movie Project (Sintel). В этой статье он делится с начинающими художниками списком знаний, которые необходимо приобрести, чтобы работы получались реалистичными. Он обращает внимание, что для рисования «в цифре» следует обзавестись теми же навыками, что и в традиционной технике. Итак, приобщимся к его опыту.
      Читать дальше →
    • Все уже украдено до нас

        image

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

        Хорошо Декарту, или, тем более, всяким древнегреческим математикам, доказывать простенькие теоремки и вписывать свое имя в историю. Сейчас далеко не каждый (да что там, единицы на тысячи человек) физически способны добраться до переднего края науки, не выбросившись из окна главного корпуса МГУ по пути.

        Хорошо ушлым ребятам в начале девяностых, поднимали миллионные бизнесы буквально с полоборота. Хорошо тем, кто вовремя прочухал перспективность интернета и открыл сайты в очевидных пустующих нишах. Брину и Пейджу, ведь когда они запускали Гугл, еще не было Гугла.

        Джобс собирал компьютеры в гараже и продавал. Сейчас запуск нового техпроцесса обходится Интелу в миллиарды долларов.

        Короче, слишком сложно нынче пробиться. Очень высокая конкуренция, куда ни плюнь.

        У меня есть для вас обнадеживающая новость. В мире разработки ПО это абсолютно не так. Нерешенные задачи россыпями валяются на дороге, некому взять и сделать.
        Читать дальше →
      • Притворитесь умным

          Лучший способ научиться чему-то — это научить другого.

          Наступил январь, студенты начинают сдавать экзамены. И часто самым сложным экзаменом оказывается математика. Мой хороший друг спросил у меня: «Что такое теорема Лагранжа, как её доказать и понять?»

          Я знаю определение и доказательство этой теоремы, но понять её я смог только после объяснения другу.

          И я вспомнил, что такое случается постоянно. Лучше всего я играю в шахматы, когда вслух озвучиваю, что происходит на доске (я играю по интернету), лучше всего пишу код, когда вслух объясняю себе, что я хочу, и как это получить. И понимаю материал с лекций, когда объясняю его другим.



          Мы всегда даём хорошие советы, но, как Алиса в стране чудес, следуем им нечасто. Это происходит, потому что мы торопимся, мы создали себе шаблоны поведения, и не задумываемся над тем, чем мы занимаемся.

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


          Подумайте, как решить эту задачу? Как бы эту задачу решил умный человек?
          Читать дальше →
        • 10 уроков о том, как повысить продуктивность, которые я усвоил, работая по 90 часов в неделю целый месяц

          • Translation
          image

          Сколько часов в неделю вы тратите на работу? Около 40, не так ли? А как вы думаете, что будет, если работать 90 часов в неделю?

          Автор сайта a Year of Productivity Chris Bailey решил провести такой эксперимент. К чему это привело? Читайте о 10 уроках, которые он извлек, в нашем переводе его статьи.
          Читать дальше →
        • Как я стажировался в стартапе в Сан-Франциско и уехал домой

          Зимой 2013 года леди фортуна наконец-то повернулась ко мне нужным местом и улыбнулась что есть мочи. Новость давала надежду на светлое будущее: из туманного Сан-Франциско по проводам прямиком домой, в Харьков, прилетело письмо. Мне предложили стажироваться летом в одном из перспективных стартапов, который уже во всю гремит на просторах американских (и даже немножко шире) интернетов. Трудно себе представить, что может быть лучше в жизни безработного студента пятого курса заочной формы обучения, чем такой шанс заявить о себе. Особенно, когда такого поворота судьбы ты даже и не ожидал, но в тайне мечтал.
          Читать дальше →
        • Отдых как ключ к высокой продуктивности



            Сейчас очень популярны всевозможные техники повышения собственной продуктивности. Оптимизация выполнения работ, тайм-менеджмент, приоретизация — всё это призвано максимально повысить производительность труда. Но в сумасшедшем ритме нашей современной жизни многие из нас забывают, что такое отдых и расслабление. Даже в выходные дни наши головы зачастую заняты рабочими проблемами и переживаниями. Но постоянно перерабатывая и отказывая себе в отдыхе и сне, мы тем самым снижаем собственную продуктивность и, что самое главное, не получаем удовольствия от жизни. Хотя второй попытки с проделанной «работой над ошибками» ни у кого не будет.
            Читать дальше →
            • +28
            • 14.2k
            • 5
          • Моментальная фотография сегодня или умрет ли Polaroid?

            Все помнят из детства чудные квадратные фотографии, сделанные на Polaroid 600. Иногда в новостях проскакивает название этой фирмы. Жив ли «полароид»? Существует ли сегодня моментальная фотография? Добро пожаловать под кат.

            image
            Читать дальше →
          • Семь крохотных пылинок могут прояснить происхождение Солнечной системы



              Проект Stardust — один из наиболее продолжительных и сложных в мире науки. Еще в 1999 году в космос отправили небольшой космический аппарат Stardust. Его название отражает основную цель, с которой зонд был запущен: собрать образцы межзвездной пыли, и доставить собранное на Землю. Первая миссия аппарата заключалась в сближении с кометой Wild 2 и сборе образцов вещества в ее хвосте.

              После кометы зонд продолжил свою миссию, и успешно собирал образцы космической пыли. Понятно, что пыль собиралась не в бумажный мешок: для сборка образцов вещества использовался аэрогельный коллектор, при попадании в который микрочастички оставались целыми. По словам ученых, эти микрочастички — древнейший след эволюции нашей Солнечной системы и Галактики в целом. Исследование образцов межзвездной пыли может прояснить и то, каким образом шло образование Солнечной системы, зарождение звезд и многие другие вопросы.

              Читать дальше →
            • Как надо хешировать пароли и как не надо

                image

                В очередной раз, когда мы заканчивали проводить аудит информационной безопасности веб-проекта, моя личная бочка с гневом переполнилась негодованием так, что оно перелилось через край в этот пост.

                Постараюсь очень лаконично и быстро обрисовать ситуацию с хэшами.

                Сразу определю какую задачу применения хешей буду рассматривать — аутентификация пользователей. Не токены восстановления паролей, не аутентификация запросов, не что-то еще. Это также не статья про защиту канала передачи данных, так что комментарии по challenge-response и SSL неуместны!

                Читать дальше →
              • Python на Хабре

                  Некоторое время назад, в силу определенных причин, мне пришла в голову мысль о том, чтобы начать изучать какой-нибудь новый язык программирования. В качестве альтернатив для этого начинания я определил два языка: Java и Python. После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.), я все-таки остановился на Python. Окей, выбор сделан. Что дальше? А дальше я стал искать материал для изучения…
                  Читать дальше →
                • Нужны ли в JavaScript классы?

                    JavaScript принято считать прототип-ориентированным языком программирования. Но, как ни странно, этим подходом практически никто не пользуется: большинство популярных JS-фреймворков явно или неявно оперируют классами.
                    В этой статье я хочу рассказать об альтернативном способе программирования на JavaScript, без использования классов и конструкторов — чистым прототипным ООП и особенностях его реализации на ECMA Script 5.
                    Читать дальше →
                  • Spintires — (симулятор грязевиков на Kickstarter) — «тайга, которой нужны ваши крылья»



                      Spintires: The ultimate off-road challenge! — (ссылка на KickStarter)
                      Демо-верия предлагаемая на KickStarter линк на страничку с демо
                      Более ранняя демо-версия 2009 года прямой линк
                      Исходный код демо-версии 2009 года прямой линк

                      Oovee Game Studios, одна из восходящих звезд Объединенного Королевства вышла на Кикстартер с дебютным проектом «Spintiers». Событие хоть и отмеченное на известном британском новостном ресурсе Rock Paper Shotgun (что уже само по себе говорит за игру), но, к сожалению, не вызвавшее достаточного резонанса среди игроков. Причины могут быть разными и не последняя из них – жанр. Это не гоночный симулятор, не полноценный симулятор дальнобойщика, а симулятор «месителя грязи». По крайней мере, из демо-версии складывается именно такое впечатление. Однако, даже демо-версия намного глубже чем кажется, даже если не проваливаться в колею. Если присмотреться – это отличнейшая база под будущую игру, необычный сеттинг не без изюминок.

                      А ведь в демо, между прочим, представлен шикарный парк отечественного автомобилестроения. При должном исполнении это может сделать ее своеобразным Сталкером от мира колес. Из чрева железных монстров при переключении коробки передач доносится забористая русская речь, вокруг расстилается живописная тайга, прорезанная линиями разбитых троп и дорог, и ведь елки-палки… все действительно родное, от и до. Как так? В Британии появились поклонники колесного русского духа? Вопрос на миллион долларов.



                      Что еще можно сказать об этой игре? Перво-наперво то, что Spin Tires не игра, а демонстрация физического движка Havok. Техническая демо-версия, созданная специально для конкурса Havok Physics Innovation Contest.
                      Особенностями этой демо-версии стало наличие «физичных» покрытий (вода, грязь) и взаимодействие с ними объектов (грузовых и не очень автомобилей), деформация грязевых и водных участков ландшафта в реальном времени, очень красивое и эффектное освещение. Как это часто бывает в случае удачных решений – демо постепенно начало превращаться в игру. Именно с этим демо Oovee Game Studios и обратилась к игрокам, чтобы собрать средства на полноценную игру.

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

                      Читать дальше →
                    • Java 8: от PermGen к MetaSpace

                      (Сокращённый перевод статьи Пьера-Хьюза Шарбонне)

                      Как уже сообщалось ранее на Java One, в Java 8 версии HotSpot планируется отказаться от PermGen пространства в пользу новой его вариации — Metaspace. Ранний доступ к JDK 8 даёт возможность наблюдать Metaspace в действии, чем и воспользовался автор оригинальной статьи чтоб узнать, какие преимущества даёт MetaSpace в сравнении с PermGen, и убедится во всём непосредственно.

                      Подробнорсти под катом.
                      Читать дальше →
                    • Антон Кекс: Как нам спасти Java?

                      Здравствуй, %USERNAME%!

                      Наткнулся в этих ваших интернетах на одно замечательное видео — презентация Антона Кекса в двух частях.
                      Приглашаю вас посмотреть это видео и присоединиться к дискуссии в комментариях. После опубликования поста я собираюсь выслать на указанные на слайдах контакты Антона приглашение присоединиться к нам, и ответить на наши вопросы. Надеюсь, у него уже есть аккаунт на Хабре, ибо инвайта у меня нету.

                      Читать дальше →
                    • Ruby on Rails. Установка, настройка, начало работы

                      • Tutorial

                      Зачем.


                      В этой маленькой статье, которую с удовольствием прочитал бы сам неделю назад, я попытался собрать все вещи, которые понадобились бы человеку, задумай он «с нуля» написать приложение на RoR. То есть не углубляясь ни в одну из областей, описать необходимый минимум действий, чтобы установить, настроить и написать своё первое приложение.Здесь собрано, как мне кажется, всё, что нужно и я надеюсь этот текст сэкономит кому-нибудь несколько часов поиска в интернете). Сам изучаю RoR вторую неделю, так что не судите строго).

                      Установка.


                      Просто и быстро ror ставится через rvm c rvm.io.

                      >\curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled
                      


                      Запустить rvm:

                      >source /Путь_к_домашней_директории*/.rvm/scripts/rvm
                      

                      *$HOME в дальнейшем.
                      После этого в $HOME/.bash_profile должна появиться строчка:

                      [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
                      


                      и при каждом открытии консоли rvm будет подгружаться, но у меня этого не случилось — пришлось ещё в $HOME/bashrc прописывать:

                      . ~/.bash_profile
                      


                      Теперь всё точно должно быть хорошо.
                      Устанавливаем нужную(скорее всего это будет самая последняя) версию руби (сколько их и в чём отличие можно посмотреть здесь -http://www.ruby-lang.org).
                      >rvm install 1.9.3
                      

                      Проверка на успешность создания
                      >ruby -v
                      

                      должна вернуть более подробную информацию, вроде
                      ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux].
                      

                      В процессе установки я случайно установил несколько версий, что потом доставило некоторые неприятности). Посмотреть список установленных версий руби можно так:
                      >rvm list
                      Если версий несколько, то текущая будет помечена "=>", дефолтная — "*", а текущая и дефолтная — "=*". Поменять на нужную используемую версию можно так:
                      >rvm use ruby-1.9.2-p320 (любая нужная версия)
                      

                      Чтобы поменять дефолтную версию руби пишем:
                      >rvm use ruby-1.9.2-p320 --default
                      

                      Читать дальше →
                    • Ежедневная работа с Git

                      • Tutorial
                      Я совсем не долго изучаю и использую git практически везде, где только можно. Однако, за это время я успел многому научиться и хочу поделиться своим опытом с сообществом.

                      Я постараюсь донести основные идеи, показать как эта VCS помогает разрабатывать проект. Надеюсь, что после прочтения вы сможете ответить на вопросы:
                      • можно ли git «подстроить» под тот процесс разработки, который мне нужен?
                      • будет ли менеджер и заказчик удовлетворён этим процессом?
                      • будет ли легко работать разработчикам?
                      • смогут ли новички быстро включиться в процесс?
                      • можно ли процесс относительно легко и быстро изменить?


                      Конечно, я попытаюсь рассказать обо всём по-порядку, начиная с основ. Поэтому, эта статья будет крайне полезна тем, кто только начинает или хочет разобраться с git. Более опытные читатели, возможно, найдут для себя что-то новое, укажут на ошибки или поделятся советом.

                      Далее очень много букв случайным образом превратились в пост.