Ответы пользователя по тегу Java
  • Сложно ли выучить React-Native?

    voidnugget
    @voidnugget
    Программист-прагматик
    Сам по себе react-native очень сырой и кривой в различных вариациях - без нативной разработки и ковыряния issues'ов в github'e в нём совсем никак. Без знания Obj-C / Swift'a и Java/Kotlin лезть не советую, иначе будут глупые вопросы по типу: "а где мне найти нормальную либу для анимаций в 60fps ?", ответом будет: "Взять и написать".

    Сам по себе RN под iOS был написан на C C++ Obj-C и Obj-C++ в разное время и разными людьми, без тестов.
    В целом ощущение что "собрали на скорую руку из говна и палок".
    Ответ написан
    Комментировать
  • Как собрать java проект в netbeans, что бы он был exe файлом с "моей иконкой"?

    voidnugget
    @voidnugget
    Программист-прагматик
    Можно использовать WinRun4j или подобное.
    К netbeans не имеет отношения, можно интегрировать с maven / gradle etc.
    Ответ написан
    Комментировать
  • ADF только для энтерпрайза?

    voidnugget
    @voidnugget
    Программист-прагматик
    Ну в общем-то да, это дикларатизавр времён популярности Struts и JSF.
    Ничего не мешает взять Vaadin, ZK, gwt, extgwt. Предпочитаю Vaadin.

    Я остановился на связке Scala Play2 Slick + Scaladin, либо Groovy Grails + Vaadin.
    Можно конечно пробросить контекст сервлета Vaadin в Play вручную и писать на Java, правда я не знаю как там работают Push-нотификации, и работают ли вообще.
    Ответ написан
    9 комментариев
  • Какие технологии выбрать для написания чата?

    voidnugget
    @voidnugget
    Программист-прагматик
    Если вы упоротый рубист, стоит реализовать сервер на основе
    faye/faye-websocket-ruby или imanel/websocket-ruby с воркерами на sidekiq. В качестве окружения я лично предпочитаю JRuby. Ещё я видал как люди гоняли рубисткий sock.js. Я даже не представляю почему у него популярность ниже того же socket.io, а поддержка в разы лучше.

    Также обязательно нужно написать fallback на Server-sent events и long polling.
    Хотя можно вообще на заморачиваться с websocket'aми - его может будет достаточно, и для чатов с большим количеством народу производительность у него будет выше чем у Websocket'ов.

    А так, в соседней вселенной, я обычно использую Vert.x и местный sock.js с откатом на sse.
    Ответ написан
    Комментировать
  • Выбор фреймворка для создания REST-сервисов

    voidnugget
    @voidnugget
    Программист-прагматик
    Не знаю о каком-таком "множестве фреймворков" идёт речь.
    Сейчас кроме swagger-codegen'a нормальных кодогенераторов замечено не было, оно дружит со Scalatra и play2. В принципе можно написать любой шаблон для кодогенерации под что душе угодно, и не такое уж это и муторное занятие как принято думать.

    Генерация Swagger спеки, вместе с endpoint'aми по схеме БД пока только в планах у typesafe, также они хотели написать автоматическую REST-мапилку с шаблонными контроллерами, аля tastypie под Scala. Ещё с этой же серии есть django-rest-framework и это всё барахло неоднократно переписывалось под Node.js. Под PHP подобных вундервафей замечено не было - там тоже принято "кодогенерировать" по схемам БД, и там тоже были плюшки для генерации спек Swagger'a.

    Я вот планирую написать что-то похожее под Vert.x.
    Ответ написан
  • С чего начать изучать BigData?

    voidnugget
    @voidnugget
    Программист-прагматик
    BigData не очень то и связана со структурами данных - в основном это разнообразные пространственные структуры, скорее больше связана с алгоритмами NLP, классификации и машинного обучения.

    В первую очередь нужно выбрать средство обработки и хранения.
    В случае с Java это HBase Cassandra
    HBase - когда пишется в базу очень много, и большинство индексов "самодельные".
    Cassandra - когда соотношение чтения / записи 4:3, так как в Cassandra уже есть средства колоночной индексации.

    В случае с реальным высоконагрузом это ScyllaDB - обладает теми же особенностями что и HBase, но С++11 и Share-nothing approach и от того в 6-7 раз шустрее.

    Для БД до 200Гб хватит банального MySQL'я c R-tree индексом и Engine Archive.
    Вот PostgreSQL при правильной настройке спокойно строит B-tree индексы для объёмов данных в 500-700Гб, что для MySQL'я непосильная задача Ну и в PostgreSQL часто приходится дописывать сишные функции агрегации и строить по ним разнообразные индексы, иногда пространственные (gin/gist).

    Вот небольшой обзор разных типов индексов.

    От себя ещё добавлю MVP-tree для поиска похожих персептивных хэшей и Fusion-tree как более съедобный вариант дерева Ван Емде Боаса.

    По поводу хипстер-культа вокруг MongoDB - скажу что PostgreSQL с индексами на хэш-таблицах и небольшими множествами документов в 1.5-3 раза шустрее, потому что "Building Index with Vodka". А нормальная репликация и партицирование напрямую зависит от принципов решения задачи Консенсуса в каждом конкретном приложении, и без понимания работы Raft / Paxos не стоит надеятся на чудеса той же MongoDB или PostgreSQL, они являются не более чем инструментами для решения этой задачи.

    MongoDB очень даже ничего для реактивных проектов на основе Meteor, а для всего остального уже GoldenHammer™.

    По индексации, надо обязательно-обязательно прочитать книги Ханны Самет
    Foundations of Multidimensional and Metric Data St... = Applications of Spatial Data Structures: Computer ... + The Design and Analysis of Spatial Data Structures

    В принципе книжки Foundations of Multidimensional and Metric Structures должно хватить с головой, но можно "дочитывать" более полное описание в более древних работах. Одним словом тётка "жжёт", и я не знаю почему это до сих пор никто не перевёл.

    Ну после того как разобрались что и где и как хранить, теперь можно думать по поводу обработки...
    Есть древняя книжка "Алгоритмы интеллектуального Интернета" и "Программируем коллективный разум" Хоть названия переведены на русский довольно странно и звучат довольно наивно - это хорошее введение в простые средства обработки и анализа данных.

    По машинному обучению можно пройти курс Эндрю Ына на курсере.

    Есть Южный DataScience-централ, там есть много чего полезного. Его можно почитывать. Есть ещё поверхностные CheetSheet'ы, видел и получше, но не нашёл.

    Как DeepLearning адепт советую разобраться с Theano, и методами описанными тут. В продакшенах эта штука до безобразия слоупочна и видел товарищей которые более-менее успешно слезли на Neon.

    Если лезть в Java, то на примере Spotify чаще всего используются связки
    Apache Kafka -> Apache HBase -> Apache Storm -> Apache Spark (mllib) -> Apache HBase -> Apache Phoenix -> Hibernate + любой MVC фреймворк и т.п.

    Естественно об относительно высокой производительности и хорошем вертикальном масштабировании речи не идёт, если брать C++11 ScyllaDB -> Neon хорошо отпрофилировать и допилить, можно получить в 3-5 раз выше производительность и соответственно гораздо меньшие задержки, но обычно всем влом. REST API под такое обычно пытаются писать на сях (без плюсов) в виде расширений под Nginx, что является довольно породистым извратом - в большинстве случаев банального golang/netty будет достаточно.

    В Hadoop стэк сейчас принято не лезть, так как он очень "заынтерпрайсян" и без хорошей поддержки и допилки со стороны вендоров в реальных проектах просто неюзабелен, по этому почти все на него, в той или иной степени, забили. Например, тот же Spotify.

    По поводу HA и Zookeeper можно увидеть много срача, особенно в Netflix'e, по этому для менеджмента высокой доступности лучше использовать именно их решения - eureka или для отказоустойчивости Hystrix. Хотя я не могу сказать что это достаточно зрелые проекты - в них тоже хватает изъянов, но они на много шустрее остальных Apache поделок.

    Нельзя делать одновременно отказоустойчивые и высокодоступные приложения - потому что CAP теорема имеет место быть.

    Ещё есть очень тонкий момент с Java в целом - нужно минимизировать время сборки мусора и лезть в offheap, стоит глянуть как реализованы буферы в netty - это arena аллокатор по типу того что используется jemalloc и различная misc.unsafe ересь. Можно ещё пробовать Hazelcast / Terracotta, но принципиально там тоже самое, только платно и "расспределённо".

    Для REST API я чаще всего использую Vert.x и ванильную Java.
    Overhead от Scala довольно таки большой, а время компиляции просто вырвиглазное.
    Для минимизации копи-пасты вполне безопасно использовать Groovy c @ Immutable и @ CompileStatic.
    Но в Vert.x'e он весь "динамичный" :|

    Я ничего не могу сказать по поводу производительности Clojure, он местами через чур invokeDynamic. Естественно что ванильная Java будет шустрее, но я без понятия на сколько.

    Желаю Вам приятного вечера.

    p.s. не везде проставил ссылки просто потому что хочу спать.
    Ответ написан
    4 комментария
  • JavaEE + front-end(фриланс) - реально?

    voidnugget
    @voidnugget
    Программист-прагматик
    Популярность JavaEE в современных проектах стремится к нулю - большая часть существующих фреймворков отказываются от сервлетов и "ынтерпрайсностей" в пользу ванильной Java с Netty, и тому есть довольно много причин. Ну, хотя бы намного более высокая производительность, по моему личному опыту где-то 1:30. Из исключений припоминаются Grails, Ninja framework. Есть ещё динозавры типа Struts и Wicket - их часто используют "по привычке" вместе со Spring'ом, но практической выгоды от подобного не много. В общем у всех есть свои причины "ынтерпрайстности", но по большей части это связано с "бюрократией" контор-разработчиков.

    Стоит познакомится с Vert.x и ratpack.
    Play2 - тоже хорошо, но наблюдается значительный overhead из-за использования Akka + Scala.
    Стоит разобраться с GraphQL и Relay + React. Ну и поиграться чуток с Meteor + React.
    На определённом этапе нужно реализовывать свой собственный транспорт для EventSource, я как раз собираюсь этим заняться в свободное время.
    Ответ написан
    4 комментария
  • Какие вы знаете коммерческие приложения, написанные на Java?

    voidnugget
    @voidnugget
    Программист-прагматик
    Spotify, Amazon, Linkedin, Uber, Netflix
    Ответ написан
    Комментировать
  • Структура, архитектура JVM(внутреннее устройство), от .java до .jar?

    voidnugget
    @voidnugget
    Программист-прагматик
    Нужно читать доки по OpenJDK и копать исходники, благо там всё отлично документировано.
    Ответ написан
    Комментировать
  • Почему потоки в Java ведут себя так неочевидно?

    voidnugget
    @voidnugget
    Программист-прагматик
    bromzh прав, от себя добавлю что есть ещё состояние гонки и оба потока могут обращаться к одному и тому же файловому дескриптору, в данном случае STDOUT, - нет гарантии что оба потока не будут писать EGG и END одновременно и не получится абракадабра типа EEGNG !D ;)

    Подобное поведение характерно для любой многопоточности, и Java тут не причём.
    Для избавления от головной боли используют модели актёров и Share nothing подходы типа всяких Akka, Greenlet'ов или процессов в Erlang'е, но на определённом этапе и с ними начинаются проблемы.
    Ответ написан
    2 комментария
  • Apache Curator - как(best practices)?

    voidnugget
    @voidnugget
    Программист-прагматик
    1. Нужно понимать что накладные расходы на коммуникацию очень сильно снижают общую отзывчивость проекта, иногда это бывает слишком критично. Первым делом нужно разобраться с Discovery, и имхо лучше слезть на gradle.
    2. Этот вариант работает в случае с использованием Discovery расширения - в рамках приложения работает куча сервисов которые регистрируются и происходит последующий роутинг в зависимости от текущей нагрузки. В рамках Curator частично реализован raft алгоритм задачи консенсуса, но не полностью, некоторые вещи обычно приходится дописывать руками в зависимости от требований проекта.
    3. Для начала стоит разобраться с ZooKeeper, а потом пытаться пилить Curator.
    Ответ написан
    Комментировать
  • Какой ос пользоваться для написания на java?

    voidnugget
    @voidnugget
    Программист-прагматик
    В принципе для джавы сейчас есть IntelliJ IDEA который кроссплатформенный и норм работает. По моим личным субъективным - быстрее чуток разрабатывать под каким-то легковесным линуксом типа ArchLinux'a. Главное иметь на борту SSD'шный RAID, либо быструю PCI-ex SSD типа такой или такой. В принципе при освоении ArchLinux'a можно очень некисло так разобраться во всех тонкостях этой ОС, чего не скажешь о других дистрибутивах - главное иметь под рукой планшет с возможностью гугления по потребности, благо вики арча покрывает очень много специфических моментов.
    Ответ написан
  • Разработка под android для веб-программиста - с чего начать?

    voidnugget
    @voidnugget
    Программист-прагматик
    Сore Java - первый и кусочек второго тома
    Effective Java Джошуа Блоха - обязательно
    Java Concurrency in Practice Браяна Гоетса - обязательно
    из серии Pragmatic Programmer
    Programming Concurrency on the JVM: Mastering Synchronization
    Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions
    Pragmatic Unit Testing in Java 8 with JUnit
    Ответ написан
    4 комментария
  • Что выбрать php ли java?

    voidnugget
    @voidnugget
    Программист-прагматик
    С РНР/Python/Ruby проблема - в них нет возможности нормально писать масштабируемые реактивные приложения.
    Нет возможности постоянно держать соединения для push'a без костылей типа gearman / beanstalk / celery / sidekiq etc, и там уже не MVC, a CQRS-ES ... в общем весело.

    Советую присмотреться больше к Java / Golang'у.
    Вот к ноде лезть не советую - слишком мелкая производительность, и сомнительная обратная совместимость.
    Ответ написан