Задать вопрос
  • Что теряет разработчик под Android используя не родную Java, a C# Xamarin?

    @gleb_kudr
    Да ничего он не теряет. Знаете C# берите xamarin и вперед. Тем более, шарписты обычно от джавы плюются. Производительность такая же +-. Поддержка платформы полная. Про язык сами можете сравнить, Android это официально до сих пор Java 6 (хотя умельцы прикручивают версии посвежее на свой страх и риск). Если что, там даже нет Switch по строковым литералам.

    Ну и до кучи - среда разработки у Xamarin значительно приятнее чем бесплатный Eclipse.
    И да, я про промышленное качество.
    Сам я в основном под iOS пишу на ксамарине, но платформа отличная. Родные sdk я щупал и могу сравнивать. Слушать хай от тех, кто ее в глаза не видел просто противно.
    Ответ написан
    2 комментария
  • С чем использовать AngularJS: с ASP.NET, ASP.NET MVC или с чистым .NET?

    bob_smith
    @bob_smith
    Только что закончили проект на связке ASP.NET MVC + WebApi + AngularJS. Получилось очень клёво. Логика такая: MVC-котнтроллеры возвращают только чистую вьюшку с разметкой для AngularJS, тот обращается к WebApi, получает в JSON данные, ну и мапит на вьюшку. И при изменении данных шлёт их в JSON обратно к WebApi.

    Плюсы:
    1) Чёткое разделение на слои логики. WebApi-контроллеры покрываются юнит-тестами.
    2) Чёткое разделение работы клиентских и серверных разрабов. До разработчика клиентского кода доходят только интерфейсы моделей, причём уже гарантированно работающие, т.к. проверяются тестами.
    3) Внешние сервисы (с которыми мы интегрируемся или, в перспективе, мобильное приложение) интегрируются с тем же api, с которым работает сам сайт.

    Минусы:
    1) Требуется дописать приличное количество клиентской логики для корректного отображения ошибок валидации.
    2) Большие страницы (а в нашем конкретном проекте на одной странице отображалось несколько вьюшек с разными api-контроллерами) подгружаются достаточно долго: сначала отображается пустая страница, затем первая часть, спустя пару секунд ещё и т.п. Но это больше вопрос оптимизации чем AngularJS
    Ответ написан
    2 комментария
  • Вы в браузере набрали адрес сайта, нажали Enter. Расскажите максимально подробно о технических процессах происходящих далее?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Действительно, уважаемый. Это слишком. Вряд ли я затрону все тонкости, но попробую наметить примерный путь:

    0) Пользователь вбивает в адресную строку браузера адрес сайта (нажимая клавиши на клавиатуре, которые замыкают определённую дорожку в матрице, по которой происходит определение нажатой клавиши, что через шину USB в какой-то момент передастся OS, где это поймает HID-драйвер и вызовет определённое прерывание, что OS передаст как событие/или_ещё_как в программу, которая вызовет соотвествующую функцию из API менеджера окон, которая изменит содержимое строки и в результате когда-то будет перерисован UI-элемент, а если нажат был Enter, то начнётся следующее).
    1) Браузер вытащит из input'а строку с запросом и посмотрит, похоже ли это на адрес. Если да, то добавит недостающие уточнения (например, http или file протокол, порт и подобные довольно стандартные вещи). Если нет - то скорее всего создаст запрос в поисковую систему, установленную по умолчанию (я более не буду опускаться до таких бессмысленных деталей, как вызовы API-функций, иначе я буду набирать это сообщение ОЧЕНЬ долго). В любом случае на выходе мы по сути получим URL, который надо загрузить. Протокол file:// мы рассматривать не будем, ftp далеко не везде есть, https:// на не хватит вечности, так что остановимся на http, который по сути есть tcp/ip по умолчанию на 80 порту с определённым форматом общения.
    2) Окей, url есть. Теперь нам нужен адрес, к которому обращаться. Так как http это tcp/ip - нам нужен ip адрес. Здесь нам помогают dns-сервера. Обычно, нормальный провайдер устанавливает у себя кэш-сервера dns, которые не обращаются по стопицот раз за vk.com к ответственному серверу com-зоны. Давайте не будем отвлекаться на то, как происходит там общение, если что - вот (вики тем хороша, что часто содержит внизу релевантные ссылки). Скажу лишь то, что на выходе мы получаем ip адрес(а).
    3) Имея адрес мы можем запросить страницу. Собственно, всё что после первого слэша - это как-бы параметры для http-сервера: какую именно страницу запрашивать, он всё же не телепат. Конечно, можно было бы немного схитрить и отправить читать про tcp/ip, но ведь существует и shared-hosting. Ограничемся лишь его упоминанием. Собственно, по полученному адресу отправляется GET запрос, который и обрабатывает сервер, находящийся по полученному IP-адресу.
    4) Сервер же, получив адрес, начинает распарсивать строку, медленно вытягивая нужные данные из баз-данных и настроек, выполняются сотни скриптов, иногда делается ещё не одна сотня различных запросов на другие сервера (здесь и разного вида метрики и разного вида HADOOP и т.д.). Пройдя сквозь скрипты и темплейторы в самом конце мы получаем html-страницу, готовую к употреблению. Её-то сервер и отправит в ответе (после заголовков, конечно).
    5) Вот и началось самое интересное. Получив html страницу браузер начинает жутко надругаться над CPU, HDD и GPU, попутно сжирая тонны RAM и мусоря в swap. Виной всему нереальные для полного соблюдения стандарты от небезызвестной w3c.org. Для облегчения многие делают костыли, вроде webkit, а некоторые и вовсе забивают на него и пилят свой стандарт с преферансом и картёжницами (впрочем, в последнее время становиться лучше). Здесь снова начинаются сотни вызовов API ОС, windows manager'а и прочих библиотек, вроде boost, qt или libpng. В ходе работы в RAM строится макет, по которому потом строится нечто вроде PDF (тоже сильно векторный), что, потом, обрабатываясь быстрыми шейдерами на GPU, выдаётся на экран. Опять же, многое пропущено, но вряд ли кому-либо, кроме парня в свитере с оленями, действительно интересно, как работает GDI, DirectX или OpenGL.
    6) Ах да, мы же забыли про тысячи js-скриптов, миллионы картинок и анимации с котиками, а также о таких дополнительных плюшках, как flash-player или java-weblets. В кратце, что js, то и flash и java - это виртуалка, со специальной архитектурой. Они, виртуалки, конечно разные (хотя flash и js довольно похожи, ещё бы - ECMAScript один и тот же). JS - самый интегрированный внутрь браузера, он же и самый медленный чисто визуально (ибо последние два имеют доступ к быстрому GPU), хотя самый быстрый в попугаях. Второй постепенно вымирает и представляет из себя, так же как и третий специальную shared-библиотеку, о которой браузер как-нибудь узнал и которой скармливает специальное содержимое помечанное специальным тегом html. Третий уже почти умер и встречается лишь изредка или в каком-нибудь энтерпрайзед со страшным legacy-базой. Ну здесь из сылок разве только гугл. Ибо сколько всего - даже не сообразишь. Да и вообще, эта тема ещё скучнее GDI, DirectX и OpenGL и к свитеру с оленями требуются ещё очки с толстенными стёклами, дающие стопицот к терпению и задроству над матаном. Если в кратце, то в случае JS, всё что было загружено в память и не думает выгружаться и формирует этакое дерево - DOM, над которым с помощью специального API и происходят модификации. При этом, перед тем как исполниться, весь JS-код компилируется, в нативный для VM байт-код. То же самое в общем-то и со вторым и третьим, разве только они не имеют доступа к DOM и организовать его - дело тех ещё костылей. Ах да, забыл ещё про Silverlight (или как оно там пишется), который сдох, не успев родиться. Так же как и Java, жив в серьёзном энтерпрайзе, не поскупившийся не "дешёвую" поддержку MS.
    7) Ну... А дальше пользователь нажимает на нужную гиперссылку и всё по новой.

    За кадром остались такие костыли, как ajax, websockets и прочая асинхронная ересь. С ней всё в миллионы раз сложнее. И к очкам со свитером потребуется ещё и... а чёрт их знает, что они там ещё носят. Ну да ладно, я искренне завидую тем парням (и девушкам), которые разбираются во всей этой машине. Целиком. Ибо это лишь верхушка айсберга. Разбавленная не лучшей памятью и ужасным гуглом.

    P.S. Не бейте сильно за грамматические и синтаксические ошибки. Спеллчекер приказал долго жить, да и 5 утра как никак.

    UPDATE
    На хабр выложили неплохой перевод дающий некоторое представление, как браузер ругается над памятью и процессором. Хотя и весьма поверхностное,
    Ответ написан
    26 комментариев
  • Как получить инвестиции для работающего B2B-приложения?

    cissav
    @cissav
    Руководитель Omnidesk.ru
    1. Вам нужно вплотную заняться изучением онлайн-маркетинга и ведения бизнеса в целом. Читайте побольше книжек (у издательства "МИФ" их хоть отбавляй) и блогов успешных предпринимателей.

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

    3. Если вам интересен проект, и вы в него верите, то одолжите денег и посвятите себя ему. В этом случае, конечно, нужна команда. Пытаться серьезно развивать проект самому - не самая хорошая идея.

    P. S. Рекомендую также ознакомиться со статьей, которую я совсем недавно опубликовал на Хабре, о собственном опыте создания компании.
    Ответ написан
    Комментировать
  • Чем тестирование при помощи Test-complete лучше чем использование Auto-It или Python?

    pletinsky
    @pletinsky
    Во первых Test-Complete — дорогостоящий продукт.

    1) поддерживает кросбраузерное веб тестирование (в том числе и html5).
    2) поддерживает распредделенное тестирование на нескольких компьютерах.
    3) поддерживает тестирование производительности.
    4) поддерживает кроссязыковую интеграцию не привязывая к какому то скриптовому языку, на котором удобно писать сисадминам, но не профессионалам в разработке.
    А вообще почитайте на их официальном сайте — там много чего интересного.

    Auto-It — тулза для тестирования windows приложений, которая по моему практически потеряла актуальность с развитием Microsoft Automation Framework.
    С ним работают только любители конкретно этого продукта, которые продают именно эти свои знания.

    Забейте на инструменты. Они не так много тут решают. Реальные вопросы: как сделать так, чтобы тесты окупались, как сделать, чтобы они не требовали изменений при изменении продукта, как их встроить в рабочий процесс.
    Вот их придется решать. И законченной теории тут нет — есть только армия любителей — которые считают что они что то умеют.
    Так что просто делайте а не инструменты изучайте — и все придет с опытом.
    Ответ написан
    3 комментария
  • Кто практикует code-review?

    png
    @png
    >> Какой код ревьювится? (весь/отдельные компоненты или изменения/другой вариант)
    В идеале нужно ревьювить всё, на практике получается просматривать только изменения.
    часто новая функциональность может потребовать рефакторинг, задача ревьювера — определить, надо ли это делать сейчас вообще.
    >> Какие используете инструменты?
    redmine — в продуктах, где требуется поддержка-доработка.
    задача — это целиком фича или функциональность. у задачи статусы, разработка-исполенно-ревью-тестировние-релиз-закрыта.
    если в задаче косяки, статус возвращается назад в разработку. Претензии к коду в комментариях к задаче.
    Когда-то использовали Redmine Code Review Plugin, но оно не прижилось

    доска с магнитами:
    весь проект бьется на задачи. задачи выписываются на бумажки и прилепляются к доске. что-то вроде такого:
    lh3.googleusercontent.com/-69gkJdi-ZVM/TpXc7i_nA1I/AAAAAAAABPE/SctbMV08z9A/s700/doska1.jpg
    (http://axshavan.blogspot.com/2011/10/3rd-day-of-agile.html) сделанные задачи попадают в столбец ревью.
    их берут люди, которые делают ревью (1-2 разработчика, и делают ревью, если в задаче косяки, она опять попадает в новые.)
    на бумажке пишется исполнитель и ревьювер.

    Причем у вас может быть не обязательно аджайл. Доска сама по себе клевая штука. Её видят все, работают с ней все. Никто не халтурит со статусами задач и т.д.

    >> Как код попадает на review? (всегда при коммите, создаёте review request руками когда нужно проревьювить, другой вариант?)
    человек делает задачу, потом подходить в ревьюверу, и говорит, я сделал, проверяй меня. или вариант с доской, просто прикрепляет бумажку в нужное место.

    >> Как используются результаты review?
    Исправляются ошибки, если какая-то ошибка проявляется часто и у многих, то собираемся вместе и обсуждаем, как не допускать эту ошибку потом.

    >> Как отслеживается что замечания сделанные во время review были исправлены?

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

    Зачем же тогда ревьювер? Очень просто — ревьювер проверяет работу, фактически решает ту же задачу в голове, проверяет алгоритмы, проверяет граничные условия алгоритмов, смотрит, конечно, и за качеством кода тоже следит. Но он ответственен только за одну задачу, а тим лид за всё + конечный результат.

    + имеет смысл ещё договориться заранее о стандартах кодирования и об ограничениях для конкретного проекта и вообще для всех проектов в целом.
    где-то обговорить или описать:
    — стандарты кодирования
    — желательные методологии TDD, DDD, партены проектирования
    — не желательные антипартены, то есть как мы не делаем, как нельзя

    — договоренности по проекту, это делаем в модулях, это выносим в плагины и т.п…

    Идея в том, что проект должен быть разработан так, как будто работает один человек. Всё должно быть по полочкам и в одном стиле.
    как-то так)
    Ответ написан
    1 комментарий
  • Контроль версий базы данных (сайта)

    Lerg
    @Lerg
    Defold, Corona, Lua, GameDev
    Для структуры базы данных всё очень просто. Вы помещаете sql скрипт создания базы под SVN и тогда любые изменения в ДБ должны идти через этот файл. Также в SVN можно хранить последовательные SQL скрипты, которые непосредствено изменяют ДБ: alter, update и др.
    Ответ написан
    Комментировать