• Литература для изучения "Алгоритмов и структуры даных"?

    Dumbris
    @Dumbris
    Вам уже посоветовали отличные книги.
    В 2017 году, так же доступно несколько более прогресивных форматов обучения:
    1. Курсы

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

    2. Сразу начинайте решать задачки с leetcode.com, hackerrank.com и т.п.

    3. Участвуйте в соревнованиях типа Яндекс.Алгоритм или Russian CodeCup первые 1-2 задачи можно решить не имея специальных знаний по алгоритмам.
    Ответ написан
    Комментировать
  • Прототипировать сразу в Android Studio реально?

    MIkola35
    @MIkola35
    Team Lead UX/UI Designer
    Когда я увидел новую студию, я тоже об этом задумался. С первого взгляда, там всё так просто выглядит. Но мне как дизайнеру надо видеть не один экран, а полотно из экранов и возможность быстро что-то на них менять. К тому же в каком бы из редакторов я не работал: sketch или photoshop, я всегда устанавливаю плагины упрощающие мою работу и расширяющие возможности программы. Так же и в самих редакторах есть некоторые уникальные мелкие фичи, которыми я часто пользуюсь.
    Студия же не сможет предложить все те же функции, что есть в sketch или даже в простейших figma и Adobe XD, но возможно благодаря текущим новым функциям разработчикам будет легче перерисовывать экраны от дизайнера.

    В будущем действительно хочется, чтобы работу дизайнера мог продолжить разработчик, не перерисовывая его макеты. Я вижу такой инструмент в области кроссплатформенных приложений, которые делают с использованием веб технологий типа ionic, react, cordova и т.п.
    Ответ написан
    Комментировать
  • Зачем нужен Dependency Injection в Android разработке?

    artemgapchenko
    @artemgapchenko
    Начать неплохо бы с понимания того, что такое DI. Обратимся к википедии:

    Внедрение зависимости (англ. Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту.

    Если выражаться не канцеляритом, а обычным русским языком, то DI - это когда вы своему компоненту (например, классу) предоставляете нужные для него зависимости извне, а не создаете их сами в конструкторе, или через инициализацию в месте объявления поля. То есть не так:

    public class Api {
    	....
    	private final HttpClient client = new OkClient();
    }

    А, например, так:

    public class Api {
    	....
    	private final HttpClient client;
    
    	public Api(@NonNull HttpClient client) {
    		this.client = client;
    	}
    }


    И что нам это даёт?

    Ну, очевидно, нам теперь проще менять зависимости. Нужна вам другая реализация абстрактного класса HttpClient - взяли, и передали её через конструктор, или через метод-setter. В случае с первым куском кода, вам пришлось бы ещё и класс Api переписывать, что в случаях, отличных от тривиальных, может привести к ошибкам. Получается, что ваш класс теперь закрыт от изменений (смотрим Open/Closed Principle).

    Окей, а на практике-то какие бенефиты?

    Во-первых, вы теперь можете написать инициализацию вашей программы через конфигурационные файлы. Скажем, на старте будет читаться простенький текстовый файл, который определяет, какой httpclient использовать, какие настройки доступа к бд применять и так далее, и, исходя из этого, будут определяться зависимости.
    Во-вторых, вам теперь существенно проще писать тесты. Написали вы, скажем, какой-нибудь парсер, который принимает InputStream, содержащий в себе данные json-объекта, как-то хитро его парсит, и выдаёт вам объект вашей бизнес-модели. В приложении этот парсер будет принимать на вход реализацию InputStream'а, которая берёт данные из сети, а в тестах - реализацию, которая просто читает файл с диска (потому что тесты должны выполняться часто и быстро, и ваша задача в тесте - протестировать ваш парсер, а не скорость сетевого соединения).

    Вот, в общем-то, и всё. А Dagger - это просто библиотека, которая автоматизирует ручное внедрение зависимостей, равно как и другие DI-библиотеки.

    P.S. В некоторых случаях чрезмерное увлечение DI может привести к нежелательным эффектам, вроде чрезмерного усложнения кода, поэтому внедряйте аккуратно. Понимание приходит с опытом.
    Ответ написан
    Комментировать
  • Какие приложения, кроме To-Do листов, пишут в качестве демо?

    @CrashLies
    Навскидку:
    1. Файлообменник, вроде rghost;
    2. Система управления тестированием (test case tracker);
    3. Приложение для крупной клиники - запись на приём к нужному врачу в удобное время.
    Ответ написан
    1 комментарий
  • Какой самый лучший путь развития до архитектора ПО?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    0. Убить лень!
    1. Личный опыт работы с применением различных IT-технологий.
    2. Постоянное самообразование и изучение НОВЫХ технологий.
    Ответ написан
    Комментировать
  • Зачем изучать java.util.concurrent, если пишешь под Android?

    @onepavel
    Консультация и разработка мобильных приложений
    1 BlockingQueue музыкальный плеер, есть очередь откуда проигрываются треки, плеер снизу забирает трек, сверху пользователь накидывает в очередь новые треки. работа с очередью идет из разных потоков.
    2 качалка файлов, очередь файлов для закачки, настройками могу регулировать кол-во одновременно качающих потоков
    3 CountDownLatch отличный инструмент для отсчета оставшегося времени
    4 CyclicBarrier чумовой механизм ожидания завершения работы нескольких потоков, парсинг сайта,
    закачка файлов, обработка текстов, подсчет данных или игр
    5 Executors и ExecutorService быстрая организация пула потоков использую для работы с sqlite,
    а также ScheduledExecutorService для организации таймера для проверки изменения чего либо у пользователя на девайсе
    6 полезная штука Exchanger, моментальная реализация задачи producer - consumer
    7 ConcurrentHashMap вообще классика для организации хешей, это сейчас есть LRU, а раньше не было. А было WeakReference и эксперементы с очередями и хешами WeakHashMap
    8 Atomic, легко позволяют создавать потоко-безопасные переменные, использовал AtomicBoolean, как межпотоковый стейт
    Я знаю, что есть конторы, как крупные так и мелкие не используют Retrofitы robospicы DI фреймвори и так далее.
    Учитывая проблемы с 65к dex, из-за тучи либ сторонних и особенно play services, собрать уже сложно.
    И для мелкой задачи стоит ли с собой тащить либу, вопрос холиваный
    И стоит знать java.util.concurrent потому что, это используется в либах. Тот же volley, там три чистых потока Thread для выполнения http, а в ui пробрасывается через хендлер и Executor
    Ответ написан
    5 комментариев
  • Какова сейчас минимальная себестоимость генерации 1Ghash в день в биткойне?

    Rio
    @Rio
    dustcoin.com

    Вот тут можно посчитать профит от добычи криптовалют, в зависимости от скорости и цены на электричество.
    Ответ написан
    1 комментарий