• Оформление кода, оптимизация процесса проверки качества кода

    • Translation

    JavaScript, the winning style



    Код написанный в одном стиле, имеет много преимуществ: меньше мелких ошибок, многие ошибки легко обнаружить почти сразу, другие же можно легко отладить еще на стадии разработки. Новым же программистам не придется тратить лишнее время на изучение вашего кода (это не значит что им не придется разбираться в самом коде, а значит лишь что его легче будет читать) и им будет проще влиться в проект.

    Качество кода станет только лучше, если вся команда будет придерживаться заранее определенного стиля. Это безусловно стоит того, чтобы потрать немного времени на выработку общих правил.

    В отличие от Питона у которого есть единый свод правил «Style Guide for Python Code», у языка JavaScript такого нет. Однако на выбор есть целых 6 популярных гайдов:



    Помимо гайдов, не стоит так же забывать об автоматических анализаторах кода, таких, например, как JSLint и JSHint. И в них уже заложены свои настройки. Вопрос в том, какой же все-таки максимально правильный способ писать код на JavaScript, который был бы актуален и максимально соответствовал бы большинству рекомендаций? Давайте попробуем объединить большинство рекомендаций в этой статье и подумаем как можно оптимизировать процесс проверки качества кода.
    Читать дальше →
  • Promise-ы в AngularJS

      Одной из ключевых составляющих практически любого веб-приложения является взаимодействие с сервером. В больших приложениях это далеко не один запрос. При этом запросы часто необходимо объединять для последовательного или параллельного выполнения, а часто сочетать и то и другое. Кроме того, большие приложения обычно имеют многослойную архитектуру — обертка над RESTFul API => бизнес-сущности => более комплексная бизнес-логика (разбиение условно для примера). И на каждом слое необходимо принять данные в одном формате и передать на следующий слой уже в другом.

      Вот со всеми этими задачами могут помочь справиться Promise-ы.

      За подробностями добро пожаловать под кат.
      Читать дальше →
    • Это наша вина… Смиритесь с этим

      • Translation
      TL:DR: Удалил все облачные сервисы, которыми пользовался, и взял данные обратно под контроль.

      Я их не порицаю. Просто все еще думаю о будущей сцене из фильма о Джеймсе Бонде.

      М: Видите ли, 007, нам нужно выяснить, кто из миллионов граждан нашей страны украл «Космический Лазер».
      007: Это может быть непросто, но я уверен, что с помощью невидимого автомобиля, часов, стреляющих отравленными дротиками, и парочки полуобнаженных русских агенток, мы сможем найти виновника.
      М: Ну, как вариант. Но, думаю, мы могли бы просто посмотреть на Букфейсе.
      007: Что?
      М: Букфейс, разве вы о нем не слышали? Ну вы и динозавр, 007. Несколько лет назад, для выяснения, чем занимаются жители страны, требовалось проведение всяких секретных операций под прикрытием. Теперь же можно просто заглянуть в Букфейс.
      007: То есть, они рассказывают свои секреты? Идиоты.
      М: Я знаю. Похоже, что среднестатистические граждане просто счастливы делиться каждым аспектом своей жизни, персональной информацией, каждым мнением, поступком и желанием. В обмен на возможность сказать друзьям и семье, что они только что покакали, или показать им няшную фоточку котенка с забавной подписью внизу.
      007: Так вы утверждаете, М, что я вам больше не нужен?
      М: Нет, 007, не нужны. Я только что подключился к серверам Букфейса и запустил поиск всех людей, которые обновили свой статус и написали там «Украл гиганский Космический Лазер… lol, #WMD».

      Я виноват также, как и все остальные. Общаюсь с семьей в Фейсбуке, с друзьями в Google+, с коллегами в Твиттере. Держу документы в Dropbox, заметки в Evernote и фотографии в Picasa. Мои контакты в iCloud, календарь в Gmail, задачи в Wunderlist, пароли храню в Lastpass. Я даже позволил Apple отслеживать мои передвижения, на случай, если потеряю свой iPad, и Google меня отслеживает, когда мне нужно узнать, где найти ближайший МакДональдс.

      Я подписался на мириады сервисов, все они вроде-как «бесплатные», но в действительности — я приобрел услуги, расплатившись персональными данными. Можно возмущаться, что эти данные доступны (каким-либо методом) для АНБ в Штатах, и для GCHQ в Объединенном Королевстве, но нужно спросить себя — кто здесь действительно виноват? Предоставляя наши данные корпорациям (которые подчиняются законам стран, в которых работают), мы представили слишком доступные возможности секретным службам. Это как девственный лист пупырчатого полиэтилена, они же просто не могут сдержаться. Они вынуждены начать давить эти пупырышки приватности.

      Вместо того, чтобы злиться или расстраиваться, я решил действовать.
      Читать дальше →
    • Nested routing в AngularJS

        image
        В AngularJS, как известно, нет возможности штатными средствами сделать многоуровневую маршрутизацию, в которой перезагрузка нижних уровней маршрутов бы не приводила к пересозданию элементов верхнего уровня. Стандартный сервис $route инициализирует вид, контроллер и его scope целиком каждый раз, когда изменяется URL страницы.

        Для решения этой проблемы написано несколько сторонних решений, включая известный ui-router. По ряду причин ни одно из решений для некоторых моих проектов не подошло, и я написал собственную библиотеку, которую здесь и представляю: angular-route-segment.

        Что она позволяет делать?
        Читать дальше →
      • Учим английский: фильмы, книги, словари

          Многие из нас занимаются изучением английского языка, потому что в сфере ИТ большинство документации, форумов и просто полезной информации изложено на универсальном языке – английском. И каждый находит для себя свой подход к обучению: кто-то идет к своей цели постепенно, планомерно, кто-то более экспрессно и выборочно. В самом деле, в Интернете вы найдете более 9000 методик, о том, как эффективно и быстро выучить язык самому. В языковой школе вам предложат несколько целевых программ: от «разговорных навыков делового человека» до «целенаправленной сдачи TOEFL». Чего же нового хочу я предложить? Мы поговорим о «фоновом» изучении языка. Цель моего поста – поделиться с вами способами изучения языка, которые я использовал. Постараюсь показать концепцию в целом, который каждый из вас сможет интегрировать в свой способ познания языка.
          image
          Читать дальше →
        • Пол Грэм: Как убедить инвесторов

          Август 2013

          (Это одно из двух эссе по фандрайзингу. Скоро выйдет следующее по тактике фандрайзинга.)

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

          Инвесторы ищут стартапы, которые станут очень успешными. Легко сказать! В стартапах, как и в некоторых других областях, распределение стартапов по степени их успешности подчиняется степенному закону, только в стартапах кривая распределения ещё круче. Очень успешные стартапы настолько успешны, что затмевают собою все остальные. А поскольку число крупных успехов в год можно по пальцем пересчитать (есть мнение, что их в среднем 15 успешных стартапов в год), то инвесторы вообще смотрят на стартапы в черно-белых очках – либо у вас есть шанс стать одним из 15, либо нет.
          Читать дальше →
        • Геолокационные игры — большой обзор

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

            Узнать больше про гео игры
          • Семь навыков профессионального программиста

              Каждый год мы обучаем под свои проекты и набираем в команду студентов. Хантим, конечно, не всех. «Мы на работу ходим, а нам деньги плотют» — это точно не к нам. За «звездами» тоже не охотимся. Ищем в первую очередь тех, кто хочет расти, развиваться, становиться «звездой», а мы можем им в этом помочь.

              Одна из проблем нашего высшего образования в том, что в вузах учат много чему, и алгоритмам, и языкам программирования, и ООП, и даже паттернам проектирования. Но я еще ни разу не встречал, чтобы в вузах учили работать работу. Лабораторки не в счет. Спихнул – и забыл! Возможно, просто не везло.

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

              Итак, про семь навыков…

              Читать дальше →
            • Социальная инженерия: ликбез про метод атаки, который никогда не устаревает

                Как показывает мировая практика успешно проведённых взломов (успешно для атакующих, разумеется), большая часть проблем связана именно с проблемами с людьми. Если быть более точным — дело в их способности выдать любую информацию и совершать совершенно дурацкие действия.

                Думаю, IT-примеры вам и так прекрасно знакомы, поэтому напомню пример из книги «Психология влияния»: психологи обзванивали медсестёр в больницах, а затем представлялись врачом и отдавали распоряжение ввести смертельную дозу вещества пациенту. Сестра знала, что делает, но в 95% случаев выполняла команду (её останавливали на входе в палату ассистенты психолога). При этом врач даже не был хоть как-то авторизован. Почему сестра так делала? Просто потому, что она привыкла слушаться авторитета.

                Давайте ещё раз: в примере благодаря грамотной социальной инженерии 95% больниц оказались критически уязвимы.
                Читать дальше →
              • Ищите ошибки с помощью Google или «взлом» аккаунтов на badoo.com

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

                  image

                  Не все Bug Bounty programs одинаково полезны


                  В марте 2013 года компания Badoo объявила конкурс «Проверь Badoo на прочность!».
                  Конкурс манил призами и я, довольная успехом в поиске уязвимостей для Yandex, зарегистрировалась на сайте, посмотрела, какие ссылки приходят в письмах, и просто вбила их в поисковую строку Google.
                  Читать дальше →
                • 15 вещей, которые мы хотели бы знать перед разработкой стартапа

                    image
                    За четыре года работы над онлайн консультантом WebConsult мы накопили достаточно большой опыт, и оказалось, что изначально мы не учли многих вещей, которые потом приходилось переделывать – в итоге это стоило нам массы времени, средств и нервов. Эта статья, а возможно и цикл статей, будут посвящены аспектам, которые необходимо продумать еще до начала разработки, дабы будущие стартаперы изначально закладывали грамотную основу в свои веб-приложения. Этой статьи нам очень не хватало четыре года назад, когда создание системы только начиналось, и мы надеемся, что она поможет вам не повторить наших основных ошибок. Многие приведенные советы кому-то покажутся очевидными, однако часто разработчики их упускают, поэтому мы считаем необходимым еще раз напомнить о простых вещах.
                    Читать дальше →
                  • GitHub Flow: рабочий процесс Гитхаба

                    • Translation
                    Краткое предисловие переводчика.
                    Захватывающе интересная статья одного из разработчиков «GitHub Inc.» о принятом в компании рабочем процессе потребовала употребить пару специальных терминов при переводе.

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

                    Другое понятие, «deploy», на русский часто переводят словом «развёртывание», но в моём переводе я решил вспомнить оборот из советского делопроизводства — «внедрение инноваций на производстве» — и стану говорить именно о «внедрении» новых фич. Дело в том, что описанный ниже рабочий процесс не имеет «выпусков» (releases), что делает несколько неудобными и речи о каком-либо «развёртывании» их.

                    К сожалению, некоторые переводчики бывают склонны грубо убивать сочную метафору «иньекции» (или даже «впрыскивания», если угодно), содержающуюся в термине «code injection», так что и его также переводят словосочетанием «внедрение кода». Эта путаница огорчает меня, но ничего не могу поделать. Просто имейте в виду, что здесь «внедрением кода» я стану назвать внедрение его именно в производство (на продакшен), а не в чей-нибудь чужой код.

                    Я стремился употреблять словосочетание «в Гитхабе» в значении «в компании GitHub Inc.», а «на Гитхабе» — в значении «на сайте GitHub.com». Правда, иногда разделять их сложновато.

                    Проблемы git-flow


                    Повсюду путешествую, преподавая Git людям — и почти на каждом уроке и семинаре, недавно мною проведённом, меня спрашивали, что я думаю о git-flow. Я всегда отвечал, что думаю, что этот подход великолепен — он взял систему (Git), для которой могут существовать мириады возможных рабочих процессов, и задокументировал один проверенный и гибкий процесс, который для многих разработчиков годится при довольно простом употреблении. Подход этот также становится чем-то вроде стандарта, так что разработчики могут переходить от проекта к проекту и из компании в компанию, оставаясь знакомыми с этим стандартизированным рабочим процессом.

                    Однако и у git-flow есть проблемы. Я не раз слыхал мнения людей, выражавших неприязнь к тому, что ветви фич отходят от develop вместо master, или к манере обращения с хотфиксами, но эти проблемы сравнительно невелики.

                    Для меня одной из более крупных проблем git-flow стала его сложность — бóльшая, чем на самом деле требуется большинству разработчиков и рабочих групп. Его сложность ужé привела к появлению скрипта-помощника для поддержания рабочего процесса. Само по себе это круто, но проблема в том, что помощник работает не из GUI Git, а из командной строки, и получается, что те самые люди, которым необходимо действительно хорошо выучить сложный рабочий процесс, потому что им вручную придётся пройти все шаги его — для этих-то людей система и недостаточно удобна для того, чтобы использовать её из командной строки. Вот что становится крупною проблемою.

                    Все эти проблемы можно без труда преодолеть, следуя гораздо более простому рабочему процессу. Мы не пользуемся git-flow в Гитхабе. Наш рабочий процесс основан (и всегда был основан) на более простом подходе к Git.

                    Простота его имеет несколько достоинств. Во-первых, людям проще понять его, так что они быстрее начинают использовать его, реже (или вовсе никогда не) допускают ошибки, требующие отката. Кроме того, не требуется скрипт-обёртка, помогающий следовать процессу, так что употребление GUI (и т. п.) не создаёт проблем.

                    Рабочий процесс Гитхаба


                    Читать дальше →
                  • Курс лекций «Стартап». Питер Тиль. Стенфорд 2012. Занятие 18

                    • Translation
                    • Tutorial

                    Весной 2012 г., Питер Тиль (Peter Thiel), один из основателей PayPal и первый инвестор FaceBook, провел курс в Стенфорде — «Стартап». Перед началом Тиль заявил: «Если я сделаю свою работу правильно, это будет последний предмет, который вам придется изучать».

                    Один из студентов лекции записывал и выложил транскипт. В данном хабратопике ardin, переводит восемнадцатое занятие, редактор astropilot.

                    Занятие 1: Вызов будущего
                    Занятие 2: Снова как в 1999?
                    Занятие 3: Системы ценностей
                    Занятие 4: Преимущество последнего хода
                    Занятие 5: Механика мафии
                    Занятие 6: Закон Тиля
                    Занятие 7: Следуйте за деньгами
                    Занятие 8: Презентация идеи (питч)
                    Занятие 9: Все готово, а придут ли они?
                    Занятие 10: После Web 2.0
                    Занятие 11: Секреты
                    Занятие 12: Война и мир
                    Занятие 13: Вы — не лотерейный билет
                    Занятие 14: Экология как мировоззрение
                    Занятие 15: Назад в будущее
                    Занятие 16: Разбираясь в себе
                    Занятие 17: Глубокие мысли
                    Занятие 18: Основатель — жертва или бог
                    Занятие 19: Стагнация или сингулярность?
                    Читать дальше →
                    • +31
                    • 25.3k
                    • 4
                  • JavaScript трассировка, отладка, профилирование – заполнение пробелов

                    Годами я использовал Chrome DevTools, Firebug и даже Opera Dragonfly для отладки, трасировки и профилирования моего JavaScript кода. Замечу, что использовал эти замечательные инструменты не только для работы с JavaScript, но и для отслеживания событий сети, отладки CSS, работы с DOM.

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

                    image

                    Читать дальше →
                  • Знай сложности алгоритмов

                    • Translation
                    Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
                    Читать дальше →
                  • DarkJPEG: cтеганография для всех



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

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

                    Сервис использует стойкие методы стеганографии для сокрытия самого факта сокрытия информации вместе со стойкими методами криптографии для защиты данных, передаваемых по открытым каналам, от компрометации (факта доступа посторонних лиц). Исходные тексты проекта распространяются в рамках лицензии MIT.

                    Основные особенности:

                    • Использование SHA-3 для генерации ключей;
                    • Симметричное шифрование AES-256;
                    • JPEG (DCT LSB) стеганография;
                    • Поддержка RarJPEG и двойного сокрытия;
                    • Подбор случайного контейнера;
                    • Вычисления без участия сервера;
                    • Гарантия полной конфиденциальности.

                    Читать дальше →
                  • Стартап WigWag создаёт среду для программирования умного дома на JavaScript

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

                      WigWag позволяет создавать «правила», подобные рецептам IFTTT, которые могут на основе информации с датчиков или из интернета управлять любыми устройствами. Это могут быть датчики и актуаторы WigWag, интернет-сервисы, Raspberry Pi, Arduino, Belkin WeMo, Philips Hue, и любые другие, поддерживающие протоколы IP, RS-232, 6loWPAN, Bluetooth и Zigbee. Причем создавать правила можно не только через графический интерфейс, но и на JavaScript, с помощью среды выполнения DeviceJS, которую разработчики WigWag позиционируют как способ писать приложения для умного дома точно так же, как пишутся приложения для Web.


                      Читать дальше →
                    • WebRTC PeerConnection и DataChannel: обмен данными между браузерами

                      • Tutorial
                      image

                      Многие слышали о проекте WebRTC, поэтому я не буду углубляться в описание. На днях мне захотелось попробовать отправлять сообщения между браузерами, и чтобы разобраться в этом, я решил написать примитивный P2P-чат. Эксперимент удалался, и по мотивам я решил написать этот пост. На Хабре уже были статьи, освещающие вопросы использования WebRTC для передачи видео, однако меня в первую (и последнюю) очередь интересовала возможность обмена текстовыми или бинарными данными.
                      Читать дальше →
                    • Karma — тестируем javascript в консоли

                        Здравствуйте. Признаюсь честно, я пишу тесты редко. Т.е хотел бы чаще, но все как-то не получается. Вроде и руководство в принципе не против даже, но все равно находятся задачи посрочнее и поважнее. Тем не менее на днях заглянув в redmine обнаружил что задач практически нет (точнее они были, но требовали сперва дождаться бэкэнда).
                        Что ж, самое время вспомнить про тесты (конечно нужно было раньше о них думать, но лучше поздно чем никогда).
                        Вообще я до этого уже пробовал писать тесты, в том числе и на бэкэнде, а конкретно django. Я еще тогда подумал что было бы здорово запускать тесты из консоли а не в окне браузера. Ну а поскольку с недавнего времени я активно слежу за развитием angular, то почему бы не посмотреть как это сделано у них. Тем более как-то краем глаза я зацепил момент, что там тесты как раз запускаются в консоли. Плюс к тому же с нуля разбираться в премудростях тестирования не хотелось и я решил взять какой нибудь готовый проект с тестами, посмотреть как оно сделано, и погонять собственно тесты на нем. Мой выбор пал на angular-ui, а точнее на один из его модулей ui-utils.

                        Скачиваем, заходим в корень видим папку test а в ней файл karma.conf.js
                        Да и в самом ридми написано, что тесты запускаются так karma start —browsers ….
                        Гуглим karmajs и находим то что нам нужно karma-runner.github.io/0.8/index.html
                        Утилита для тестирования. Итак что она может?
                        • Запускать тесты из консоли
                        • Автоматически прогонять все тесты при каждом сохранении!!!
                        • Возможность писать тесты на множестве фреймворков, таких как jasmine, qunit и др.
                        • Прогонять тесты сразу на нескольких браузерах. (в том числе виртуальных, например fantomjs).


                        В общем то мне этих возможностей уже оказалось достаточно, чтобы взяться за нее. Но там есть и другие, в которые я пока не вникал, например интеграция с jenkins
                        Попробуем запустить тесты?
                        • +6
                        • 45.4k
                        • 2
                      • HTML5/AngularJS/Nginx приложение с правильным с google-индексированием

                        • Translation
                        • Tutorial
                        Большинство web-приложений и web-фреймворков используют архитектуру, не позволяющую разделить ui и backend разработку. Тем самым нет возможности разделить команду на узкоспециализированных frontend и backend разработчиков. Вне зависимости от предпочтений разработчика ему приходится иметь понимание как о слое представления, так и о слое логики. Если ui-разработчик знает только о том, как запустить сервер, и о модели данных — это огромная удача. В плохих случаях ui-разработчику необходимо провести полную сборку проекта чтобы увидеть изменения строчки в javascript файле, или знать о языке jsp файлов чтобы поменять стиль элемента. Формирование и передача на сервер обработанных html файлов так-же пагубно влияет на производительность сервера и сети.

                        non-ajax

                        Читать дальше →
                        • +29
                        • 36.4k
                        • 7