• Выходные, которые нельзя пропустить. TechTrain в Питере
    +1
    1-2 сентября, они есть на сайте. Добавлю в пост.
  • Выходные, которые нельзя пропустить. TechTrain в Питере
    0

    "Заходят в бар эйчарка, манагер и блогир. Эйчарка говорит: коллеги, не могли бы вы помочь оценить деньги и время на помывку всех окон в Лондоне? Манагер ей отвечает..."


    Конец анекдота не знаю, теперь собираюсь сходить на Техтрейн и уточнить.

  • Что не так с возвращением Geektimes на Хабр
    0
    С этим совершенно точно нужно что-то сделать.
  • GraalVM: смешались в кучу C и Scala
    0
    Хорошая статья. Спасибо что продолжаешь писать. Так победим!
  • Инструменты тестировщика
    0
    Да, я последний месяц в основном помогаю с оформлением существующих докладов, а не пишу новое. По-моему, это довольно полезно: действительно хорошие статьи обретают вторую жизнь и начинают полноценно гуглиться.
  • Открытая бесплатная трансляция конференции по тестированию — Heisenbug 2018 Piter
    0
    Какое-то время они, скорей всего, останутся. Они не удаляются через 10 секунд после окончания конференции.

    Но гарантий о их сохранности никаких дать не могу.

    То есть, если начать смотреть через месяц, там может случиться что угодно — например, Ютуб решит что на третьем часу в кадр на десять секунд попала запрещенная музыка (которой там не было) и удалит этот видос. Тру стори. А так как это видео у нас не на поддержке, это дорога в один конец.

    В целом, у меня такая рекомендация: лучше посмотреть асап как появится возможность.
  • От дополненной реальности до Kotlin: как прошёл Mobius 2018 Piter
    +3
    Ну там, как бы, чуть ли не каждый второй имел аккаунт на Хабре. С участниками можно просто вспомнить, как это было.

    Ну а вообще — да, похвастаться, почему бы и нет? Показать, как у нас клево. Надоумить прийти в следующий раз.

    «Частично» сказал для перестраховки. Бывает, что докладчики не хотят выкладывать запись в открытый доступ. Бывают еще какие-то сложности, например, с периодически сходящим с ума ютубом. Все это надо проверять и делать, прежде чем обещать. Как говорится в пословице, будет день — будет пища.
  • От дополненной реальности до Kotlin: как прошёл Mobius 2018 Piter
    0
    Нууу, батенька, всё уже — конференция прошла, поезд уехал. Все участники получили видеозаписи всех докладов. Через несколько месяцев, наверное, частично выложим их в открытый доступ.
  • Смысл тестирования — в процессе, а не в оставшихся артефактах. Майкл Болтон и Rapid Software Testing
    0

    Если касаться конкретно Болтона и конференции — то посмотреть описания докладов (раз, два) и предположить, отвечают ли они на твой вопрос. Еще Болтона можно встретить в дискуссионной зоне и задать вопросы — он консультант, и на вопросы должен отвечать очень хорошо.


    Если вообще, то как мы знаем, существует несколько "школ" тестирования. Context-Driven школа (насколько я это понял) говорит, что результаты тестирования — это отображение мгновенного состояния проекта по самым важным для этого момента времени метрикам. Вот тут есть какая-то статья про это. Соответственно, мы приходим к понятию контекста, являющегося функцией от времени, и общего решения "как мне теперь выбирать" не существует. Нужно каждый раз думать головой и решать изобретательские задачи. Компьютер не умеет решать изобретательские задачи — умеет только человек, поэтому нам так нужны тестировщики. Некоторые интересные стратегии можно подсмотреть в докладах, что-то можно понять по какому-нибудь ТРИЗу, но это всегда будут очень "высокоуровневые" идеи, а не скрипты "делай раз, делай два".

  • Смысл тестирования — в процессе, а не в оставшихся артефактах. Майкл Болтон и Rapid Software Testing
    +2

    Да, цель статьи — познакомить с Майклом и RST, если кто-то его еще не знает.


    У них есть своя консалтерская контора, которая ведет тренинги по тестированию. Так что практического опыта ответов на вопрос «если у вас проект А то вы делаете Б» у него предостаточно.


    Другое дело, что Болтон — это скорей не про простые шаги «делай А, делай Б», а про то, как думать головой.


    (По этому поводу мне почему-то вспоминается доклад другого товарища с Гейзенбага-2016 — No Such Thing as Manual Testing — он доступен прямо сейчас на ютубе).

  • IntelliJ IDEA 2018.1 — улучшенный анализ кода, поддержка частичных коммитов Git, Android Studio 3.0 и многое другое
    0
    Нет, не могу. Но помню, что там был какой-то нереально простой воркэраунд. По-моему, сделать баш-скрипт из одной строчки которая запускает Идею, и дальше всегда запускать Идею из консоли.
  • Интерфейсы: как сообщать пользователю, если «Упс, что-то пошло не так»
    0
    Еще проблема решается парочкой кодеров, брошенных на чтение логов и быстрый фикс ошибки
  • JavaScript, Java, какая теперь разница?
    0
    Интересный вопрос, надо попробовать.
  • JavaScript, Java, какая теперь разница?
    0
    Вопрос как раз в том, что если я не хочу веб на джаве. Джаваскрипт для этого — куда более подходящий инструмент (по крайней мере, пока webassembly вот в этом зачаточном состоянии).
  • JavaScript, Java, какая теперь разница?
    0
    В Граале как минимум три проекта: оптимизирующий джит-компилятор, тулсет для создания языков программирования и клозед-ворлд виртуальная машина. Тема про языки программирования делится на подтемы типа гральжс, трюфельруби, сулонг, итп.

    Если писать о каждой из этих тем глубоко и одновременно, то выйдет сочинение с объемами Кнута, это немного неприемлемо для Хабра

    Другие темы тоже будут, но попозже. Слона можно съесть по кусочкам.
  • JavaScript, Java, какая теперь разница?
    +2
    Можно. Но этот пост — про Graal. Вести аргументированные дебаты про GWT я сейчас не смогу, это отнимает много времени (а мне еще пост о программе DotNext сегодня выпускать!)
  • JavaScript, Java, какая теперь разница?
    +1
    Ну например в том, что когда-то давно ты обязан был делать микросервисы, а теперь — не обязан.

    Например, у микросервисов безумно дорогая стоимость запроса, а вызов через Graal стоит как обычный джавовый метод. То есть твой вопрос можно довести до абсурда таким вопросом: зачем нам писать в языке программирования какие-то функции и методы, давайте вместо каждого метода вызывать REST-сервис?

    А еще у микросервисов довольно большая стоимость создания, поддержки итп. То есть это обычные вопросы холивора «монолит против микросервисов».

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

    Имхо, это должно особенно понравиться как раз фуллстек-разработчикам. Когда одна команда пишет бэк, и другая — фронт, это одно, ты всегда можешь скинуть заботу по интеграции на кого-то еще. Когда ты пишешь все сам, от базы данных до анимаций во фронте — то ой, уже задумываешься над более оптимальными решениями. Можно парить мозг подрядчику — но крайне невыгодно парить мозги самому себе.
  • JavaScript, Java, какая теперь разница?
    0
    Сам Пraal — это не proof of concept, а отличная, хорошо работающая вещь. Над которой работают лучшие в мире специалисты по VM, рантаймам, языкам, и так далее.

    Примеры использования из этой статьи — это действительно, всего лишь примеры. Если начать разводить здесь «правильную архитектуру» и «лучшие практики»- это будет не статя на хабре, а книга страниц на тысячу триста. Когда напишу такую книжку, сможешь купить ее за пять тысяч рублей :-)

    А если говорить философски, мне кажется что органиченность применения — это нормально. Особенно когда ты четко принимаешь эти границы.

    Бесшовный интероп — это особый способ оптимизации, в данном случае он оптимизирует несколько вещей: a) объем труда разработчиков на организацию собственного интеропа б) перфоманс интеропного кода при пересечении границы языка

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

    У меня в проектах были и есть такие проблемы (например, как известно, сайты JUG.ru Group создаются статическим генератором).
  • JavaScript, Java, какая теперь разница?
    0

    Эта тема связана не с клиент-серверным взаимодействием, а с тем, что Нода, запущенная на Граале, имеет доступ к джавовским данным.


    Генерация статики с использованием React/Babel/Webpack — более сложная и интересная для джавистов задача, поэтому в статье именно она.


    Вставить данные при генерации HTML со стороны JS-сервера гораздо проще. Выложил работающий пример на гитхабе.


    Всего-то нужно поднять Express и работать с ним так же, как и всегда, цепляя Java по мере необходимости:


    const express = require('express')
    const app = express()
    
    app.get('/', (req, res) => {
        var JavaDate = Java.type("java.util.Date");
        var currDate = new JavaDate();
        res.send(currDate.toString());
    })
    
    app.listen(3000, () => {
        console.log("server started")
    })

    Доставить такие данные на JS-клиента можно так же, как всегда — с помощью аяксовых запросов.

  • IntelliJ IDEA 2018.1 — улучшенный анализ кода, поддержка частичных коммитов Git, Android Studio 3.0 и многое другое
    0
    А операционная система какая? Почему спрашиваю — когда-то давно при старте Идеи всегда выдавался ворнинг на проблемы с киллом под линуксом, в ворнинге была ссылка на тикет, я проделал инструкции оттуда и все починилось. Вроде бы это была проблема линукса, а не идеи
  • Разбор основных концепций параллелизма
    +1
    В заголовке — «разбор основных концепций параллелизма», а в посте — ни слова про параллелизм, только про многопоточность. Это вещь прямо противоположная по смыслу. WTF? Возникает ощущение, что переводчик даже близко не понимает, о чем пишет.
  • Открытая бесплатная трансляция Java-конференции JPoint 2018
    –1
    В данный момент мы видим неполадки в самом Ютубе. Надо подождать день-два. Если после этого не починится, напишите мне в личку, будем разбираться.
  • Открытая бесплатная трансляция Java-конференции JPoint 2018
    0
    В какой именно записи баг? Дай ссылку в личку, пожалуйста.
  • Открытая бесплатная трансляция Java-конференции JPoint 2018
    +1
    За еще тремя четверями конференции, видеозаписями и саппортом? :)
  • Java Puzzlers NG S02: всё чудесатее и чудесатее
    0
    Ммм… приведи пример какого-нибудь предсказуемого языка! :-)
  • Смена основного стека с .NET на Java
    0
    Кстати, в Visual Studio файлы проектов уже можно писать с нуля руками, как это делается с Maven/Gradle, или там всё ещё чёртов ад, править который без гуя рука не поднимется?
  • Minimal Value Types
    0
    Пиши всё что придётся, бог узнает своих!
  • Почему наследование всегда было бессмысленным
    +1

    Обрати внимание на тех, кто там это написал — Саттер и Александреску, создатели C++ и D. У Гослинга тоже где-то было про это, сейчас не нагуглю. Короче, дизайн этих языков специально такой, чтобы форсировать LSP. Стандартная библиотека такая. Без него начинается нездоровая фигня.


    Например, явно видно как они мучались, когда не было дженериков. Вот тебе код на C#:


    static void update(object[] objs)
    {
       objs[0] = new object();
    }
    
    string[] strs = new string[] { "hello", "world" };
    update(strs);

    При запуске он бросит исключение вроде ArrayTypeMismatchException, поскольку Шарп не может записать экземпляр объекта внутрь массива из стрингов. Это — прямое нарушение LSP. string[] — это подтип object[], но когда его попытались использовать в том же месте где object[], всё сломалось.


    В чем проблема? Если следовать логике, то пришлось бы писать несколько одинаковых методов: static void update(string[] objs), static void update(int[] objs) — и люто копипастить. Как и делают в Golang, когда не опускаются до рефлексии и кодогенерации :)) В нормальных языках для этого есть дженерики, но когда Java и C# создавались, дженериков в них не было ещё. Поэтому массивы сделали ковариантными по типу элемента. В смысле, теперь можно отправить string[] на вход методу, который принимает object[], и это работает вот так:


    static void Sort(object[] objs)
    {
       // ...
    }
    
    string[] strs = new string[] { "hello", "world" };
    Sort(strs);

    Совершенно очевидно, что это жёсткий хак системы, сделанный от безысходности. Заказчики языка хотели уменьшить копипасту во что бы то ни стало — и это в точности тот вопрос, который обсуждает в ОП-посте.


    ООП не предназначено для уменьшения копипасты, оно скорее запрограммировано на её увеличение. Уменьшить именно дублирование можно на уровне другого над-языка, например препроцессора шаблонов. Например, в Java такой язык обсуждается на уровне проекта Valhalla, раздел специализации дженериков.


    Так что это всё замечательно, что вы не соблюдаете LSP, но готовьтесь к тому, что в большой системе через некоторое время таким кодом будет невозможно пользоваться :)))


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

  • Java 10 General Availability
    +2

    Что угодно оно может вернуть. List, Set, Array, и даже Queue!


    Дальше результат, скорей всего, будет итерироваться через короткую форму записи for loop. При этом знать, какой там конкретный формат хранения — не нужно, for сработает со всеми!


    Тут можно бы спросить: а что, если getUsers() вернёт HashMap? Фокус не сработает?


    Конечно сработает, потому что IDE-то знает о настоящем типе!


    Как происходит итерирование в IntelliJ IDEA? Ты пишешь слово iter и нажимаешь [TAB]. Вылезает вот такая подсказка:




    Которая после применения ведёт, например, к такой замене:




    При этом, если там изначально была не мапа, а список, то варианты будут другие:




    Работает ли это с var? Да, работает.




    Работает ли это с var, который получает данные снаружи? Работает.




    Такие дела.


    Не нужно вводить сущности, которые не нужны. Не сломается то, чего нет.


    В данном случае нам не нужно знать способ хранения юзеров.

  • Почему наследование всегда было бессмысленным
    +1
    Почему расширенный наследованный класс не может требовать от вызывающего кода больше, чем базовый класс? Или вообще другого кода?

    Потому что это и есть сам LSP в отображении на код :-)


    В формулировке Саттера и Александреску: «подкласс не должен требовать от вызывающего кода больше, чем базовый класс, и не должен предоставлять вызывающему коду меньше, чем базовый класс».


    Это очень сильное требование, его сложно выполнять. Многие пишут на C++/Java/C#/итп без учета этого требования, и потом у них архитектура начинает трещать по швам


    Вам стоит изучить вот это: SOLID. И другие классические определения ООП на Википедии (начиная со статьи ООП, и дальше — полиморфизм, инкапсуляция, наследование)

  • Java 10 General Availability
    0
    А где меняешь? Editor -> Color Scheme -> поставить галку «Use color scheme font instead of default», выставить значение Size
  • Java 10 General Availability
    0

    Ох ничоси. Обновлюсь-ка на него.

  • Java 10 General Availability
    0

    Надо, Федя, надо :-)

  • Java 10 General Availability
    +1
    со временем отупляет

    тогда функциональное программирование — это вообще ад и содомия, мозгов не остаётся совсем!

  • Java 10 General Availability
    0

    Я постараюсь дизайнить API так, чтобы было совершенно всё равно, какие там типы. В частности, названия типов не должно быть частью имени метода.


    Олсо, это очень удобно, когда у тебя какой-нибудь чудовищный тип, например, лист мапов мапов мапов из листов в листы. И ты этот тип не хочешь видеть глазами, потому что он напрягает.

  • Java 10 General Availability
    0

    Это очень крутой плагин под названием Material Theme UI (точнее, Material Theme UI EAP по понятной причине). Оно меняет все картинки и цвета в UI. Это одна из стандартных схем, идущих с ним в коробке: Material Palenight. Там ещё несколько клёвых схем в комплекте есть!


    Очень рекомендую. Я бы на месте JB вообще поставил бы этот плагин по умолчанию, уж слишком всё няшное стаёт.

  • Java 10 General Availability
    0
    Зачем типы запоминать, есть же IDE. Можно или навести мышкой с зажатым ctrl, или если не используешь мышку — нажать ctrl+Q когда переменная под курсором
  • Java 10 General Availability
    0
    тут yegor256 может рассказать, как правильно
  • Java 10 General Availability
    0
    Я обычно пишу выражение, потом нажимаю ctrl+alt+V в Идее, запускается рефакторинг Extract Variable, и остаётся только вписать название новой переменной. То есть по сути, происходит то же самое что и с var, но убого.
  • Java 10 General Availability
    +1
    Юзай javah из старых версий JDK, его же никто не забрал :)

    Ещё тут не хватает belovrv и elizarov