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


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 
Показаны сообщения с ярлыком инженер. Показать все сообщения
Показаны сообщения с ярлыком инженер. Показать все сообщения

понедельник, 10 июня 2024 г.

Приложения - конструкторы

А что если бизнес в наше время ускорился до таких скоростей, что классический способ построения приложений уже не о правдывает себя. Мы возложили на команду разработки беклог, и ждем когда они его реализуют. Что если разработчики приложения должны подумать о том, чтобы создать конструктор на базе своего приложения, и дать возможность пользователям кастомизировать свой UI/UX по их потребности. Пусть будет базовый интерфейс приложения by-default используемый неподготовленным юзером. Но для подготовленного юзера всегда будет возможность залезть под капот и настроить любой скрин этого приложения кастомно. Да это будет более сложное взаимодействие, чем мы привыкли в Web 2.0 и скорее всего придется выучить тот или иной скриптовый или декларативный язык конфигурации этого приложеняи конструктора. Пользователю не надо ждать, когда команда разработки закончит свой беклог, им уже создали конструктор - надо лишь только разобраться как что устроено и сделать свою кастомизацию. 

Я все свои pet проекты пишу теперь такими конструкторами. Всегда есть некоторый скрипт/конфиг, который позволяет без перекомпиляции приложение поменять его свойство. Даже в этом блоге есть зародыши такой возможности - могу использовать режим верстки, или погрузиться в увлекательный мир HTML и сверстать все по-инженерному. Уверен множество приложений имеют такой advanced тулинг стоит присмотреться. Я лишь рекомендую довести это до максимума и внедрить новый подход в разработку ПО. И дело не только в обработке данных, которые передаю на вход из фронтенда в бекенд. Можно пойти дальше и дать возможность влиять на бизнесс логику.
 
Может показаться, что это не безопасно. Открывая больше дверей мы делаем более уязвимыми наши сервера. Но сейчас могу так же открыть Inspect вкладку браузера и на любой страничке посмотреть множество запросов и выполнить большую часть из их независимо от других. Могу написать свой UI поверх существующего API. Часто разработчики сами открывают свои API и документацию на него. Но это не совсем то, что предлагаю. Я хочу иметь возможность влиять на то как будет работать мое приложение путем задания сценария бизнесс логики.

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

 
Так кажется, стоит мне отредактировать любой блок, как я тут же увижу html/js/css код.


То есть если я лезу в настройки приложения, я вероятнее всего должен быть инженером.
 
Если посмотреть в другие настройки - я могу так же изменить HTML в который все будет собираться в результате. 
 

Это то о чем я говорю. Но опять же очень глубоко спрятано и сделано достаточно сложно. Сложно в обе стороны. Для разработчиков скринов настройки блога это еще один скрин, который стоит времени разроаботчика - взять тот же drag & drop конкретных блоков. Надо ли это мне инженеру? Ну мне было бы проше отредактировать текстовый файл конфигурации. Надо ли это юзеру без навыков кодирования? Скорее всего он сюда не доберется, а добравшись будет делать что-то что ему расскажут в видео мануале или посте в блоге, который он нагуглит - "...хотите добавить кнопочку с рассылкой, скопируйте этот текст и вставьте его сюда...". Мне же этот скрин не позволяет сделать чуть больше, чем позволено. Там есть зашита общая структура блога: сверху navbar, ниже crosscol, потом идут основной main и справа от него sidebar. Я уверен что и этот темплейт где-то зашит в коде. Я бы хотел иметь возможность редактировать его. 

Но если мы пойдем дальше. Вот у меня есть список постов в блоге. И я хочу его видеть в другом виде.Могу ли я сейчас повлиять на это? Нет


Пойдем дальше. Покусимся на бизнеслогику. После публикации поста он появляется в блоге, прием можно сделать отложенную публикацию. А что если я хочу тут добавить дополнительный флоу - скажем написать email или вызвать какой-то rest api чтобы сообщить о факте публикации? А что если я хочу иметь возможность так же делать какие-то полезные мне действия при каждом открытии поста читателем? Что если я хочу рендерить пост по разному, в соответствии с тем какое время суток? Что если я хочу не в html формате хранить мой пост, а в markdown? Что если я хочу хранить свои посты не в базе blogger, а на github? Могу ли я сейчас на это все влиять? Нет конечно. Потому я отправляюсь в opensource мир и ищу блог, который мне больше всего подойдет. А если не найду оного - сажусь писать свой конструктор. 

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

