• Как работают замыкания (под капотом) в JavaScript

    • Translation
    Привет, Хабр!

    Мы в Хекслете используем JavaScript не только для очевидных задач во фронтэнде, но и, например, для реализации браузерной среды разработки (наш опен-сорсный hexlet-ide) на React'е. У нас есть практический курс по JavaScript, и один из уроков там посвящен замыканиям. Это важная тема не столько в рамках JS, сколько в программировании вообще. Мы освещаем ее и в других курсах.

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


    Я использую замыкания уже достаточно давно. Я научился их использовать, но не до конца понимал как они на самом деле работают, что происходит «под капотом». Что это вообще такое? Википедия не очень помогает. Когда замыкание создается и уничтожается? Как выглядит реализация?

    "use strict";
     
    var myClosure = (function outerFunction() {
     
      var hidden = 1;
     
      return {
        inc: function innerFunction() {
          return hidden++;
        }
      };
     
    }());
     
    myClosure.inc();  // возвращает 1
    myClosure.inc();  // возвращает 2
    myClosure.inc();  // возвращает 3
     
    // Ага, круто. А как это реализовано?
    // И что происходит под капотом?
    
    Читать дальше →
  • Best practices от Google по разработке Android приложений

    В данной статье я хотел бы вкратце рассказать про самые последние best practices от Google. Я постарался выделить самые основные моменты, чтобы читатель сразу мог понять, что именно какая-либо фича дает разработчику. Не удивляйтесь, если где-то повторяюсь. Конспектировал + добавлял от себя по ходу просмотров видео в www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg

    Также к каждому пункту приводятся все необходимые ссылки для более подробного ознакомления с конкретной best practice.
    Читать дальше →
  • Секс и насилие в Google Play

      Последнее время google систематически удаляет приложения за секс и насилие, без пояснения причин и не вступая в диалог с разработчиками.

      Окей, гугл. Давайте проведем небольшой социальный эксперимент.

      Я установил на смартфоне доступ к контенту для младшей возрастной группы и зашел в несколько приложений от производителя Google Inc.
      посмотрим, что из этого получится
    • Взломать мобильную онлайн игру? Легко!.

      Привет, хабр! Сегодня я расскажу вам о том, с чем вы можете столкнуться, если вдруг решите залезть в дебри чужого приложения на Android (в данном случае, онлайн игры). Приключения с просмотром Java-классов в .dex, изучение оп-кодов Dalvik и даже программирование в двоичном коде. Но обо всем по порядку.

      Под катом трафик на ~800кб, 293 из которых – скриншоты кода (!)
      Господи, кто же сохраняет код скриншотами
    • 15 малоизвестных команд Linux

      • Translation
      Каждому разработчику в определенной степени следует овладеть навыками работы в терминале. Физически находиться у компьютера не всегда возможно, поэтому приходится подключаться удаленно. И действительно, GUI-программы вполне могут с этим с правиться, но зачастую они работают медленнее, чем получение доступа через тот же терминал (в конце концов, это лишь обмен текстом).
      Читать дальше →
    • Договор между разработчиком и Google Play на русском языке

      image Если вы разместили своё приложение в Google Play и вам так повезло, что оно начало приносить какие-то деньги, то рано или поздно перед вами станет вопрос, как эти деньги получить. По этому поводу написано уже немало полезных инструкций, и их успешное прохождение должно гарантировать вам отсутствие проблем с валютным контролем вашего банка при получении платежа от Google Wallet (бывший Google Checkout).

      Разбираясь недавно с этим вопросом, мы столкнулись с необходимостью предоставить в банк наш договор с Google Play. Этот договор существует в виде публичной оферты (вот ссылка) и проблема в том, что он предоставляется Гуглом только на английском языке.

      Изрядно покопавшись в недрах интернета, мы смогли найти хороший перевод. Однако, оказалось, что тот перевод от 2012 года уже устарел, и в текущей редакции (от 5 августа 2013 года) есть моменты, которые не переведены. В итоге, мы обратились к профессионалам, которые перевели нам недостающие куски договора. Результат выкладываем сюда на всеобщее пользование.

      Ссылка на перевод договора от 5 августа 2013 года

      Под катом интересные моменты, которые, как мы заметили, были добавлены Google в новую редакцию этого договора.

      Читать дальше →
    • Алгоритм Х или что общего между деревянной головоломкой и танцующим Линком?



      Предисловие


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

      Не можешь сам — заставь компьютер. Сказано — сделано. В результате написанному по наитию алгоритму пришлось работать всю ночь, чтобы найти все 4 уникальных решения. В процессе гугления решений для сравнения, я нашёл программу Burr Tools, которая справилась с этой задачей за 3 минуты на моём ноутбуке.

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

      Так как же решается эта задача и ещё целый класс подобных?
    • Написание простого приложения для работы с RESTful API под Android

      Работа с API различных порталов — одна из самых распространенных задач, возникающих при разработке под Android. Казалось бы, ничего сложного — асинхронно посылать HTTP-запросы и отображать ответы, но дьявол, как всегда, кроется в деталях.

      Основные антипаттерны:
      • Отправка запроса прямо из кода Activity в основном треде — тут без комментариев, т.к. это приводит к заморозке UI, вследствие чего система может предложить убить приложением;
      • Отправка запроса из кода Activity при помощи AsyncTask — плохо, т.к. если пользователь, к примеру, повернет экран, Activity пересоздастся и запрос придется выполнять заново, что приводит увеличению времени ожидания и количества потребляемого трафика;
      • Отсутствие кэширования — после каждого действия пользователя ему придется ждать полной загрузки данных.

      Читать дальше →
    • Нейронные сети для чайников. Сеть Кохонена

      В статье Нейросети для чайников. Начало автор Paul_Smith доступно показал насколько просто создать нейронную сеть для распознования картинок. Но есть одно но — то что он описал нейронной сетью не является. Перед его следующей статьей хочу рассказать вам как решить ту же задачу, но с использованием нейронной сети Кохонена.

      Итак, распознавать мы будем цифры, написанные белым по черному, такие как эти:
      image image image image image image
      Читать дальше →
    • Игровые циклы или ЭлектроКардиоГама

      • Translation
      Игровой цикл — это пульс каждой игры. Ни одна игра не будет работать без этого. Однако, к несчастью каждого нового разработчика игр, в сети нет хороших статей, в которых уделено достаточное внимание этой теме. Но не печальтесь, потому как только что вы получили возможность прочитать единственную в своем роде статью, уделяющую вопросу игровых циклов заслуженное внимание. По долгу службы мне часто приходится иметь дело с большим количеством кода мелких мобильных игр. И я каждый раз удивляюсь сколь много существует реализаций игрового цикла. Вы тоже можете удивиться как можно для такой, казалось бы простой, вещи можно придумать множество имплементаций. А ведь можно! И в статье я постараюсь рассказать о достоинствах и недостатках наиболее популярных вариантов игровых циклов. Также я постараюсь описать наилучший на мой взгляд вариант реализации игрового цикла.
      (Thanks to Kao Cardoso Félix this article is also available in Brazilian Portuguese) (Thanks for me, in Russian also, прим. перев.)
      Читать дальше →
    • Пишем игру для Android используя Canvas

        Привет Хабр!
        Сегодня я хочу рассказать о том, как написать простую логическую игру для Android OS с использованием Canvas. С этой игрой я познакомился около 5 лет назад на своем телефоне. Название забылось, а поиски на нескольких тематических форумах ни к чему не привели и я решил написать свою реализации этой игры. Разработка для меня скорее хобби, хотя иногда берусь за небольшие проекты. После некоторых раздумий я решил не использовать движок, а писать самостоятельно. Причины такого решения: желание получить опыт работы с Canvas'ом.
        Кому интересно, добро пожаловать под кат...
        • +26
        • 51.5k
        • 7
      • Android: Обработка СМС

        0. Вместо вступления


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

        Регбол! Сегодня в 19-30. Двор школы №30: ул. Володарского, 20. Открытая площадка с резиновым покрытием. Тел. 8 (951) ***-**-**.

        И вот я подумал — почему бы не написать небольшое приложение, которое будет отлавливать эти сообщения, и забивать их в гугл-календарь. Зачем? Да, в основном, just for fun, ибо я не настолько занятой человек, чтобы мне были жизненно необходимы автоматические секретари.

        Итак, приложение будет уметь следующее:
        • Следить за входящими сообщениями. Если пришло сообщение от адресата RM FIGHT, то нужно сверить текст сообщения с шаблоном, и при совпадении создать мероприятие в гугл-календаре. Если же текст сообщения с шаблоном не совпадает (например, просто какие-то новости пришли), то сохраняем сообщение в базе, чтобы потом можно было его прочитать.
        • Показывать сообщения от этого адресата, не попадающие в категорию «Оповещение об игре» (новости, реклама и т.д.).

        В рамках статьи я полагаю, что у читателя есть базовые знания — как создать проект, что такое файл Manifest, и с чего вообще начинать разработку под андроид — на этот счет есть куча разных туториалов, и здесь на этом останавливаться не будем. В то же время статья не предназначена для продвинутых андроид-девелоперов, в ней будут рассматриваться достаточно базовые вещи, вроде мониторинга и обработки смс, работы с базой данных, подключения по HTTP.
        Читать дальше →
      • Как отделить тему от приложения

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

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

        Мною предлагается технология, позволяющая динамически менять внешний вид Android приложения путем установки новых «тем», которые могут быть скачаны отдельно от приложения. Описанная в статье разработка выполнялась в качестве пилотного проекта в департаменте мобильных приложений компании «Мера-НН» (www.meranetworks.com), где и работает автор статьи.
        Читать дальше →