← All posts tagged продуктивность

SannySanoff

Дизайн нового хрома — говно и хипстота. Мне задают вопросы "почему вы так считаете?".

Ну вот у меня в хроме несколько аккаунтов. Раньше имя аккаунта светилось в уголочке. БУКВАМИ. Теперь оно светится непонятно где — ИКОНКОЙ от профиля. Замена информативных символов на неинформативные, добавление дополнительного слоя декодирование, уменьшение площади, несущей информацию — это все результат действий слабоумных кретинов, не осознающих, что они ломают.

А эти фаерфокс-подобные табчики, также похожие на шляпу Доктора Ватсона?? Такие штучки носили наши бабушки. Где мои стройные косые уголочки? Их нет, это уже не хипсторы это замутили, это какое-то БАО нах. Что это за дополнительное пространство над и под текстом в табах? Зачем оно ест полезную высоту моего экрана? Это пришли touch-faggots и типа выцыганили? А нахрена тогда им жесты выдавали, forward, backward, next tab, prev tab итд вот это всё? Не для того ли чтобы они не целили своими жырными пальцами в наши эстетичные табы? Всё мало вам, суки?

Я кончил.

SannySanoff

Вот во всяких хипсторских поделках (ангуляр итп) карочи начинает конпеляться из скрипта в скрипт само, когда файло с исходниками обновляется. А файло с исходниками обновляется когда в нормальных редакторах (IDEA) теряется фокус с приложения (автосейв всего — такие дела).

И вот я стало быть сижу педалю код, и понадобилось мне погуглить некоторых философских концепций. Понятное дело, чертова поделка сразу начинает конпелять, а делает это она во все сто потоков, потому что 21й век, и короче, тормозит у меня все.

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

SannySanoff

Я должен признаться. С тех пор как основные мессенжеры умеют прямо пастить картинки, я часто в общении с друзьями присылаю куски скриншотов. У меня клавиатурный шорткат на копирование куска экрана в клипбоард, так вот, нажал, сцуко, выделил и тут же отправил.

И мне, гаду такому, все равно, что собеседник не сможет выкусить оттуда кусок текста. Кусок статьи с веба, даже личную фоточку тоже вот через скриншот, потому что а почему нет. (Правда всякую обязательную реюзабельную инфу я шлю текстом).

Я опопсел.

А в жуйк вот фоточки не пастятся из клипборда через веб. Хотя аппарат — есть.

SannySanoff

Я вот щас придумал 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

Щупаю язык Dart в целях как оно там Flutter все дела кросплатформенность, ко-ко-ко (2 платформы, ндя).

Dart как жаба совсем. После Kotlin-а ощущается мною как шаг назад. В отличие от жабы Async/await — есть! Всякие изоляты и мультитредовость еще не щупал. switch/case от С++ целиком 8)

Идейный плагин как-то фурычит, терпимо. Стандартную библиотеку не проиндексировал, найти наследников от Widget не смог. В evaluate/modify автокомплит работает только по полям, а по пропертям не может. Написал switch(), а он мне его возьми и подкрась моментом —
требует чтобы все кейсы из енума там прописал. Не отстал, пока не написал. Короче, проблемы первого мира у меня.

Релоад работает. Жосткий релоад тоже работает.

Я хочу написать десктопно-планшетную приблуду. Пробовал на гейбуке разные эмуляторы, уже упоминал. Остановился на Bluestacks — самый быстрый и приятный (родной SDK эмулятор тормозит 3 кадра в секунду). Минус Bluestacks — говно мамонта, даже настроек нету, HiRes не поддерживает. Афтары пишут: сорян, гейбук не в приоритете, венда наш фронтир. Зато честно. В отличие от также шустрого Andy (в нем Android 4.4) флуттер на Bluestacks поднялся и взлетел без проблем.

Жалко нету нативного десктопного таргета, но с методологией разработки (релоады) на девайсе/эмуляторе это менее важно.

Буду продолжать информировать.

SannySanoff

Я замерял latency ввода клавиатуры гейбука на манер как делал афтор в матерьяле #2886434. Ну, скажем, что рендеринг страницы еще добавляет времени.

Короче, 7 кадров 120 FPS ~ 60 msec. +/- 16 мсек на рефреш — это встроенная клава + встроенный монитор гейбука.