На сегодня все мои pet приложения так или иначе реализуют этот подход. И я могу сказать что это достаточно сильно меняет и подход в разработке и архитектуру. Когда вы делаете конструктор - все должно быть разбираемо и собираемо обратно, причем в другой форме. Детализация компонентов должна быть проработана в том месте, где требуется гибкость. Главная идея, чтобы при пересборке приложение все еще оставалось в изначальном домене: если это изначально был blog, то после переконфигурирования это будет все так же blog, а не какая-то скажем crm. Решить, где добавлять конфиг, что бить на компоненты, насколько мелко декомпозировать, а что оставить проприетарным монолитом - хорошие вопросы.

Сейчас например я работаю над микросервисом по построению LLM цепочек для решения своих несложных задач автоматизации рутины с помощью LLM. Все эти цепочки вынесены в конфиг, который является кастомизацией yaml формата. Я слежу за тем, чтобы конфигурирование цепочки оставалось простым. Но все же без инженера в них не разобраться. Потому есть многочисленные демо решения - файлики с уже созданными цепочками, в которых делается что-то полезное, что может быть относительно быстро исправлено не инженером и реализовано под свои нужды.

Другой мой пет проект - CRM система ведения кандидата по воронке стафинга и онбординга на проект. Сама воронка состоит из шагов, каждый из которых описан в markdown и превращается в html страничку которую видит тот или иной коллега - кандидат, его менеджер, рекрутер, HR специалист и так далее. Все они делают на страничке что-то с данными, завязанными на этого конкретного кандидата - выступают consumer или supplier этих данных. Некоторые шаги могут быть пропущены в заивсимости от определенных conditions. Так как на разных проектах последовательность шагов может быть иной - я как delivery менеджер этого проекта настраиваю эту цепочку сам. На выходе я получаю отдельный проект с набором markdown страничек где описан весь флоу (что полезно для KT другому менеджеру кто прижет на мое место), я могу добавлять улучшения в этот флоу и видеть в git историю изменений. Будучи загружена в приложегние эта цепочка превращается в конкретные скрины, странички, поля ввода/вывода, формы, таблички, реакции на сторонние сервисы как то отправка email и так далее. Для этого мне пришлось добавить свои новые теги к существующим в markdown. Конечно же пиать этот скрипт воронки придется тому, кто по-инженгерному разберется в нем. Но я точно знаю, что delivery manager IT компании точно сможет найти в своей команде инженера-волонтера, кто поможет ему в этом разобраться в свободное от работы время.

Еще один pet проект - блог. Я хочу переехать с blogspot и писать посты в markdown. Я хочу иметь возможность концигурировать свой блог подобно тому, как описывал это в этом посте выше. Скажем я хочу иметь возможность разместить 1 линку на youtube видео, и настроить в конфиге фильтр, который в зависимости от ссылки на видео будет вставлять либо youtube embed html блок, либо подобный блок другого видео хостинга. Причем я хочу описать это один раз и в одгом месте, а не копипастить постоянно этот код в каждый мой пост. Я хочу сохранять мои посты в git репозитории с версиированием, а блог система пускай поднимает его из git repo по моему запросу. 

Другой мой проект Codenjoy хоть и не конфигурируется в скриптовом формате, но все же c самого начала позволяет создавать новые игрушки очень быстро. Все сделано для того, чтобы сегодня (максимум завтра) вечером появилась новая игра, если ты того пожелаешь. Да - тебе придется кодить на java. Но все API построено таким образом, чтобы это было максимально просто.

Есть и другие, о них я расскажу в другой раз.

среда, 25 января 2023 г.

Моя версия эмулятора ЛИКа - или почему инженеры делают то, что делают

