• Как собрать команду "за идею", не слив проект на общее обозрение?

    Singaporian
    @Singaporian
    Есть вещь, которую сразу не все понимают, она приходит с опытом. Идея сама по себе мало чего стоит. Идеи не угоняют. Ценность идеи состоит не только в словах, сказанных на питче. За идеей стоит видение пути, ориентировка в вопросе и способность драйвить команду к реализации этой идеи. Но кроме питча стащить все это невозможно.
    Так вот человек, который потенциально может угнать идею - это человек, у которого есть деньги ее реализовать. А кто будет реализовывать? К вам и придет за этим. Только тогда идея превращается в топор для каши.

    Проблема вас ждет в другом, о чем написал Денис Инешин: собрать команду и заставить ее работать - почти неподъемная задача, кроме редких частных случаев. Сконцентрируйтесь на зарабатывании денег лично, чтобы могли покупать программистов из своей зарплаты. Я именно так и делаю. Чтобы переплюнуть зарплаты самарских программистов, я уехал работать в Дублин. В результате после всех расходов, у меня остается около 90k руб - этого хватает на двух средненьких программистов. И это деньги, за которые мне ни перед кем не надо отчитываться и которые никогда не закончатся. Советую тот же путь.
    Ответ написан
    1 комментарий
  • Как собрать команду "за идею", не слив проект на общее обозрение?

    Опытные разработчики обычно знают что если идея скрывается тщательно то это фуфло, сильные лидеры наоборот обычно раздают идеи налево и направо, а разработчики их смотрят, думают и опять идут к этим лидерам сами уже с предложением "может сделаем?" т.к. в целом знают тоже что в одиночку не потянут.

    И как стоит подавать подобного рода объявления?

    Имхо нет, только время потратите своё и чужое.
    Ответ написан
    8 комментариев
  • Достаточно ли Android-разработчику стандартной документации?

    @Copperfield
    Android dude
    Вы получили знания по Android API.
    А теперь научитесь из всего этого писать хороший код с продуманной архитектурой, хорошим ООП, тестами, многопоточностью и т.д.
    Как минимум приучитесь строить UI при помощи какого-либо MV* паттерна. В гугл гайдах вы этого не найдете, но это нужно.
    Также, как сказали выше, научитесь пользоваться must have библиотеками. Не все они легки в использовании. Скажем, с Dagger2 придется повозиться чтобы понять как она работает.
    Ответ написан
    1 комментарий
  • Существуют ли какие-то расширения для Trello?

    Я для тайм-трекинга пользуюсь plusfortrello. Простая, как кирпич. Регулярно обновляется, человек над ней работает.
    Еще у меня несколько интеграций трелло со slack'ом, одна напрямую, и парочка через zapier )
    Ответ написан
    Комментировать
  • Как составляется бизнес-план для IT-стартапа?

    Inv_Hunter
    @Inv_Hunter
    Управляющий партнёр в BACG
    Вот здесь или здесь вы почерпнете всю необходимую информацию.

    Надеюсь, мой ответ будет Вам полезен.
    ¡Saludos!
    Ответ написан
    Комментировать
  • Какая есть хорошая библиотека для удобного использования shared preferences в Android?

    @tepexob
    Сделайте SharedPreferences sharedPref и SharedPreferences.Editor editor членами класса, например MainActivity, инициализируйте только 1 раз, напр. в onCreate.
    Т.о. кол-во кода в вашем примере сократится с 4х до 2х строк.
    Ответ написан
    Комментировать
  • Что нужно знать чтобы стать начинающим системным инженером (devops)?

    Singaporian
    @Singaporian
    Статья, которую должен прочитать каждый.

    DevOps - не профессия. Это название культуры доставки кода от разработчика (dev) через тестировщиков и до сисадмина(ops) и обратная связь по этой цепочке.

    Человека, который внедряет DevOps, обычно называют... как хотят. Чаще всего этим занимается какой-нибудь нон-конформист в команде.

    Профессии, которые отрисуются в процессе построения этой методологии следующие:
    • Build Engineer - инженер, который управляет зависимостями, сборками, конфликтами кода.
    • Release Engineer - инженер, который управляет репозиторием кода (кто куда и по каким правилам мерджится и откуда бренчуется). Пожалуй, это самая сложная задача в больших проектах. Особенно с нестрогим Agile или в Waterfall.
    • Automation Engineer - инженер, который занимается автоматизацией рутинных задач. Обычно деплоймент, автотесты, etc. Все эти buzz-слова типа Docker - его инструментарий.
    • Site Reliability Engineer - инженер, который поддерживает ops (апгрейды, расширение железа)
    • Configuration Manager - непонятная мне специальность. Жуткое порождение HR-специалистов, давящих на громкое название позиции. Можно было бы пойти дальше и назвать специальность ZooKeeper Vice President

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

    Почти всегда все эти роли совмещают один-два человека. Ну это зависит от качества кода.
    Назовем эту компанию BRAE/CM для краткости.
    Задача BRAE/CM состоит в том, чтобы программный код, который выходит из под пера программистов, оставался на контроле программистов и сисадминов одновременно. Программисты, равно как и сисадмины, благодаря DevOps-подходу, имеют возможность и даже обязаны обслуживать код на протяжении всего жизненного цикла от планирования архитектуры до мусорки.
    То есть сисадмины начинают рулить еще до того, как код попадет к ним - на ранних стадиях, а программисты продолжают рулить своими задачами уже после того, как код от них ушел к сисадминам - на поздних стадиях. И все это прозрачно друг для друга и все проблемы и решения ходят туда сюда и не спотыкаются о бюрократия в стиле "ничего не знаю, мы код уже закоммитили, у меня тут свои проблемы, у них сломалось - пусть сами и чинят".

    Так вот эта работа - завершающая стадия системного администратора и начинающая стадия разработчика. Поэтому не бывает Junior BRAE/CM.
    BRAE/CM бывает всегда только Senior в системном администрировании и всегда Junior в программировании.

    Еще один момент. В домашних условиях можно выучить инструменты на базовом уровне. Но не поварившись в одной кастрюле с реальными разработчиками, смысл всей этой кухни не понять. Так что сразу забейте. Но если хотите, могу описать пошаговый длинный путь как стать RE/CM:

    Сразу оговорюсь по языкам.
    У каждого языка свое предназначение. Java чаще используется в корпоративном секторе. Там много серверов и сложные бизнес-приложения. Поэтому Java-мир очень чувствителен к таким понятиям, как "технинческий долг" и "управление процессом разработки". И именно поэтому именно там все основные вакансии DevOps и именно там будет самый интересный опыт.
    Кроме Java, традиционно сильная DevOps-культура у Ruby. Практически все остальные языки не имеют столь развитой и популярной инфраструктуры в в данном контексте и потому вам скорее всего будут неинтересны.
    Другими словами, если в среде разработчиков выбор языка - тема для холивара и эмоций с миллионами сравнительных анализов с противоположными результатами, то для специалистов по DevOps выбор очевиден и прозрачен. Java - это одновременно самые интересные задачи, самый богатый toolset, самый большой выбор вакансий и самые высокие зарплаты.

    Каждый последующий пункт, кроме особо длинного первого, будет выливаться в неделю-две достаточно плотного труда. Если не прокрастенировать и уделять этому по несколько часов вечером.

    Итак, что делать:
    1) Почитать книги Head First по Java. Пройти курсы Java на EDX.
    2) Освоить SVN. Есть прекрасные тьюториалы. (GIT освоим позже)
    3) Поставить VirtualBox (не VMWare!!!)
    4) Написать простенькое приложение. Код коммитить в SVN. Собирать его при помощи maven.
    5) Поднять на отдельной виртуалке Jenkins. Он должен брать код приложения на SVN и запускать свой локальный maven для сборки.
    6) Написать модульные тесты (unit tests) своего кода. Пусть maven и их прогоняет.
    7) Поднять где-нибудь Nexus. Усложнить задачу maven, чтобы он теперь складывал все в Nexus. Если maven'у потребуются внешние библиотеки, он тоже не сам должен ходить в интернет, а через Nexus (Central repo).
    8) Настроить на своем десктопе vagrant так, чтобы он с нуля создавал виртуалки VirtualBox.
    9) Создать виртуалку DEV через vagrant. При этом ansible должен на ней что-нибудь настроить (например установить JDK)
    10) Научиться деплоить jar/war из Nexus на виртуалку DEV чем-нибудь. Чем - не посоветую, так как сам работаю с очень сложным IBM uDeploy, а это точно не для новичка. Посмотрите в сторону Rundeck или чего-то такого. Может самим Jenkins'ом задеплойте.
    11) Напишите интеграционные АВТОтесты. На чем хотите (как вариант: Selenium).

    Усложняем систему.
    12) Донастраиваем Jenkins: собирает maven-проект; выкладывает на Nexus; дергает vagrant/ansible для создания виртуалки SIT (system integration test); деплоит приложение на SIT; прогоняет автотесты на SIT; удаляет виртуалку после успешного завершения автотестов.
    13) Прикручиваем SonarQube в Jenkins для статического анализа кода. Исправляем косяки своего кода, согласно полученным от SQ рекомендациям.
    14) Прикручиваем мониторинг Sensu.
    15) Пишем нагрузочные тесты на чем-нибудь. В идеале потрогать два инструмента: jMeter и Gatling.
    16) Как и в 12-м шаге прикручиваем в Jenkins автоматизацию создания виртуалки SLT (Stress/Load test) и прогона на ней тестов. Только уже лоад-тестов(обязательно) и стресс-тестов(опционально) соответственно.
    17) Дописываем в свое приложение какой-нибудь функционал, чтобы использовалась база.
    18) Придется познакомиться с LiquiBase. Деплой SQL руками делать запрещено.
    19) Перейти на Docker (то есть теперь приложение выкладывать не напрямую в ОС, а внутрь докера)

    20) Денек на то, чтобы почитать про Agile, Scrum, Waterfall и прочие организационные порядки.

    А теперь немного уходим в управление проектом:
    21) Поставить Atlassian Jira. Разобраться, чем отличаются Epic, Story, Task, Sub-Task. Создать себе подобной этой структуре фронт работ (делать его не придется, просто нафантазируйте).
    22) Поставить Atlassian Stash и связать его с Jira.
    23) Переехать со своего SVN на GIT, предоставленный Stash'ем.
    24) Пройти Git-тьюториал какой-нибудь. Инструмент очень нетривиальный.
    25) Взять любую таску в работу. При этом в начале работы сделать новый Git branch из тикета Jira.
    26) По завершению работы запустить всю построенную ранее цепочку, но уже для своего брэнча.
    Дайте попробую угадать: вам пришлось скопировать все джобы и переписывать в них ветки?
    27) Сделать джобы нормально. Чтобы одни и те же можно было использовать для любых веток - по аналогии с принципом программирования "reuse code". У Вас будет reuse job :)
    28) Сделать pull request, самому сделать code review и самому себя же за-approve'ить. После этого сделать merge своей ветки в master.
    29) Сделать сборку брэнча автоматической по git-hook (или SCM pool)

    30) А теперь высший пилотаж: к чертям Docker, Copistrano и прочую buzz-word-hipsters-галиматью. Теперь вы с этим знакомы и сможете применить, но пришло время выгрызать этот детский сад калёным железом. Теперь вы доставляете код только как .deb-пакеты. Это значит, что вы:
    a) разбиваете control-файл на несколько пакетов, возможно с lib*,
    b) оверрайдите все ~20 dh_ в файле rules так, чтобы все это соответствовало вашим наработкам в предыдущих пунктах.
    c) раскидываете файлы по .install
    d) самое тяжелое: готовите .preinst, .postinst, .prerm, .postrm файлы СОГЛАСНО ИХ ПРИМЕРАМ .ex, сгенерированным dh_make - то есть с разбиемнием на update/configure/broken-install и что там еще есть. Это означает, что при переустановке, при апгрейде, при даунгрейде, при удалении и при пурдже, у вас будут разные сценарии, каждый из которых должен быть проработан досканально. На этом этапе вы также познакомитесь с понятием "регрессионные тесты".

    Ну как бы базовый вариант вот. Но это далеко не весь инструментарий и путь. Это так, для начала.
    Кроме этого неплохо бы познакомиться с Puppet (это не очень подходит для DevOps, скорее для рядовых админов с кучей серверов, но это очень популярный инструмент ввиду того, что никто не понимает, что такое DevOps и вас скорее всего заставят управлять сотней серверов, вместо релиз инжиниринга). А так же нужно познакомиться с операционными системами NixOS (обязательно) и CentOS/Debian (опционально, но я бы палкой бил тех, кто не знает эти OS). Кроме того, надо базово ориентирваться в PostgreSQL.

    Внимание, важный момент, который должен быть вшит на уровень подсознания у DevOps-ориентированного инженера: вы все время пробуете новые инструменты. Вы всегда будете находить что-то очень отличное. Знаете Nexus как свои пять пальцев и он решает почти все проблемы? Отлично! Теперь выкидываете Nexus и ставите Artifactory. Знаете хорошо CentOS? Круто! Теперь пробуете все это проделать на Windows или Debian. Потому что только когда вы сможете сравнивать инструменты, ваша работа будет ювелирной. А DevOps бывает либо ювелирным, либо он не DevOps. Вы должны быть языко-независимым, платформо-независимым и инструменто-независимым.

    Что будет дальше? Дальше вы начнете работать с микросервисами (сотни одинаковых контейнеров в облаке, которые должны как-то работать друг с другом без ручной конфигурации). Тогда познакомитесь со всякими Consul, ZooKepper и кучей инструментов AWS/OpenStack.
    Ответ написан
    13 комментариев
  • Evernote, появилась альтернатива?

    @onepavel
    Консультация и разработка мобильных приложений
    keep.google.com
    Ответ написан
    Комментировать
  • Стоит ли начинать стартап?

    Sanes
    @Sanes
    Фишка не в конструкторе, а в 100500 вариациях дизайна, на которые вы потратите 90% времени. Вы не представляете, как юзеры любят листать шаблончики. Весь день могут этим заниматься)
    Ответ написан
    2 комментария
  • Как увеличить скорость сборки android-приложения?

    voidnugget
    @voidnugget
    Программист-прагматик
    Android Studio и так по умолчанию использует Gradle Demon - быстрее не получится.
    Надо купить быстрее тазик и поставить SSD'шный RAID.
    Ответ написан
    6 комментариев
  • Как придумывать осмысленные имена для классов?

    Воспользуйтесь гугл транслейтом и переведите осмысленное русское название на англ.
    Ответ написан
    Комментировать
  • Книги для общего развития как программист/стартапер?

    @AVKor
    капаюсь

    Будут очень полезны орфографический словарь русского языка и учебник по нему же.
    Ответ написан
    Комментировать
  • DevOps основные требования к знаниям. С чего начать?

    @osminog
    К сожалению, название вакансии DevOps инженер - это просто некорректная формулировка вакансии. DevOps инженеров не существует, а если вас взяли на эту вакансию, то это значит, что вы попали либо на позицию классического сисадмина, либо на позицию "И швец и жнец и на дуде дудец", в лучшем случае это будет инженер по автоматизации. DevOps - это современная методика работы ИТ-компаний, ориентированная на быстрое приспособление к меняющемуся рынку и частый выпуск обновления программного обеспечения. Эта методика требует как организационных, так и процессных изменений в компании. К сожалению, многие думают, что достаточно нанять DevOps инженера, чтобы совершить трансформацию в организации.

    Если же вы устраиваетесь на позицию релиз-инженера или инженера по автоматизации, то рекомендую вам прочитать книгу "Непрерывное развертывание ПО. Автоматизация процессов сборки, тестирования и внедрения новых версий программ" www.ozon.ru/context/detail/id/7243884 В этой книге подробно описано, что должен знать и иметь такой человек.
    Ответ написан
    Комментировать
  • Кто работал в TopTal?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    плюсы:
    - если нужна длительная удаленная фултайм работа с хорошей зарплатой - это подходящее место
    - там нет нервотрепки с торговлей и выбиванием денег
    - нормальные проекты
    - покрыты риски неоплаты
    - нет всяких трекеров экрана и прочей подобной ерунды
    - всегда можно связаться со всеми, кто нужен по любым вопросам

    минусы:
    - надо проходить отбор
    - надо знать английский
    - надо иметь опыт за плечами

    Подробнее об удаленной работе в Toptal для программистов в блоге Payoneer.
    Ответ написан
    1 комментарий
  • Какие приложения сделать на Android для практики?

    @clickshop
    Ответ написан
    Комментировать
  • Android: Ручная оплата противоречит ли правилам google?

    anyd3v
    @anyd3v
    Вы читать не умеете или гулом пользоваться?
    https://play.google.com/about/developer-content-po...

    Платные и бесплатные приложения
    Покупка приложений. Плата за приобретение и скачивание приложений должна взиматься через платежную систему Google Play.
    Покупка продуктов через приложение.
    При продаже виртуальных продуктов или валюты в рамках игры, скачанной из Google Play, необходимо использовать систему продажи контента Google Play.
    Разработчики, продающие дополнительный контент, услуги или функции через другие приложения, скачанные из Google Play, также обязаны использовать систему продажи контента Google Play. Исключение составляют:
    покупка физических товаров или услуг (например, билетов в кино или книг, если в цену включена стоимость бумажной копии);
    покупка цифрового контента или товаров, которые могут использоваться вне приложения (например, треков, которые можно воспроизводить в других проигрывателях).
    Разработчикам запрещается вводить пользователей в заблуждение относительно приложений, а также услуг, товаров, контента и функций, которые можно через них приобрести. Если за доступ к функциям, указанным в описании приложения в Google Play, взимается плата, вы обязаны предупредить об этом пользователей.
    Ответ написан
    5 комментариев
  • Активити или фрагмент (android)?

    questman
    @questman
    Исходный код Android-приложения Телеграма лежит на гитхабе. Так что можешь спокойно происследовать его.
    В двух словах: у них там вообще не активити, а своя пародия на них с помощью фрагментов и одного активити.
    Ответ написан
    Комментировать
  • Как приложения VK для android задаёт размеры imageView еще до загрузки картинки?

    @antonded
    Есть подозрение, что в json, помимо url картинки, передаются еще и размеры (соотношения сторон?).
    Ответ написан
    Комментировать