А вот 4К моник (тоже 60FPS over DisplayPort) плюс механическая клава (CM Storm) дали реакцию 4 кадра, что составляет ~ 33 мсек +/- 16 мсек на рефреш.

Думаю, дело в клаве. Картинка, для удовольствия читателя, прилагается (встроенная клава+моник).

А если мерять в IDEA, там все 80 мсек по ощущениям 8(

SannySanoff

Я запустил в live mode убунту на гейбуке со своим нищебродским 4К монитором, И ОНО НЕ ТОРМОЗИТ НА НЕМ как гей-ос тормозила! Да и вообще летает очень здорово, ИДЕЙка отрисовует как родная, интерфейс умножай, не умножай, одинаково летает.

Карочи, дуал-бут! Скорее дуал-бут! Все в сад!

SannySanoff

Наконец-то побаловал себя блютусной механической укороченной (без нумпада, и с нормальной раскладкой) клавой.

Минус у нее один, но стремный: иногда, раз в 20 минут, не доходит какая-то клавиша: нажатие там, или отжатие. При том, bluetooth/wifi interference, если шифи на 2.4ггц, и если скайп голосом, и если блютуц наушники при том доносят голос, то эфир засорен конкретно, и клава сразу начинает пропускать клавиши. Ну, до того это было по мыше заметно, что она изредка притормаживает, если эфир вблизи ноута засорен, но на мыше это не так фатально. На клаве это просто драма. Переключил шифи на 5Гц, стало приемлемо (раз в 20 минут, но бывает и реже).
Клава Varmilo VB87M.

Гик внутри меня плачет.

SannySanoff

Одним из незаменимых фич IDEA для меня является история перемещений позиции курсора по файлам. В IDEA их две: можно идти в прошлое по местам изменений кода, а можно по местам, где ты был перед тем как нажал кнопку глобального перемещения (Ctrl+Home/End, перемещение в результате поиска, перемещение в результате перехода на подсвеченную ошибку итд).

Таким образом, нажав несколько раз, например, Ctrl+Alt+Left, побываем во всех местах, которые у нас в башке имеют еще горячий контекст, а нажав Ctrl+Alt+Right, в обратном порядке вернемся к текущему месту.

Существуют языки, которые по сравнению с жабкой требуют частой беготни: посмотреть на дефинишны/типы, вспомнить имя итд, то есть Хаскель. Я пробовал вспедальнуть на Leksah (под гей-осью оказалась неюзабельна), брал Atom (интеграция с ghc-mod какая-то есть, можно терпеть), Vim не пробовал, но раньше перед переходами приходилось маркировать позицию, eclipse-fp говорят, сдох, а вот для IDEA нашел intellij-haskell, которым щас и пользуюсь (подсказки не хуже чем в атоме + всякие этим стандартные ништяки).

Вот я как раз я в Атом не смог именно из-за отстутствия истории перемещений, уж очень это у меня в спинном мозгу.

А что в спинном мозгу у вас? Как в этих ваших емаксах (добавить свое) сбегать в начало файла, потом в середину, а потом вернуться в другую середину, есть такое? Или изобрели что-то иное?

SannySanoff

Размышлял на тему русского правила "сам погибай, а товарища выручай" и что оно дает обществу.

Помимо формирования очевидного коллективистского (со всеми его плюсами) поведения, оно обладает еще некоторыми, возможно не очевидными эффектами (впрочем, это тоже плюсы колл. поведения, может быть).

Вот например, перед нами многочисленный враг, и в данный момент он больше наседает на товарища, а ты более свободен. Выбор "смыться или помочь", если ты коллективист, не стоит, но параллельно с ним, если ты выручаешь товарища то :

1) ты уже доброволец, а твой товарищ не добровольно попал в нагруженное место, а у добровольца больше возможностей по управлению ситуацией, т.к. он погружается в нагрузку по своему оптимальному маршруту.

2) когда ты не доброволец, а находишься в нагруженном месте по обстоятельствам, то тебе за себя страшно, а когда, наоборот, ты защищаешь кого-то, ты думаешь о нем, и тебе за себя не так страшно, и страх не сковывает тебя, и у тебя больше КПД.

Получается, вместо мощности 1+1 если товарища не выручать, имеем например 1+1.5, то есть прибавление к мощности на ровном месте. Далее, кстати, по нарастающей.

Это хорошее, полезное правило. Если есть дух.