Мой герой - инженер. Именно ботаны двигают этот мир вперед. 88й год, бытовой самодельный компьютер "Специалист". Небыло не то что "войти в IT" небыло вообще никаких "интернетов" (разработка той самой Всемирной Паутины Веб, или сокращенно WWW, началось годом спустя в 89м). Небыло никакой какой-либо комерческой выгоды. Но у уважающего себя инженера дома был бытовой компьютер (БК), собранный собственноручно по схемам из журналов Радио. Потому что мог. Спасибо Папе, что привил мне любовь к этому делу. (на видео не мой Папа, но мой был таким же чудным).

Поделюсь своей историей, которую хочется продолжать. Если я уйду когда-нибудь из IT, то из кодинга оставлю себе мой ЛИК и все, что с ним связано. Сейчас я пишу эмулятор, делаю реверс инжиниринг реального компа, который совсем недавно попал мне в руки. Делаю это все со скоростью улитки, смакуя каждый момент. Как та вкусняшка, которую хочется есть самой маленькой ложечкой, растирая языком по небу каждый новый кусочек. Конечно на любой проект нужно время, а его как всегда мало. Но даже если бы его было в избытке, мой первый компьютер - штука особенная. Это то, что возвращает магию.

Первым компьютером у меня был Синклер. И конечно же Синклер этот использовался для игр. Их было очень много. Даже в эпоху Дэнди у меня (и всех до кого я мог дотянуться) небыло столько картриджей. Ко мне домой приходли мои одноклассники. Мы все первоклашки. Какая домашка? Мы играли каждый день после уроков. Я был крут. У меня дома было что-то, что ни у кого небыло. Напомню, это были 90е. 1992 год, кажется. И конечно же я успешно забил на учебу. Оценки упали. А Синклер был продан. Травмирующий опыт. Была игрушка и ее забрали. Не делайте так родители, никогда.

Вторым моим компьютером был ЛИК. Производства Черновицкого завода Электронмаш. Чернобелый. С маленьким пузатым экраном. Тоже с записью на магнитофон (чуть позже покажу как звучала эта музыка байтов). И конечно же первым делом этот бытовой (как его называли) компьютер использовался мной для игр. Папа по выходным осваивал встроенный Бейсик. Первая его программа - нарисованный герб Украины. А я игрался. Игрался, пока качество кассетной записи не худшилось настолько, что воспроизвести игры больше не получалось. Это было всеобщее горе.

Но ничего не поделать - компьютер есть, потребность ковырять его никуда не делась. Мы с Папой стали изучать Бейсик вместе. Очень скоро я превзошел Папу и пошел дальше. Началось все из того, что мне захотелось собрать коллекцию всех runtime-ошибок существующих в Бейсике. Но не все из них было понятно как достать. Только краткое описание в руководстве по эксплуатации давали хоть какие-то зацепки.


Как говорится: нифига не понятно, но очень интересно. Одни ошибки попадались чаще всего - 02, например. Другие все никак не поддавались. Так я изучил почти все функции языка и многие corner-кейзы их использования.

Оставалось всего несколько команд в бейсике, которые по моему были самые магические и непостижимые. Просматривая исходные коды игр на бейсике (а это был мой любимый квест, ведь столько всего можно узнать в чужом исходном коде работающей игры) я часто натыкался на эти команды и понимал, что за ними кроется все самое интересное - звук, красивая растровая графика, более удобный ввод/вывод. Они мне открылись не сразу. Все что я мог - менять циферки аргументов и смотреть как компу отшибает мозги, либо что-то происходит необычное. Использовать это повторно нельзя было. Magic одним словом. Но очень любопытно. 

Потом поломался и Бейсик. Он был записан в ПЗУ. И что-то там видимо перетерлось, т.к. контрольные суммы стали выдавать другое значение - что говорило мне о том, что ПЗУ накрылась. Где накрылась не понятно. Что с этим делать так же не понятно. Больно.

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

