• Simple-Science — Простые опыты (дайджест #24)

      image

      Сегодня в выпуске #24:


      • бумажная болгарка;
      • одноразовый патефон;
      • стекло плавится в микроволновке;
      • перегретая вода в СВЧ печи;
      • дистилляция воды;
      • цветное пламя солей.

      Внимание:
      Некоторые опыты могут быть опасны для здоровья. При их проведении нужно обязательно соблюдать технику безопасности.
      Читать дальше →
    • Коллекция ресурсов для frontend и backend разработчиков

        image

        Некий dypsilon выложил на GitHub огромную коллекцию ссылок на ресурсы по веб-разработке, за что ему огромное спасибо.

        Список состоит из ссылок на библиотеки, руководства и статьи.

        Frontend: github.com/dypsilon/frontend-dev-bookmarks
        Backend: gist.github.com/dypsilon/5819528 (много node.js)

        Ссылок много, но все — строго по делу и упорядочены по группам (пример для фронтенда):
        1. Архитектура
        2. Фреймворки
        3. Cross Browser
        4. Cross Device
        5. Паттерны и сниппеты
        6. Манипуляция с DOM
        7. … и многое другое

        matmuchrapna советует еще frontdesk Вячеслава Олиянчука.
        Настоятельно рекомендуется добавить в закладки, а лучше — почитать.
      • Simple-Science — Простые опыты (дайджест #21)

          image

          Сегодня в выпуске #21:


          • изгнание зеленого змия;
          • рассекатель для горелки;
          • психрометр своими руками;
          • тепловой рычаг — расширение металла;
          • графитовый реостат;
          • цепкая вода.

          Внимание:
          Некоторые опыты могут быть опасны для здоровья. При их проведении нужно обязательно соблюдать технику безопасности.
          Читать дальше →
        • Настраиваем NGINX для мультиязычных сайтов

          • Tutorial

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

          Какой метод определения языка пользователя подходит лучше – вопрос достаточно спорный. Мой личный ранг значимости языковой информации (в порядке убывания): cookie, настройки браузера, регион.

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

          Распространенные варианты кодирования языковой информации о ресурсе следующие:
          • каждая языковая версия на отдельном субдомене, например en.example.com, ru.example.com
          • язык ресурса указывается в префиксе URI, например example.com/en/, example.com/ru
          • язык ресурса указывается в GET параметре, например example.com?lang=en, example.com?lang=ru

          Первый вариант наиболее радикальный, каждая языковая версия сайта рассматривается как отдельный ресурс. Могут возникнуть сложности с SSL сертификатом, необходимо заранее предусмотреть все возможные варианты в SAN DNS Host Name, или заказать сертификат с маской, например *.example.com.

          Второй вариант наиболее практичный, выбор языка входит в URI, значит, не будет проблем с индексацией и копированием ссылки.

          Третий вариант выглядит менее привычно, требует дополнительной логики при добавлении остальных GET параметров и может смутить пользователя при копировании ссылки. Не самый лучший вариант для публичных ссылок.
          image
          Я расскажу о реализации второго варианта на базе сервера NGINX. При минимальных изменениях можно применить описанные настройки и для первого варианта.
          Читать дальше →
        • «Continuous page repainting и отладка перерисовки страницы» в Chrome Dev Tools

          • Tutorial
          image
          Сегодня мы поговорим о том, как Chrome Dev Tools помогают нам бороться с лишней перерисовкой страницы.

          Прошлые части:
          «Workspace» и «Сниппеты»
          «Поддержка Sass»

          Читать дальше →
          • +53
          • 10.9k
          • 4
        • Simple-Science — Простые опыты (дайджест #22)

            image

            Сегодня в выпуске #22:


            • высоковольтная дуга;
            • труба Рубенса;
            • электрический ритм;
            • пирамида на ножах;
            • силовой перевес;
            • магнитные свойства металла при нагревании.

            Внимание:
            Некоторые опыты могут быть опасны для здоровья. При их проведении нужно обязательно соблюдать технику безопасности. А опыты с высоким напряжением повторять не рекомендуется.
            Читать дальше →
          • Shodan – самый страшный поисковик Интернета

            • Translation


            «Если люди не могут найти что-то в Google, они думают, что это не сможет найти никто. Это не так», – утверждает Джон Мэзерли, создатель Shodan, самого страшного поискового движка Интернета.

            В отличие от Google, который ищет в Сети простые сайты, Shodan работает с теневыми каналами Интернета. Это своего рода «черный» Google, позволяющий искать серверы, веб-камеры, принтеры, роутеры и самую разную технику, которая подключена к Интернету и составляет его часть.

            Читать дальше →
          • Пишем музыку с помощью PHP

            • Translation
            Я не специалист по теории вероятностей, искусственного интеллекта и машинного обучения, кроме того уроки начальной музыкальной школы давно забыты. Но если вы уделите мне 10 минут, то обнаружите, что даже небольшой запас знаний может дать впечатляющие результаты при их творческом применении. Я хочу поделиться с вами, как научить PHP сочинять музыку.

            Например, такую:

            сгенерированная мелодия
            Читать дальше →
          • Время подключать исходники. Введение в Source Maps

            • Tutorial
            В современной разработке ваш код сильно отличается от кода на «боевом» сервере (production) после компиляции, минификации, объединения и разных оптимизаций. Тут-то и вступают в игру карты кода (source maps), показывая точное соответствие элементов готового рабочего кода проекта и вашего кода разработки. В этом вводном уроке мы возьмём простой проект и запустим его с помощью различных компиляторов JavaScript с целью посмотреть работу карт кода в браузере.
            Читать дальше →
            • +20
            • 50k
            • 3
          • Тестирование кода перед коммитом с помощью Jenkins и IDE от Jetbrains (IDEA, PhpStorm...)

              В этой статье я хочу расказать о настройке Jenkins'а и практически любой IDE от Jetbrains для так называемого Pre-Tested Commit. Pre-Tested Commit — это процесс тестирования изменённого кода перед комитом, в котором разработчик на основе локальных изменений формирует diff, загружает его в Jenkins и проверяет что билд проекта с его изменениями проходит успешно. После этого разработчик фиксирует изменения в репозитории.
              Читать дальше →
            • Путь JavaScript модуля



                На момент написания этой статьи в JavaScript еще не существовало официальной модульной системы и все эмулировали модули как могли.

                Модули или подобные структуры это неотъемлемая часть любого взрослого языка программирования. Просто иначе никак. Модули позволяют ограничить область видимости, позволяют реиспользовать части приложения, делают приложение более структурированным, отделяют ресурсы от шума и вообще делают код нагляднее.

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

                Дело в том, что раньше не думали, что на JavaScript можно делать огромные проекты, а не просто «пропатчить DOM», поэтому о модулях не думали. Да и вообще не думали о будущем. И тут Внезапно будущее нагрянуло! Все вроде-бы уже есть, а модули в JavaScript, мягко говоря, запаздывают. Поэтому разработчикам приходится крутиться и выдумывать какие-то эмуляторы модульности.

                Думаю многие из вас читали прекрасную статью Addy Osmani Writing Modular JavaScript With AMD, CommonJS & ES Harmony, которая стала одной из глав его книги Learning JavaScript Design Patterns в этой статье рассказывается про «современные» JavaScript модули или же читали достаточно старую статью JavaScript Module Pattern: In-Depth 2010 года про «старые» модули.

                Я не буду переводить эти статьи и не буду делать из них солянку. В своей статья я хочу рассказать о моем модульном пути. О том как я проделал путь от «старых» модулей к «новым» и что использую сейчас и почему.
                Читать дальше →
              • Simple-Science — Простые опыты (дайджест #23)

                  image

                  В сегодняшнем дайджесте мы подготовили ролики, сюжеты которых ранее уже были на хабре. Иными словами, подобные «фокусы» уже описывали другие авторы ранее. Но не повторить их мы просто не могли.

                  В этом выпуске #23:


                  • левитация магнита над сверхпроводником;
                  • лазер из DVD привода;
                  • секрет пленки в ЖК-мониторе;
                  • бумажный тачпад.

                  Внимание:
                  Некоторые опыты могут быть опасны для здоровья. При их проведении нужно обязательно соблюдать технику безопасности. Особенно это касается опыта с жидким азотом и лазером.
                  Читать дальше →
                • Как хвост виляет собакой. Азбука пропаганды

                    Чем доступнее информация, тем больше её вокруг. Чем быстрее она распространяется, тем меньше остаётся времени на то, чтобы её проверить. Постепенно информационная среда превращается в некое подобие «белого шума». Всё труднее строить внутри себя новые информационные фильтры, чтобы отсеять лишнее: убрать в сторону лозунги, агитацию, пропаганду, а оставить только то, что на самом деле кроется за ними. А манипулировать нашими мыслями пытаются постоянно, и я говорю не о 25-ом кадре (он не работает), а о более земных вещах — приёмах пропаганды, которые так умело (а зачастую — очень топорно) используют политики, рекламщики и вообще, все, кому не лень. Об этих приёмах и пойдёт речь в статье.

                    Хвост виляет собакой. ("Wag the dog") — чтобы избежать большого скандала или «замять», оставить незамеченным какое-нибудь важное, но неприятное событие, часто используется простой, но хитрый и ловкий приём, который англоязычные политтехнологи называют «Wag the dog», а русскоязычные — «Хвост виляет собакой». Он заключается в том, чтобы вовремя поднять волну обсуждения вокруг вопроса второстепенной важности, на фоне которой другое, более важное событие или действие пройдёт незаметно.
                    Примеры таких вопросов: Отмена перехода на зимнее время, российское гражданство Депардье, поездка Путина или Саши Грей на Ладе Калине по России, полёты со стерхами и т.д.
                    Своё название этот приём получил в честь английского выражения tail wagging the dog, который, в свою очередь, появился из следующего народного пассажа:
                    — Почему собака виляет хвостом?
                    — Потому, что собака умнее, чем хвост. Если бы хвост был умнее, он вилял бы собакой.

                    Ещё 7 приёмов - под катом
                  • Памятка пользователям ssh

                      abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

                      Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

                      Оглавление:
                      • управление ключами
                      • копирование файлов через ssh
                      • Проброс потоков ввода/вывода
                      • Монтирование удалённой FS через ssh
                      • Удалённое исполнение кода
                      • Алиасы и опции для подключений в .ssh/config
                      • Опции по-умолчанию
                      • Проброс X-сервера
                      • ssh в качестве socks-proxy
                      • Проброс портов — прямой и обратный
                      • Реверс-сокс-прокси
                      • туннелирование L2/L3 трафика
                      • Проброс агента авторизации
                      • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
                      Читать дальше →
                    • Псевдо 3D: Анимация вращения планет и других шароподобных объектов

                      Описание небольшого трюка по анимации вращения планет или других шарообразных штуковин. На написание этой статьи меня натолкнула статья Сфера из двух треугольников (стоит почитать). А сам трюк основан на весьма простом способе создания в Photoshop псевдо-объемной картинки из плоской, который описан под катом.

                      микродемо


                      Читать дальше →
                    • Путешествия во времени и программирование 2: парадоксы



                        Эпоха путешествий во времени еще не наступила, а человечество уже давно пытается разрешить сопутствующие им парадоксы. Мы поговорим о самом очевидном из них: что же все-таки произойдет при вмешательстве в ход истории? Существует несколько вариантов того, как поток времени реагирует на действия путешественника из будущего. Эти модели можно увидеть в фантастических фильмах, о них все больше начинают говорить ученые, но какая модель ближе к истине — единого мнения пока нет. Мы только начинаем проникать в тайны времени, и еще не обладаем возможностью экспериментировать с перемещениями в прошлое. Что же можно прояснить в данном вопросе уже сейчас? Под катом нас ждет экскурсия по основам механики времени, мы порассуждаем о парадоксах, и проведем небольшой эксперимент. Да, это будет испытание виртуальной машины времени, построенной на основе алгоритма «Жизнь»!
                        Читать дальше →
                      • Еще немного о миграциях. Версия для PHP

                        Вольно цитируя вступление к соответствующей статье на RailsGuides,
                        Миграции — это удобный способ управления структурой и изменениями схемы БД.
                        Конечно, можно вести дела по старинке, оперируя множеством SQL-файлов, или, о ужас!, редактируя куски SQL-кода в одном большом файле, который представляет собой актуальную схему БД.

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

                        Если Вы уже заинтересовались, или все еще не уверены, но перспектива иметь прозрачную историю изменений и возможность с помощью одной-двух консольных команд откатиться на любою версию схемы, звучит заманчиво, прошу под кат.
                        Читать дальше →
                      • Видеозаписи докладов с WebCamp 2012 и анонс WebCamp 2013

                          Дорогие хабрачитатели, я хочу представить вам видеозаписи всех докладов с 3-й профессиональной конференции веб-разработчиков WebCamp 2012, которая проходила в прошлом году в Одессе, а также пригласить вас на 4-ю конференцию WebCamp 2013, которая состоится с 12 по 13 июня.

                          В прошлом году мы расширили конференцию до 4 секций: веб-технологии и управление проектами; юзабилити и дизайн; интернет-маркетинг; стартапы. Провели несколько мастер-классов, Startup Crash Test и организовали аллею стартапов.

                          В этом году мы планируем пойти ещё дальше. Мы переместили конференцию на более тёплое время и увеличить время её проведения до 2-х дней. Первый день – доклады в потоках, второй день – мастер-классы. 4 основные секции мы расширим специализированными подсекциями, которые смогут подготовить и провести различные коммьюнити. Для того, чтобы подсекция была добавлена в программу, она должна иметь минимум 5 докладов. Наша команда побывала на киевском Startup Weekend и мы решили «привезти» его в Одессу. Поэтому приглашаем всех желающих после разогрева на WebCamp закрепить полученные знания путём создания собственного стартапа за 54 часа на Odessa Startup Weekend, который пройдет с 14 по 16 июня.

                          Регистрация на конференцию уже открыта. Стоимость участия в конференции составляет: при отплате до 1 мая – 400 грн (~50$); до 11 июня – 500 грн(~63$); в день конференции – 600 грн(~75$). Студентам при предъявлении студенческого билета предоставляется скидка 50%. Для читателей Хабры мы даем 10% скидку, для её получения при регистрации необходимо указать промо-код Habrahabr. Информация о том, как можно выиграть бесплатный билет здесь.

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

                          Информацию о том, как проекту принять участие в аллее стартапов или в Startup Crash Test, можно найти здесь. Участие для стартапов бесплатное.

                          Под катом можно ознакомиться с видеозаписями докладов конференции WebCamp 2012.
                          Читать дальше →
                          • +12
                          • 4.8k
                          • 2
                        • FightCode: танковые войны на JavaScript

                          • Tutorial
                          FightCode — это онлайн-игра для программистов, построенная по образу и подобию классической Robocode. Для программирования танков используется JavaScript, все сражения происходят прямо в браузере, а редактор кода на сайте имеет встроенную «песочницу», которая позволяет в реальном времени видеть эффект от изменений кода. В отличие от многих других подобных игр, создатели неплохо поработали над дизайном — игровое поле и весь сайт в целом выглядят привлекательно и ярко.



                          Всё это делает FightCode одним из лучших вариантов для новичков в подобных играх или для обучения программированию. Проект довольно молодой, и несмотря на то, что на сайте зарегистрировано почти 9000 игроков, пробиться в первую сотню рейтинга можно без особых усилий. Очень удобно организована система боёв со случайными соперниками — из всех доступных роботов автоматически выбираются те, чей рейтинг близок к вашему. Очки считаются по системе Эло — победа над более сильным противником даёт гораздо больше очков, чем над слабым.

                          Каждый участник может иметь сколько угодно роботов. Создание нового робота начинается с примитивного шаблона, который не делает почти никаких осмысленных действий. Добавив обработчики основных событий, таких как столкновения или попадания вражеского снаряда можно дать роботу набор «безусловных рефлексов», которые сделают его поведение более целесообразным и послужат отправной точкой для дальнейшего развития.
                          Вот как это делается:
                        • Pilot: многофункциональный JavaScript роутер

                            С каждым днем сайты становятся все сложнее и динамичнее. Уже недостаточно просто «оживить» интерфейс — все чаще требуется создать полноценное одностраничное приложение. Ярким примером такого приложения является любая web-почта (например, Mail.Ru), где переходы по ссылкам приводят не к перезагрузке страницы, а только к смене представления. А это значит, что задача получения данных и их отображения в зависимости от маршрута, которая всегда была прерогативой сервера, ложится на клиент. Обычно эту проблему решают с помощью простенького роутера, на основе регулярных выражений, и дальше не развивают, в то время как на back-end этой теме уделяют гораздо больше внимания. В этой статье я постараюсь восполнить этот пробел.

                            Читать дальше →