• Объясняем современный JavaScript динозавру

    • Translation


    Если вы не изучали JavaScript с самого начала, то осваивать его современную версию сложно. Экосистема быстро растёт и меняется, так что трудно разобраться с проблемами, для решения которых придуманы разные инструменты. Я начал программировать в 1998-м, но начал понимать JavaScript только в 2014-м. Помню, как просматривал Browserify и смотрел на его слоган:


    Browserify позволяет делать require («модули») в браузере, объединяя все ваши зависимости


    Я не понял ни слова из предложения и стал разбираться, как это может помочь мне как разработчику.


    Цель статьи — рассказать о контексте, в котором инструменты в JavaScript развивались вплоть до 2017-го. Начнём с самого начала и будем делать сайт, как это делали бы динозавры — безо всяких инструментов, на чистом HTML и JavaScript. Постепенно станем вводить разные инструменты, поочерёдно рассматривая решаемые ими проблемы. Благодаря историческому контексту вы сможете адаптироваться к постоянно меняющемуся ландшафту JavaScript и понять его.

    Читать дальше →
  • Как я использую git

      Intro


      Основам git мне пришлось научиться на своем первом месте работы (около трех лет назад).
      С тех пор я считал, что для полноценной работы нужно запомнить всего-лишь несколько команд:


      • git add <path>
      • git commit
      • git checkout <path/branch>
      • git checkout -b <new branch>

      И дополнительно:


      • git push/pull
      • git merge <branch>
      • git rebase master (а что, можно еще и на другие ветки ребейзить? О_о)

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

      Читать дальше →
    • Создаем идеальную строку поиска

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



      В этот статье мы посмотрим, как можно ее усовершенствовать, чтобы пользователь тратил минимум времени на то, чтобы добраться до искомого.
      Читать дальше →
      • +12
      • 14.5k
      • 7
    • Асинхронный JavaScript против отложенного

      • Translation

      В моей статье «Понимание критического пути рендеринга» (перевод статьи) я писала о том, какой эффект оказывают JavaScript-файлы на Критический Путь Рендеринга(CRP).


      JavaScript является блокирующим ресурсом для парсера. Это означает, что JavaScript блокирует разбор самого HTML-документа. Когда парсер доходит до тега <script> (не важно внутренний он или внешний), он останавливается, забирает файл (если он внешний) и запускает его.

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


      К счастью, элемент <script> имеет два атрибута async и defer, которые дают нам возможность контролировать то, как внешние файлы загружаются и выполняются.


      Читать дальше →
    • Обзор расширения OPCache для PHP

      • Translation


      PHP — это скриптовый язык, который по умолчанию компилирует те файлы, которые вам нужно запустить. Во время компилирования он извлекает опкоды, исполняет их, а затем немедленно уничтожает. PHP был так разработан: когда он переходит к выполнению запроса R, то «забывает» всё, что было выполнено в ходе запроса R-1.

      Очень маловероятно, что на production-серверах PHP-код изменится между выполнением нескольких запросов. Так что можно считать, что при компилированиях всегда считывается один и тот же исходный код, а значит и опкод будет точно таким же. И если извлекать его для каждого скрипта, то получается бесполезная трата времени и ресурсов.
      Читать дальше →
    • Конкурентность: Асинхронность

        Мы всё-таки смогли дойти до третьей части и добрались до самого интересного — организации асинхронных вычислений.


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


        Теперь посмотрим, как можно управлять потоком исполнения (control flow) в случае обработки асинхронных задач.


        Читать дальше →
      • Specification By Example – BDD для прагматиков


          На Хабре довольно много упоминаний о BDD. К сожалению, статьи, которые я читал, так и не дали мне ответа на вопрос «а зачем мне все это нужно?» Ответ пришел с неожиданной стороны. Когда я всерьез занялся вопросом автоматизации приемочного тестирования, мне под руку попалась книга Gojko Adzic (не уверен в транскрипции, поэтому не стал переводить имя автора) Specification By Example.
          Читая ее, я не уставал удивляться: каждая новая глава описывала шишки, которые я набивал на своем личном опыте, и предлагала решения аналогичные или лучшие, чем те, к которым я приходил сам методом проб и ошибок.

          Эта статья – первая в цикле «BDD для прагматиков». В ней описаны ключевые элементы наиболее эффективного, на мой взгляд, процесса разработки коммерческого ПО в современных условиях. Два продолжения будут посвящены работе со SpecFlow и автоматизации приемочного тестирования.
          Часть первая - живая документация
        • Drupal: ajax_facets и history API

            Наверное, каждый веб разработчик сталкивался с необходимостью в реализации поиска на сайте. Довольно распространенное решение — Apache Solr. В мире Drupal разработки это не исключение. Для интеграции Solr с Drupal и реализации фасетного поиска существуют модули search_api, search_api_solr и facetapi. Но в большинстве случаев нам бы хотелось, чтобы результаты поиска и фасетные фильтры обновлялись без перезагрузки страницы, то есть ajax'ом. И, как обычно в мире Drupal, на d.org найдется какой-нибудь проверенный временем и пользователями модуль (а может и не проверенный, как повезет), который делает то, что нам нужно. В данном случае это ajax_facets.
            Читать дальше →
            • +12
            • 5.1k
            • 1
          • Фильтрация данных в Symfony

              Всем любителям Symfony известно что в ней нету компонента фильтр.
              Есть замечательные и удобные Constraints и даже была попытка создать на подобии их фильтры issue на Github, но никто так и не взялся это сделать.


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

              Читать дальше →
            • Мультиварка — умная кастрюля или «не доведенный до ума» гаджет


                Этот пост будет полезен всем, кто хотя бы иногда что-то готовит сам, а также помогает или мешает это делать другим.
                Из него можно узнать, что это за гаджет — мультиварка, какие у нее технические возможности и невозможности, внутренность, наружность, достоинства (много) и недостатки (тоже много). Расскажу кое-что и о маленьких мультиварочных хитростях, а также позволю себе общее лирическое отступление о программировании на кухне.
                Цель поста — рассказать про мультиварки, как класс объектов, не выделяя особо его представителей, но, чтобы не вести разговор о сферической мультиварке в вакууме, сделаю основным примером разбора мою модель — Panasonic SR-TMJ181.
                Те, у кого нет мультиварки узнают, нужна ли она им, но и те, у кого она есть, надеюсь, без новых знаний не останутся.
                Читать дальше →
              • Субъективное мнение о Mac OS в сравнении

                Если коротко, то это сравнительный список того что в OS X хорошо и что плохо в сравнении с Windows и Ubuntu. Сравнение опирается на 4-х летнем опыте работы в Windows, 3-х летнем ковырянии в Ubuntu и 4-х месячной дружбе с Mac OS X. Уже понятно на чьей я стороне. Запись родилась в первую очередь потому, что когда я спрашивал у Google или владельцев техники Apple, лучше ли она и чем, мне никто ничего ответить не смог. Кроме пресловутых козырей безопасности, красивых шрифтов и эфемерного удобства я ничего не слышал и не читал. По этому, как только я стал владельцем «мака», стал записывать то, что удалось подметить.
                Читать дальше →
              • Пришедшая в негодность патентная система: как мы до такого дошли, и как ее починить

                • Translation


                В системе патентов в США существует фундаментальная проблема.

                Эта проблема — мы.

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

                За последние несколько месяцев эти мнения выросли до яростного вопля, так как патентная система начала негативно влиять на все больше и больше игроков в индустрии: небольшие разработчики стали целью судебных исков от компаний, которые ничего не делают и не производят; Apple, HTC и Samsung не могут сдвинуться места в судебных процессах, связанных с патентами; пара многомиллиардных аукционов по патентам вызвала к жизни неслыханную до селе словесную баталию между Microsoft'ом и Google'ом. Самые пламенные критики открыто заявляют, что любая польза, которую патентная система могла бы принести, сейчас полностью перекрывается издержками, что ресурсы, которые при прочих равных условиях были бы направлены на развитие новых идей теперь тратятся на чрезмерно усердную защиту старого.

                Эти аргументы повторяются так часто и с такой уверенностью, что они стали практически аксиомой, риторическим и интеллектуальным обманом, который редко (если вообще) подвергается сомнению. Но это плохо и неверно — настолько, что ставит под удар любые реальные попытки реформирования системы. Шуметь и злиться — хороший способ привлечь к себе внимание, но ужасный способ чего-либо добиться, особенно если принять во внимание, что большинство бьющих себя в пяткой в грудь лишь повторяют упрощенную версию аргументов, которые повторялись в нашей стране еще со времен, когда Томаса Джефферсона назначили главой Управления патентов.

                Так что давайте начнем с начала. Давайте посмотрим, как работает патентная система, где она особенно дает сбои, и как можно привести ее в порядок. Готовы? Поехали.
                Читать дальше →
              • Делаем веб-клиент GMail удобным

                  Если очень постараться, веб-клиент GMail-а можно довести до состояния, когда им более-менее приятно пользоваться. Вот как он выглядит у меня сейчас:



                  Под катом рассказ о том, какие особенности и как я использую.
                  Читать дальше →
                • Удаление программ в Mac OS установленных из пакетов .pkg

                    Мак ОС и установщики


                    Каждый, кто пересаживался на Mac OS был приятно удивлён, что во многих случаях установка программ на этой операционке сводится к простому «Перетащить программу в папку “Программы“» и всё. Дальше просто кликаешь по ней и она запускается. Я получал массу удовольствия от такого простого, дружелюбного и понятного подхода. Я чётко понимал: где я положил программу, там я её удалю и она попросту исчезнет. Лепота, да и только. Наверно многие были наслышаны о таком славном подходе в макоси. Но увы (или к счастью) нет ничего идеального и программы бывает нужно устанавливать и на маке, в полном смысле этого слова.

                    Меня это немного разочаровало в своё время, но до недавних пор это как-то не вызывало особых проблем, т.к. я пользовался нормальным софтом, который обычно поставлял с собой скрипты-деинсталляторы для .pkg пакетов. Но вот я решил установить программу FontForge для редактирования шрифтов, которая изначально разрабатывалась под идеологию linux и это моментально принесло с собой неразберху — FontForge.pkg начал методично размазывать себя по всевозможным папкам вместо того, чтобы попросту расположиться в "/Applications/FontForge.app". Что ещё более усложнило ситуацию — у FontForge отсутствовал какой-либо деинсталлятор. Когда пришло время удалить FontForge я задался вполне резонным вопросом: как же всё же по-человечески удалить программу установленную из .pkg, которая не предлагает полноценного деинсталлятора? Я бы и руками был согласен всё почистить, но я попросту не знал куда pkg раскидал файлы по диску.
                    Читать дальше →
                  • Homebrew: Менеджер пакетов для OS X

                    • Translation
                    Все менеджеры пакетов в Unix имеют определенные недостатки и большинство Linux-дистрибутивов пытаются по-разному эти недостатки обойти. В этом посте я расскажу про Homebrew — новый менеджер пакетов, нацеленный на простоту использования.

                    До Homebrew было несколько различных попыток создать эффективные пакетные менеджеры для OS X. Две наиболее популярные вылились в итоге в Fink и Macports, но у каждой из них все равно есть свои острые углы. В частности, в обоих создание своих пакетов или портов является черезчур сложным.

                    В Homebrew создавать новые пакеты и работать с ними проще пареной репы. Давайте посмотрим.
                    Читать дальше →
                  • Кастомная прошивка с Android 4.0.4 для Desire HD, умельцы делают работу за HTC

                      image

                      Несколько недель назад компания HTC объявила о том, что среди многочисленного списка устройств, для которых планировался выход Ice Cream Sandwich, не будет Desire HD. Чуть позже, отвечая на критику негодующей толпы обманутых владельцев злосчастной модели, компания объяснила свое решение тем, что размер новой системы не позволяет установить ее на хитрым образом размеченые разделы встроенной памяти телефона без удаления пользовательских данных, что по мнению HTC, может показаться нормальным далеко не всем пользователям. Разумеется, это вызвало лишь еще большую волну критики и обещаний пользователей никогда не покупать телефоны HTC. Не помогла даже петиция, собравшая 16000 подписей.
                      Читать дальше →
                    • Наглядная инструкция по использованию мобильного телефона

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

                        Представьте, что вы не продвинутый гик, а впервые увидели смартфон и хотели бы без посторонней помощи разобраться как «это работает».

                        На мой взгляд удачное решение показано на видео:

                      • Восход и закат Symbian

                        Вступление

                        Не хочу чтобы статья выглядела как ковыряние трупа ежа вилкой, поэтому сразу скажу — это прощальное слово хорошей системе, которая уходит в прошлое, уходит потому что её разработчики или владельцы были недостаточно дальновидны или еще почему-то, теперь это неважно. В расцвете сил Symbian занимал более 70 процентов рынка смартфонов и до сих пор занимает существенную долю рынка, но это уже, скорее всего инерционная составляющая и дело времени. Относительно будущего системы я полностью согласен с прогнозом компании Gartner:

                        image
                        Читать дальше →
                      • Стэнфорд организует бесплатный онлайн-курс по ИИ

                          Стэнфордский университет организует бесплатный онлайн-курс CS221 по искусственному интеллекту осенью этого года. Курс будет проходить с 2 октября по 16 декабря.

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

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