В  понимании мне помогла директива дизассемблирования. Она магическое шестнадцатеричное число приводила в чуть более осмысленный код. Но по прежнему этот код ни о чем не говорящий. Создать их каталог была моя задача. С этого начинается любое исследование. Там же я заметил первые закономерности. Старший байт, младший байт. Регистры. Запись/чтение в память. Руководство давало не очень подробное, но все же какое-то объяснение.
Если ты когда-то смотрел/а фильм Прибытие. Все было именно так. Встреча с пришельцами инопланетянами говорящими на непонятном языке. Они пришли что-то мне дать. Что именно - я должен разгадать. Каждый день я просыпался и все, что хотел - еще немного поговорить с ними. Я делал это весь день и пол ночи. Отвлекаясь только на еду и сон. Это был 5й класс школы на секунду.

Фильм кстати очень рекомендую для многократного пересмотра. 

Разбирая команду за командой, вскоре не осталось ни одной команды, которую я бы не понимал. Ассемблер оказался куда проще и грандиознее, чем бейсик. Я писал свои программы. Отлаживал их. Писал инструменты для написания программ и их отлаживания. Отлаживал эти инструменты. Обрастал кодом. Как положено.

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

Первая игра конечно же Клад. И она считалась. Вторая игра. Считалась. Третья. Считалась. Все, что я не пробовал - все считалось. И работало. С любой из 20 кассет, в любом месте что ни брал - все считывалось без ошибков. Напомню, к этому времени на кассетах почти ничего не читалось, т.к. их качество оказалось ужасное и мы с Папой пропустили момент когда надо было переписать на новые. Конечно же я не мог дождаться возвращения Папы с работы. Он плакал. То ли от гордости за меня, то ли за вторую жизнь всем нашим наработкам. Он так и не сказал, но где-то тут я четко понимал, что уже взрослый я, а ребенок он. Мы всю ночь переписывали все игры на новые кассеты. Все восстановили. С тех пор я знаю. Как бы безнадежным не казалось дело - пока есть с чем работать, информацию можно восстановить.  

Так как у меня появились новые-старые игры. Я начал их изучать. Это было не просто. Но постепенно они открывали свои шестнадцатеричные секреты. Подпрограммы Загрузчика. Подпрограммы Монитора. Разные полезные штуки вычлененные из игр. Самая моя большая гордость - это додебажиться до той процедуры, которая отвечает за звучание кринжового голоса говорящего "BUDY" во время заставки одноименной игры. Удаление всего лишнего, так что остается всего 25-30 байт кода. И реализация на основе этого кода диктофона. Мой комп превратился в диктофон, где секунд 5-7 звука записывалось из микрофона в 48 килобайт оперативной памяти. А потом это все RAW воспроизводилось на динамик. И затем снова перезаписывалось с микрофона. Качество конечно было неахти, но все было слышно. После этого я понял - что могу все. Вот прям все.

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

Конечно я хотел вернуться в эти воспоминания. Я долго искал возможности приобрести компьютер ЛИК. А тем временем я пытался по фоткам плат, доступным схемам сделать свою реплику. Об этом кстати писал в блоге тоже.

Только в позапрошлом году мне удалось на форуме таких же инженеров ценителей ретро компов как и я купить один. 7 лет я за ним охотился. И наконец-то он у меня. Я смотрю на него, он смотрит на меня. Паяльник я уже купил. Скоро он откроет мне все свои тайны. Осцилограф только надо освоить. И купить перед тем.

Был период погружения в уже существуюшие эмуляторы один из которых позволил поиграть в мою любимую игру Клад.

А еще год назад я нашел вот тут эмулятор Специалиста (старший брат ЛИКа) написанного на джаве. Он был переделан из эмулятора Синклера, о чем и как Автор интересно пишет на страничках форума. И пару недель рефакторингов (о которых обязательно расскажу позже, т.к. есть и тут чем похвастать) и я пришел к своему очередному pet-проекту эмулятору ЛИКа

Первый запуск старого кода. Запуск на этом коде ПЗУшек ЛИКа. Исправление команд, т.к. изначально использовался Z80 (синклер) вместо i8080 (ЛИК). Успешный запуск Бейсика. Отладка команд на Экзорцисте. Запуск игры Клад. Оптимизация видео. Адаптация клавиатуры. И много много юнит и интеграционных тестов.