SannySanoff

На последнем ICFPC нужно было писать AI (алгоритм) для бота PACMAN на функциональном языке, неважно каком, потому что то, на чём пишешь, нужно было затем скомпилировать в байткод лисп-машины. Было выбрано нехилое подмножество Java, был написан компилятор в нужный байткод и затем писался AI уже на Java, с женериками, функцией fold0, filter, лямбдами и подобной радостью.

Это был тот редкий момент, когда на жабе пишешь purely функционально.

И у меня оформилась, наконец, общая претензия к функциональному стилю.

Функциональный стиль заставляет придумывать множество идентификаторов или в противном случае писать многоэтажные выражения. Если писать функции — одно-пятистрочники, то это будут идентификаторы функций. А если писать функции 20-строчники, это это идентификаторы let-varibles или их аналогов. А если ты пишешь многоэтажные выражения, то не отладить нормально: не посмотреть в процессе промежуточные состояния.

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

Да, я на обычной индустриальной жабе пишу функции на 3 экрана, бывает. Один FOR, за ним другой WHILE, комментарии над каждым. А когда не пишу большие ф-ии, то у меня короткие типовые имена методов в пространстве имен конкретного класса.

И кстати да, в нашей функциональной жабе работает autocomplete с привязкой к типам и женерикам (правда часто со скрипом!), и я почувствовал каково оно было бы на Хаскеле писать в нормальной IDE. Круто было бы на Хаскеле с нормальной IDE. Но проблема придумывания и вспоминания названий всё равно бы осталась.

Это наверное возрастное (?).

Всё остальное в функциональном стиле для меня хорошо. И немутабельность хороша, и чистота и грязнота. Ну а конкретно в функциональной жабе несколько напрягает разрастание сигнатур типов, естественно 8), даже в восьмерке, долгих ей лет. И еще неприятно прикалывает ошибка типа, на которую показывает IDEA, в третьем параметре какой-то функции которую я вызываю внутри лямбды внутри map, а всё потому что результат этого map присваивается переменной, тип которой уже написан слева и не сходится с результатом выражения справа. Я бы предпочитал чтобы IDEA ругалась, наоборот, только на тип переменной слева от знака присваивания (binding, whatever), если правая часть имеет осмысленный тип. Но может на правой части просто можно ругаться для них разнообразнее? Кто знает.

Ну, и ICFPC в этом году мы продули: писать AI для ботов клеточных игр никто достаточно хорошо не умеет, и особо не любит, не то что компиляторы или профайлеры результирующего кода.

SannySanoff

Описываю здесь мой желаемый метод программирования под ИОС:

1. Ставишь на IOS (можно даже нерутованный) специальный интерпретатор Java (без JIT, потому что огороженность), который поддерживает JNI (для COCOA binding) поддерживает JDWP (отладку) и поддерживает hot code reload любым известным методом. НАЖИМАЕШЬ НА ЭКРАНЕ, запускаешь спецальный управляющий всем барахлом бинарничек, он слушает сеть.

2. В любимом IDE написал программу, НАЖИМАЕШЬ КНОПКУ, оно:

— Запускает на десктопе rsync или аналог и на устройство копирует структуру проекта (включая скомпилированные классы).
— Посылает из IDE по сети команду на устройство на запуск проекта на месте в интерпретаторе
— Коннектится по JDWP и позволяет отладить..
— в программе используются прямые вызовы Cocoa, а если совсем круто, то какой-нибудь абстрагирующий ui framework.
— тыкается пальцем в экран устройства — там работающая программа

3. Поменял текст программы в IDE, НАЖАЛ НА КНОПКУ:

— снова rsync (быстро-инкрементальный)
— по JDWP или другим образом (classloader, JREBEL) делается hot code reload (тоже быстро)
— по JDWP отладка продолжается (тоже быстро).
— тыкается пальцем в экран устройства — там работающая программа

4. Когда программа написана, используется подход типа RoboVM или XMLVM для создания из написанной Java выполняемого кода который можно выкладывать в маркет.

Это вам, ребята, реализуемая идея для стартапа.

Аналогично и для андроеда, только там не Cocoa, а Dalvik, чуть замороченнее будет, но можно компилять на десктопе прямо в дальвик-байткод и не париться особо.

Такие дела.

P.S. Лисп не предлагать 8)