← All posts tagged Java

SannySanoff
programming Haskell продуктивность Я вот думал раньше, что Java — она toolable, потому что у ей type-aware автокомплит можно легко сделать, ну типа

string.| // <- autocomplete here

показывает методы. А думал с хаскелями не прокатит, т.к. хрен ты методы найдешь.

А щас дотупил, что ведь у Хаскелей же то же можно делать, но хотя на женерик листах далеко не уедешь ибо тысячи их, так ведь и проблема-то не с ними, а с тем чтобы фильтровать все методы работыющие на определенных типах, а их-то сильно меньше..

data Point = Point Int Int deriving Show

let distance (Point x y ) (Point x1 y1) = sqrt $ fromIntegral $ abs(x-x1)+abs(y-y1)

let move (Point x y ) dx dy = Point (x+dx) (y + dy)

let somePoint = Point 10 20

Нажимаешь автокомплит, а оно тебе комплитит не после, а до:

move (Point 3 3) 4 5 | <-- this is cursor

autocomplete:

distance _ $ move (Point 3 3) 4 5 причем выражение твое покоцано, но ясно что оно.

show $ move (Point 3 3) 4 5

— ...... и посортировано значит с умом, по статистике, и позволяет стало быть

нажимаешь distance, и тебе тут же:

distance | $ move (Point 3 3) 4 5 и $ добавлен, и курсор поставлен.

нажимаешь потом еще раз автокомплит, а оно тебе:

somePoint

(Point )

Сложно форматировать псто, но чото легче стало, ибо будущее отчотливо (мне). Вон некий известный хаскельный крендель устроился в jetbrains, не иначе как они задумали что-то.
SannySanoff
programming коварно В то время как я ловко избежал промисов в Java/Kotlin/Dart/Typescript потому что попадал на релизы с async/await или пользовал Скалу вместо Java, данный гемор догнал меня в C++.

И ох, это худший вариант.
SannySanoff
Java жизнь programming У меня IDEA с двумя проектами (один там даже с петоном) стартует 1м30сек пока цпу не утихнет, и это я к ней не прикасаюсь покуда не утихнет. Когда начинаю прикасаться, понятно, снова бурлит покуда не утихнет, потом уже потихоньку.

Время ли обновлять ноут? А сколько грузяццо ваши проекты?

(основной проект у меня нонче в Jupyter на удаленном компе, и мне вообще идея почти по сараю).
SannySanoff
programming faggots интеллектуальное_гопничество Вот эти люди со светлыми лицами хотят быть хозяевами дискурса, мля.

pbs.twimg.com

GraphQL сделает с REST то, что JSON сделал с XML.

Это просто потрясающе!

Они хотят сказать, что ихний json что-то сделал с нашим XML. Да этот json появился, потому что в языке javascript (во время оно) не били по рукам за eval(), и тогда какой-то главный сумасшедший задумался, а чем это хуже, чем XMLDocumentBuilder.parse(), и человечество свернуло в гнилой закоулок, где с этим json до сих пор мучается, не в силах бросить каку.

Вот они, эти люди со светлыми лицами, смотрите на них.
SannySanoff
идея внезапно WWW продуктивность Я вот щас придумал future web app platform. Без всякого гомняного CSS HTML и жабоскрипта, всяких gulp grunt uglify и 100 прочего унылого однодневного crap, а будет как старый добрый виток desktop apps, ну всякие там Swing, Windows Forms итп.

Короче, DOM используется чисто как девайс для постскрипта. Есть шрифты, есть их метрики, известны размеры. Есть output device (document.body.clientWidth x height), расставляй себе буквы как пожелаешь. Линии там рисуй (через канвас получится). Поля ввода тоже расставляй, они без рамок и паддингов, рамки и паддинги рисуются как линии если чо.

Всякие layout managers и вообще весь код — приходят в бровзер на webassembly и они работают быстрее чем встроенный в бровзер, т.к. специализация и никакой тебе backward compatibility 20 лет. Если сайт хочет, он вообще изобретает себе сам язык разметки, кладет в бровзеру в кеш webassembly килобайт 300 и с тех пор он сам себе HTML. А разработка ведется на каком-нибудь в натуре dart-подобном языке (который удобен тем, что весьма динамический, но аннотирован типами и нормально компилится в llvm и как следствие в вебасм)

Кроме того, Дартиум (или прочий бровзер с поддержкой VM для норм языка разработки, отличного от javascript) становится не нужен (он уже и так помирает в случае дарта, но по своим причинам). Пишешь ты как прежде было в GWT — прямо в IDE на любимом язычке который нативно вертится в своей VM, а всякое отображение с евентами рисуется удаленно по TCP в бровзере, и никакого DOM описания не гоняется там по протоколу, боже упаси, исключительно "нарисуй строку там", "картинку сям (и вот так)", а тут жолтеньким подкрась. Так как HTML layout весь отсутствует, тяжелый DOM с вложенностью двадцать уровней — отсутствует, то анимации "вручную" должны норм летать, если что.