А вот всего неделю назад я достал тот самый бит информации из недр моего эмулятора ЛИКа и услышал звучание нескольких моих любимых игр. Я до сих пор помню эти мелодии. Я их столько раз слышал в детстве на магнитофоне. Каждый раз, когда ты хотел поиграть в любимую игру - надо было прослушать ее на магнитофоне. Иногда несколько раз, пока не загрузится без ошибок. Все помню. До мурашек. Послушай как звучит моя любимая игра Клад.

В туду еще много всего. Кому это нужно? Да никому. Может быть кто-то еще через 10 лет наткнется на мои наскальные рисунки и порадуется им так же как и я. 

Я точно знаю, что сделаю реплику. Я точно знаю, что дизассемблирую и разберусь в том, как устроена игра Клад. И напишу пару своих уровней. Я точно знаю, что разберусь со звуком (над ним сейчас работаю) и он не будет звучать кринжово. И много всего, что еще придет в голову в процессе.  Ведь самураю не нужна цель. Только путь.

Почему? Потому что могу.

Втоая жизнь Увэ

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

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

Отличный фильм. Обязательно буду пересматривать еще раз. Очень рекомендую.

понедельник, 17 января 2022 г.

Почему инженер делает что-то? Потому что может!

В одном из чатов меня спросили, а почему мы делаем CodingDojo ивенты для инженеров. 

Почему, по вашему мнению, взрослым людям интересно заниматься такой достаточно детской забавой? (лично авторам в том числе 🙂 ) Что мотивирует?
Инженер это такой подвид Homo Sapiens, который делает что-то казалось бы совсем не нужное потому что может.


Я вот вчера пол ночи ковырял эмулятор старого бытового компьютера ЛИК, который был придуман в 1988 году. Просто потому что могу. Это не нужно для прогресса человечества сегодня. Но моими наработками будут пользовался некоторые инженеры, которые так же как я ценят ретро компьютеры. А возможно кого-то из них мои наработки вдохновят на какие-то другие свершения. Или их свершения вдохновят других инженеров, которые вдохновят других инженеров, которые... Быть может какие-то из свершений будут уже в области, которая поможет человечеству сегодня.

Мы в контексте CodingDojo делаем то, что заряжает инженеров, а потом они возвращаются на свои проекты и творят там чудеса.


или что-то вообще на другой планете


По сути это все инженерные задачи, огромные (типа полета на Марс робота made in Earth) - складываются из больших, большие из множества маленьких, маленькие решаются за пару вечеров. Какая разница на чем качать свой инженерный ум? Он прокачивается серии "это не возможно", которые он сделал возможным этой ночью. А начал это путешествие без уверенности в успех, но со знанием что путешествие будет увлекательным.

Делая музыку на старых дисководах, откапывая проект 25 летней давности или играя в Coding Challenge

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

Думаешь это все "войти в IT" и большие зарплаты двигает нас в будущее? Нет. Это делают такие люди, как инженер в видео ниже

Почему он cделал то, что сделал? Потому что мог.

вторник, 8 июня 2021 г.

Что для меня ENGX?

Мне есть с кем сравнивать. Бывает подключишь человека к проекту - резюме хорошее, собеседование прошло хорошо, вышел на проект, а все как-то никак. Нет, из под него какой-то код конечно же получается, но ни продуктивности, ни лаконичности, ни красоты, чтоли. И спорите с ним до хрипоты, о том, что можно-таки быстрее. В разы быстрее. Вопрос в том, как?..

Потом его увольняешь. Не сработались. Но свято место пусто не бывает - вскоре выходит замена. Очень быстро становится понятно, талант. Инженер в лице которого ты видишь ту самую продуктивность, о которой холиварил с коллегами ранее. Продуктивность, которой могут позавидовать многие Senior. А ведь речь идет про Middle.

Что отличает их? Что дает одному инженеру возможность оторваться от земли оставив остальных с мыслью "это глюк, так не бывает"? Любознательность. Тяга к Engineering Excellence. Вера в то, что можо еще быстрее и при этом одновременно и качественнее. Вопрос в том, как?..

А знаешь, что его волнует каждый день? Он часто говорит: "я переживаю, потому что еще не достаточно разогнался".

Немногно истории

А вот Братья Райт нашего времени
Еще столько всего предстоит открыть!