Да, и здесь полностью становится не нужен GC на жабоскрипте, да. Хотя конечно DOM bridge будет что-то кушать, но немного.

А потом вообще сделают бровзеры интерфейс между webassembly и экраном прямой (тк щас этого интерфейса нет почти ничего). Не канвас, потому что текст-ориентированные аппы все-таки (ну там копи-паст должен работать, например, а его в канвасе не задумано), а что-то минуя js/dom layer.

Станет разработка под бровзер приятной как раньше.

Запомните это псто!
SannySanoff
Java programming Android Сколько я времени потратил на неправильно написанные JNI названия функций на C стороне! Мама! Просто дофига. Программа на андроеде крешится в рантайме оттого что не находит ф-ю.

А петонисты и пхп-шники, а еще жабоскриптеры живут в этом и для них норм. Кошмар.



SannySanoff
programming политота So why is it called Kotlin? Well, there's a clear play on incrementing the 'J' in Java. Beyond that, one can only assume that 'Kremlin', 'Khrushchev' and 'KGB' were already taken, probably by UC Berkeley. So they did the next best thing and named it after a Russian military base.
via steve-yegge.blogspot.com

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

У меня рука полезла написать "е..нутым нет покоя", но я-то внутри и без майдана уже 20 с лишним лет давно европеец чуть менее, чем русский, и вот достоевский вместе с гёте внутри меня неодобрительно посмотрели на меня, и я забил писать матюки.

SannySanoff
Java programming profit Я свичнулся с Жабы на Котлин в основной разработке.
Основная причина проста: просто приятна обновка.
Всякие фичи Котлина прекрасны. К Жабе претензий тоже нет — изумительный язык. Я не страдаю от ее многословия.
Можно назвать множество причин переключения — фич ради, конечно.
Но основная — это просто что-то новое, просто новизна, которая будит уснулую часть мозга, которая уже сделала свое дело, доведя до автоматизма свою часть работы — выражение себя на жабе — и спала уже давно.
Это могла быть и Скала, — Скала просто прекрасна, — но Скала более неудобная в работе: из-за ее гениальной разноликости она чересчур тормозит в инструментарии (компилятор, IDE), что начинает напрягать через некоторое время. Это чувствует и Одерский, который пишет другую, несовместимую версию Скалы, более шуструю.
Больше пока вариантов нет. Остальные либо тормозят в рантайме, либо без статической типизации, либо без tools.
SannySanoff
Java programming code
Открыл для себя Vert.x, плюс Kotlin = полностью асинхронное всё: http сервер, https (!!) клиент, кафка, постгрес, вебсокеты уже то понятно. В котлине 1.1.1 все на корутинах.. прямо скала. Адопшн кажется будет побольше чем у скалы, поэтому ожидаем вскорости бум. С небольшим набором корутинных врапперов пишем буквально следующее:

    suspend fun graphAPI(request: String, access: String) : JsonObject {
        val resp = VX.getJson("https://graph.facebook.com/v2.3/$request&access_token=$access")
        when(resp.statusCode) {
            200 -> return JsonObject(resp.response)
            else -> throw IOException("Facebook invalid response: "+resp.toString());
        }
    }

        when (req.path()) {
            "/register_server" -> {
                exec("delete from other_servers where ip_address=${v(param("ip"))}")
                exec("insert into other_servers(ip_address, hostname) values(${v(param("ip"))},${v(param("host"))}) ")
                commit()
                output(JsonObject(Pair("result","OK")))
            }

(во втором куске кода sql bindings безопасные если шо)
(может можно кое что еще проще, пока не знаю как)
(обработка ошибок, выделение коннекшнов, транзакциы всякие итп - все снаружи)
(ексепшны в котлине отлично дружат в асинхронном коде)
(а и не скажешь, что асинхронный, верно?)

21 век настал.
SannySanoff
programming Теперь когда в хроме закладки в бэкграунде жрут меньше ЦПУ, и когда я текущий проект пишу не в IDEA/Java, а в, прости Господи, Qt Creator, у меня CPU usage вообще в среднем 8% по больнице, и батарейка гейбука живет свои требуемые часы как обещано в рекламе (8-9 часов). С IDEA 2-2.5 часов. Такие дела, товарищи.

В минусах нормальные шорткаты, рефакторинг, поиск, навигация, отладка, скорость разработки, и прочая прочая....

В плюсах плавная анимация + кроссплатформенность на девайсах.

Если кто-то следил за моей сагой, то в прошлом сезоне проект (стартап) был на Codename One, и закончился (кирдык) прежде, чем встал вопрос ребром о плавной 60fps анимации (а это единственный нерешаемый минус Codename One — она там теоретически достижима, но практически архитектура слабовата, оно жрет ЦПУ, память, и мало кто из коллег в нее может — нужно много оптимизировать руками)

Теперь, после бесславного низвержения React Native с пьедестала мне незнакомых но соблазняющих фреймворков, Qt Quick уверенно занимает первое место; я туда уже перетащил почти весь нативный (Objective C, Java, С++) код который писал под реактом, и такая няшечка!!!!

SannySanoff
programming в реакт нативе кажется нельзя dump component hierarchy никак. Инспектор есть, но в нем такой фичи нет и близко... подключил новый компонент (скачанный с гита) — листоподобная листалка. Насетапил его данными, ВЫСОТУ указал явно, и background — ничего нет на экране. Ошибок тоже нет. Как так жить? Рендереры строк компонента вызываются, в консоль пишут что вызываются. Отлаживать чужой js? Я готов лезть отладчиком в чужой java/c++, но не в js. Потому что там больные программисты эти скрипт киддиес. Код на хаскеле, комбинирующий комбинаторы, понятней что делает, чем 20 страниц г. на жабоскрипте.

Выкинуть его нахрен этот react native?

Щас возьму неск дней, перепишу все на qt quick, который я тоже не знаю. Посмотрю, какой из фреймворков лучше влияет на мою продуктивность. Чует мое сердце, говноскрипт в таких количествах не нужен, и даже вреден (да, я в курсе что в qt quick тоже есть он. Но он там в меру)
SannySanoff
programming faggots Далее про react native, зашкаливающий режим WTF у меня.

1) Есть там способ из нативного кода отправить евент в жабоскрипт (в жабоскрипте на него можно подписаться, это рекомендуемый способ достучаться из нативного в жс) — работает почти всегда. Перестает работать (то есть не доходит в js) если однажды там случился exception. Или если ты хотя бы раз перезагрузил новую версию жабоскрипта через релоад. Не шутки! Иногда просто не работает с первого раза, но такое редко. Однажды настаивало мне что "нет подписчиков", хотя вон они есть, никуда не девались, код написан, не менял. Рестарт аппа почти всегда помогает. Асинхронная инициализация это вам не шутки, наверняка где-то racing conditions, но почти всегда работает. Ах это "почти", как ты прекрасно!... Залез было в отладчике, но через полчаса отложил на потом.

2) Иногда перестает работать код релоад. Вот ты поменял, нажал релоад, а оно на экране старая версия. Предыдущий раз подхватывало. Да, изменение записано в файл. Да, подождал чтобы packager подхватил. Нет, ошибки никуда не рисует.

3) добавил textinput — не показывает ввод текста. Поставил ему чтобы его увидеть цветной background — нету такового на экране. Как будто нету компонента. Поставил ему initial value значение — нарисовало тупо текст как в <Text>, но не редактируется, и ощущение, что высота его 1 пиксель, потому что налазит на него нижележащий компонент. Оказывается, нужно явно прописать высоту. Какую? А 40 попугаев прописать, будет как родной. DPI/системные дефолтные шрифты/акцессибилити/large text — не слышали.

4) добавил новую либу в проект, написал require ее — обрадовало "babelHelpers.typeof is not a function" и full stop. Пишут, packager --resetCache помогает. Запустил, та же ошибка. Закомментировал require назад — та же ошибка. Еще раз потом ресетнул кеш — не помогло, та же ошибка. Еще раз ресетнул и перезапустил весь апп — ошибка пропала, нигде не ругается, но белое окно, инициализационных сообщений нет. Девелопмент остановлен, режим WTF, незапланированные сношения с фреймворком, гуглинг, дебаггинг (собственно это и сподвигло написать псто).

Вот codenameone тоже поделка такая же, что особый подход нужен, и особая к нему passion, чтобы из него конфету сделать, но, господа реактовцы, хороших намерений одних мало, если взяли не Жабу чтобы лепить самолет, а коричневый пластилин (javascript). Нужно хоть ошибки куда-то выводить хотя бы, хоть как-то пластилин компенсировать! Поделки поделками, но говенный материал должен быть оправдан великолепным исполнением изделия, а где оно?

SannySanoff
Java programming Пишут, что Эклипс (www.eclipse.org) загнулся, в том смысле, что его пользуют уже меньше людей чем IDEA.

Для меня вообще удивительно, что оно так долго тянулось. Уже 10 лет назад как должно было рухнуть. Не было ни единого момента со времени выхода IDEA 1.0 до сегодняшнего дня, чтобы Эклипс был хоть в чем-то лучше ИДЕИ для программирования на жабке.

via proggit — reddit.com